<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://m204wiki.rocketsoftware.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=ELowell</id>
	<title>m204wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://m204wiki.rocketsoftware.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=ELowell"/>
	<link rel="alternate" type="text/html" href="https://m204wiki.rocketsoftware.com/index.php?title=Special:Contributions/ELowell"/>
	<updated>2026-04-14T11:59:09Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.43.1</generator>
	<entry>
		<id>https://m204wiki.rocketsoftware.com/index.php?title=Janus_Two-Phase_Commit&amp;diff=117836</id>
		<title>Janus Two-Phase Commit</title>
		<link rel="alternate" type="text/html" href="https://m204wiki.rocketsoftware.com/index.php?title=Janus_Two-Phase_Commit&amp;diff=117836"/>
		<updated>2020-01-15T00:31:17Z</updated>

		<summary type="html">&lt;p&gt;ELowell: /* Recovery */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Janus Two-Phase Commit support allows transactions running in multiple &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model 204&amp;lt;/var&amp;gt; Onlines to participate in a single global transaction using the [https://en.wikipedia.org/wiki/Two-phase_commit_protocol two-phase commit protocol].&lt;br /&gt;
In addition, it enables &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model 204&amp;lt;/var&amp;gt; to participate in a global transaction with an &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Imagine&amp;lt;/var&amp;gt; database server.&lt;br /&gt;
An &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Imagine Two-Phase Commit Coordinator&amp;lt;/var&amp;gt; is required to act as the two-phase commit coordinator. &lt;br /&gt;
&amp;lt;var&amp;gt;[[JANUS command|JANUS]]&amp;lt;/var&amp;gt; commands are used to define and start a two-phase commit port. Since there is no way to specify a 2PC port on two-phase commit related statements and functions, there is no point in specifying more than one 2PC port &amp;amp;ndash; if more than one is specified the first started 2PC port is always used.&lt;br /&gt;
&lt;br /&gt;
==Configuring Janus Two-Phase Commit==&lt;br /&gt;
These are the configuaration steps:&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Using a &amp;lt;var&amp;gt;JANUS DEFINE&amp;lt;/var&amp;gt; command, define a Janus 2PC that will be used to communicate with the coordinator.&lt;br /&gt;
 &lt;br /&gt;
The following is a typical command for a two-phase commit port:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;JANUS DEFINE TWOPC * 2PC 10&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Specify the host address or name and port number for the coordinator. This is done with the JANUS ADDCOORDINATOR command as in:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;JANUS ADDCOORDINATOR TWOPC IMAGINE IMAGINEHOST.MYDOMAIN.COM 3456&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
If, as in this example, the coordinator host is specified as a name, a name server must be specified using the [[JANUS NAMESERVER|JANUS NAMESERVER command]].&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Recovery==&lt;br /&gt;
When running recovery (the [[RESTART command]] or the [[REGENERATE command]]) against journals that might contain global transactions, a JANUS 2PC port must be defined and a coordinator added to that port before the &amp;lt;var&amp;gt;RESTART&amp;lt;/var&amp;gt; or &amp;lt;var&amp;gt;REGENERATE&amp;lt;/var&amp;gt; command as in:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;JANUS NAMESERVER 12.34.56.78&lt;br /&gt;
JANUS DEFINE TWOPC * 2PC 5 SSL 0&lt;br /&gt;
JANUS ADDCOORD TWOPC IMGCOORD IMGSERV.MYDOMAIN.COM 3333&lt;br /&gt;
JANUS ADDCA TWOPC PROCFILE TWOPC.CA&lt;br /&gt;
JANUS START TWOPC&lt;br /&gt;
RESTART ROLL BACK ERROR STOP ROLL FORWARD&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
If, as in this example, a certificate must be retrieved from a procedure file, it would be a really bad idea for that procedure file to be a file that needs to be recovered.&lt;br /&gt;
&lt;br /&gt;
==Classes and methods==&lt;br /&gt;
The [[Transaction class]] contains methods:&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;[[NewGlobal (Transaction function)|NewGlobal]]&amp;lt;/th&amp;gt;&amp;lt;td&amp;gt;to start a global transaction&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;[[SetGlobal (Transaction subroutine)|SetGlobal]]&amp;lt;/th&amp;gt;&amp;lt;td&amp;gt;to add a branch to a global transaction&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;/div&gt;</summary>
		<author><name>ELowell</name></author>
	</entry>
	<entry>
		<id>https://m204wiki.rocketsoftware.com/index.php?title=File_integrity_and_recovery&amp;diff=117758</id>
		<title>File integrity and recovery</title>
		<link rel="alternate" type="text/html" href="https://m204wiki.rocketsoftware.com/index.php?title=File_integrity_and_recovery&amp;diff=117758"/>
		<updated>2020-01-01T00:24:58Z</updated>

		<summary type="html">&lt;p&gt;ELowell: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div class=&amp;quot;toclimit-3&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
After files have been designed and loaded, one of the file manager&#039;s most important responsibilities is to maintain the integrity of the files. This topic describes some of the error conditions that threaten file structures and the steps that you can take to safeguard the files.    &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Error recovery features==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
&amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; provides many features to ensure the data integrity, including:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Extensive command syntax checking and compiler diagnostics.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Double-checking of files and tape backups to ensure that files are correctly mounted.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;SNA Communications Server (formerly VTAM) error recovery routines for data transmission from user terminals. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Trailers on each page with information such as file name, page number, and table number, which &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; checks every time the page is read or written to protect against loss of integrity due to a disk error.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
In addition, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; provides error recovery facilities as described in the following sections.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Transaction back out facility===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Data integrity and logical consistency of the files are protected by the &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; Transaction back out facility, which can undo the effects of incomplete transactions on file data. &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; automatically backs out an incomplete transaction for a transaction back out file if a user&#039;s request is canceled, if &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; detects a file problem such as a table full condition, or if &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; is restarting the user.&lt;br /&gt;
See [[Transaction back out]] for details.   &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===RESTART recovery facility===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The system manager must include a RESTART command as part of User 0&#039;s input if an installation is to use system recovery facilities.&lt;br /&gt;
The &amp;lt;var&amp;gt;[[RESTART command|RESTART]]&amp;lt;/var&amp;gt; command and [[System and media recovery]] pages discuss the syntax of this command and describe the Roll Back, Roll Forward, and Ignore features. &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Media recovery===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
In the event of a media failure, such as a disk head crash, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; allows you to recover files using the media recovery feature. Media recovery works by restoring files from a previously made backup copy, and then using the Roll Forward feature to reapply the updates that were made to the files since the time the copy was made. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;note&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Note:&amp;lt;/b&amp;gt;&lt;br /&gt;
The &amp;lt;var&amp;gt;[[REGENERATE command|REGENERATE]]&amp;lt;/var&amp;gt; command invokes the Restore and Roll Forward facilities automatically. In a media recovery run, the RESTORE and RESTART commands are not specified.     &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
==&amp;lt;b id=&amp;quot;frcvAndFOpts&amp;quot;&amp;gt;&amp;lt;/b&amp;gt;FRCVOPT and FOPT parameters==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The &amp;lt;var&amp;gt;[[FRCVOPT parameter|FRCVOPT]]&amp;lt;/var&amp;gt; (file recovery options) parameter determines whether or not an installation logs checkpoint and/or Roll Forward information. The system manager also must include the &amp;lt;var&amp;gt;[[RESTART command|RESTART]]&amp;lt;/var&amp;gt; command in a &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; job in order for recovery to run. If an installation uses the system recovery facilities, the file manager can control how files are affected.    &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The default setting of FRCVOPT is X&#039;00&#039;. The file participates in checkpointing, and batch &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; jobs that update the file can be run while the Online job is up. If your installation uses Roll Forward, the file participates. The back out mechanism of transaction back out is enabled. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If the &amp;lt;var&amp;gt;[[FOPT parameter|FOPT]]&amp;lt;/var&amp;gt; parameter is also set to X&#039;00&#039; (enabling lock pending updates), the file is a transaction back out file. If the FOPT setting includes the X&#039;02&#039; option, disabling lock pending updates, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; automatically disables transaction back out by turning on the X&#039;08&#039; bit of FRCVOPT.    &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===FRCVOPT parameter===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
File recovery options are controlled by the FRCVOPT parameter. The possible FRCVOPT settings are: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;tr class=&amp;quot;head&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Bit &amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Meaning&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt; X&#039;80&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;File cannot be updated if Roll Forward logging is not active. &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt; X&#039;40&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;File cannot be updated if checkpoint logging is not active. &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt; X&#039;20&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;File does not participate in checkpoint logging.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt; X&#039;10&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Discontinuities not allowed (hold enqueuing while file is closed if the file has been updated in this run).&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt; X&#039;08&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Transaction back out is disabled. If X&#039;01&#039; is specified, this option is automatically set. &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt; X&#039;04&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;File does not participate in Roll Forward logging.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt; X&#039;02&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;File does not participate in Roll Forward logging.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt; X&#039;01&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;All updates are reapplied to the file during Roll Forward, without regard to update unit boundaries. Because transactions are explicitly handled differently between transaction back out (X&#039;08&#039; off) and Roll Forward all the way (X&#039;01&#039; on), this option forces the X&#039;08&#039; option; that is, transaction back out is automatically turned off.   &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Eliminating checkpoints and Roll Forward logging===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can eliminate the overhead of checkpoint and Roll Forward logging if system crashes are infrequent and if manual backup facilities provide sufficient protection. To do this, turn on the X&#039;24&#039; bits of FRCVOPT. This strategy also works well for scratch files.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Logging all changes===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
At the other extreme, you might want to log all changes for recovery purposes. You can enforce this by setting the X&#039;C0&#039; bits of FRCVOPT. OPEN turns off all updating if logging is not active. The X&#039;80&#039; and X&#039;40&#039; bits are ignored if the OPEN command or statement is issued by User 0 and the file privileges include file manager. This override capability is designed to allow you to run batch update jobs, such as the File Load utility, without the overhead of logging.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Setting and clearing the X&#039;10&#039; bit===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The FRCVOPT X&#039;10&#039; bit (discontinuities not allowed) is somewhat independent of the recovery facilities, although preventing discontinuities is less important when checkpointing is not being used. After the file has been updated, if the X&#039;10&#039; bit is set, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; retains a share enqueue for the file, even if all users have closed the file. A separate retrieval job runs, but an updating job waits.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
To allow a specific job to run, clear the X&#039;10&#039; bit of FRCVOPT and then close the file. If no other users have the file open, the batch job runs. After the batch job has finished, set the X&#039;10&#039; bit again.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Crash recovery features===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
In case of failure, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; makes every effort to clean up files and shut down softly. If &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; or the operating system under which it is running crashes, any &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; file being updated is flagged by a special setting of the &amp;lt;var&amp;gt;[[FISTAT parameter|FISTAT]]&amp;lt;/var&amp;gt; parameter. The FILE PHYSICALLY INCONSISTENT message is issued whenever the file is opened thereafter until recovery procedures have been executed. In this case, or in the case of a hard crash, integrity can be recovered using the DUMP/RESTORE utility or restart/recovery facility.    &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==FISTAT parameter==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
FISTAT is a flag parameter that provides control of update completion and other file status information. Generally, the meaning of the FISTAT setting and the actual state of the file determine any special action to be taken. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
It is important to understand the different types of errors that can occur during processing, the effect each error has on the file and the setting of FISTAT, and the separation of updates into &amp;quot;update units.&amp;quot;    &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The possible settings of FISTAT are:   &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;tr class=&amp;quot;head&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Bit &amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Meaning&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt;X&#039;40&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;File might be logically inconsistent. (Soft restart might have occurred.) Logical inconsistencies are described in more detail in [[#Logically inconsistent files|Logically inconsistent files]].&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt; X&#039;20&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;File is in deferred update mode. Either a file load program or an OPEN in deferred update mode was applied to the file, and the Z command has not yet been issued.&lt;br /&gt;
See [[Deferred update feature]] for more information about deferred update mode. &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt; X&#039;10&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;File has been recovered. This notifies you that the file is intact but that some updates might have been undone. You might need to do some additional work to get the file to its most up-to-date state. Messages that describe the last updates applied are displayed when the file is opened. &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt; X&#039;08&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;File is full. One of the Tables A, B, C, or D has filled up. If Table A or C fills up, or if Table B fills up in a hashed file, a reorganization is required. Otherwise, the INCREASE command can be used to add more space.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt; X&#039;02&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;File is physically inconsistent. The file was being updated when some form of severe error or a system crash occurred. This is described in detail in [[#Hard restarts|Hard restarts]]. This setting produces the FILE PHYSICALLY INCONSISTENT message. (A hard restart might have occurred.) &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt; X&#039;01&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;File is not initialized. After a file is created, it must be initialized before data can be added.&lt;br /&gt;
See [[Initializing files]] for more information.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Restarts==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
&amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; provides two kinds of restarts: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Soft&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Hard&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Soft restarts===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Soft restarts occur when &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; recognizes a severe error that occurs between (as opposed to during) active update operations. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Causes of soft restarts====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Severe errors include nonrecoverable terminal I/O errors such as: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Phone is hung up&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;No input is coming in on a thread (with the inactive thread timeout feature enabled) for a specified number of seconds. See [[Defining the user environment (CCAIN)#User environment control parameters|User environment control parameters]] for information on the TIMEOUT parameter.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Full server tables&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Full server tables in transaction back out files====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If any server tables are full and the file is a transaction back out file, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; automatically backs out the incomplete transaction without a restart and informs the user through an error message that the transaction has been backed out. Otherwise, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; performs a soft restart.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Effects of soft restarts====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
In a soft restart:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;User receives the USER RESTARTED SOFTLY message and is automatically logged out.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;File-physically-inconsistent flag is cleared (unless other users are updating the file) and the file-logically-inconsistent flag is set. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The file is physically consistent (that is, file structural elements are in order: entries in the index correspond to entries in the data, and so on). However, there is a possibility that the file might be logically inconsistent. The restarted user might have been in the middle of an update transaction that would cause multiple updates to the file. Some updates might have been made before the soft restart occurred, while other updates were not made.   &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Hard restarts===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Hard restarts occur for severe errors during active updating operations. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Causes of hard restarts====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Hard restarts can be caused by:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Disk I/O errors &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Table A, B, C, or D full conditions if transaction back out is not in effect&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
For a description of how these errors are handled when transaction back out is in effect, see [[Transaction back out]].&lt;br /&gt;
If a severe error occurs, the user receives the USER RESTARTED message and is automatically logged out. The file-physically-inconsistent flag is set.    &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Effects of hard restarts====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
One hard restart can affect other users. For example:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;User 1 and user 2 are each updating the same non-transaction-back out file.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;User 1 updates KEY fields and gets a message that Table D is full.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;File-physically-inconsistent flag (X&#039;02&#039;) is set and user 1 is restarted. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;User 1 now knows that there is a problem with the file.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;User 2, however, continues updating NON-KEY fields and is not notified that Table D is full. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;User 2 finishes the request and closes the file without ever knowing that the file-physically-inconsistent flag was set. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Logically inconsistent files===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
A file is logically inconsistent when an incomplete update unit is left applied to the file. For example, consider an application that generates purchase orders. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Records are generated using the User Language STORE RECORD/END STORE construct and the PO number is the internal record number ($CURREC). The internal record number (PO number) is displayed on the screen along with the input items to be added to the record (through FOR RECORD NUMBER and ADD statements) when the transaction is committed.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If you enter an EOJ command and &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; terminates before the transaction is committed, the file is marked logically inconsistent (FISTAT X&#039;40&#039; is set), because an update is active and a user is waiting for terminal input.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Physically inconsistent files===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If the user is waiting for disk I/O during an ADD operation, and an EOJ is issued, it is possible that some, but not all tables were updated. In this case the file is marked physically inconsistent (FISTAT X&#039;02&#039; is set).&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Preventing inconsistent files===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
In the previous examples, you could prevent the file from becoming logically or physically inconsistent by bumping all users before terminating &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt;.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===File manager responsibilities===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
It is the file manager&#039;s responsibility to determine which users have been affected by a file integrity problem and notify them of the status of the file. You can use the BROADCAST FILE command described in [[ Field display and message broadcast#BROADCAST command|BROADCAST command]] to do so. &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==System failure==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When the operating system or &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; crashes during an updating request, the file-physically-inconsistent flag is set. The file might or might not actually be broken, depending on whether the modified file pages were written out before the crash. There is no way to predict whether or not this happens. Even if the pages were written out, the file might be logically inconsistent, depending on the point in the processing at which the crash occurred.   &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Premature system termination==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
&amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; can be terminated prematurely (by operator cancellation or because of certain error conditions) while requests are still running. When &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; is prematurely terminated, modified pages are not automatically written. This means that a user might have been updating and some or all updates might not appear on the file. In addition, if any other users were updating the same file shortly before termination, their updates might not appear either, even though their requests ran to completion.    &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Request cancellation==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If a serious user error occurs during evaluation of a User Language request, the request is canceled. Examples of serious user errors are:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Incorrect use of a field name variable&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Including field-level security violations&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Attempt to store too many values or too long a value for a preallocated field&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Request cancellation functions in the same manner as a soft user restart. The user is notified that the request has been canceled, and the file is marked with the flag. If the file is a transaction back out file, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; cancels the request, backs out the incomplete transaction, and does not mark the file logically inconsistent. The user is notified that the transaction has been backed out.  &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Recovery methods==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Methods for recovering from file problems are presented in the following sections.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Taking the necessary precautions===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Take the following precautions to allow your site to recover from a file problem:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Use the DUMP/RESTORE utility regularly to take regular backups. If a recent DUMP of the file is available, the file can be restored to its state at the time of the dump using the RESTORE command. See [[File dumping and restoring]] for more information. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Dump the files. If journaling is ordinarily active, and all subsequent file updates are available, then you can use media recovery to restore file integrity. See [[System and media recovery]] for information about using journals to recover files. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Activate checkpointing during Online processing. In the event of system crash, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; crash, or hard restart, you can use the RESTART command to roll back to the last valid checkpoint. If journaling is also active during the Online processing, you can use the Roll Forward feature to restore as many file changes as possible. These system recovery procedures are described in [[System and media recovery]].&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;warn&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Warning:&amp;lt;/b&amp;gt;&lt;br /&gt;
To ensure file integrity, Rocket Software strongly recommends that you &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;never&amp;lt;/var&amp;gt; reset the FISTAT (file status) parameter when it is set to the file-physically-inconsistent flag until &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;just before&amp;lt;/var&amp;gt; you reorganize the file. However, you must reset FISTAT before you reorganize a physically inconsistent file.  &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Reloading broken files===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When the precautions recommended above have been neglected and the file is broken, recovery still might be possible. The safest method consists of resetting FISTAT temporarily and then running the following User Language request:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;USE OUTFILE&lt;br /&gt;
BEGIN&lt;br /&gt;
ALL: FIND ALL RECORDS&lt;br /&gt;
END FIND&lt;br /&gt;
PRINT.LOOP: FOR EACH RECORD IN ALL&lt;br /&gt;
   PRINT &#039;*&#039;&lt;br /&gt;
   PRINT ALL INFORMATION&lt;br /&gt;
END FOR&lt;br /&gt;
END&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can then use a file load program with OUTFILE to reload the file (see the discussion of file reorganization and PAI FLOD in &amp;quot;Using PAI FLOD for files with varying record formats&amp;quot;.  &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Reducing integrity problems==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
In addition to procedures used by the file and system managers for backup purposes, applications can be designed to reduce file integrity problems. &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Using COMMIT statements for manageable update units===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Use a COMMIT statement between each logical update so that the system can set the file-physically-inconsistent flag off and write out updated file pages frequently. Also, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; can take checkpoints only between update units. Long update units can severely inhibit the taking of checkpoints. (Update units are discussed in detail in [[#Model 204 update units|Model 204 update units]].)     &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
To accomplish transaction back outs, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; maintains a transaction back out and constraint log for each active update unit, built in the system file CCATEMP. Sizable update units can greatly increase the amount of CCATEMP space used by the system. Because insufficient CCATEMP space terminates the run, commit update units frequently to minimize the CCATEMP space requirement. &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Updates to TBO and non-TBO files in the same request===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can update a non-TBO file, commit it, and then update a TBO file-or reversed file order-in the same request.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Requests that attempt to update TBO and non-TBO files without an intervening COMMIT will compile, but will fail during evaluation with the following message:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;***  1  CANCELLING REQUEST; M204.2771: ATTEMPT TO UPDATE TBO AND NON-TBO FILES IN THE SAME TRANSACTION&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Designing Host Language Interface jobs===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
For Host Language Interface jobs, set the update indicator in the IFSTRT function only when updating is really occurring, and issue the IFCHKPT call at various points during a long updating program. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Retrieval-only Host Language Interface threads are not included in update units. Passing data from a retrieval-only thread to an update thread can result in logical inconsistencies to the updated file during Roll Forward.&lt;br /&gt;
To prevent these inconsistencies, start the thread as an update thread and use a retrieval-only password to open the file, thus providing share-mode enqueuing and preventing updating from this thread.&lt;br /&gt;
The file also is prevented from being marked physically inconsistent in the event of a hard restart or system crash. See [[HLI: Job design factors#Recovery considerations for single and multicursor IFAM2 threads|Recovery considerations for single and multicursor IFAM2 threads]] for further description.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Update units and transactions==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
In general data processing terms, a transaction is a sequence of operations that access a database. The order of these operations is defined by the application or the user. &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Model 204 transaction types===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
&amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; recognizes the following types of transactions: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;tr class=&amp;quot;head&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Type&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Transactions that...&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;1&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Cannot update the database&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;2&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Can update the database but cannot be backed out&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;3 &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Can update the database and can be backed out&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Model 204 update units===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
In the &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; environment, the term &amp;lt;b&amp;gt;update unit&amp;lt;/b&amp;gt; refers to any sequence of operations that is allowed to update the database. The two types of update transactions described above, types 2 and 3, are both update units in &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt;: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Update units that cannot be backed out (type 2) are called &amp;lt;b&amp;gt;non-backoutable update units&amp;lt;/b&amp;gt;. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Update units that can be backed out (type 3), are called &amp;lt;b&amp;gt;transactions&amp;lt;/b&amp;gt; or &amp;lt;b&amp;gt;backoutable update units&amp;lt;/b&amp;gt;.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Non-backoutable update units====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The following types of updates cannot be backed out and must be part of non-backoutable update units:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Updates to non-transaction-back out files&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Updates resulting from file updating commands (such as RENAME field)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Host Language functions that correspond to the updates in the previous two items &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Updates resulting from the EDIT subcommands END and GO&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Procedure definitions &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Backoutable update units====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Backoutable update units are User Language updates to a transaction back out file and their Host Language Interface counterparts (record or record set updating calls). These are the only types of update operations that can occur inside a &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; transaction. A transaction can either be completed so that it persists in the file, or backed out so that the update is logically undone in the file.     &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Detailed descriptions of the boundaries of User Language backoutable and non-backoutable update units are presented in the following sections, followed by a discussion of the Host Language Interface update unit boundaries.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Boundaries of non-backoutable update units===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Updating commands must be in non-backoutable update units. Some updating commands end any previous active update unit, whether backoutable or not. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The following updating commands always end active update units:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;var&amp;gt;[[INITIALIZE command|INITIALIZE]]&amp;lt;/var&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;var&amp;gt;TRANSFORM&amp;lt;/var&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;var&amp;gt;[[REDEFINE command|REDEFINE FIELD]]&amp;lt;/var&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;var&amp;gt;[[RENAME FIELD command|RENAME FIELD]]&amp;lt;/var&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;var&amp;gt;[[DELETE command: Field|DELETE FIELD]]&amp;lt;/var&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;var&amp;gt;[[CREATE command: File|CREATE FILE]]&amp;lt;/var&amp;gt; or &amp;lt;var&amp;gt;[[CREATE command: Permanent group|CREATE PERM GROUP]]&amp;lt;/var&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;var&amp;gt;[[EDIT command|EDIT]]&amp;lt;/var&amp;gt; &amp;lt;i&amp;gt;permanent-procedure&amp;lt;/i&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;var&amp;gt;[[INCREASE command|INCREASE]]&amp;lt;/var&amp;gt; +++ &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;var&amp;gt;[[DECREASE command|DECREASE]]&amp;lt;/var&amp;gt; +++ &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;var&amp;gt;[[FLOD command|FLOD]]&amp;lt;/var&amp;gt; +++ &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;var&amp;gt;[[FILELOAD command|FILELOAD]]&amp;lt;/var&amp;gt; +++ &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;var&amp;gt;[[REGENERATE command|REGENERATE]]&amp;lt;/var&amp;gt; +++ &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;var&amp;gt;[[REORGANIZE command|REORGANIZE]]&amp;lt;/var&amp;gt; +++ &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;var&amp;gt;[[RESTORE command|RESTORE]]&amp;lt;/var&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;var&amp;gt;[[RESTOREG command|RESTOREG]]&amp;lt;/var&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;var&amp;gt;[[Z command|Z]]&amp;lt;/var&amp;gt; +++ &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The commands followed by +++ cannot be issued inside a procedure.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Updating commands that sometimes end active update units====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Other updating commands end the previous update unit only when that update unit is a User Language update. If a command non-backoutable update unit is in progress, the following commands are included in that non-backoutable update unit: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;var&amp;gt;[[SECURE command: File|SECURE]]&amp;lt;/var&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;var&amp;gt;[[BROADCAST command: Sending a file message|BROADCAST FILE]]&amp;lt;/var&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;var&amp;gt;[[DEFINE command|DEFINE]]&amp;lt;/var&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;var&amp;gt;[[PROCEDURE command|PROCEDURE or PROC]]&amp;lt;/var&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;var&amp;gt;[[DELETE command: Procedure|DELETE PROCEDURE]]&amp;lt;/var&amp;gt; or &amp;lt;var&amp;gt;[[DELETE command: Permanent group|DELETE PERM GROUP]]&amp;lt;/var&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;var&amp;gt;[[RESET command|RESET]]&amp;lt;/var&amp;gt;   &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;var&amp;gt;[[RENAME PROCEDURE command|RENAME PROCEDURE]]&amp;lt;/var&amp;gt; +++ &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;var&amp;gt;[[ASSIGN command|ASSIGN]]&amp;lt;/var&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;var&amp;gt;[[DEASSIGN command|DEASSIGN]]&amp;lt;/var&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;var&amp;gt;[[DESECURE command: Overview of DESECURE|DESECURE]]&amp;lt;/var&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;var&amp;gt;[[CREATEG command|CREATEG]]&amp;lt;/var&amp;gt; +++   &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Nonupdating commands that end active update units====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Nonupdating commands that end any previous update unit are:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;var&amp;gt;[[CLOSE command|CLOSE FILE]]&amp;lt;/var&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;var&amp;gt;[[ALLOCATE command|ALLOCATE]]&amp;lt;/var&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;var&amp;gt;[[FREE command|FREE]]&amp;lt;/var&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;var&amp;gt;[[DUMP command|DUMP]]&amp;lt;/var&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;var&amp;gt;[[DUMPG command|DUMPG]]&amp;lt;/var&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;var&amp;gt;[[LOGOUT or LOGOFF command|LOGOUT/LOGOFF]]&amp;lt;/var&amp;gt;  &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;var&amp;gt;[[DISCONNECT command|DISCONNECT]]&amp;lt;/var&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;var&amp;gt;[[EOJ command|EOJ]]&amp;lt;/var&amp;gt; +++   &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When a BEGIN or MORE command follows another command that does not automatically end its own update unit (for example, DEFINE), BEGIN or MORE ends the current update unit.   &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====SOUL statements that end active update units or transactions====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
SOUL statements that end the current update unit or transaction are:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;var&amp;gt;[[Record level locking and concurrency control#COMMIT statement|COMMIT]]&amp;lt;/var&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;var&amp;gt;[[Record level locking and concurrency control#RELEASE option|COMMIT RELEASE]]&amp;lt;/var&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;var&amp;gt;[[Data recovery#Manual backout|BACKOUT]]&amp;lt;/var&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;var&amp;gt;[[Basic request structure#Beginning and ending a request|END]]&amp;lt;/var&amp;gt;&lt;br /&gt;
(only when END returns the user to include level 0 or terminal command level)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For information about the commit exits feature, which enables you to set up SOUL code to run at commit time, see [[Application_Subsystem_development#Commit_exits|Application Subsystem development]].&lt;br /&gt;
&lt;br /&gt;
====Other ways to end active update units====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Other situations that end the current update unit are:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Return to terminal command level&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;End of an application subsystem procedure, when control is transferred through the communications global variable, unless the Auto Commit option was turned off in the subsystem definition   &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Request cancellation&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;User restart     &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Starting non-backoutable update units====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Non-backoutable update units in User Language start with the first FIND statement or the first User Language statement that performs an update operation on a file that is not a transaction back out file.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
In a procedure, non-backoutable update units start with the first FIND statement, the first User Language statement that performs an update operation on a non-transaction back out file, or the first updating command.&lt;br /&gt;
Each line of input to a procedure definition is treated as a separate update unit, but only one [[System and media recovery#Understanding update units|update ID]] is assigned to a single procedure definition.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Update units for the EDIT command start and end when the edited procedure is copied to the &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; file during the END, GO, or SAVE subcommand. &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Boundaries of transactions===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
A transaction (backoutable update unit) begins when the first SOUL statement performing an update operation on a transaction back out file in a User Language request or a procedure is executed. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====SOUL statements that perform update operations====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The SOUL statements that perform update operations are: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;var&amp;gt;[[Data maintenance#STORE RECORD statement|STORE RECORD]]&amp;lt;/var&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;var&amp;gt;[[Data maintenance#DELETE RECORD statement|DELETE RECORD]]&amp;lt;/var&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;var&amp;gt;[[Data maintenance#DELETE ALL RECORDS statement|DELETE RECORDS]]&amp;lt;/var&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;var&amp;gt;[[Data maintenance#FILE RECORDS statement|FILE RECORDS]]&amp;lt;/var&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;var&amp;gt;[[Data maintenance#ADD statement|ADD]]&amp;lt;/var&amp;gt; &amp;lt;i&amp;gt;fieldname&amp;lt;/i&amp;gt; = &amp;lt;i&amp;gt;value&amp;lt;/i&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;var&amp;gt;[[Data maintenance#DELETE statement|DELETE]]&amp;lt;/var&amp;gt; &amp;lt;i&amp;gt;fieldname&amp;lt;/i&amp;gt; = &amp;lt;i&amp;gt;value&amp;lt;/i&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;var&amp;gt;[[Processing multiply occurring fields and field_groups#DELETE statement|DELETE EACH]]&amp;lt;/var&amp;gt; &amp;lt;i&amp;gt;fieldname&amp;lt;/i&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;var&amp;gt;[[Processing multiply occurring fields and field_groups#INSERT statement|INSERT]]&amp;lt;/var&amp;gt; &amp;lt;i&amp;gt;fieldname&amp;lt;/i&amp;gt; = &amp;lt;i&amp;gt;value&amp;lt;/i&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;var&amp;gt;[[Processing multiply occurring fields and field_groups#CHANGE statement|CHANGE]]&amp;lt;/var&amp;gt; &amp;lt;i&amp;gt;fieldname&amp;lt;/i&amp;gt; &amp;lt;var&amp;gt;TO&amp;lt;/var&amp;gt; &amp;lt;i&amp;gt;value&amp;lt;/i&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
These are the only update operations that can occur inside transactions or can be backed out. A non-backoutable update unit must end before a transaction begins.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Commands that end active transactions====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Commands that end an active transaction are: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Any file updating command&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;var&amp;gt;[[CHECKPOINT command|CHECKPOINT]]&amp;lt;/var&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;var&amp;gt;[[CLOSE command|CLOSE FILE]]&amp;lt;/var&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;var&amp;gt;[[RESET command|RESET]]&amp;lt;/var&amp;gt;  &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;var&amp;gt;[[ALLOCATE command|ALLOCATE]]&amp;lt;/var&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;var&amp;gt;[[FREE command|FREE]]&amp;lt;/var&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;var&amp;gt;[[LOGOUT or LOGOFF command|LOGOUT/LOGOFF]]&amp;lt;/var&amp;gt;   &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;var&amp;gt;[[DISCONNECT command|DISCONNECT]]&amp;lt;/var&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;var&amp;gt;[[DUMP command|DUMP]]&amp;lt;/var&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;var&amp;gt;[[DUMPG command|DUMPG]]&amp;lt;/var&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Other events that can end active transactions====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Other events that end a transaction are:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Return to terminal command level&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;End of an application subsystem procedure, when control is transferred through the communications global variable, unless the Auto Commit option was turned off in the subsystem definition   &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Request cancellation&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;User restart &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
In User Language, ending a transaction does not start a new transaction. A new transaction does not start until a User Language statement performs an update operation on a transaction back out file.   &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Host Language Interface update units===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
For details about update units in the Host Language Interface environment, see [[HLI: Transactions]].&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;/div&amp;gt; &amp;lt;!-- end of toc limit div --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Model 204 files]]&lt;br /&gt;
[[Category:Recovery]]&lt;/div&gt;</summary>
		<author><name>ELowell</name></author>
	</entry>
	<entry>
		<id>https://m204wiki.rocketsoftware.com/index.php?title=File_integrity_and_recovery&amp;diff=117757</id>
		<title>File integrity and recovery</title>
		<link rel="alternate" type="text/html" href="https://m204wiki.rocketsoftware.com/index.php?title=File_integrity_and_recovery&amp;diff=117757"/>
		<updated>2020-01-01T00:20:59Z</updated>

		<summary type="html">&lt;p&gt;ELowell: /* Host Language Interface update units */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div class=&amp;quot;toclimit-3&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
After files have been designed and loaded, one of the file manager&#039;s most important responsibilities is to maintain the integrity of the files. This topic describes some of the error conditions that threaten file structures and the steps that you can take to safeguard the files.    &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Error recovery features==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
&amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; provides many features to ensure the data integrity, including:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Extensive command syntax checking and compiler diagnostics.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Double-checking of files and tape backups to ensure that files are correctly mounted.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;SNA Communications Server (formerly VTAM) error recovery routines for data transmission from user terminals. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Trailers on each page with information such as file name, page number, and table number, which &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; checks every time the page is read or written to protect against loss of integrity due to a disk error.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
In addition, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; provides error recovery facilities as described in the following sections.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Transaction back out facility===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Data integrity and logical consistency of the files are protected by the &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; Transaction back out facility, which can undo the effects of incomplete transactions on file data. &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; automatically backs out an incomplete transaction for a transaction back out file if a user&#039;s request is canceled, if &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; detects a file problem such as a table full condition, or if &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; is restarting the user.&lt;br /&gt;
See [[Transaction back out]] for details.   &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===RESTART recovery facility===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The system manager must include a RESTART command as part of User 0&#039;s input if an installation is to use system recovery facilities.&lt;br /&gt;
The &amp;lt;var&amp;gt;[[RESTART command|RESTART]]&amp;lt;/var&amp;gt; command and [[System and media recovery]] pages discuss the syntax of this command and describe the Roll Back, Roll Forward, and Ignore features. &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Media recovery===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
In the event of a media failure, such as a disk head crash, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; allows you to recover files using the media recovery feature. Media recovery works by restoring files from a previously made backup copy, and then using the Roll Forward feature to reapply the updates that were made to the files since the time the copy was made. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;note&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Note:&amp;lt;/b&amp;gt;&lt;br /&gt;
The &amp;lt;var&amp;gt;[[REGENERATE command|REGENERATE]]&amp;lt;/var&amp;gt; command invokes the Restore and Roll Forward facilities automatically. In a media recovery run, the RESTORE and RESTART commands are not specified.     &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
==&amp;lt;b id=&amp;quot;frcvAndFOpts&amp;quot;&amp;gt;&amp;lt;/b&amp;gt;FRCVOPT and FOPT parameters==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The &amp;lt;var&amp;gt;[[FRCVOPT parameter|FRCVOPT]]&amp;lt;/var&amp;gt; (file recovery options) parameter determines whether or not an installation logs checkpoint and/or Roll Forward information. The system manager also must include the &amp;lt;var&amp;gt;[[RESTART command|RESTART]]&amp;lt;/var&amp;gt; command in a &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; job in order for recovery to run. If an installation uses the system recovery facilities, the file manager can control how files are affected.    &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The default setting of FRCVOPT is X&#039;00&#039;. The file participates in checkpointing, and batch &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; jobs that update the file can be run while the Online job is up. If your installation uses Roll Forward, the file participates. The back out mechanism of transaction back out is enabled. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If the &amp;lt;var&amp;gt;[[FOPT parameter|FOPT]]&amp;lt;/var&amp;gt; parameter is also set to X&#039;00&#039; (enabling lock pending updates), the file is a transaction back out file. If the FOPT setting includes the X&#039;02&#039; option, disabling lock pending updates, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; automatically disables transaction back out by turning on the X&#039;08&#039; bit of FRCVOPT.    &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===FRCVOPT parameter===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
File recovery options are controlled by the FRCVOPT parameter. The possible FRCVOPT settings are: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;tr class=&amp;quot;head&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Bit &amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Meaning&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt; X&#039;80&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;File cannot be updated if Roll Forward logging is not active. &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt; X&#039;40&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;File cannot be updated if checkpoint logging is not active. &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt; X&#039;20&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;File does not participate in checkpoint logging.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt; X&#039;10&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Discontinuities not allowed (hold enqueuing while file is closed if the file has been updated in this run).&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt; X&#039;08&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Transaction back out is disabled. If X&#039;01&#039; is specified, this option is automatically set. &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt; X&#039;04&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;File does not participate in Roll Forward logging.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt; X&#039;02&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;File does not participate in Roll Forward logging.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt; X&#039;01&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;All updates are reapplied to the file during Roll Forward, without regard to update unit boundaries. Because transactions are explicitly handled differently between transaction back out (X&#039;08&#039; off) and Roll Forward all the way (X&#039;01&#039; on), this option forces the X&#039;08&#039; option; that is, transaction back out is automatically turned off.   &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Eliminating checkpoints and Roll Forward logging===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can eliminate the overhead of checkpoint and Roll Forward logging if system crashes are infrequent and if manual backup facilities provide sufficient protection. To do this, turn on the X&#039;24&#039; bits of FRCVOPT. This strategy also works well for scratch files.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Logging all changes===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
At the other extreme, you might want to log all changes for recovery purposes. You can enforce this by setting the X&#039;C0&#039; bits of FRCVOPT. OPEN turns off all updating if logging is not active. The X&#039;80&#039; and X&#039;40&#039; bits are ignored if the OPEN command or statement is issued by User 0 and the file privileges include file manager. This override capability is designed to allow you to run batch update jobs, such as the File Load utility, without the overhead of logging.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Setting and clearing the X&#039;10&#039; bit===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The FRCVOPT X&#039;10&#039; bit (discontinuities not allowed) is somewhat independent of the recovery facilities, although preventing discontinuities is less important when checkpointing is not being used. After the file has been updated, if the X&#039;10&#039; bit is set, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; retains a share enqueue for the file, even if all users have closed the file. A separate retrieval job runs, but an updating job waits.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
To allow a specific job to run, clear the X&#039;10&#039; bit of FRCVOPT and then close the file. If no other users have the file open, the batch job runs. After the batch job has finished, set the X&#039;10&#039; bit again.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Crash recovery features===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
In case of failure, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; makes every effort to clean up files and shut down softly. If &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; or the operating system under which it is running crashes, any &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; file being updated is flagged by a special setting of the &amp;lt;var&amp;gt;[[FISTAT parameter|FISTAT]]&amp;lt;/var&amp;gt; parameter. The FILE PHYSICALLY INCONSISTENT message is issued whenever the file is opened thereafter until recovery procedures have been executed. In this case, or in the case of a hard crash, integrity can be recovered using the DUMP/RESTORE utility or restart/recovery facility.    &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==FISTAT parameter==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
FISTAT is a flag parameter that provides control of update completion and other file status information. Generally, the meaning of the FISTAT setting and the actual state of the file determine any special action to be taken. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
It is important to understand the different types of errors that can occur during processing, the effect each error has on the file and the setting of FISTAT, and the separation of updates into &amp;quot;update units.&amp;quot;    &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The possible settings of FISTAT are:   &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;tr class=&amp;quot;head&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Bit &amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Meaning&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt;X&#039;40&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;File might be logically inconsistent. (Soft restart might have occurred.) Logical inconsistencies are described in more detail in [[#Logically inconsistent files|Logically inconsistent files]].&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt; X&#039;20&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;File is in deferred update mode. Either a file load program or an OPEN in deferred update mode was applied to the file, and the Z command has not yet been issued.&lt;br /&gt;
See [[Deferred update feature]] for more information about deferred update mode. &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt; X&#039;10&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;File has been recovered. This notifies you that the file is intact but that some updates might have been undone. You might need to do some additional work to get the file to its most up-to-date state. Messages that describe the last updates applied are displayed when the file is opened. &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt; X&#039;08&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;File is full. One of the Tables A, B, C, or D has filled up. If Table A or C fills up, or if Table B fills up in a hashed file, a reorganization is required. Otherwise, the INCREASE command can be used to add more space.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt; X&#039;02&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;File is physically inconsistent. The file was being updated when some form of severe error or a system crash occurred. This is described in detail in [[#Hard restarts|Hard restarts]]. This setting produces the FILE PHYSICALLY INCONSISTENT message. (A hard restart might have occurred.) &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt; X&#039;01&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;File is not initialized. After a file is created, it must be initialized before data can be added.&lt;br /&gt;
See [[Initializing files]] for more information.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Restarts==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
&amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; provides two kinds of restarts: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Soft&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Hard&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Soft restarts===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Soft restarts occur when &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; recognizes a severe error that occurs between (as opposed to during) active update operations. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Causes of soft restarts====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Severe errors include nonrecoverable terminal I/O errors such as: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Phone is hung up&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;No input is coming in on a thread (with the inactive thread timeout feature enabled) for a specified number of seconds. See [[Defining the user environment (CCAIN)#User environment control parameters|User environment control parameters]] for information on the TIMEOUT parameter.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Full server tables&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Full server tables in transaction back out files====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If any server tables are full and the file is a transaction back out file, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; automatically backs out the incomplete transaction without a restart and informs the user through an error message that the transaction has been backed out. Otherwise, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; performs a soft restart.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Effects of soft restarts====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
In a soft restart:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;User receives the USER RESTARTED SOFTLY message and is automatically logged out.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;File-physically-inconsistent flag is cleared (unless other users are updating the file) and the file-logically-inconsistent flag is set. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The file is physically consistent (that is, file structural elements are in order: entries in the index correspond to entries in the data, and so on). However, there is a possibility that the file might be logically inconsistent. The restarted user might have been in the middle of an update transaction that would cause multiple updates to the file. Some updates might have been made before the soft restart occurred, while other updates were not made.   &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Hard restarts===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Hard restarts occur for severe errors during active updating operations. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Causes of hard restarts====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Hard restarts can be caused by:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Disk I/O errors &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Table A, B, C, or D full conditions if transaction back out is not in effect&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
For a description of how these errors are handled when transaction back out is in effect, see [[Transaction back out]].&lt;br /&gt;
If a severe error occurs, the user receives the USER RESTARTED message and is automatically logged out. The file-physically-inconsistent flag is set.    &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Effects of hard restarts====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
One hard restart can affect other users. For example:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;User 1 and user 2 are each updating the same non-transaction-back out file.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;User 1 updates KEY fields and gets a message that Table D is full.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;File-physically-inconsistent flag (X&#039;02&#039;) is set and user 1 is restarted. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;User 1 now knows that there is a problem with the file.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;User 2, however, continues updating NON-KEY fields and is not notified that Table D is full. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;User 2 finishes the request and closes the file without ever knowing that the file-physically-inconsistent flag was set. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Logically inconsistent files===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
A file is logically inconsistent when an incomplete update unit is left applied to the file. For example, consider an application that generates purchase orders. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Records are generated using the User Language STORE RECORD/END STORE construct and the PO number is the internal record number ($CURREC). The internal record number (PO number) is displayed on the screen along with the input items to be added to the record (through FOR RECORD NUMBER and ADD statements) when the transaction is committed.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If you enter an EOJ command and &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; terminates before the transaction is committed, the file is marked logically inconsistent (FISTAT X&#039;40&#039; is set), because an update is active and a user is waiting for terminal input.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Physically inconsistent files===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If the user is waiting for disk I/O during an ADD operation, and an EOJ is issued, it is possible that some, but not all tables were updated. In this case the file is marked physically inconsistent (FISTAT X&#039;02&#039; is set).&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Preventing inconsistent files===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
In the previous examples, you could prevent the file from becoming logically or physically inconsistent by bumping all users before terminating &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt;.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===File manager responsibilities===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
It is the file manager&#039;s responsibility to determine which users have been affected by a file integrity problem and notify them of the status of the file. You can use the BROADCAST FILE command described in [[ Field display and message broadcast#BROADCAST command|BROADCAST command]] to do so. &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==System failure==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When the operating system or &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; crashes during an updating request, the file-physically-inconsistent flag is set. The file might or might not actually be broken, depending on whether the modified file pages were written out before the crash. There is no way to predict whether or not this happens. Even if the pages were written out, the file might be logically inconsistent, depending on the point in the processing at which the crash occurred.   &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Premature system termination==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
&amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; can be terminated prematurely (by operator cancellation or because of certain error conditions) while requests are still running. When &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; is prematurely terminated, modified pages are not automatically written. This means that a user might have been updating and some or all updates might not appear on the file. In addition, if any other users were updating the same file shortly before termination, their updates might not appear either, even though their requests ran to completion.    &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Request cancellation==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If a serious user error occurs during evaluation of a User Language request, the request is canceled. Examples of serious user errors are:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Incorrect use of a field name variable&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Including field-level security violations&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Attempt to store too many values or too long a value for a preallocated field&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Request cancellation functions in the same manner as a soft user restart. The user is notified that the request has been canceled, and the file is marked with the flag. If the file is a transaction back out file, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; cancels the request, backs out the incomplete transaction, and does not mark the file logically inconsistent. The user is notified that the transaction has been backed out.  &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Recovery methods==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Methods for recovering from file problems are presented in the following sections.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Taking the necessary precautions===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Take the following precautions to allow your site to recover from a file problem:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Use the DUMP/RESTORE utility regularly to take regular backups. If a recent DUMP of the file is available, the file can be restored to its state at the time of the dump using the RESTORE command. See [[File dumping and restoring]] for more information. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Dump the files. If journaling is ordinarily active, and all subsequent file updates are available, then you can use media recovery to restore file integrity. See [[System and media recovery]] for information about using journals to recover files. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Activate checkpointing during Online processing. In the event of system crash, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; crash, or hard restart, you can use the RESTART command to roll back to the last valid checkpoint. If journaling is also active during the Online processing, you can use the Roll Forward feature to restore as many file changes as possible. These system recovery procedures are described in [[System and media recovery]].&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;warn&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Warning:&amp;lt;/b&amp;gt;&lt;br /&gt;
To ensure file integrity, Rocket Software strongly recommends that you &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;never&amp;lt;/var&amp;gt; reset the FISTAT (file status) parameter when it is set to the file-physically-inconsistent flag until &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;just before&amp;lt;/var&amp;gt; you reorganize the file. However, you must reset FISTAT before you reorganize a physically inconsistent file.  &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Reloading broken files===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When the precautions recommended above have been neglected and the file is broken, recovery still might be possible. The safest method consists of resetting FISTAT temporarily and then running the following User Language request:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;USE OUTFILE&lt;br /&gt;
BEGIN&lt;br /&gt;
ALL: FIND ALL RECORDS&lt;br /&gt;
END FIND&lt;br /&gt;
PRINT.LOOP: FOR EACH RECORD IN ALL&lt;br /&gt;
   PRINT &#039;*&#039;&lt;br /&gt;
   PRINT ALL INFORMATION&lt;br /&gt;
END FOR&lt;br /&gt;
END&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can then use a file load program with OUTFILE to reload the file (see the discussion of file reorganization and PAI FLOD in &amp;quot;Using PAI FLOD for files with varying record formats&amp;quot;.  &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Reducing integrity problems==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
In addition to procedures used by the file and system managers for backup purposes, applications can be designed to reduce file integrity problems. &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Using COMMIT statements for manageable update units===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Use a COMMIT statement between each logical update so that the system can set the file-physically-inconsistent flag off and write out updated file pages frequently. Also, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; can take checkpoints only between update units. Long update units can severely inhibit the taking of checkpoints. (Update units are discussed in detail in [[#Model 204 update units|Model 204 update units]].)     &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
To accomplish transaction back outs, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; maintains a transaction back out and constraint log for each active update unit, built in the system file CCATEMP. Sizable update units can greatly increase the amount of CCATEMP space used by the system. Because insufficient CCATEMP space terminates the run, commit update units frequently to minimize the CCATEMP space requirement. &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Updates to TBO and non-TBO files in the same request===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can update a non-TBO file, commit it, and then update a TBO file-or reversed file order-in the same request.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Requests that attempt to update TBO and non-TBO files without an intervening COMMIT will compile, but will fail during evaluation with the following message:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;***  1  CANCELLING REQUEST; M204.2771: ATTEMPT TO UPDATE TBO AND NON-TBO FILES IN THE SAME TRANSACTION&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Designing Host Language Interface jobs===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
For Host Language Interface jobs, set the update indicator in the IFSTRT function only when updating is really occurring, and issue the IFCHKPT call at various points during a long updating program. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Retrieval-only Host Language Interface threads are not included in update units. Passing data from a retrieval-only thread to an update thread can result in logical inconsistencies to the updated file during Roll Forward.&lt;br /&gt;
To prevent these inconsistencies, start the thread as an update thread and use a retrieval-only password to open the file, thus providing share-mode enqueuing and preventing updating from this thread.&lt;br /&gt;
The file also is prevented from being marked physically inconsistent in the event of a hard restart or system crash. See [[HLI: Job design factors#Recovery considerations for single and multicursor IFAM2 threads|Recovery considerations for single and multicursor IFAM2 threads]] for further description.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Update units and transactions==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
In general data processing terms, a transaction is a sequence of operations that access a database. The order of these operations is defined by the application or the user. &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Model 204 transaction types===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
&amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; recognizes the following types of transactions: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;tr class=&amp;quot;head&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Type&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Transactions that...&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;1&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Cannot update the database&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;2&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Can update the database but cannot be backed out&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;3 &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Can update the database and can be backed out&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Model 204 update units===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
In the &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; environment, the term &amp;lt;b&amp;gt;update unit&amp;lt;/b&amp;gt; refers to any sequence of operations that is allowed to update the database. The two types of update transactions described above, types 2 and 3, are both update units in &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt;: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Update units that cannot be backed out (type 2) are called &amp;lt;b&amp;gt;non-backoutable update units&amp;lt;/b&amp;gt;. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Update units that can be backed out (type 3), are called &amp;lt;b&amp;gt;transactions&amp;lt;/b&amp;gt; or &amp;lt;b&amp;gt;backoutable update units&amp;lt;/b&amp;gt;.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Non-backoutable update units====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The following types of updates cannot be backed out and must be part of non-backoutable update units:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Updates to non-transaction-back out files&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Updates resulting from file updating commands (such as RENAME field)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Host Language functions that correspond to the updates in the previous two items &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Updates resulting from the EDIT subcommands END and GO&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Procedure definitions &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Backoutable update units====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Backoutable update units are User Language updates to a transaction back out file and their Host Language Interface counterparts (record or record set updating calls). These are the only types of update operations that can occur inside a &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; transaction. A transaction can either be completed so that it persists in the file, or backed out so that the update is logically undone in the file.     &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Detailed descriptions of the boundaries of User Language backoutable and non-backoutable update units are presented in the following sections, followed by a discussion of the Host Language Interface update unit boundaries.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Boundaries of non-backoutable update units===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Updating commands must be in non-backoutable update units. Some updating commands end any previous active update unit, whether backoutable or not. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The following updating commands always end active update units:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;var&amp;gt;[[INITIALIZE command|INITIALIZE]]&amp;lt;/var&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;var&amp;gt;TRANSFORM&amp;lt;/var&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;var&amp;gt;[[REDEFINE command|REDEFINE FIELD]]&amp;lt;/var&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;var&amp;gt;[[RENAME FIELD command|RENAME FIELD]]&amp;lt;/var&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;var&amp;gt;[[DELETE command: Field|DELETE FIELD]]&amp;lt;/var&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;var&amp;gt;[[CREATE command: File|CREATE FILE]]&amp;lt;/var&amp;gt; or &amp;lt;var&amp;gt;[[CREATE command: Permanent group|CREATE PERM GROUP]]&amp;lt;/var&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;var&amp;gt;[[EDIT command|EDIT]]&amp;lt;/var&amp;gt; &amp;lt;i&amp;gt;permanent-procedure&amp;lt;/i&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;var&amp;gt;[[INCREASE command|INCREASE]]&amp;lt;/var&amp;gt; +++ &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;var&amp;gt;[[DECREASE command|DECREASE]]&amp;lt;/var&amp;gt; +++ &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;var&amp;gt;[[FLOD command|FLOD]]&amp;lt;/var&amp;gt; +++ &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;var&amp;gt;[[FILELOAD command|FILELOAD]]&amp;lt;/var&amp;gt; +++ &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;var&amp;gt;[[REGENERATE command|REGENERATE]]&amp;lt;/var&amp;gt; +++ &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;var&amp;gt;[[REORGANIZE command|REORGANIZE]]&amp;lt;/var&amp;gt; +++ &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;var&amp;gt;[[RESTORE command|RESTORE]]&amp;lt;/var&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;var&amp;gt;[[RESTOREG command|RESTOREG]]&amp;lt;/var&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;var&amp;gt;[[Z command|Z]]&amp;lt;/var&amp;gt; +++ &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The commands followed by +++ cannot be issued inside a procedure.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Updating commands that sometimes end active update units====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Other updating commands end the previous update unit only when that update unit is a User Language update. If a command non-backoutable update unit is in progress, the following commands are included in that non-backoutable update unit: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;var&amp;gt;[[SECURE command: File|SECURE]]&amp;lt;/var&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;var&amp;gt;[[BROADCAST command: Sending a file message|BROADCAST FILE]]&amp;lt;/var&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;var&amp;gt;[[DEFINE command|DEFINE]]&amp;lt;/var&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;var&amp;gt;[[PROCEDURE command|PROCEDURE or PROC]]&amp;lt;/var&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;var&amp;gt;[[DELETE command: Procedure|DELETE PROCEDURE]]&amp;lt;/var&amp;gt; or &amp;lt;var&amp;gt;[[DELETE command: Permanent group|DELETE PERM GROUP]]&amp;lt;/var&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;var&amp;gt;[[RESET command|RESET]]&amp;lt;/var&amp;gt;   &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;var&amp;gt;[[RENAME PROCEDURE command|RENAME PROCEDURE]]&amp;lt;/var&amp;gt; +++ &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;var&amp;gt;[[ASSIGN command|ASSIGN]]&amp;lt;/var&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;var&amp;gt;[[DEASSIGN command|DEASSIGN]]&amp;lt;/var&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;var&amp;gt;[[DESECURE command: Overview of DESECURE|DESECURE]]&amp;lt;/var&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;var&amp;gt;[[CREATEG command|CREATEG]]&amp;lt;/var&amp;gt; +++   &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Nonupdating commands that end active update units====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Nonupdating commands that end any previous update unit are:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;var&amp;gt;[[CLOSE command|CLOSE FILE]]&amp;lt;/var&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;var&amp;gt;[[ALLOCATE command|ALLOCATE]]&amp;lt;/var&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;var&amp;gt;[[FREE command|FREE]]&amp;lt;/var&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;var&amp;gt;[[DUMP command|DUMP]]&amp;lt;/var&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;var&amp;gt;[[DUMPG command|DUMPG]]&amp;lt;/var&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;var&amp;gt;[[LOGOUT or LOGOFF command|LOGOUT/LOGOFF]]&amp;lt;/var&amp;gt;  &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;var&amp;gt;[[DISCONNECT command|DISCONNECT]]&amp;lt;/var&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;var&amp;gt;[[EOJ command|EOJ]]&amp;lt;/var&amp;gt; +++   &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When a BEGIN or MORE command follows another command that does not automatically end its own update unit (for example, DEFINE), BEGIN or MORE ends the current update unit.   &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====SOUL statements that end active update units or transactions====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
SOUL statements that end the current update unit or transaction are:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;var&amp;gt;[[Record level locking and concurrency control#COMMIT statement|COMMIT]]&amp;lt;/var&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;var&amp;gt;[[Record level locking and concurrency control#RELEASE option|COMMIT RELEASE]]&amp;lt;/var&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;var&amp;gt;[[Data recovery#Manual backout|BACKOUT]]&amp;lt;/var&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;var&amp;gt;[[Basic request structure#Beginning and ending a request|END]]&amp;lt;/var&amp;gt;&lt;br /&gt;
(only when END returns the user to include level 0 or terminal command level)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Other ways to end active update units====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Other situations that end the current update unit are:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Return to terminal command level&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;End of an application subsystem procedure, when control is transferred through the communications global variable, unless the Auto Commit option was turned off in the subsystem definition   &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Request cancellation&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;User restart     &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Starting non-backoutable update units====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Non-backoutable update units in User Language start with the first FIND statement or the first User Language statement that performs an update operation on a file that is not a transaction back out file.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
In a procedure, non-backoutable update units start with the first FIND statement, the first User Language statement that performs an update operation on a non-transaction back out file, or the first updating command.&lt;br /&gt;
Each line of input to a procedure definition is treated as a separate update unit, but only one [[System and media recovery#Understanding update units|update ID]] is assigned to a single procedure definition.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Update units for the EDIT command start and end when the edited procedure is copied to the &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; file during the END, GO, or SAVE subcommand. &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Boundaries of transactions===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
A transaction (backoutable update unit) begins when the first SOUL statement performing an update operation on a transaction back out file in a User Language request or a procedure is executed. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====SOUL statements that perform update operations====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The SOUL statements that perform update operations are: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;var&amp;gt;[[Data maintenance#STORE RECORD statement|STORE RECORD]]&amp;lt;/var&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;var&amp;gt;[[Data maintenance#DELETE RECORD statement|DELETE RECORD]]&amp;lt;/var&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;var&amp;gt;[[Data maintenance#DELETE ALL RECORDS statement|DELETE RECORDS]]&amp;lt;/var&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;var&amp;gt;[[Data maintenance#FILE RECORDS statement|FILE RECORDS]]&amp;lt;/var&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;var&amp;gt;[[Data maintenance#ADD statement|ADD]]&amp;lt;/var&amp;gt; &amp;lt;i&amp;gt;fieldname&amp;lt;/i&amp;gt; = &amp;lt;i&amp;gt;value&amp;lt;/i&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;var&amp;gt;[[Data maintenance#DELETE statement|DELETE]]&amp;lt;/var&amp;gt; &amp;lt;i&amp;gt;fieldname&amp;lt;/i&amp;gt; = &amp;lt;i&amp;gt;value&amp;lt;/i&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;var&amp;gt;[[Processing multiply occurring fields and field_groups#DELETE statement|DELETE EACH]]&amp;lt;/var&amp;gt; &amp;lt;i&amp;gt;fieldname&amp;lt;/i&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;var&amp;gt;[[Processing multiply occurring fields and field_groups#INSERT statement|INSERT]]&amp;lt;/var&amp;gt; &amp;lt;i&amp;gt;fieldname&amp;lt;/i&amp;gt; = &amp;lt;i&amp;gt;value&amp;lt;/i&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;var&amp;gt;[[Processing multiply occurring fields and field_groups#CHANGE statement|CHANGE]]&amp;lt;/var&amp;gt; &amp;lt;i&amp;gt;fieldname&amp;lt;/i&amp;gt; &amp;lt;var&amp;gt;TO&amp;lt;/var&amp;gt; &amp;lt;i&amp;gt;value&amp;lt;/i&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
These are the only update operations that can occur inside transactions or can be backed out. A non-backoutable update unit must end before a transaction begins.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Commands that end active transactions====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Commands that end an active transaction are: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Any file updating command&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;var&amp;gt;[[CHECKPOINT command|CHECKPOINT]]&amp;lt;/var&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;var&amp;gt;[[CLOSE command|CLOSE FILE]]&amp;lt;/var&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;var&amp;gt;[[RESET command|RESET]]&amp;lt;/var&amp;gt;  &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;var&amp;gt;[[ALLOCATE command|ALLOCATE]]&amp;lt;/var&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;var&amp;gt;[[FREE command|FREE]]&amp;lt;/var&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;var&amp;gt;[[LOGOUT or LOGOFF command|LOGOUT/LOGOFF]]&amp;lt;/var&amp;gt;   &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;var&amp;gt;[[DISCONNECT command|DISCONNECT]]&amp;lt;/var&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;var&amp;gt;[[DUMP command|DUMP]]&amp;lt;/var&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;var&amp;gt;[[DUMPG command|DUMPG]]&amp;lt;/var&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Other events that can end active transactions====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Other events that end a transaction are:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Return to terminal command level&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;End of an application subsystem procedure, when control is transferred through the communications global variable, unless the Auto Commit option was turned off in the subsystem definition   &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Request cancellation&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;User restart &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
In User Language, ending a transaction does not start a new transaction. A new transaction does not start until a User Language statement performs an update operation on a transaction back out file.   &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Commit exits===&lt;br /&gt;
For information about the commit exits feature, which enables you to set up SOUL code to run at commit time, see [[Application_Subsystem_development#Commit_exits|Application Subsystem development]].&lt;br /&gt;
===Host Language Interface update units===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
For details about update units in the Host Language Interface environment, see [[HLI: Transactions]].&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;/div&amp;gt; &amp;lt;!-- end of toc limit div --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Model 204 files]]&lt;br /&gt;
[[Category:Recovery]]&lt;/div&gt;</summary>
		<author><name>ELowell</name></author>
	</entry>
	<entry>
		<id>https://m204wiki.rocketsoftware.com/index.php?title=Application_Subsystem_development&amp;diff=117756</id>
		<title>Application Subsystem development</title>
		<link rel="alternate" type="text/html" href="https://m204wiki.rocketsoftware.com/index.php?title=Application_Subsystem_development&amp;diff=117756"/>
		<updated>2019-12-31T22:14:22Z</updated>

		<summary type="html">&lt;p&gt;ELowell: /* Commit exits */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Overview==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Although only a system manager can define a subsystem, the determination of a subsystem&#039;s options and components typically also involves the file manager and application developer. This page focuses on subsystem facility topics most relevant to the application developer:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The Subsystem Management facility of Dictionary lets you define a collection of procedures to &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; as a subsystem and to assign certain characteristics to that subsystem. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Advantages of subsystems===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The following table summarizes the advantages of subsystems over other [[SOUL]] procedure applications: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;tr class=&amp;quot;head&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Advantage &amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Subsystems...&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td nowrap&amp;gt;Minimal end-user intervention &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Require minimal knowledge of &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt;. The end user need not know what files and procedures exist for the application. The subsystem is invoked simply by entering the subsystem name as a &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; command.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Driver facility &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Eliminate the need for user-written drivers containing conditional INCLUDEs based on a global variable. This driver facility leads to smaller, more modular procedures that are easier to maintain and enhance.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td nowrap&amp;gt;Performance improvements &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Improve performance by saving and reloading compiled SOUL requests, called precompiled procedures. Depending upon how often precompiled procedures are included, 20-90% of the operating costs of a &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; application can be saved.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Error handling facilities &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Trap and handle &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; errors in a single, centralized routine. Each subsystem can have one error procedure that is invoked each time a &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; error occurs during that subsystem&#039;s processing. &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; provides facilities for determining the type of error that caused the error procedure to be invoked.   &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Security facilities &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Allow or restrict access to the subsystem. &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Parallel Query Option/204 compatibility &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Can be defined to allow referral to remote files and scattered groups.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Subsystem definition===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The characteristics and components of a subsystem are defined to &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; by the system manager during a process called subsystem definition. The defined options and components are stored in the system file CCASYS. Once a subsystem has been defined, all Dictionary users can display the options and components through Dictionary. For more information about:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;Displaying a subsystem definition, see [[System requirements for Application Subsystems#Overview of the Subsystem Management facility|Overview of the Subsystem Management facility]]. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Defining subsystems that refer to remote files and scattered groups, see [[PQO: Scattered APSY subsystems#Client and service subsystems|PQO client and service subsystems]].  &lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Subsystem design components==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
During subsystem definition, the components listed below can be defined. These components impact various aspects of subsystem design. The following table summarizes the required component designations.    &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;tr class=&amp;quot;head&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Component &amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Subsystem design requires designation of...&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td nowrap&amp;gt;Command line global variable &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;(Optional) parameter global variable. The parameter global variable allows any parameters specified by a user during a subsystem login to be stored in this variable and retained when control is transferred to another subsystem.     &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Communication global variable and exit value &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Communication global variable and exit value. The communication global variable is used to transfer control from one procedure to another. The exit value is used to leave the subsystem. Optionally, a reserved global variable is available for transferring control between subsystems.       &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Error global variable &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Error global variable. If an error occurs while the subsystem is executing, a three-character error code is stored in this variable. This code can then be used by an error procedure to determine the action to be taken by the subsystem.      &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Prefix designations &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Two prefixes for procedure names. These prefixes allow &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; to determine whether a procedure can be saved in its compiled form for later evaluation.   &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Processing components&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Specific procedures for types of special processing. These procedures allow &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; to determine the flow of control within a subsystem.   &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
==Command line global variable==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
A command line global variable allows you to store any parameters specified by an end user during a subsystem login and retain this information when control is transferred to another subsystem. The designation of a command line global variable is optional. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Using the command line global variable===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The command line global variable is used in the following manner:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;A user logs into a subsystem by entering the subsystem name followed by the parameter information. The total length of the parameter information entered by the user can consist of as many as 255 characters. (The portion of the command line reserved for parameter information is discarded if no parameter information is defined.)&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;The portion of the input following the subsystem name is placed into a command line global variable, which then is available to the application program. For example:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;PAYROLL &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;parameter1 parameter2&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
is the command that logs the current user into the subsystem named PAYROLL. The string &amp;lt;i&amp;gt;parameter1 parameter2&amp;lt;/i&amp;gt; is the subsystem command line and is made available to the application via a global variable. If CMDL is the name assigned to the command line global variable, the following statements:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;BEGIN&lt;br /&gt;
  %CMD.LINE = $GETG(&#039;CMDL&#039;)&lt;br /&gt;
  %FIRST.PARM =&lt;br /&gt;
     $Substr(%CMD.LINE,1,$INDEX(%CMD.LINE,&#039; &#039;)-1)&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
would assign the contents of the command line used to enter the subsystem to %CMD.LINE and the first parameter of the line to %FIRST.PARM. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Transferring control to another subsystem===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The contents of command line global variables are not deleted when control is transferred from one subsystem to another. A request can set the contents of the command line global variable of the destination subsystem before transferring control to that subsystem. The effect is the same as if the parameters were entered on the user&#039;s terminal.     &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Impact of the UTABLE command===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The contents of the command line global variable are not deleted by UTABLE commands which normally delete the contents of GTBL, as long as the UTABLE command is issued from within a subsystem.   &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
==Communication global variable==&lt;br /&gt;
 &lt;br /&gt;
===Transferring control===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
A communication global variable lets you transfer control at two levels:        &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;tr class=&amp;quot;head&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;From... &amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Control is transferred by a...&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;One procedure to another &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;User-designated global variable.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;One subsystem to another &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Reserved global variable named XFER. &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Transferring control between procedures===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Subsystem procedures pass control from one to another through the use of the communication global variable. The communication global variable name for a subsystem is specified in the subsystem definition. Each subsystem procedure must set the value of the communication global variable to the name of the next procedure to be executed.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Example====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
For example, the subsystem AUTOS has procedures PRE-MAIN.MENU and PRE-RPT.PGM and the communication global variable NEXT.&lt;br /&gt;
PRE-MAIN.MENU is currently executing and wants to pass control to&lt;br /&gt;
PRE-RPT.PGM. Before PRE-MAIN.MENU finishes, the function $SETG is used to store procedure name PRE-RPT.PGM in NEXT:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;IF $SETG(&#039;NEXT&#039;,&#039;PRE-RPT.PGM&#039;) THEN ...&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
After PRE-MAIN.MENU ends, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; examines NEXT and begins executing PRE-RPT.PGM.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Subsystem exit value====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
A subsystem is exited by setting the value of the communication global variable to the subsystem exit value. The exit value for the communication global variable is also specified in the subsystem definition.    &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
For the AUTOS subsystem used in the preceding example, the exit value of the communication global variable is defined as EXIT. To disconnect the user from the AUTOS subsystem after procedure PRE-RPT.PGM is finished executing, PRE-RPT.PGM assigns the exit value, EXIT, to the communication global variable, NEXT.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;IF $SETG(&#039;NEXT&#039;,&#039;EXIT&#039;) THEN&lt;br /&gt;
    .&lt;br /&gt;
    .&lt;br /&gt;
    .&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Transferring control between subsystems===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
One subsystem can invoke another subsystem by transferring control from itself to another subsystem. To accomplish this, you must perform these steps:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Set the communication global variable to the value XFER.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Set the global variable XFER to the name of the subsystem to which control is being passed. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When the current procedure finishes executing, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; disconnects the user from the old subsystem, transfers control to the new subsystem, and invokes the login procedure for the new subsystem. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Design considerations====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You should consider the following factors when coding logic for transferring control between two subsystems:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The transfer always invokes the login procedure of the subsystem receiving control. For more information on the login procedure, refer to the discussion [[#Subsystem processing flow|Subsystem processing flow]].&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;The destination subsystem must be active. The $SUBSYS function should be used to determine if the subsystem to which control is being transferred is active; refer to the discussion on [[#Subsystem procedure control functions|Subsystem procedure control functions]]. If the destination subsystem does not use the automatic start option, (see [[#Operating options|Operating options]]), the subsystem must be started before control is passed.   &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;The destination subsystem should not reset LGTBL if any parameters are passed in global variables.   &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;To return to the original subsystem, a global variable must be set to the name of the original subsystem. The communication global variable and the XFER global variable can then be used with the global variable that stores the subsystem name to return control to the original subsystem.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;The destination subsystem can return control to the procedure that the user was in when the user transferred. To do this, the subsystem must save the name of the procedure in a global variable. In addition, the login procedure must contain logic to return control to the procedure that the user was in.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;If the transferring subsystem is in test mode (see [[#Security options|Security options]]), the transferring subsystem stops after it passes control. The destination subsystem is not placed in test mode. &lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Example====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The following request in procedure PRE-SUB.MENU provides an example of subsystem transfer code. CREDIT and AUTOS are two defined subsystems with the automatic start option. (See [[#Automatic start|Automatic start]].) Subsystem CREDIT transfers control to AUTOS by setting NEXT (the communication global variable) to XFER and the global variable XFER to AUTOS. After the PRE-SUB.MENU procedure ends, the user is connected to AUTOS.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;BEGIN&lt;br /&gt;
.&lt;br /&gt;
.&lt;br /&gt;
.&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;*SELECTION = 4 INDICATES CHOICE OF AUTOS SUBSYSTEM&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;*&lt;br /&gt;
SEL.AUTOS: IF %CREDITMENU:SELECTION = 4 AND -&lt;br /&gt;
              $SUBSYS(&#039;AUTOS&#039;) =1 THEN&lt;br /&gt;
                  IF $SETG(&#039;XFER&#039;,&#039;AUTOS&#039;) OR -&lt;br /&gt;
                      $SETG(&#039;NEXT&#039;,&#039;XFER&#039;) OR -&lt;br /&gt;
                      $SETG(&#039;SUBFROM&#039;,&#039;CREDIT&#039;) OR -&lt;br /&gt;
                      $SETG(&#039;PROCFROM&#039;,&#039;PRE-SUB.MENU&#039;) THEN&lt;br /&gt;
                      PRINT &#039;GLOBAL TABLE FULL&#039;&lt;br /&gt;
                  END IF&lt;br /&gt;
                  JUMP TO GET.NEXT&lt;br /&gt;
                    .&lt;br /&gt;
                    .&lt;br /&gt;
                    .&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Coding considerations===&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Procedures to which control is passed via the communication global variable must be stored in a designated procedure file. The procedure file is the default file for a subsystem application unless the default file is explicitly changed by a DEFAULT command or overridden by an IN clause.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Each procedure must set the communication global variable to indicate the next procedure to be included. If this variable is not set, an error or loop occurs.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;To exit the subsystem, the communication global variable must be set to the exit value. Server table sizes and other parameters should be reset to the values existing prior to entering the subsystem so that the user is returned to his/her normal operating environment. Parameter values are restored automatically when the automatic login option is used. &lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
==Error global variable==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The name of the error global variable must be specified in the subsystem definition. Whenever an error is detected that is not trapped by an ON unit, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; automatically sets the subsystem&#039;s error global variable to a value which indicates the type of error that occurred.   &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Error code values===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The &amp;quot;Error global variable values and reasons&amp;quot; table lists the error global variable values and their corresponding causes. Correct the cause of the error, and/or change your error procedure as discussed in [[#Error procedures|Error procedures]]. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;caption&amp;gt;Error global variable values and reasons&amp;lt;/caption&amp;gt;&lt;br /&gt;
&amp;lt;tr class=&amp;quot;head&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Error code&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Reason&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;ATN &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;User pressed attention&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;BUG &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Evaluation errors&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;CAN&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Request evaluation canceled due to invalid terminal I/O in error procedure after BUMP or inactive thread time out.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;CNT &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Counting errors&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;FIL - BROKEN &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Referenced file is not initialized, full, or physically inconsistent. Check the audit trail to determine the condition of the file. &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;FIL - NOT OPEN &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Referenced file not open&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;GRP - FTBL &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;FTBL too small&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;GRP - NOT OPEN &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Group not open&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;GRP - TEMP FIELD &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;TEMP group field has wrong type (see [[#Restrictions for temporary and ad hoc groups in precompiled procedures|Restrictions for temporary and ad hoc groups in precompiled procedures]])&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td nowrap&amp;gt;GRP - TEMP MISMATCH &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;TEMP group has wrong type&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;INCLUDE MAX&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Maximum iterations value has been exceeded.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;HNG &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Phone hung up, connection lost&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;HRD &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Hard restart&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;REC &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Record locking table filled up during the load of a&lt;br /&gt;
precompiled request&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;RFR&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;After several tries, an APSY failed to invoke a procedure, because the procedure is in the process of being refreshed.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;SFT &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Soft restart&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;TBL - FSCB &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;FSCB too small&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;TBL - NTBL &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;NTBL too small&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;TBL - QTBL &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;QTBL too small&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;TBL - STBL &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;STBL too small&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;TBL - VTBL &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;VTBL too small&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Error procedures===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
An error procedure must test for different error conditions. The resulting value stored in the error global variable helps the application programmer determine the type of error that occurred.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;For all error codes except ATN, the error procedure should avoid re-executing the procedure that caused the error; otherwise, the error recurs. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;In most cases, the error procedure should display an informational message and set the global communication variable to the exit value. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;If a HNG error code is indicated, all terminal I/O (such as PRINT, READ) is ignored. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;If a HNG, HRD, or SFT error code is indicated, no terminal I/O (such as PRINT or READ) should be attempted. Instead, send a message to the audit trail in an AUDIT statement that indicates the error code encountered.   &lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Considerations for the communications global variable====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The communications global variable is ignored and disconnect processing completed when one of the following conditions occurs:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Error is a soft restart, a hard restart, or a phone hang-up condition. &lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If you attempt to set the communications global variable to the name of another procedure, the procedure is not executed.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;No error procedure is specified in the subsystem definition.  &lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
An example illustrating how a subsystem error procedure can test for different error conditions is provided in [[#Error procedure|Error procedure]]. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
==Precompiled and non-precompiled procedures==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can use two types of procedures in a subsystem:     &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt; &lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;Precompiled procedure&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt; &lt;br /&gt;
The first time a precompilable procedure is invoked after a subsystem starts, it is compiled and stored for re-use. Because the compiler phase is bypassed each subsequent time the procedure is invoked (except as noted below), precompilation saves both CPU and elapsed time. Exceptions include the following:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The procedure is recompiled the first time it is invoked for each SCLASS. The new compilation is evaluated, then discarded. It does not replace the original stored compilation. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Further recompilations might be required due to temporary group differences. See [[#Recompiling precompiled procedures|Recompiling precompiled procedures]] for more on this. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;Non-precompiled procedure&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt; &lt;br /&gt;
A non-precompiled procedure is compiled each time it is invoked.&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
All procedures, whether precompiled or not, are invoked using the communication global variable.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Defining prefixes===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
During subsystem definition, two prefixes must be defined. The first prefix identifies precompiled procedures; the second identifies non-precompiled procedures. All procedures that are included for the subsystem through the use of the communication global variable (such as the login and main processing procedures) must have names that begin with one of these prefixes.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Contents of subsystem procedures===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Subsystem procedures can contain &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; commands, a request, multiple requests, continued requests, sections of User Language code (for example, subroutines), or any combination thereof. However, the form of the procedure affects whether the procedure can be precompiled and should be taken into account when the subsystem is designed. Restrictions for precompiled procedures are discussed in detail below.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Shared versions of precompiled procedures===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Server I/O can be reduced by allowing users executing shared precompiled procedures to use a shared version of QTBL.&lt;br /&gt;
See [[Performance monitoring and tuning#Resident Request feature for precompiled procedures|Resident Request feature for precompiled procedures]]. &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Restrictions for precompiled procedures===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
&amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; must ensure that all of the code compiled and saved for a request with the precompiled prefix is consistent for all loading users. To achieve consistency, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; restricts the way in which certain features are used.    &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Note the following restrictions for precompiled procedures when designing subsystem procedures:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Procedures must contain exactly one request. The last statement must be END or END MORE.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Requests cannot start with MORE.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Procedures that include multiple BEGIN/END blocks are not eligible for precompilation.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Requests must not refer to files or permanent groups that are not mentioned in the subsystem definition.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Precompiled procedures can contain the User Language INCLUDE statement. The included procedures must be from a subsystem file. Any code inserted as a result of an INCLUDE statement is subject to all the restrictions for precompiled procedures. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;If a precompiled procedure issues the INCLUDE command to compile and run a User Language request, the INCLUDE command is saved, not the compilation of the request that was included.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Compiler table sizes must be the same each time a precompiled procedure is invoked. The UTABLE command should be used carefully.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Dummy strings (??, ?$, ?&amp;amp;amp;) in precompiled procedures are resolved only during compilation for the first user.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Dummy string substitution does not take place when saving commands that contain dummy strings. Instead, when the saved commands are loaded and executed, the current value of the dummy string is used. For example, if you include the following command in a precompiled procedure, whatever is currently in the global COMMAND is executed. &lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;?%COMMAND&lt;br /&gt;
&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;If a subsystem file is referenced by a precompiled procedure, no user can RESTORE or INITIALIZE the file, or RENAME, DELETE, or REDEFINE a field while the subsystem is active.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Procedures in UNLOCKed members of a PROCFILE GROUP are not precompiled. &lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Restrictions for temporary and ad hoc groups in precompiled procedures===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Precompiled requests can refer to temporary or ad hoc groups as long as the files making up the group are specified in the subsystem definition. A temporary group of the same name must have the same composition characteristics for all loading users, as described below. If this condition is not met, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; sets the error global variable to GRP-TEMP MISMATCH (see [[#Error global variable|Error global variable]]).&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The temporary group for all loading users must be the same type. &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; assigns a type, based on the following file conditions:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Some files have record security.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;All files are sorted or all are hashed.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The sort or hash key has the same name in all files. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Fields of the same name in the temporary group must be of the same type. Each field referenced in a temporary group each time a precompiled procedure is invoked must be found in a file. If this condition is not met, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; sets the error global variable to GRP-TEMP FIELD (see [[#Error global variable|Error global variable]]). &lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Field definition attributes can change for fields in temporary groups between compile and loading time. The following changes are allowed:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;If the field is NON-CODED in any file at compile time, it can be CODED in all files at loading time.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;If the field is BINARY or FLOAT in any file at compile time, it can be STRING in all files at loading time.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;If the field is non-NUMERIC RANGE in any file at compile time, the field can be NUMERIC RANGE in all of the files at loading time.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Recompiling precompiled procedures===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When designing applications which use precompiled procedures and temporary groups, be aware that temporary groups can cause &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; to recompile precompiled procedures under certain conditions. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Precompiled procedures are recompiled when the request references a temporary group and the:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Compiling user&#039;s temporary group consists of files which are smaller than one or more of the files in the loading user&#039;s temporary group of the same name.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Compiling user&#039;s temporary group has fewer files than the loading user&#039;s temporary group of the same name. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Update and retrieve privileges do not match those of the compiling user&#039;s temporary group (of the same name). &lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If one user&#039;s temporary group contains one large file, and another user&#039;s temporary group contains a number of smaller files, it is possible that a precompiled procedure is recompiled every time it is invoked. To prevent constant recompiling when files are of different sizes, compile temporary groups originally with the largest files and the greatest number files you expect to be included in the temporary group.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If, despite precautions, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; must discard and recompile a precompiled procedure, the loading user must have exclusive access to that procedure: no other user can be executing the procedure within the same subsystem. If another user is executing the procedure, the loading user recompiles a private copy of the procedure. &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; discards the private copy when execution has completed.   &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Procedure compilation and Parallel Query Option/204===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When a non-precompiled procedure that references remote files is invoked, one or more remote nodes participate in the compilation and evaluation. When a precompiled procedure is invoked, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; loads the procedure on each of the nodes that participated in the original compilation.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When a subsystem member becomes unavailable during evaluation, the appropriate ON unit is activated. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Errors which occur while loading a remote procedure produce error messages which have the prefix RMT in the global error variable.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Saving compilations====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
As part of the compilation process, a list of remote nodes referenced in the request is generated with the compiled code. When compilation is complete, the compilation is saved along with the list of nodes. Each remote node referenced in the request is sent a signal to save the compilation. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If for any reason a compilation cannot be saved by a server node, the entire save operation fails.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Loading saved compilations====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
At the client node, the saved remote node reference list is checked to see which nodes are loading the request. When the request is loaded on the client, a signal is transmitted to each referenced server node to load the compilation. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====New and missing nodes====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
A temporary group can be changed so that a node is &amp;lt;b&amp;gt;new&amp;lt;/b&amp;gt; (not previously referenced) or &amp;lt;b&amp;gt;missing&amp;lt;/b&amp;gt; (referenced but no longer available). [[#New and missing nodes|Temporary groups with new and missing nodes]] shows how new and missing nodes affect recompilations and saves. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;caption&amp;gt;Temporary groups with new and missing nodes&amp;lt;/caption&amp;gt;&lt;br /&gt;
&amp;lt;tr class=&amp;quot;head&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;&amp;amp;nbsp;&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;If there are&lt;br /&gt;
missing nodes...&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;If there are no&lt;br /&gt;
missing nodes....&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;And there are new nodes...&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Recompile the procedure, do not save&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Recompile and save again&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;And there are no new nodes...&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Just load and evaluate&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Just load and evaluate&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt; &lt;br /&gt;
 &lt;br /&gt;
====Recompiling saved requests====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Saved requests are always recompiled if a new node is introduced into a temporary group. Recompilation can cause a noticeable delay in response time.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
In addition, the following changes in the composition of a subgroup also force recompilation of a request. A subgroup is the group of files at a server node referenced as a part of a group.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
&amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; recompiles saved requests when:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The number of files in the subgroup has increased (for example, if a user&#039;s request includes a file that was unavailable to the previous user)&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;The maximum number of segments in a subgroup has increased &lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
==Subsystem procedures==&lt;br /&gt;
 &lt;br /&gt;
===Types of subsystem procedures===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Subsystem development involves writing the collection of procedures that make up a subsystem. Subsystem procedures can be categorized as one of four types:     &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;tr class=&amp;quot;head&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Procedure category &amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Performs...&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;var&amp;gt;Initialization&amp;lt;/var&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Specified operations each time the subsystem is initialized.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;var&amp;gt;Login&amp;lt;/var&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;As the entry point for each user of the subsystem.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;var&amp;gt;Main processing&amp;lt;/var&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Specific tasks of the subsystem.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;var&amp;gt;Error&amp;lt;/var&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Error handling. &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Guidelines and restrictions===&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Procedures should be small and modular.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Included procedures normally are included by using the INCLUDE command. Included procedures cannot be precompiled.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Non-subsystem files can be opened and referenced only by non precompiled procedures.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;If a subsystem file is referenced by a precompiled procedure, no user can RESTORE or INITIALIZE the file, or RENAME, DELETE, or REDEFINE a field while the subsystem is active.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;A subsystem procedure cannot issue the CREATE command for a subsystem file.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;LXTBL and LFTBL cannot be reset from within a subsystem procedure.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;All DO YOU REALLY WANT TO messages are suppressed and the default action is assumed. The default action for each type of message is listed in [[M204.1076]].  &lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If you do not wish the default action to be executed, statements to handle a situation that would invoke the message should be added to the procedure. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Initialization procedure===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The initialization procedure stores instructions for tasks you need to perform each time the subsystem is initialized. An example of such a task is the initialization of a particular work file.   &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The initialization procedure is optional. If a subsystem uses an initialization procedure, the procedure name must be specified in the subsystem definition.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Login procedure===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The login procedure performs the start up for each user of an application. Every time a user invokes the subsystem, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; automatically includes the subsystem login procedure. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The login procedure name must be specified in the subsystem definition.   &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Typically, the login procedure is used to store current server table sizes in the global variable table for later reference, issue UTABLE commands to set compiler table sizes for the subsystem, and set the communication global variable to the name of the procedure that displays an initial menu. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Example&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Here is a sample login procedure:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;CLEARG&lt;br /&gt;
BEGIN&lt;br /&gt;
IF $SETG(&#039;NTBL&#039;,$VIEW(&#039;LNTBL&#039;)) OR -&lt;br /&gt;
   $SETG(&#039;VTBL&#039;,$VIEW(&#039;LVTBL&#039;)) OR -&lt;br /&gt;
   $SETG(&#039;QTBL&#039;,$VIEW(&#039;LQTBL&#039;)) OR -&lt;br /&gt;
   $SETG(&#039;STBL&#039;,$VIEW(&#039;LSTBL&#039;)) OR -&lt;br /&gt;
   $SETG(&#039;FSCB&#039;,$VIEW(&#039;LFSCB&#039;)) OR -&lt;br /&gt;
   $SETG(&#039;LECHO&#039;,$VIEW(&#039;LECHO&#039;)) OR -&lt;br /&gt;
   $SETG(&#039;NEXT&#039;,&#039;PRE-MAIN.MENU&#039;) THEN&lt;br /&gt;
         PRINT &#039;GTBL FULL&#039;&lt;br /&gt;
END IF&lt;br /&gt;
END&lt;br /&gt;
UTABLE LNTBL=450,LQTBL=2300,LVTBL=600,LSTBL=3300&lt;br /&gt;
UTABLE LFSCB=5000&lt;br /&gt;
RESET LECHO 0&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Main processing procedures===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Main processing procedures perform the specific tasks of the subsystem. There can be as few or as many main processing procedures as necessary for the subsystem to perform its tasks. Main processing procedures are not specified in the subsystem definition. However, each procedure must follow the procedure naming conventions and subsystem coding rules discussed on this page.   &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Example====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Here is a sample procedure:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;BEGIN&lt;br /&gt;
MENU MAINMENU&lt;br /&gt;
    TITLE &#039;AUTO INSURANCE SYSTEM (MAIN MENU)&#039; AT 10 BRIGHT&lt;br /&gt;
    MAX PFKEY 12&lt;br /&gt;
    SKIP 5 LINES&lt;br /&gt;
    PROMPT &#039;MAINTENANCE&#039; AT 10 BRIGHT&lt;br /&gt;
    SKIP 2 LINES&lt;br /&gt;
    PROMPT &#039;REPORTING&#039; AT 10 BRIGHT&lt;br /&gt;
    SKIP 2 LINES&lt;br /&gt;
    PROMPT &#039;EXIT&#039; AT 10 BRIGHT&lt;br /&gt;
END MENU&lt;br /&gt;
    %NEXT = &#039;X&#039;&lt;br /&gt;
    REPEAT WHILE %NEXT = &#039;X&#039;&lt;br /&gt;
        READ MAINMENU&lt;br /&gt;
        IF %MAINMENU:SELECTION = &#039;1&#039; THEN&lt;br /&gt;
            %NEXT = &#039;PRE-MAINT.PGM&#039;&lt;br /&gt;
        ELSEIF %MAINMENU:SELECTION = &#039;2&#039; THEN&lt;br /&gt;
            %NEXT = &#039;PRE-RPT.PGM&#039;&lt;br /&gt;
        ELSE %NEXT = &#039;NON-FINISH&#039;&lt;br /&gt;
        END IF&lt;br /&gt;
    END REPEAT&lt;br /&gt;
CHK.GTAB: IF $SETG(&#039;NEXT&#039;,%NEXT) THEN&lt;br /&gt;
              AUDIT &#039;GLOBAL TABLE FULL - &amp;quot;NEXT&amp;quot;&#039;&lt;br /&gt;
          END IF&lt;br /&gt;
END&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Error procedure===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
An error procedure, which is optional, performs error handling. This procedure is invoked when a condition occurs that cannot be trapped by the executing procedure (for example, a compiler error or an attention with no ON ATTENTION unit coded). An error procedure tests for different error conditions and determines the next procedure to execute, based on the error code value stored in the error global variable. Terminal I/O in a subsystem error procedure following a BUMP or inactive thread timeout results in cancellation of the procedure.       &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Example====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The following error procedure assumes that the error global variable name is ERRCLASS, the communication global variable name is NEXT, and the exit value of the communication global variable is EXIT.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;PROCEDURE SYS-ERROR&lt;br /&gt;
BEGIN&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;*&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;* GET THE VALUE OF THE ERROR CLASS GLOBAL VARIABLE&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;*&lt;br /&gt;
GET.VALUE: %ERRORCODE = $GETG(&#039;ERRCLASS&#039;)&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;*&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;* IF THE USER HIT ATTENTION, INCLUDE THE MAIN MENU SCREEN&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;*&lt;br /&gt;
IF.ERROR: IF %ERRORCODE = &#039;ATN&#039; THEN&lt;br /&gt;
             %NEXT = &#039;SYS-MAIN-MENU&#039;&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;*&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;* IF PHONE WAS HUNG UP, OR ANY KIND OF RESTART, THEN AUDIT&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;* MESSAGE AND EXIT.  DO NOT ATTEMPT ANY TERMINAL I/O&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;* SINCE USER IS NO LONGER CONNECTED.&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;*&lt;br /&gt;
              ELSEIF %ERRORCODE = &#039;HNG&#039; OR -&lt;br /&gt;
                     %ERRORCODE = &#039;SFT&#039; OR -&lt;br /&gt;
                     %ERRORCODE = &#039;HRD&#039; THEN&lt;br /&gt;
                     AUDIT &#039;SUBSYSTEM ERROR CODE: &#039; -&lt;br /&gt;
                        WITH %ERRORCODE&lt;br /&gt;
                     %NEXT = &#039;EXIT&#039;&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;*&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;* CHECK FOR BROKEN FILE&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;*&lt;br /&gt;
              ELSEIF %ERRORCODE = &#039;FIL - BROKEN&#039; THEN&lt;br /&gt;
                     PRINT &#039; SUBSYSTEM FILE IS BROKEN&#039;&lt;br /&gt;
                     PRINT &#039; CONTACT YOUR FILE MANAGER &#039;&lt;br /&gt;
                     %NEXT = &#039;EXIT&#039;&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;*&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;* SOME UNACCOUNTABLE ERROR HAS OCCURRED, SET EXIT&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;* ROUTINE, AND EXIT WITHOUT DOING ANY TERMINAL I/O.&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;*&lt;br /&gt;
              ELSE&lt;br /&gt;
                    AUDIT &#039;NOT ACCOUNTED FOR SUBSYSTEM ERROR CODE: &#039; -&lt;br /&gt;
                 WITH %ERRORCODE&lt;br /&gt;
                 %NEXT = &#039;EXIT&#039;&lt;br /&gt;
          END IF IF.ERROR&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;*&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;* SET COMMUNICATIONS VARIABLE TO EXIT VALUE&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;*&lt;br /&gt;
COMM.VAR: IF $SETG(&#039;NEXT&#039;,%NEXT) THEN&lt;br /&gt;
              AUDIT &#039;GTBL full in SYS-ERROR trying to set NEXT to &#039; WITH %NEXT&lt;br /&gt;
              PRINT &#039;GTBL FULL&#039;&lt;br /&gt;
          END IF&lt;br /&gt;
END.REQUEST: *&lt;br /&gt;
END&lt;br /&gt;
END PROCEDURE&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
==Security options==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
During subsystem definition, various options are specified for a subsystem. Security options determine subsystem command and file and group privileges assigned to a user.   &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can also specify system operation options during subsystem definition. System operation options are discussed in the [[#Operating options|Operating options]] section.&lt;br /&gt;
For a detailed discussion of subsystem definition options, refer to [[System requirements for Application Subsystems]]. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Status of subsystem===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The status of the subsystem affects the type of subsystem security that is implemented. The subsystem can have one of three status settings: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;tr class=&amp;quot;head&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Status setting &amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Allows access to...&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Public &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;All users. All users who enter a public subsystem are assigned to the single subsystem user class and have the same set of privileges.   &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Semipublic &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;All users but permits different privileges to be assigned for each user. In a semipublic subsystem, one subsystem user class can be defined as the default class for all users not specifically assigned to another subsystem user class. &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Private &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Only to specified users. Using a private subsystem prevents any unauthorized entry into the subsystem. All users who are allowed access must be assigned to one of the defined user classes. Unlike a semipublic subsystem, a private subsystem has no default user class.    &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===User class===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The set of privileges assigned to a user is based on the user&#039;s subsystem user class or SCLASS. The SCLASS is used by &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; to determine the privileges assigned for each file and group in the subsystem when files are opened for the user. File and group privileges must be specified in the subsystem definition because &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; bypasses &amp;lt;var&amp;gt;OPENCTL&amp;lt;/var&amp;gt; parameter settings and file passwords when opening subsystem files and groups for each user. Whenever the user invokes the subsystem, he/she is assigned the file and group privileges of that subsystem user class.         &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The SCLASS also determines whether or not the user can issue any of the subsystem control commands listed below. If &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; discovers that the user does not have the correct privileges to issue a command, an error message is displayed.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;tr class=&amp;quot;head&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Subsystem control commands &amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Directs Model&amp;amp;nbsp;204 to...&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;var&amp;gt;DEBUG SUBSYSTEM&amp;lt;/var&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Establish a test environment for a multiuser version of the &amp;lt;var&amp;gt;TEST&amp;lt;/var&amp;gt; command extension. The subsystem does not have to be stopped to issue the &amp;lt;var&amp;gt;DEBUG&amp;lt;/var&amp;gt; command. &lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When a user enters a subsystem in &amp;lt;var&amp;gt;TEST&amp;lt;/var&amp;gt; or &amp;lt;var&amp;gt;DEBUG&amp;lt;/var&amp;gt; mode, the user&#039;s MSGCTL parameter setting is not changed. All error and informational messages that are not suppressed by the user&#039;s &amp;lt;var&amp;gt;MSGCTL&amp;lt;/var&amp;gt; setting are displayed on the user&#039;s terminal.  &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;var&amp;gt;START SUBSYSTEM&amp;lt;/var&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Activate the subsystem and make it available for use. If the subsystem is inactive when the &amp;lt;var&amp;gt;START&amp;lt;/var&amp;gt; command is issued, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; opens all the subsystem files and includes the subsystem initialization procedure. &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;var&amp;gt;STOP SUBSYSTEM&amp;lt;/var&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Stop the subsystem and make it unavailable for use. Once a subsystem is stopped and all users have exited, then all locking and storage resources held by the subsystem are released and all the subsystem files and groups are closed. &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;var&amp;gt;TEST&amp;lt;/var&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Establish a single user test environment. The &amp;lt;var&amp;gt;TEST&amp;lt;/var&amp;gt; command is extended to &amp;lt;var&amp;gt;TEST DEBUG SUBSYSTEM&amp;lt;/var&amp;gt;. The subsystem must be stopped to enter &amp;lt;var&amp;gt;TEST&amp;lt;/var&amp;gt; mode.&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;note&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Note:&amp;lt;/b&amp;gt; Several aspects of &amp;lt;var&amp;gt;START SUBSYSTEM&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;STOP SUBSYSTEM&amp;lt;/var&amp;gt; processing are unique to distributed applications. For a discussion, see [[PQO: Scattered APSY subsystems#Subsystem command processing|Subsystem command processing]].&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Processing of security violations===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The application subsystem traps security violations that occur while a user is running in a subsystem. File read and update security violations, procedure security violations, and field level security violations are interpreted as compilation or evaluation errors in the error global variable. The audit trail messages produced when the error occurred can be examined in order to identify a compilation or evaluation error as a security violation. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Compiling procedures with a different SCLASS===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
In the following situation, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; saves User 1&#039;s compilation:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;There are multiple SCLASSes for a subsystem.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;User 1 saves a procedure under SCLASS 1.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;User 2, under SCLASS 2, recompiles the procedure.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;User 2&#039;s global variables contain different information from User 1&#039;s so User 2 tries to open different files or groups than User 1.   &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
However, User 2&#039;s compilation is not saved: User 2 receives an error message:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;M204.0468: COMPILATION NOT SAVED - &amp;lt;i&amp;gt;reason&amp;lt;/i&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Operating options==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Operating options affect certain aspects of the overall behavior of a subsystem. Operating options are distinct from security options, which are discussed in [[#Security options|Security options]].&lt;br /&gt;
Subsystem options are also discussed in [[System requirements for Application Subsystems]]. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The following table lists the operating options and what they determine.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;tr class=&amp;quot;head&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Operating option &amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Determines whether...&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Automatic start &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Subsystem automatically starts for the first user entering the subsystem.   &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Locking files and groups for subsystem use &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Users from outside the subsystem can open and update subsystem files while the subsystem is active.   &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Automatic login &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Users are automatically logged into &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; upon entering a subsystem.   &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Automatic logout &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Users are automatically logged out of &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; upon exiting a subsystem.   &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Automatic COMMIT &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Any outstanding updates are committed automatically whenever a subsystem procedure ends and transfers control using the communications global variable.     &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Message displays &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Disconnect, informational, and error messages are displayed for subsystem users.   &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;File usage &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Subsystem can run when one or more files used by the subsystem are unavailable for use. &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Automatic start===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If the automatic start option is selected, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; invokes subsystem initialization when the first user attempts to enter the subsystem. The subsystem can be used without a privileged user first issuing the START SUBSYSTEM command.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If the automatic start option is not selected, subsystem initialization occurs only when the START SUBSYSTEM command is issued. The subsystem is then available for use.       &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Locking files and groups for subsystem use===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If the locking files and groups option is selected, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; prevents users that are not running in the subsystem from opening any of the subsystem files or groups while the subsystem is active.      &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If the locking files and groups option is not selected, users from outside the subsystem can retrieve, modify, or delete records in a subsystem file while the subsystem is active.   &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Automatic login===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If the automatic login option is selected, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; logs on the user when the user enters a subsystem. The user is logged in using the subsystem name as the &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; user ID. If the user already has logged into &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; before entering the subsystem, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; first closes all the user&#039;s files and logs out the user.    &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The LOGOUT operations that occur as a result of Automatic Login (both at subsystem Login and Disconnect) ignore the SYSOPT=8 (DISCONNECT on LOGOUT) option.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If the login option is not selected, the user&#039;s &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; user ID is used during subsystem processing.   &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Automatic logout===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If the automatic logout option is selected, the user is logged out of &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; upon exiting the subsystem. This option is particularly useful when combined with the automatic disconnect feature of &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt;.    &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The START SUBSYSTEM command ignores the SYSOPT=8 option for the Automatic Logout subsystem.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If the automatic logout option is not selected, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; logs the user out of the subsystem in one of three ways:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;If the user was previously logged into &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt;, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; restores the user&#039;s original user ID and returns the user to the &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; command environment.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;If the user was not previously logged into &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt;, the user is logged out of &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt;.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;The SYSOPT=8 option causes the user to be disconnected from &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt;.  &lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Automatic COMMIT===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If the automatic COMMIT option is selected, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; automatically issues a COMMIT statement for any outstanding updates whenever a subsystem procedure terminates and transfers control using the communication global variable. If the COMMIT option is not selected, the application must issue the COMMIT statement to commit any pending updates.                &amp;lt;/p&amp;gt;&lt;br /&gt;
===Commit exits=== &lt;br /&gt;
&amp;lt;p class=&amp;quot;note&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Note:&amp;lt;/b&amp;gt; This feature is available as of Model 204 release 7.8. It is licensed and purchased separately from Model 204.&amp;lt;/p&amp;gt;&lt;br /&gt;
A commit exit enables you to set up SOUL code to run at commit time, as in: &amp;quot;on commit run &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;xxx&amp;lt;/var&amp;gt;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
When the user executes a commit (or an implied commit), the APSY specified by &amp;lt;var&amp;gt;COMMITX&amp;lt;/var&amp;gt; is driven on a transactional daemon.&lt;br /&gt;
&lt;br /&gt;
The APSY follows standard APSY rules. The commit exit is only driven once; that is, subsequent commits do not call the APSY.  The commit exit is only driven for TBO transactions.&lt;br /&gt;
&lt;br /&gt;
A commit/backout coded inside the commit exit commits/backs out the active transaction. Any new transaction within the exit causes a new update unit to begin.&lt;br /&gt;
&lt;br /&gt;
====COMMITX parameter====&lt;br /&gt;
The commit exit runs within the APSY defined by the &amp;lt;var&amp;gt;COMMITX&amp;lt;/var&amp;gt; parameter and uses normal APSY processing.&lt;br /&gt;
&lt;br /&gt;
The new parameter &amp;lt;var&amp;gt;COMMITX&amp;lt;/var&amp;gt; is settable from User 0&#039;s parameter line or by the system manager. It can be reset at any time by the system manager.&lt;br /&gt;
&lt;br /&gt;
Setting/Resetting the parameter sends a DYRWT message to the issuer and requires a Yes or No response (unless set/reset by user0).&lt;br /&gt;
&lt;br /&gt;
If &amp;lt;var&amp;gt;COMMITX&amp;lt;/var&amp;gt; is specified, all APSY subsystems participate by default but any can be exempted.&lt;br /&gt;
&lt;br /&gt;
====Activating the commit exit APSY====&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;To activate the commit exit APSY, issue:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;Reset COMMITX &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;apsyname&amp;lt;/var&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
where &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;apsyname&amp;lt;/var&amp;gt; is the APSY where you are running the commit exit.&lt;br /&gt;
&amp;lt;p&amp;gt;Enter &amp;lt;code&amp;gt;Yes&amp;lt;/code&amp;gt; at the confirmation prompt.&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;To exempt any APSY subsystem:&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Pull up the SUBSYSMGMT &amp;lt;var&amp;gt;Operational Parameters&amp;lt;/var&amp;gt; screen for that subsystem.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;At the &#039;Subsystem supports commit exit&#039; item, enter &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt;.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt; &lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;To deactivate the commit exit APSY, issue: &lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;Reset COMMITX&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Enter &amp;lt;code&amp;gt;Yes&amp;lt;/code&amp;gt; at the confirmation prompt.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Examples====&lt;br /&gt;
&lt;br /&gt;
The following are examples of login exits which print all changed records.&lt;br /&gt;
=====Example 1=====&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;b                                           &lt;br /&gt;
%d object xmldoc auto new                   &lt;br /&gt;
%rec object xmldoc auto new                 &lt;br /&gt;
%d:loadchangedrecords                       &lt;br /&gt;
%f string len 8                             &lt;br /&gt;
%r float                                     &lt;br /&gt;
%c float initial(1)                         &lt;br /&gt;
repeat %d:selectcount(&#039;//Record&#039;) times     &lt;br /&gt;
 %f = %d:value(&#039;//Record[&#039; %c &#039;]/@file&#039;)    &lt;br /&gt;
 %r = %d:value(&#039;//Record[&#039; %c &#039;]/@number&#039;)  &lt;br /&gt;
 %c = %c + 1                                &lt;br /&gt;
 %rec:loadfromrecord(FILE=%f,RECORDNUMBER=%r)&lt;br /&gt;
%rec:print                                 &lt;br /&gt;
 %rec = new                                 &lt;br /&gt;
end repeat                                  &lt;br /&gt;
if $SETG(&#039;NEXT&#039;,&#039;EXIT&#039;) then                &lt;br /&gt;
  audit &#039;gtbl full&#039;                          &lt;br /&gt;
end if                                      &lt;br /&gt;
end &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Example 2=====&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;b                                           &lt;br /&gt;
%d object xmldoc auto new                   &lt;br /&gt;
%d:loadchangedrecords(fields=true)&lt;br /&gt;
%d:print                       &lt;br /&gt;
if $SETG(&#039;NEXT&#039;,&#039;EXIT&#039;) then                &lt;br /&gt;
  audit &#039;gtbl full&#039;                          &lt;br /&gt;
end if                                      &lt;br /&gt;
end &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Example 3=====&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;b                                           &lt;br /&gt;
%d object xmldoc auto new&lt;br /&gt;
%recs object xmldoc auto new                  &lt;br /&gt;
%n object xmlnode                    &lt;br /&gt;
%d:loadchangedrecords                       &lt;br /&gt;
%f string len 8                             &lt;br /&gt;
%r float                                     &lt;br /&gt;
%c float initial(1) &lt;br /&gt;
%n = %recs:AddElement(&#039;ChangedRecords&#039;)                          &lt;br /&gt;
repeat %d:selectcount(&#039;//Record&#039;) times     &lt;br /&gt;
 %f = %d:value(&#039;//Record[&#039; %c &#039;]/@file&#039;)    &lt;br /&gt;
 %r = %d:value(&#039;//Record[&#039; %c &#039;]/@number&#039;)  &lt;br /&gt;
 %c = %c + 1                                &lt;br /&gt;
 %n:loadfromrecord(FILE=%f,RECORDNUMBER=%r,HEADER=TRUE)&lt;br /&gt;
end repeat&lt;br /&gt;
%recs:print                                       &lt;br /&gt;
if $SETG(&#039;NEXT&#039;,&#039;EXIT&#039;) then                &lt;br /&gt;
  audit &#039;gtbl full&#039;                          &lt;br /&gt;
end if                                      &lt;br /&gt;
end  &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
There are new parameters for several of the methods (as demonstrated above):&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;LoadChangedRecords:   &lt;br /&gt;
    Fields=boolean   (default=false)&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If true, each individual changed record is loaded into the XMLDOC similar to LoadFromRecord.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;LoadFromRecord:    &lt;br /&gt;
    File=name&lt;br /&gt;
    RecordNumber=number &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
LoadFrom Record must normally be issued within a FOR record context. However, if both of these name required parameters are specified, the LoadFromRecord statement need not be within a FOR record context.&lt;br /&gt;
&lt;br /&gt;
If either of these name required parameters is specified from within a FOR record context, an error message will be issued: &amp;lt;code&amp;gt;ERROR 1081:  %C inside record loop: Recordnumber/File parameters not allowed&amp;lt;/code&amp;gt;                                                               &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;LoadFromRecord:            &lt;br /&gt;
    Header=Boolean  (default=false)&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If true, the header line of the method will be included for each item. This may be useful when LoadFromRecord is issued in order to load an XMLNODE.&lt;br /&gt;
&lt;br /&gt;
The header will separate each record and designate the file and record number.&lt;br /&gt;
&lt;br /&gt;
====Error handling====&lt;br /&gt;
&lt;br /&gt;
=====Current behavior without commit exits=====&lt;br /&gt;
&lt;br /&gt;
Without commit exits, an APSY does not commit automatically unless AUTOCOMMIT=Y is specified in the APSY definition.&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;If a transactional daemon is created:&lt;br /&gt;
Commit/backout must be explicitly specified within a daemon in order to effect the master’s transaction.&lt;br /&gt;
Implicit commit on the daemon is never done. Normal end of the daemon does not affect the master.&lt;br /&gt;
If the daemon procedure is cancelled, the master transaction is backed out.&lt;br /&gt;
If the daemon procedure is abended, the master transaction is backed out and the APSY error proc is run on the master.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;If a non-transactional daemon is created: &lt;br /&gt;
The master transaction is unaffected by the daemon.&lt;br /&gt;
Both implicit and explicit commit affect the daemon transaction only.&lt;br /&gt;
If the daemon procedure is cancelled, only the daemon transaction is backed out.&lt;br /&gt;
If the daemon procedure is abended, both the daemon and master transaction are backed out and the APSY error proc is run on the master.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Each time that an APSY loads a new procedure, the various KSERRC flags are always cleared. So when an error procedure is called, the error flags are always zero.&lt;br /&gt;
&lt;br /&gt;
=====With commit exits=====&lt;br /&gt;
&lt;br /&gt;
With the commit exits feature, the commit exit essentially runs as a transactional daemon with the original user being a pseudo master. Lower level daemons follow normal daemon behavior.&lt;br /&gt;
&amp;lt;p&amp;gt;If a commit exit is running, and the APSY fails, the APSY error exit is scheduled to run. If the APSY error exit exists, the original transaction unit will be unaffected, unless the exit specifically designates a commit/backout. If there is no APSY error exit, the original transaction unit is aborted with &amp;lt;code&amp;gt;ERROR 2971: Action disabled by commit exit&amp;lt;/code&amp;gt; and the user is restarted.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Message displays===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
&amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; provides these message display options for subsystem users: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Disconnect message display&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; informational message display&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; error message display  &lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When a message display option is selected, messages of that type are displayed on the user&#039;s terminal. If a message display option is not selected, all messages of that type are not displayed on the user&#039;s terminal. Note that if the display of any &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; type message is suppressed, messages for the corresponding type are not displayed on the user&#039;s terminal, but are written to the audit trail file (CCAAUDIT).&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Typically, subsystem applications are written so that all messages displayed on the user&#039;s terminal are produced by the subsystem and &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; messages are suppressed.   &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===File usage===&lt;br /&gt;
====Mandatory vs. optional members====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Files and permanent groups contained within the subsystem definition can be designated as mandatory (the default) or optional members of the subsystem:   &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Mandatory members&lt;br /&gt;
&amp;lt;p&amp;gt; &lt;br /&gt;
Mandatory files or groups are automatically opened by &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; when a user logs into a subsystem and automatically closed when the user leaves the subsystem. Subsystem requests can assume that all mandatory files are open and that they are physically consistent. The user&#039;s file privileges are those defined in the subsystem definition for the current user&#039;s SCLASS. The opening of a mandatory member cannot be prevented by the subsystem administrator with the &amp;lt;var&amp;gt;STOP FILE&amp;lt;/var&amp;gt; command when the subsystem is active. A mandatory member cannot be accessed by another copy of &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; until the entire subsystem is stopped.&amp;lt;/p&amp;gt; &lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If a subsystem procedure issues an &amp;lt;var&amp;gt;OPEN&amp;lt;/var&amp;gt; or &amp;lt;var&amp;gt;CLOSE&amp;lt;/var&amp;gt; command for a mandatory member, the command is ignored by &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; and the user&#039;s current privileges are not changed.&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Optional members&lt;br /&gt;
&amp;lt;p&amp;gt; &lt;br /&gt;
Optional files or groups provide the ability for a file or group to be stopped by a subsystem administrator (using the &amp;lt;var&amp;gt;STOP FILE&amp;lt;/var&amp;gt; command) without stopping the entire subsystem. If a member is defined as optional, it is not automatically opened during the subsystem login. It must be opened by the application by using an OPEN/OPENC statement or command. The file privileges assigned are those specified in the subsystem definition for the current user&#039;s SCLASS. The member is closed (for that user only) when the user leaves the subsystem if a &amp;lt;var&amp;gt;CLOSE&amp;lt;/var&amp;gt; command has not been issued.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When an optional member is not in use, it can be processed by another copy of &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt;. &amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Requests that reference mandatory or optional members can be precompiled. Files not contained in the subsystem definition can be opened and referenced within a subsystem application, but the requests that reference those files cannot be precompiled. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Automatic vs. manual members====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Subsystem files and permanent group members can also be designated automatic or manual:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;An automatic member is a subsystem group or file that is opened automatically when the subsystem is started or when a user enters the subsystem. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;A manual member is a group or file that must be opened explicitly by the OPEN or OPENC command.  &lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Mandatory files cannot be designated manual. Optional files can be designated either automatic or manual.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Permanent vs. temporary groups in subsystem definitions====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The GROUP parameter of the subsystem definition applies &amp;lt;strong&amp;gt;only&amp;lt;/strong&amp;gt; to permanent groups. Temporary group names cannot be used. To include temporary group members in a subsystem definition, and thus to enable their use in precompiled code, the members of the temporary group should be individually specified in the subsystem definition.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Summary of file definition options====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
[[#Summary of file definition options|Subsystem file definition options]] summarizes the subsystem file definition options. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;caption&amp;gt;Subsystem file definition options&amp;lt;/caption&amp;gt;&lt;br /&gt;
&amp;lt;tr class=&amp;quot;head&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Subsystem definition &amp;lt;br&amp;gt;option&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Automatic&lt;br /&gt;
open &amp;lt;br&amp;gt;and close?&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;&lt;br /&gt;
Pre-compiled &amp;lt;br&amp;gt;code?&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Start/stop file &amp;lt;br&amp;gt;command allowed?&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;File privileges &amp;lt;br&amp;gt;assigned&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Mandatory&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Must be automatic&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Yes&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;No&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;SCLASS&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Optional&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Can be automatic or manual&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Yes&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Yes&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;SCLASS&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;None&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Cannot be&lt;br /&gt;
automatic&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;No&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Yes&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;File Password&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Subsystem processing flow==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
To design a subsystem, you must be familiar with the flow of control that occurs during subsystem processing. Subsystem processing typically involves the following phases:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;tr class=&amp;quot;head&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Type of processing &amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;During this processing...&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Initialization &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Subsystem is started and an optional initialization procedure is included. &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Login &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;User is logged into the subsystem; the user&#039;s privileges are determined by the subsystem definition. The appropriate required files and groups are opened for access.   &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Driver &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Procedures that make up the main body of the application are included.   &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Disconnect &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;All files and groups are closed for the user, who is then logged out of the subsystem.   &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Error &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;An optional error procedure is included. The type of error that occurred is available to the error procedure. For many types of errors, the error procedure can resume normal driver processing.   &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Initialization processing===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Initialization processing is invoked when the subsystem is started. A subsystem is started by the START SUBSYSTEM command, or, if the start option is indicated in the subsystem definition, when the first user enters the subsystem. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
During subsystem initialization, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; finds the subsystem definition and opens only required subsystem files and groups. If a required file or group cannot be opened, the subsystem initialization procedure terminates and the user is returned to command level.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
One of the subsystem components opened during initialization is the procedure file (or group, if a multiple-procedure group has been specified). The procedure file or group must contain all of the subsystem procedures that are included by the subsystem through the communication global variable. &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; scans the subsystem procedure file or group for all procedures whose names begin with either of the subsystem procedure prefixes.   &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The subsystem initialization procedure is included at this time. This is the only time during subsystem processing that the initialization procedure is executed.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If no error occurs, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; adds the subsystem name to the list of active subsystems. At this point, the subsystem is initialized and ready for use.   &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Login processing===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Login processing is invoked when a user enters a subsystem. If the automatic login option is indicated in the subsystem definition, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; logs on the user using the subsystem name as the user ID. If the automatic login option is not indicated, the user&#039;s &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; user ID remains in use. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
&amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; next finds the user&#039;s subsystem user class definition in CCASYS and opens only the required subsystem files and groups with the privileges that are found for that user class. The MSGCTL parameter automatically is set for the user according to the subsystem definition.    &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
&amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; sets the communication global variable to the name of subsystem login procedure and proceeds into driver processing.    &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Driver processing===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
&amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; determines which procedure to include next by examining the value of the communication global variable. The procedure name must be one of the names located by the scan of the procedure file during subsystem initialization.    &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If either the global variable or the procedure name cannot be found, the subsystem&#039;s error procedure is included. If an error procedure is not specified in the subsystem definition, the user is disconnected from the subsystem.   &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If the procedure name is found, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; determines which prefix begins the procedure name. Processing then occurs as follows:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;If the procedure name begins with the non-precompiled prefix, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; includes the procedure for compilation and evaluation.   &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;If the procedure name begins with the precompiled prefix, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; verifies whether the procedure was compiled previously with the set of privileges defined by the user&#039;s subsystem user class. &lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Once the compilation status of the procedure is determined, processing is as follows:       &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt; &lt;br /&gt;
&amp;lt;li&amp;gt;If the procedure was not previously compiled successfully for the set of privileges defined by the user&#039;s subsystem user class, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; includes the procedure for compilation and evaluation. If compilation is successful and no previous compilation was saved for the procedure, the contents of the compiler tables are saved in the system file CCATEMP.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;If the procedure was previously compiled successfully for the user&#039;s privilege set, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; loads the contents of the compiler tables from CCATEMP and evaluates the request.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
&amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; repeats driver processing until the value of the communication global variable is set to the exit value specified in the subsystem definition. When the communication global variable is set to the exit value, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; proceeds into disconnect processing.   &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Disconnect processing===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Disconnect processing is invoked when the subsystem application sets the communication variable to the exit value, when an error occurs with no subsystem error procedure, or when a subsystem user is restarted by &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt;. During disconnect processing, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; closes all required subsystem files and groups for the user, as well as any optional files and groups that have not been closed by the application.    &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Depending upon whether the automatic logout option is indicated, the user is then either logged out of &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; or returned to the &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; command environment.      &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Error processing===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Error processing is invoked whenever a &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; error occurs that cannot be handled by the procedure being executed at the time. When an error is detected, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; sets the value of the error global variable.       &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If the subsystem has a defined error procedure, the error procedure is included at this time. If the subsystem does not have a defined error procedure, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; proceeds into disconnect processing. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If the error trapped by the subsystem is a soft restart, a hard restart, or a terminal disconnect condition, the error procedure is invoked. The communication global variable is ignored when the error procedure completes and &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; proceeds with subsystem disconnect processing.      &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
==Parallel Query Option/204 (PQO) considerations==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
This section introduces several terms and concepts which are unique to subsystems that reference remote files and scattered groups. These concepts, and related design considerations, are discussed in greater detail in [[PQO: Scattered APSY subsystems]]. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Remote file access===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Parallel Query Option/204 provides access to remote files under the Subsystem Management facility by allowing the system manager to define client and service subsystems:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;A client subsystem is the subsystem a user is running in when requesting access to remote data. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;A service subsystem is the subsystem on a server node that a client user&#039;s service thread is logged into.  &lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
A service subsystem definition is stored in the CCASYS file on each node that the client subsystem accesses. The name of a subsystem must be the same at each node. The location of the client node is included in the subsystem name to uniquely identify it to the server node.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Node availability===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
A server node can be available or unavailable to a client subsystem.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;A node is available if the service subsystem has been successfully started. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;If the service subsystem has not been started, it does not have a subsystem definition structure accessible to the client and is therefore unavailable. &lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
A node can only be marked unavailable during start processing if there are mandatory members on a server node and the service subsystem cannot be started. If this happens, start processing also fails on the client node.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Client subsystems attempting to access service subsystems that are not started receive an error message from the server node. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
A previously available node can become unavailable when: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Resumption of communication fails after recovering from a system failure.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;A user attempts to log into the service subsystem by logging into the client subsystem, the service subsystem definition is not found, and at least one mandatory member resides on that node.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;A user attempts to open a file on a node where the user was not previously logged in. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The user is automatically logged into all associated service subsystems when entering a subsystem that contains remote files. If the service subsystem is unavailable on a node, the user cannot be logged in. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===File and group availability===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The members of a subsystem are files and permanent groups. With Parallel Query Option/204, members can be either automatic or manual: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;An automatic member is a subsystem group or file that is opened automatically when the subsystem is started or when a user enters the subsystem. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;A manual member is a group or file that must be opened explicitly by the OPEN or OPENC command. &lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Members can also be either mandatory or optional:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;A mandatory member must be open in order to access a subsystem. Mandatory members cannot be manual.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;An optional member is not required for subsystem access (start and login processing can succeed without it). &lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
At any given time a member can be open or closed to a subsystem or to a user within a subsystem. The following sections explain the conditions under which the different kinds of members are accessible to APSY subsystems and their users.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Member availability to subsystems====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Automatic members of subsystems are always opened by the START SUBSYSTEM command or by SUBSYSTEM LOGIN. At the end of START processing, each automatic member is open unless either the START or OPEN failed. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Manual members of subsystems are in the closed state at the completion of START SUBSYSTEM processing and must be explicitly opened by the user. Manual members become open to the subsystem if an OPEN operation succeeds. If OPEN fails due to node unavailability or for user-specific reasons (for example, if the user&#039;s line goes down) the member remains closed to the subsystem.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If a node becomes unavailable to a subsystem, all automatic subsystem members and all open manual subsystem members residing on the unavailable node are marked disabled.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If a STOP FILE/GROUP command is issued for a manual member on the client subsystem&#039;s node, the member is closed to the client subsystem when the last user closes it. If the member is located on the service subsystem node, the file is closed to the service subsystem when the STOP is complete or the last user closes the file.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Member availability to subsystem users====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When a user enters a subsystem, automatic subsystem members are opened.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If a user LOGIN or OPEN operation fails for an optional member, the member is left closed for the user but remains available to the subsystem. If a mandatory member cannot be opened, the user is denied access to the subsystem.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If a user LOGIN or OPEN operation fails for an already open member, the member is left disabled for the user but remains open to the subsystem. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If an automatic mandatory member is closed to the subsystem, new users are not allowed to enter the subsystem.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Manual members of subsystems are closed for a user within a subsystem until the user issues an OPEN command or statement. In this case it does not matter whether the member is open or closed to the subsystem.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If compilation and/or loading of a request fails due to a communications failure, previously opened members on the failing node become disabled to the user. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
A user can close optional members at any time by issuing the CLOSE command.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Enabling disabled subsystem files====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
In the event that a subsystem file or group is marked disabled, you can enable it (after correcting the problem) without having to bring the subsystem down. To do this, use the ENABLE SUBSYSTEM command:&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Syntax====&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;ENABLE SUBSYSTEM &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;subsysname&amp;lt;/span&amp;gt; &lt;br /&gt;
 [FILE &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;name&amp;lt;/span&amp;gt; AT &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;location&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;squareb&amp;quot;&amp;gt;|&amp;lt;/span&amp;gt; GROUP &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;name&amp;lt;/span&amp;gt;]&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
Where:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;subsysname&amp;lt;/var&amp;gt; is the name of the client subsystem&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;location&amp;lt;/var&amp;gt; is the name of the remote node where the file is stored. Note that the location must be explicitly specified; you cannot reference local files with the ENABLE SUBSYSTEM command. &lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Intentionally disabling a subsystem file====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can make a subsystem file or group (or an entire subsystem, if a file is mandatory) temporarily inaccessible without having to bring the subsystem down, using the DISABLE SUBSYSTEM command:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;DISABLE SUBSYSTEM &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;subsysname&amp;lt;/span&amp;gt; &lt;br /&gt;
 [FILE &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;name&amp;lt;/span&amp;gt; AT &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;location&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;squareb&amp;quot;&amp;gt;|&amp;lt;/span&amp;gt; GROUP &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;name&amp;lt;/span&amp;gt;]&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When a file or group is intentionally disabled with the DISABLE SUBSYSTEM command, subsystem behavior is exactly the same as when a communications failure causes the disabling. This behavior is described in [[#File and group availability|File and group availability]].&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Trust===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
As an alternative to the privilege settings normally available through the Subsystem Management facility, the system manager at a service node can control client subsystem access by creating a trust definition for the client subsystem. If a client subsystem is fully or partially trusted, the trust definition is sufficient for maintaining the relationship with the client; the system manager at the service node does not have to create and maintain a separate set of file and SCLASS definitions for the client subsystem.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
For example, suppose a subsystem located on a node named DETROIT (the client node) includes in its definition files located on a node named CLEVELAND (the service node). Further, suppose the subsystem is fully or partially trusted by CLEVELAND. In this case, the file and SCLASS definitions are maintained only on the client node (DETROIT), and the service node (CLEVELAND) needs only to maintain the trust definition.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The four levels of trust available with Parallel Query Option/204 are:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;Full trust&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Only the subsystem name and location appear on the service node&#039;s definition, which you create on the Subsystem Trust screen.&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;Partial trust&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Along with the subsystem name and location, you can specify maximum file privileges. In this case, the client subsystem is trusted, but the maximum file privileges and field level security levels specified on the Subsystem Trust screen cannot be exceeded.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;If a user requests file privileges that would exceed the maximum, the service node does not open the file to that user.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;If a user requests a field level security status that would exceed the maximum, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; automatically resets the request to the allowed level (that is, the maximum) and opens the file to that user.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;Restricted trust&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
For a subsystem that has a restricted trust definition, you make no entries on the Subsystem Trust screen. A restricted trust definition is based solely on entries you make on these five screens:&amp;lt;/p&amp;gt;  &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Subsystem Activity&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Subsystem File Use&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Operational Parameters&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Subsystem Classes&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Subsystem Class Users&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The accessibility of service node files to a client subsystem is determined by the SCLASS, user, and file privileges that you specify on these screens. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;No trust&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
No subsystem service definition exists for the subsystem. The client subsystem cannot access any files on the service node as subsystem files. The files on the service node can, however, be accessed from within a client subsystem as individual, non-subsystem files if the following criteria are met:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Parallel Query Option/204 is installed at both sites.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Horizon is installed at both sites, and there are link, processgroup, and process definitions connecting the client node to the service node.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;For any given file, the value of the &amp;lt;var&amp;gt;[[OPENCTL parameter|OPENCTL]]&amp;lt;/var&amp;gt; parameter allows remote access (X&#039;02&#039;, X&#039;04&#039;, or X&#039;08&#039;). &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
See the&lt;br /&gt;
&amp;lt;var class=&amp;quot;book&amp;quot;&amp;gt;Rocket Parallel Query Option/204 User&#039;s Guide&amp;lt;/var&amp;gt; for detailed information on creating and managing trust definitions.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Subsystem design considerations==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
This section presents coding considerations for subsystem procedures. Some of the guidelines listed below also appear in earlier sections. They are consolidated here for the convenience of the application developer.    &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Coding considerations===&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Procedures should be small and modular.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Procedures to which control is passed via the communication global variable must be stored in a designated procedure file. The procedure file is the default file for a subsystem application unless the default file is explicitly changed by a DEFAULT command or overridden by an IN clause.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Each procedure must set the communication global variable to indicate the next procedure to be included. If this variable is not set, an error or loop occurs.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;The communication global variable must be set to the exit value in order to exit the subsystem. Server table sizes and other parameters should be reset to the values existing prior to entering the subsystem so that the user is returned to his/her normal operating environment. Parameter values are restored automatically when the automatic login option is used.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Included procedures normally are included by using the INCLUDE command. Included procedures cannot be precompiled.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Non-subsystem files can be opened and referenced only by non-precompiled procedures.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Precompiled procedures cannot reference PERM groups that are not members of the same subsystem.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Compiler table sizes must be the same each time a precompiled procedure is invoked. The UTABLE command should be used carefully.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;The contents of the command line global variable are not deleted by UTABLE commands which normally delete the contents of GTBL, as long as the UTABLE command is issued from within a subsystem.     &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Distinct group numbers are assigned to optional groups at START SUBSYSTEM time. Those numbers cannot be used by non-subsystem members opened within the subsystem. Thus the NGROUP limit used for earlier releases might be exceeded during either START or OPEN processing inside the subsystem.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;To prevent you from having the wrong file or group privileges in a subsystem, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; closes optional files and groups before entering a subsystem. In earlier releases, optional files and groups were only closed when you left the subsystem. &lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Users should be aware of the following conditions when coding applications to run under the Subsystem Management facility:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Dummy strings (??, ?$, ?&amp;amp;amp;) in precompiled procedures are resolved only during compilation for the first user.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;If a subsystem file is referenced by a precompiled procedure, no user can RESTORE or INITIALIZE the file, or RENAME, DELETE, or REDEFINE a field while the subsystem is active.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;A subsystem procedure cannot issue the CREATE command for a subsystem file.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;LXTBL and LFTBL cannot be reset from within a subsystem procedure.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;All DO YOU REALLY WANT TO messages are suppressed and the default action is assumed. &lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The default action for each type of message is listed in [[M204.1076]]. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If you do not wish the default action to be executed, you need to add a message handler routine to the procedure containing the statement that invokes the message. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Keeping track of the number of files referenced====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
To keep track of the files referenced in a subsystem procedure, which cannot exceed 6,043 files &amp;amp;mdash; a CCATEMP page, use the following formula:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;NFILE + NRFILE + 1 (for CCAGRP) + 1 (for CCASYS)&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
==Record locking considerations==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Depending upon the subsystem definition, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; might place a share lock on one or more subsystem procedure names or group names. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If the subsystem is defined with permanent groups, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; locks the group names to ensure that the group definitions do not change while the subsystem is running. A share lock is maintained for each group while the subsystem is active.       &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===If subsystem files are defined as unlocked===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If the subsystem definition specifies that subsystem files are unlocked, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; locks in share mode each of the subsystem procedures to ensure that the procedures do not change or move. This prevents any user from:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Issuing the DELETE PROCEDURE command&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Issuing the RENAME PROCEDURE command&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Updating the procedure while the subsystem is active.   &lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
==Subsystem procedure control functions==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The User Language functions, [[$Sclass#$Sclass|$Sclass]] and [[$Subsys#$Subsys|$Subsys]] can be useful in determining subsystem program control.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===$Sclass function===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The $Sclass function returns the Sclass name of the current user. $Sclass is useful when the transfer of control is dependent upon a user&#039;s privileges. For example:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt; BRANCH:  JUMP TO (ADD.REC, VIEW.REC, UPD.REC) -&lt;br /&gt;
              %MAIN.MENU:SELECTION&lt;br /&gt;
                   .&lt;br /&gt;
                   .&lt;br /&gt;
                   .&lt;br /&gt;
 UPD.REC: IF $sclass = &#039;READ&#039; THEN&lt;br /&gt;
              IF $SETG(&#039;NEXT&#039;,&#039;PRE-RPT.PGM&#039;) THEN&lt;br /&gt;
                  PRINT &#039;GLOBAL TABLE FULL&#039;&lt;br /&gt;
              END IF&lt;br /&gt;
          ELSEIF $sclass = &#039;UPDATE&#039; THEN&lt;br /&gt;
              IF $setg(&#039;NEXT&#039;,&#039;PRE-MAINT.PGM&#039;) THEN&lt;br /&gt;
                  PRINT &#039;GLOBAL TABLE FULL&#039;&lt;br /&gt;
              END IF&lt;br /&gt;
                   .&lt;br /&gt;
                   .&lt;br /&gt;
                   .&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===$Subsys function===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The $Subsys function returns a numeric value indicating the status of a subsystem, or the name of the current subsystem (if no argument is specified). $Subsys often is used to determine whether a subsystem is active before a transfer is attempted.   &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Subsystem development tools==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
This section describes three &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; features that are useful in developing, testing and debugging subsystem procedures:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The &amp;lt;var&amp;gt;[[DEBUG command|DEBUG]]&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;[[TEST command|TEST]]&amp;lt;/var&amp;gt; commands, which assist subsystem debugging by allowing you to display the global communications variable and specify the next procedure to be INCLUDEd.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Multiple procedure file groups, which allow users to change procedures without stopping the subsystem or interfering with other users.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;The Cross-Reference facility, which produces reports on the variable names, global dummy strings, and other language elements used in a specified set of User Language procedures.    &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Debugging and testing facilities===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; DEBUG and TEST SUBSYSTEM commands assist you in debugging subsystem code while it is being developed. Both commands display the value of the communication global variable, prompt you for changes, and display since-last statistics.     &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
DEBUG differs from TEST SUBSYSTEM in the following ways:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;DEBUG can be executed by more than one user in the same subsystem at the same time; TEST SUBSYSTEM can only be executed by a single user.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;To execute TEST SUBSYSTEM, the user must stop the subsystem, which will be restarted in single user mode as a result of issuing the TEST command. To execute DEBUG, the user does not have to stop the subsystem. The DEBUG command can be issued for any subsystem that has been started, or for any subsystem that has the AUTOSTART feature.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Since-last statistics are provided automatically with DEBUG; they are optional with TEST.  &lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
In general, the DEBUG command is more convenient for subsystem developers in a multiuser environment.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
To execute the DEBUG command, the user must be named to an SCLASS which has been granted either the TEST or DEBUG privilege. The DEBUG privilege does not entitle the user to execute the TEST command.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Syntax====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The format of the DEBUG command is:     &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;DEBUG SUBSYSTEM &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;subsystemname&amp;lt;/span&amp;gt; [&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;parameters&amp;lt;/span&amp;gt;]&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The extended format of the TEST command is:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;TEST [DEBUG] [STATS] [SUBSYSTEM] &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;subsystemname&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;parameters&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
Where:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;DEBUG specifies that the communication global variable is displayed on the user&#039;s terminal before the next procedure is included. The user then has the option of specifying a different procedure to be included next. If the user presses &amp;lt;var&amp;gt;ENTER&amp;lt;/var&amp;gt; without specifying a different procedure, the procedure whose name is currently displayed is included next.   &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;STATS specifies that since-last statistics are displayed on the user&#039;s terminal after each procedure is evaluated. Since-last statistics are described in [[Using system statistics#User since-last statistics|User since-last statistics]]. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;SUBSYSTEM specifies that the word following the keyword is the name of a subsystem and that parameters follow the subsystem name. This keyword can be used to eliminate confusion when DEBUG or STATS is the name of a subsystem or subsystem parameter.    &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;i&amp;gt;parameters&amp;lt;/i&amp;gt; specifies the parameters to be stored in the command line global variable. The parameter information can be as many as 255 characters in length. &lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Multiple procedure files===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If &amp;lt;code&amp;gt;PROCFILE=*&amp;lt;/code&amp;gt; is specified when a group is created, then several files in a group can contain procedures. When the &amp;lt;var&amp;gt;INCLUDE&amp;lt;/var&amp;gt; command is executed in the context of a multiple procedure file group, files are searched, left to right, in the order they were defined in the original &amp;lt;var&amp;gt;CREATE GROUP&amp;lt;/var&amp;gt; command.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Multiple procedure file groups make it possible to change subsystem procedures without having to stop the subsystem. This is accomplished by setting &amp;lt;b&amp;gt;GROUP&amp;lt;/b&amp;gt; to &amp;lt;code&amp;gt;Y&amp;lt;/code&amp;gt; for the subsystem&#039;s procedure file in the subsystem definition, and by specifying a number value for &amp;lt;b&amp;gt;Procs NUMLK&amp;lt;/b&amp;gt; that is less than the number of files in the group. The application subsystem locks the procedures in the last (or rightmost) NUMLK number of files, as determined by the right-to-left order they were specified in the &amp;lt;var&amp;gt;CREATE GROUP&amp;lt;/var&amp;gt; command that defined the procedure group. For an example, see [[System requirements for Application Subsystems#Subsystem File Use screen|Subsystem File Use screen]].&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The multiple procedure file option also allows different users to make changes to procedures in the same subsystem without interfering with each other. The procedure group specified in the subsystem definition must have a corresponding &amp;lt;var&amp;gt;CREATE PERM GROUP&amp;lt;/var&amp;gt; definition. However, any individual user can create or open a temporary group with the same name as the subsystem&#039;s permanent procedure group. If a user has such a temporary group open and enters a subsystem, the subsystem uses the temporary group instead of the subsystem&#039;s permanent group. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The following restrictions apply to the use of temporary groups to store subsystem procedure files:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The user&#039;s SCLASS must have the &amp;lt;var&amp;gt;TEST&amp;lt;/var&amp;gt; or &amp;lt;var&amp;gt;DEBUG&amp;lt;/var&amp;gt; privilege.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;The last &amp;lt;i&amp;gt;n&amp;lt;/i&amp;gt; files of the &amp;lt;var&amp;gt;CREATE PERM GROUP&amp;lt;/var&amp;gt; command (where &amp;lt;i&amp;gt;n&amp;lt;/i&amp;gt; is set by the &amp;lt;code&amp;gt;NUMLK&amp;lt;/code&amp;gt; parameter) must correspond exactly to the last &amp;lt;i&amp;gt;n&amp;lt;/i&amp;gt; files of the &amp;lt;var&amp;gt;CREATE TEMP GROUP&amp;lt;/var&amp;gt; command. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Cross-Reference facility===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The Cross-Reference facility is a Dictionary facility that can be invoked from both the Dictionary Main Menu and &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; command level. It produces reports for users who develop and maintain &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; User Language procedures.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The output reports show the line numbers where language elements such as labels, functions, images and variable names occur in a specified set of procedures. Elements within subroutines and nested INCLUDEs can also be cross-referenced.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The Cross-Reference Report is produced in batch mode (by a batch job in OS and DOS, by a service machine in CMS). Prior to submitting a cross-reference job, the user can specify:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;A set of procedures in a procedure file or group&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;A set of language elements to be cross referenced&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Substitute values for User Language global dummy strings&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Job-related parameters such as output destination and lines per page &lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The Cross-Reference facility also includes Preview and Browse functions, which inform the user about the procedures selected for processing.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
For a complete description of the Cross-Reference facility, refer to the [[:Category:Dictionary/204#Dictionary/204 topics|Dictionary/204 topics]].&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
[[Category:SOUL]]&lt;/div&gt;</summary>
		<author><name>ELowell</name></author>
	</entry>
	<entry>
		<id>https://m204wiki.rocketsoftware.com/index.php?title=Release_notes_for_Model_204_version_7.8&amp;diff=117755</id>
		<title>Release notes for Model 204 version 7.8</title>
		<link rel="alternate" type="text/html" href="https://m204wiki.rocketsoftware.com/index.php?title=Release_notes_for_Model_204_version_7.8&amp;diff=117755"/>
		<updated>2019-12-31T22:12:31Z</updated>

		<summary type="html">&lt;p&gt;ELowell: /* New in this release */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;&amp;lt;b&amp;gt;******THIS IS A DRAFT DOCUMENT.******&amp;lt;/b&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
These release notes list the enhancements and other changes contained in Model 204 version 7.8, &amp;lt;b&amp;gt;&amp;lt;i&amp;gt;which is still in development&amp;lt;/i&amp;gt;&amp;lt;/b&amp;gt;. Until the commercial release of the software, Rocket reserves the right to add to, remove, or change anything described herein. &lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
These release notes contain installation and features information for the Rocket Model 204 version 7.8 release.&lt;br /&gt;
Before beginning your installation, please read through this information about product installation and changes.&lt;br /&gt;
&lt;br /&gt;
==New in this release==&lt;br /&gt;
The table below cites some highlights of Model&amp;amp;nbsp;204 version 7.8. For a full list of features, refer to the Table of Contents. &lt;br /&gt;
&amp;lt;p&amp;gt;See also the [[#Compatibility Issues|Compatibility]] section for possible issues.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;tr class=&amp;quot;head&amp;quot;&amp;gt;&amp;lt;th&amp;gt;Category&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Feature&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;SOUL&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The new [[#AmIndependent method|AmIndependent]] method returns TRUE for daemons spawned by RunIndependently.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The Object class now supports the [[#Support for copying Object class objects|copy and deepCopy methods]].&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Janus Web&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[[#Web Sockets|Janus Web Sockets]] are now supported.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td nowrap&amp;gt;Networking&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Note:&amp;lt;/b&amp;gt; The two-phase commit and commit exits features are licensed and purchased separately from Model 204.&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Two-phase commit. A Model 204 online can now be configured to use two-phase commit (2PC). The Janus internal socket API is used for the calls to the coordinator. JANUS commands are used for all 2PC configuration. A new JANUS port type has been added, 2PC.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[[Application_Subsystem_development#Commit_exits|Commit exits]] are now supported. The commit exit runs within the APSY, which is defined by the &amp;lt;var&amp;gt;COMMITX&amp;lt;/var&amp;gt; parameter and uses normal APSY processing.  &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;ECF tables&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The new &amp;lt;var&amp;gt;DISPLAY ECF&amp;lt;/var&amp;gt; command and &amp;lt;var&amp;gt;EXTERNAL REMOVE&amp;lt;/var&amp;gt; statement enable more efficient management of [[#Managing ECF tables more efficiently|ECF tables]].&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Performance&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[[#MP/204 offload improvements|MP/204 offload improvements]] -- application code for these SOUL statements is now fully offloadable: &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;File Records In/On&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Remember&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Position&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Sort Values&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Reset Header/Trailer&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Find and Print Count&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Find All Values&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;For Each Value&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Security&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;CA-Top Secret can [[#CA-Top Secret can disallow CCASTAT logins|disallow CCASTAT logins]].&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[[#DEFUSER can specify a jobname not authorized to access M204|DEFUSER]] can specify a jobname not authorized to access M204.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td nowrap&amp;gt;System enhancements&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The &amp;lt;var&amp;gt;MONITOR USERS&amp;lt;/var&amp;gt; command output displays [[#New wait types for daemon/master waits|two new wait types]].&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td nowrap&amp;gt;AUDIT204 enhancements&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The new TIMEHH parameter on the &amp;lt;var&amp;gt;[[#FORMAT command|FORMAT]]&amp;lt;/var&amp;gt; command of the AUDIT204 utility provides greater time stamp precision.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td nowrap&amp;gt;New commands&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;[[#DISPLAY ECF|DISPLAY ECF]]&amp;lt;/var&amp;gt; displays details from ECF tables, or the current status of users accessing ECF modules.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td nowrap&amp;gt;New parameters&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;[[#ENQTIME|ENQTIME]]&amp;lt;/var&amp;gt; specifies the number of milliseconds waited for each record locking retry wait.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;[[#EVALOPT|EVALOPT]]&amp;lt;/var&amp;gt; controls the cancellation of a request on truncation of string data.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;[[#MAXPRE, MAXBOUT, MAXSUBT|MAXPRE, MAXBOUT, and MAXSUBT]]&amp;lt;/var&amp;gt; can be used to cancel a runaway transaction and prevent it from filling the checkpoint data set.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;[[#NLDAPBUF|NLDAPBUF]]&amp;lt;/var&amp;gt; allows the number of LDAP buffers allocated during startup to be set in CCAIN.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;[[#SERV4G|SERV4G]]&amp;lt;/var&amp;gt; allows testing of server tables that span a 4-gigabyte boundary.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;[[#WEBDFLT|WEBDFLT]]&amp;lt;/var&amp;gt; changes the default JANUS WEB ALLOW rule back to ALLOW.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td nowrap&amp;gt;Janus and TN3270 debuggers&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The debuggers can now view or watch the values of [[#Access to exposed variables|variables exposed to local routines/methods]].&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;When execution pauses, the debuggers now [[#Subroutine or method display|display the subroutine or method]] being executed.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td nowrap&amp;gt;User/system statistics&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;[[#MPR, MBO, MCP, and RCV|MPR, MBO, MCP, and RCV]]&amp;lt;/var&amp;gt; provide high water mark transaction information in conjunction with the &amp;lt;var&amp;gt;MAXPRE&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;MAXBOUT&amp;lt;/var&amp;gt;, and &amp;lt;var&amp;gt;MAXSUBT&amp;lt;/var&amp;gt; parameters. &lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[[#DKWTS and DKWTMICS|New system statistics]] DKWTS (DisK WaiTs) and DKWTMICS (DisK WaiT MICroSeconds) collect data to provide rough disk I/O service time numbers.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Operating system and hardware requirements==&lt;br /&gt;
&lt;br /&gt;
===Operating system requirements===&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;IBM z/OS versions supported:&amp;lt;/b&amp;gt; &lt;br /&gt;
  &amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;All IBM supported releases up to and including z/OS 2.3. &amp;lt;br /&amp;gt;(For z/OS 2.2, see [[IBM z/OS 2.2 PTF requirement]].)&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;p&amp;gt;Version 1.07 is sufficient for all functionality except for the following features:&amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;ul&amp;gt;&lt;br /&gt;
    &amp;lt;li&amp;gt;zHPF support requires version [[IBM z/OS 2.1 compatibility issue|2.1]].&amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;li&amp;gt;Large (1 MB) page support requires version 1.9.&amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;li&amp;gt;Extended address volumes (EAV) requires version 1.12.&amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;/ul&amp;gt;&lt;br /&gt;
  &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
On z/OS, Model 204 release 7.8 operates as an APF authorized load module, as required by many 7.8 features. &amp;lt;br /&amp;gt;&lt;br /&gt;
To run Model 204 unauthorized, [[Contacting Rocket Software Technical Support|contact Technical Support]].&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;IBM z/VM versions supported:&amp;lt;/b&amp;gt; &lt;br /&gt;
  &amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;All IBM supported releases up to and including z/VM 6.4.&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;IBM z/VSE versions supported:&amp;lt;/b&amp;gt;&lt;br /&gt;
  &amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;All IBM supported releases up to and including z/VSE 6.1.&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Hardware requirements===&lt;br /&gt;
 &lt;br /&gt;
In general, Model 204 version 7.8 requires the IBM z/890 or above processor.&lt;br /&gt;
&amp;lt;p&amp;gt;However, the IBM z10 or above processor is required for the following features:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;large (1 MB) page support&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;IBM&#039;s High Performance FICON (zHPF) support&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Connect&amp;lt;sup&amp;gt;&amp;amp;#9733;&amp;lt;/sup&amp;gt; compatibility with Model 204===&lt;br /&gt;
&lt;br /&gt;
Connect&amp;lt;span class=&amp;quot;superstar&amp;quot;&amp;gt;&amp;amp;#9733;&amp;lt;/span&amp;gt; version 7.5 or 7.7 is compatible with Model 204 version 7.8.&lt;br /&gt;
&lt;br /&gt;
For more information on Connect&amp;lt;span class=&amp;quot;superstar&amp;quot;&amp;gt;&amp;amp;#9733;&amp;lt;/span&amp;gt; installation, see the [[:Category:Connect*|Connect&amp;lt;span class=&amp;quot;superstar&amp;quot;&amp;gt;&amp;amp;#9733;&amp;lt;/span&amp;gt; wiki pages]].&lt;br /&gt;
&lt;br /&gt;
==SOUL (User Language) enhancements==&lt;br /&gt;
===AmIndependent method===&lt;br /&gt;
The &amp;lt;var&amp;gt;AmIndependent&amp;lt;/var&amp;gt; method returns TRUE for daemons spawned by &amp;lt;var&amp;gt;[[RunIndependently_(Daemon_subroutine)|RunIndependently]]&amp;lt;/var&amp;gt;. (The action of &amp;lt;var&amp;gt;[[AmDaemon_(Daemon_property)|AmDaemon]]&amp;lt;/var&amp;gt; remains unchanged.)&lt;br /&gt;
&lt;br /&gt;
The following table shows the values returned by &amp;lt;var&amp;gt;AmIndependent&amp;lt;/var&amp;gt; versus &amp;lt;var&amp;gt;AmDaemon&amp;lt;/var&amp;gt; for different daemon types:&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Type&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;AmDaemon&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;AmIndependent&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;$COMBG&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;False&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;False&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Independent daemon&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;False&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;True&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Other daemon&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;True&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;False&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Web, etc.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;False&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;False&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===$ProcOpn===&lt;br /&gt;
&amp;lt;var&amp;gt;[[$ProcOpn|$ProcOpn]]&amp;lt;/var&amp;gt; now supports the opening of a procedure with an all-numeric name, and including a leading zero, such as:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;%result = $procOpn(&#039;0123&#039;, &#039;MYFILE&#039;)&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Support for such procedure names was initially introduced at V7.7, and this feature of &amp;lt;var&amp;gt;$ProcOpn&amp;lt;/var&amp;gt; is enabled in V7.7 with the application of zap 77z054.&lt;br /&gt;
&lt;br /&gt;
===Allow parentheses to surround a boolean enumeration object===&lt;br /&gt;
The following sample code:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;   begin                                       &lt;br /&gt;
   variables are undefined                  &lt;br /&gt;
   %isValid is boolean initial (True)       &lt;br /&gt;
   if (%isValid) then                  &lt;br /&gt;
      print &#039;in IF&#039;                            &lt;br /&gt;
   end if                                   &lt;br /&gt;
   end   &amp;lt;/p&amp;gt;      &lt;br /&gt;
&lt;br /&gt;
will now compile and run successfully, since this syntax: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;if (%isValid) then &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
is logically equivalent to this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;if %isValid then &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Prior to V7.8 the presence of parentheses surrounding the boolean enumeration object would have caused a compilation error. This change is enabled in V7.7 with the application of zap 77z370.&lt;br /&gt;
&lt;br /&gt;
===Support for copying Object class objects===&lt;br /&gt;
The Object class now supports the copy and deepCopy methods. For example, an Object object can be copied as follows:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;   begin               &lt;br /&gt;
   %x is object object &lt;br /&gt;
   %y is object object &lt;br /&gt;
   %y = new            &lt;br /&gt;
   %x = %y:copy        &lt;br /&gt;
   end &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This change is enabled in v7.7 with the application of zap 77z076, and within V7.6 with the application of zap 76z412.&lt;br /&gt;
&lt;br /&gt;
===Assignment of enumeration values to method variables===&lt;br /&gt;
Enumeration values can now be assigned to method variables whose result is an enumeration. So, for example, the following code:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;   begin                                               &lt;br /&gt;
   enumeration colour                                  &lt;br /&gt;
      public                                           &lt;br /&gt;
         value red                                     &lt;br /&gt;
         value white                                   &lt;br /&gt;
         value blue                                    &lt;br /&gt;
      end public                                       &lt;br /&gt;
   end enumeration                                     &lt;br /&gt;
   %func    is function getColour is enumeration colour&lt;br /&gt;
   local function getColour is enumeration colour      &lt;br /&gt;
      return blue                                      &lt;br /&gt;
   end function                                        &lt;br /&gt;
   %func    = getColour                                &lt;br /&gt;
   %func    = (colour):red                             &lt;br /&gt;
   printText {~=%(Local):(%func)}                      &lt;br /&gt;
   end  &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
will produce this result:&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt; %(Local):(%func)=red &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
whereas previously this line:   &lt;br /&gt;
&lt;br /&gt;
  &amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt; %func    = (colour):red &amp;lt;/p&amp;gt;   &lt;br /&gt;
&lt;br /&gt;
would have been rejected with this message:&lt;br /&gt;
&lt;br /&gt;
   &amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;MSIR.0993: Assignment invalid: mismatch between method and method variable &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This change is enabled in V7.7 with the application of zap 77z128.&lt;br /&gt;
&lt;br /&gt;
===Optional output method parameters===&lt;br /&gt;
Prior to this release output parameters could not be optional or have default values. In this release output parameters can be specified as &amp;lt;var&amp;gt;Optional&amp;lt;/var&amp;gt;, and a default value can be specified with &amp;lt;var&amp;gt;Default&amp;lt;/var&amp;gt;. One related change is that if a &amp;lt;var&amp;gt;Len&amp;lt;/var&amp;gt; value is specified with &amp;lt;var&amp;gt;Optional&amp;lt;/var&amp;gt; or &amp;lt;var&amp;gt;Default&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;Output&amp;lt;/var&amp;gt;, it indicates the length of the hidden target for the output parameter if none was passed. For all other &amp;lt;var&amp;gt;Output&amp;lt;/var&amp;gt; parameters, &amp;lt;var&amp;gt;Len&amp;lt;/var&amp;gt; is meaningless, just as it was before Model 204 V7.8. The following is an example of the use of an optional output parameter:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;function getRemote( -&lt;br /&gt;
   %target is string len 32, %errorReason is string len 80 optional output -&lt;br /&gt;
) is float&lt;br /&gt;
  ...&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
In this example, if &amp;lt;code&amp;gt;%errorReason&amp;lt;/code&amp;gt; is not specified in a call and then set to a value longer than 80 bytes it wil be truncated to 80 bytes. However, if a string of a different length is passed, the length of that string will determine truncation behavior.&lt;br /&gt;
&lt;br /&gt;
==External Call Facility enhancements==&lt;br /&gt;
===Managing ECF tables more efficiently===&lt;br /&gt;
The are two new features to help manage ECF tables more efficiently, avoid conditions where the table can fill, and prevent the definition of further entities.&lt;br /&gt;
&lt;br /&gt;
The first feature is the new &amp;lt;var&amp;gt;DISPLAY ECF&amp;lt;/var&amp;gt; command, which displays the contents of ECF tables and also the current status of users accessing ECF modules. See more details of the &amp;lt;var&amp;gt;[[#DISPLAY ECF|DISPLAY ECF]]&amp;lt;/var&amp;gt; command below.&lt;br /&gt;
&lt;br /&gt;
The second feature is a new &amp;lt;var&amp;gt;EXTERNAL REMOVE&amp;lt;/var&amp;gt; statement with the following syntax:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;EXTERNAL REMOVE &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;modulename&amp;lt;/span&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This statement causes the entry for the named module to be removed from the module table. The table entry is then placed on a free chain of entries and can be reused by issuing the &amp;lt;var&amp;gt;EXTERNAL MODULE&amp;lt;/var&amp;gt; statement. This allows the module table to be managed with redundant entries removed, without having to recycle the ONLINE.&lt;br /&gt;
&lt;br /&gt;
An &amp;lt;var&amp;gt;EXTERNAL REMOVE&amp;lt;/var&amp;gt; statement will return &amp;lt;code&amp;gt;$status/$statusd&amp;lt;/code&amp;gt; values of &amp;lt;code&amp;gt;0/0&amp;lt;/code&amp;gt;, and most other status values that can be returned by the &amp;lt;var&amp;gt;EXTERNAL REMOVE&amp;lt;/var&amp;gt; statement are already documented in the ECF return codes table. If an &amp;lt;var&amp;gt;EXTERNAL REMOVE&amp;lt;/var&amp;gt; is attempted against a module that is currently being called (in use), then &amp;lt;code&amp;gt;$status/$statusd&amp;lt;/code&amp;gt; will return the values &amp;lt;code&amp;gt;20/1&amp;lt;/code&amp;gt; (module unavailable).&lt;br /&gt;
&lt;br /&gt;
==System enhancements==&lt;br /&gt;
&lt;br /&gt;
===New wait types for daemon/master waits===&lt;br /&gt;
&lt;br /&gt;
Two new wait types, viewable on the &amp;lt;var&amp;gt;[[MONITOR_command|MONITOR]] USERS&amp;lt;/var&amp;gt; command output, have been implemented as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;57&amp;lt;/code&amp;gt; - Means a daemon thread waiting for its master thread  &amp;lt;br /&amp;gt;     &lt;br /&gt;
&amp;lt;code&amp;gt;58&amp;lt;/code&amp;gt; - Means a master thread waiting for one of its daemon threads&lt;br /&gt;
&lt;br /&gt;
This change is enabled in V7.7 with the application of zap 77z410.&lt;br /&gt;
&lt;br /&gt;
===Snap formatting changes===&lt;br /&gt;
Date/time stamps in the page headers of snaps will now be shown in normal format, rather than in Julian format as in previous versions. So in the following example, a particular snap header under v7.7 or previous versions would show as: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;SNAPID    1   19226.060155  M204.0022: Bug .. nnnnn               PAGE     1 &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
whereas the same snap header under v7.8 would show as: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;SNAPID    1  2019/08/14 06:01:06   M204.0022: Bug .. nnnnn        PAGE     1 &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Also, due to improvements in handling trailing blanks in snap output, a snap generated under v7.8 should be marginally smaller than the same snap generated under previous versions, assuming the same &amp;lt;var&amp;gt;SNAPCTL&amp;lt;/var&amp;gt; settings.&lt;br /&gt;
&lt;br /&gt;
===Call stack trace for problem diagnosis===&lt;br /&gt;
A  call stack trace is now provided to help diagnose and resolve common errors. To enable the stack trace, do either of the following: &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Set the &amp;lt;var&amp;gt;[[SIRFACT parameter|SIRFACT]] X&#039;01&#039;&amp;lt;/var&amp;gt; bit.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Set the &amp;lt;var&amp;gt;[[DEBUGUL parameter|DEBUGL]]&amp;lt;/var&amp;gt; parameter. Note that the &amp;lt;var&amp;gt;DEBUGUL&amp;lt;/var&amp;gt; approach will introduce extra QTBL overhead. &amp;lt;p&amp;gt;(&amp;lt;var&amp;gt;DEBUGUL&amp;lt;/var&amp;gt; provides a similar facility with an include trace of procedures leading to the error, but this might not be potentially as useful as the call trace.)&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt; &lt;br /&gt;
&lt;br /&gt;
The call stack trace can assist in diagnosing run-time errors that might occur, as illustrated by the following &amp;quot;Variable too small for result&amp;quot; and &amp;quot;MBSCAN exceeded&amp;quot; examples.&lt;br /&gt;
&lt;br /&gt;
====Variable too small for result====&lt;br /&gt;
When the stack trace is enabled, a &amp;quot;variable too small&amp;quot; error results in the following message:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;M204.2966: Error at line n, procedure &#039;&#039;procname&#039;&#039; in file &#039;&#039;procfile&#039;&#039;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
which identifies the line within a procedure where the error is occurring, in addition to the usual message:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;M204.0552: Variable too small for result&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Any subsequent M204.2966 messages indicate the point in the code from where the code in error was called. For example, a stack of three subroutine calls leading to a &amp;quot;variable too small&amp;quot; error might result in the following messaging:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;   M204.0552: Variable too small for result                             &lt;br /&gt;
   M204.2966: Error at line 9, procedure MYPROC.LEVEL4 in file MYPROC   &lt;br /&gt;
   M204.2966: Called from line 5, procedure MYPROC.LEVEL3 in file MYPROC&lt;br /&gt;
   M204.2966: Called from line 5, procedure MYPROC.LEVEL2 in file MYPROC&lt;br /&gt;
   M204.2966: Called from line 5, procedure MYPROC.LEVEL1 in file MYPROC &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This information should help in diagnosing the problem. &lt;br /&gt;
&lt;br /&gt;
If the error occurs within a command level program rather than a procedure, then the M204.2966 message is replaced by an M204.2967 message, and a similar error condition to the above with a preceding call stack might be audited as follows:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;   M204.0552: Variable too small for result              &lt;br /&gt;
   M204.2967: Error at line 14 of command level program  &lt;br /&gt;
   M204.2967: Called from line 5 of command level program&lt;br /&gt;
   M204.2967: Called from line 3 of command level program &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If neither &amp;lt;var&amp;gt;SIRFACT X&#039;01&#039;&amp;lt;/var&amp;gt; nor &amp;lt;var&amp;gt;DEBUGUL&amp;lt;/var&amp;gt; is set, then the &amp;quot;variable too small&amp;quot; error produces the following messages:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;   M204.0552: Variable too small for result &lt;br /&gt;
   M204.2968: Error: no debug info &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====MBSCAN exceeded====&lt;br /&gt;
Similarly to the handling of the &amp;quot;variable too small for result&amp;quot; error, the call stack can also be used to diagnose errors where the value of &amp;lt;var&amp;gt;[[MBSCAN parameter|MBSCAN]]&amp;lt;/var&amp;gt; is exceeded as a result of a direct search of Table B records. &lt;br /&gt;
&amp;lt;p&amp;gt;Again, under V7.8, with either the &amp;lt;var&amp;gt;SIRFACT X&#039;01&#039;&amp;lt;/var&amp;gt; bit set or &amp;lt;var&amp;gt;DEBUGUL&amp;lt;/var&amp;gt; set, if a long request occurs as a result of exceeding &amp;lt;var&amp;gt;MBSCAN&amp;lt;/var&amp;gt;, then initially the following message is produced, as before:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;M204.0569: File &#039;&#039;filename&#039;&#039;, Find: Table B records to be searched = &#039;&#039;nnnn&#039;&#039;&amp;lt;/p&amp;gt;&lt;br /&gt;
followed by a DYRWT prompt message. If the user replies &#039;N&#039; to the prompt, or if the request is run in an environment (such as a batch job) where the default response is &#039;N&#039;, the following message is produced after the M204.0569 message:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;Cancelling request: M204.2969: MBSCAN (&#039;&#039;mm&#039;&#039;) exceeded, records to be searched = &#039;&#039;nnnn&#039;&#039;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
where &#039;&#039;mm&#039;&#039; is the current setting of &amp;lt;var&amp;gt;MBSCAN&amp;lt;/var&amp;gt;. The M204.2969 message is followed by M204.2966 messages displaying the call stack trace. Thus, if the following code is run from procedure MYPROC.MBSCAN against the demo database, with an &amp;lt;var&amp;gt;MBSCAN&amp;lt;/var&amp;gt; setting of 10:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;   b                           &lt;br /&gt;
   call sub1                   &lt;br /&gt;
   sub1: subroutine            &lt;br /&gt;
   fd1:                        &lt;br /&gt;
      in clients fd city = ONTARIO&lt;br /&gt;
              end find         &lt;br /&gt;
      fr fd1                      &lt;br /&gt;
         pai                      &lt;br /&gt;
         print                    &lt;br /&gt;
      end for                     &lt;br /&gt;
   end subroutine              &lt;br /&gt;
   end &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
then the following messages are produced, assuming any prompts are responded to with an &#039;N&#039;:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;   M204.0569: File CLIENTS, Find: Table B records to be searched = 3415&lt;br /&gt;
   Cancelling request: M204.2969: MBSCAN (10) exceeded, records to be searched = 3415  &lt;br /&gt;
   M204.2966: Error at line 6, procedure MYPROC.MBSCAN in file MYPROC&lt;br /&gt;
   M204.2966: Called from line 3, procedure MYPROC.MBSCAN in file MYPROC  &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===appendJournalData===&lt;br /&gt;
The &amp;lt;var&amp;gt;[[AppendJournalData_(Stringlist_function)|AppendJournalData]]&amp;lt;/var&amp;gt; function is now more tolerant of an outstanding BUMP request. Previously, if &amp;lt;var&amp;gt;AppendJournalData&amp;lt;/var&amp;gt; was called to inadvertently retrieve a large amount of journal data, typically when called implicitly from within SirScan, then any outstanding BUMP request wouldn&#039;t be honored until all of the data had been retrieved, at which point the BUMP request would be completed, and all data would be lost.&lt;br /&gt;
&lt;br /&gt;
Now, the &amp;lt;var&amp;gt;AppendJournalData&amp;lt;/var&amp;gt; process checks for outstanding BUMP requests before each track I/O is executed, thus avoiding excessive I/Os against the journal and long waits for the BUMP of such a process to complete.&lt;br /&gt;
&lt;br /&gt;
==AUDIT204 enhancements==&lt;br /&gt;
===FORMAT command===&lt;br /&gt;
TIMEHH is a new parameter used with the FORMAT command of the [[Tracking_system_activity_(CCAJRNL,_CCAAUDIT,_CCAJLOG)#AUDIT204_utility|AUDIT204]] utility.  It indicates that timestamps, printed at the beginning of each line of output, should include hundredths of a second. Requires no other arguments.&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;b&amp;gt;NOTE:&amp;lt;/b&amp;gt; This parameter and the 78 version (or later) of AUDIT204 may be used against a 77 (or later) CCAJRNL.&amp;lt;/p&amp;gt;&lt;br /&gt;
For example:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;//CCAIN DD *&lt;br /&gt;
FORMAT YEARFORM 4&lt;br /&gt;
TIMEHH&lt;br /&gt;
TYPE ER MS LI&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Recovery enhancements==&lt;br /&gt;
===Media Recovery in a multi-user environment===&lt;br /&gt;
It is now possible to perform media recovery by issuing the &amp;lt;var&amp;gt;REGENERATE&amp;lt;/var&amp;gt; command to roll forward selected files in a multi-user environment, with the media recovery being carried out by different users with system manager privileges. The new USING option allows for the specification of a ddname for the input journal stream to be used by the &amp;lt;var&amp;gt;REGENERATE&amp;lt;/var&amp;gt; command. Previously media recovery was restricted to single user batch jobs, using the CCAGEN ddname for the input journal. For more details, see the &amp;lt;var&amp;gt;[[#REGENERATE|REGENERATE]]&amp;lt;/var&amp;gt; command below.&lt;br /&gt;
&lt;br /&gt;
==Security enhancements==&lt;br /&gt;
===CA-Top Secret can disallow CCASTAT logins===&lt;br /&gt;
The [[CA-Top_Secret_interface|CA-Top Secret]] interface now recognizes the &amp;lt;code&amp;gt;DEFACID=&amp;lt;/code&amp;gt;, setting and does not allow CCASTAT logins in the online if &amp;lt;code&amp;gt;DEFACID&amp;lt;/code&amp;gt; is set to null. (There is no attempt to log on M204USR.) Therefore, to disallow CCASTAT logons, set DEFACID=, in [[CA-Top_Secret_interface#Preparing_a_TOPSPARM_parameter_module_with_TOPSGEN|TOPSPARM]]. CCASTAT will be opened because it contains file and group passwords, but it will not be used for logons if CCASTAT logons are not allowed.&lt;br /&gt;
&lt;br /&gt;
===CUSTOM=11 and mixed cased input===&lt;br /&gt;
The &amp;lt;var&amp;gt;[[CUSTOM_parameter|CUSTOM]]&amp;lt;/var&amp;gt; parameter &amp;lt;var&amp;gt;CUSTOM=11&amp;lt;/var&amp;gt; setting no longer requires that a &amp;lt;var&amp;gt;*LOWER&amp;lt;/var&amp;gt; command be issued prior to a &amp;lt;var&amp;gt;LOGCTL&amp;lt;/var&amp;gt; command (to add or change a  password) to preserve mixed case input. Prior to this release, with &amp;lt;var&amp;gt;CUSTOM=11&amp;lt;/var&amp;gt; in place, *LOWER had to be issued before a &amp;lt;var&amp;gt;LOGCTL&amp;lt;/var&amp;gt; command, otherwise any mixed case password strings would automatically be translated into uppercase. This change is enabled in V7.7 with the application of zap 77z108.&lt;br /&gt;
&lt;br /&gt;
===DEFUSER can specify a jobname not authorized to access M204===&lt;br /&gt;
When specifying DEFUSER=JOBNAME and VALIDAT=LOGON in the RACFGEN parms for an ONLINE, if the specified jobname (the owning id for the ONLINE job) isn&#039;t authorized to use Model 204 via RACF, any LOGIN commands specifying no userid will now succeed (previously such a LOGON would have failed). This enables users to submit jobs with USE $JOB, whereby the string USER=jobname will be added to the submitted JCL. This in turn is useful if the specified jobname has dataset access privileges to datasets required by the submitted jobs, even if the jobname itself isn&#039;t authorized to use M204.&lt;br /&gt;
&lt;br /&gt;
==Janus product enhancements==&lt;br /&gt;
&lt;br /&gt;
===Web Sockets===&lt;br /&gt;
Web Sockets are now supported in Janus Web Server.&lt;br /&gt;
&lt;br /&gt;
The Web Socket protocol provides various advantages over the HTTP protocol:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Web Sockets allow full-duplex communication.&amp;lt;/li&amp;gt; &lt;br /&gt;
&amp;lt;li&amp;gt;Efficient framing of payload data uses minimal overhead.&amp;lt;/li&amp;gt;  &lt;br /&gt;
&amp;lt;li&amp;gt;The Web Socket protocol is end-user extensible.&amp;lt;/li&amp;gt;  &lt;br /&gt;
&amp;lt;li&amp;gt;Most importantly, Web Sockets can be deployed completely within an existing HTTP/HTTPS framework.&amp;lt;/li&amp;gt; &lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To implement Web Sockets, you must enable the Janus Web port for Web Socket upgrades with the new &amp;lt;var&amp;gt;WEBSOCKET&amp;lt;/var&amp;gt; parameter. The WEBSOCKET option can be specified on either the port definition or the JANUS WEB rule for the URL. &lt;br /&gt;
Likewise, an individual Janus Web rule can either allow or disallow Web Socket connections with the &amp;lt;var&amp;gt;WEBSOCKET&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;NOWEBSOCKET&amp;lt;/var&amp;gt; parameters, respectively. &lt;br /&gt;
&lt;br /&gt;
For details on implementing Web Sockets, see the [[WebSocket_(Socket_function)|WebSocket]] wiki page.&lt;br /&gt;
&lt;br /&gt;
===Janus Web Server access rule===&lt;br /&gt;
The automatic &amp;lt;var&amp;gt;[[JANUS WEB ALLOW]]&amp;lt;/var&amp;gt; rule, which allowed any user to access the port without requiring a login, is changed &amp;lt;i&amp;gt;for non-SSL ports&amp;lt;/i&amp;gt; to the following:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;JANUS WEB &amp;lt;i&amp;gt;portname&amp;lt;/i&amp;gt; DISALLOW *&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
This rule requires a system administrator to explicitly define &amp;lt;var&amp;gt;ALLOW&amp;lt;/var&amp;gt; rules to enable users to access non-SSL ports.&lt;br /&gt;
The rule applies unless overridden by user-added rules. &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;blockquote class=&amp;quot;note&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;b&amp;gt;Note:&amp;lt;/b&amp;gt; To revert from this change in the JANUS DEFINE default and make the default &lt;br /&gt;
 non-SSL &amp;lt;var&amp;gt;ALLOW&amp;lt;/var&amp;gt; rule as it was in version 7.5 and earlier (&amp;lt;code&amp;gt;ALLOW *&amp;lt;/code&amp;gt;), turn on the 1 bit of the &amp;lt;var&amp;gt;[[WEBDFLT parameter|WEBDFLT]]&amp;lt;/var&amp;gt; parameter: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;RESET WEBDFLT=1&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Increase in pending accepts for Janus BPX ports===&lt;br /&gt;
The default number of pending accepts for Janus BPX server ports has been increased from 3 to 12, thus reducing the likelihood that a pending accept may fail with the message&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;MSIR.0019 Connection request rejected for port (port), MAXCON exceeded&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The actual number of pending accepts to be supported on the port can be set with the new parameter MAXPEND, set on the &amp;lt;var&amp;gt;[[JANUS_DEFINE|JANUS DEFINE]]&amp;lt;/var&amp;gt; command, where MAXPEND can vary from 3 up to a maximum value of 32. The change to the default value is enabled in V7.7 with the application of zap 77z269.&lt;br /&gt;
&lt;br /&gt;
===TCP listen backlog increased===&lt;br /&gt;
&lt;br /&gt;
The [[Program_Communication_facilities#LISTEN_call|TCP listen]] backlog has been increased from 16 to 1024 under z/OS.&lt;br /&gt;
&lt;br /&gt;
This update tells the TCP stack to queue up a maximum of 1024 such requests before dropping any. This increased backlog reduces, or in most cases eliminates, the likelihood of a connection request drop, other than in exceptional circumstances, such as a denial of service attack. This change is enabled in V7.7 with the application of zap 77z340.&lt;br /&gt;
&lt;br /&gt;
===Defer the freeing of XMLSCREEN input XML===&lt;br /&gt;
&lt;br /&gt;
The freeing of &amp;lt;var&amp;gt;[[XMLSCREEN_and_NOXMLSCREEN_(JANUS_DEFINE_parameters)|XMLSCREEN]]&amp;lt;/var&amp;gt; input XML is now deferred until the next Read Screen or session termination. This means that if an application error is detected, the input XML can be retrieved with [[$Web_Input_Content|$Web_Input_Content]] and then logged for problem analysis. &lt;br /&gt;
&lt;br /&gt;
Prior to this release the XML received from the client was freed immediately after being used to set the input data for a Read Screen, rendering it unavailable for problem determination.&lt;br /&gt;
&lt;br /&gt;
This change is enabled in V7.7 with the application of zap 77z368.&lt;br /&gt;
&lt;br /&gt;
===XMLSCREEN and Janus Web Legacy blank stripping===&lt;br /&gt;
&lt;br /&gt;
xmlScreens and Janus Web Legacy screens now adhere to the same standard as standard screen processing in terms of stripping leading blanks from input fields defined as [[Full-screen_feature#DEBLANK_or_NODEBLANK_option|DEBLANK]] (either explicitly or implicitly).&lt;br /&gt;
&lt;br /&gt;
This change is enabled in V7.7 with the application of zap 77z400.&lt;br /&gt;
&lt;br /&gt;
===SSL input buffer size===&lt;br /&gt;
&lt;br /&gt;
The default value of &amp;lt;var&amp;gt;[[SSLIBSIZE_(JANUS_DEFINE_parameter)|SSLIBSIZE]]&amp;lt;/var&amp;gt; has been increased to 16384 + 128, or 16512. This size should ensure correct communication with all TLS spec compliant applications. It is the maximum size allowed unless you use &amp;lt;var&amp;gt;[[CUSTOM_parameter#Using_CUSTOM.3D.2818.29|CUSTOM=18]]&amp;lt;/var&amp;gt;.    &lt;br /&gt;
&lt;br /&gt;
This change is enabled in V7.7 with the application of zap 77z415.&lt;br /&gt;
&lt;br /&gt;
===Increasing LDAP buffers===&lt;br /&gt;
&lt;br /&gt;
The number of LDAP buffers allocated at startup can now be changed by setting the &amp;lt;var&amp;gt;NLDAPBUF&amp;lt;/var&amp;gt; parameter in CCAIN. See below for details on &amp;lt;var&amp;gt;[[#NLDAPBUF|NLDAPBUF]]&amp;lt;/var&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Increase URL length returned with $web_form_action===&lt;br /&gt;
With this release the maximum Janus Web Server incoming URL that can be handled by &amp;lt;var&amp;gt;$web_form_action&amp;lt;/var&amp;gt; is increased from 512 bytes to 1024 bytes. This change is enabled in V7.7 with the application of zap 77z424.&lt;br /&gt;
&lt;br /&gt;
===Maximum RBSIZE setting increased===&lt;br /&gt;
The maximum value for RBSIZE, set on the &amp;lt;var&amp;gt;[[JANUS DEFINE|JANUS DEFINE]]&amp;lt;/var&amp;gt; command, is now increased to 16777215 (previously the maximum was 65534). RBSIZE specifies the RPC or Request Buffer size.  On a Web port, the Janus request buffer holds browser request information such as header data, cookies, and form data. On other port types, it holds RPC input and output parameters. This change is enabled in V7.7 with the application of zap 77z427.&lt;br /&gt;
&lt;br /&gt;
==Debugger enhancements==&lt;br /&gt;
These enhancements apply to the Janus and TN3270 debuggers. &lt;br /&gt;
&lt;br /&gt;
===Access to exposed variables===&lt;br /&gt;
The debuggers can now view or watch the values of variables exposed to local routines/methods. Previously, any attempts to access an exposed variable would have displayed &amp;quot;%varname has no value&amp;quot; in the debugger session. This feature is enabled in V7.7 with the application of zap 77z363.&lt;br /&gt;
&lt;br /&gt;
===Subroutine or method display===&lt;br /&gt;
When execution pauses for a break point or runtime error, the subroutine or method being executed is indicated in the status area.  In addition, the source code line information available by right-clicking on a source line now also indicates the subroutine or method.&lt;br /&gt;
&lt;br /&gt;
==Performance enhancements==&lt;br /&gt;
&lt;br /&gt;
===MP/204 offload improvements===&lt;br /&gt;
Application code issuing the following SOUL statements will now now be fully offloadable:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;File Records In/On&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Remember&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt; &lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Position&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Sort Values&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;                                             &lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Reset Header/Trailer&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Find and Print Count&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Find All Values&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;For Each Value&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
The above improvements are enabled in V7.7 with the application of zaps 77z419 and 77z420.&lt;br /&gt;
&lt;br /&gt;
===X3270OUT exit offloadable===&lt;br /&gt;
When running MP/204 (AMPSUBS&amp;gt;0) and using the [[Coding_SNA_Communications_Server_conversion_exit_routines#X3270OUT_.28convert_output_from_3270_format.29|X3270OUT]] exit to convert a 3270 output data stream to the appropriate device protocol, the exit can now run in parallel mode to improve performance. This change is enabled in V7.7 with the application of zap 77z313.&lt;br /&gt;
&lt;br /&gt;
The X3270OUT exit must be written to be re-entrant.&lt;br /&gt;
&lt;br /&gt;
==New and changed commands==&lt;br /&gt;
===MONITOR IODEV===&lt;br /&gt;
This new command displays the total number, the current usage and the maximum number of each IODEV type.&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;M IODEV &amp;lt;/p&amp;gt;                       &lt;br /&gt;
 Iodev  Total  Active ( % )  Maximum ( % )                                &lt;br /&gt;
     1      1       1  100%        1  100%                                &lt;br /&gt;
     7    300     100   33%      150   50%                                &lt;br /&gt;
    11      4       0    0%        1   25%                                &lt;br /&gt;
    15    500      50   10%       80   16%                                &lt;br /&gt;
    25      1       0    0%        0    0%                                &lt;br /&gt;
    27     10       0    0%        0    0%                                &lt;br /&gt;
    29     10       1    10%       1    10%                                &lt;br /&gt;
    51      5       0    0%        0    0% &lt;br /&gt;
&lt;br /&gt;
===DISPLAY ECF===&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;DISPLAY ECF {{ M | N | U } like ?} &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This new command displays details from ECF tables, or the current status of users accessing ECF modules.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;D ECF M&amp;lt;/code&amp;gt; displays the contents of the module table. For example:&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;    D ECF M &lt;br /&gt;
    Module   Loadlib  Address:Length     Loaded@      Lastused@   #Calls  Flags &lt;br /&gt;
    QATUM13C PROGLIB 2FB91FB8:00000028 19023:121506 19023:121506 00000001 &lt;br /&gt;
    QATUM13B PROGLIB 2FE65000:00009C18 19023:121506 19023:121506 00000001 &lt;br /&gt;
    QATUM13A PROGLIB 2FE6EC18:00001CD8 19023:121506 19023:121506 00000001  &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
(flags may be D=deleted; S=shared; H=halted; I=Idle)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;D ECF N&amp;lt;/code&amp;gt; displays contents of the name table. For example: &amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;    D ECF N&lt;br /&gt;
    Module   Logical-call-name &lt;br /&gt;
    QATUM13C MOD_QATUM13C &lt;br /&gt;
    QATUM13B MOD_QATUM13B &lt;br /&gt;
    QATUM13A MOD_QATUM13A &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;D ECF U&amp;lt;/code&amp;gt; displays details of users currently accessing ECF modules. This is also the default option, and so &amp;lt;code&amp;gt;D ECF&amp;lt;/code&amp;gt; will display the same output as &amp;lt;code&amp;gt;D ECF U&amp;lt;/code&amp;gt;. For example:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;    D ECF U                           &lt;br /&gt;
    User# Userid     Module   Parmlen &lt;br /&gt;
    00002 ADMIN      --none--         &lt;br /&gt;
    00003 ADMIN      COBSAMP1 00000002&lt;br /&gt;
    00004 ADMIN      COBSAMP1 00000002 &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;D ECF &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;function&amp;lt;/var&amp;gt; LIKE &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;?&amp;lt;/var&amp;gt; &amp;lt;/code&amp;gt; (where &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;?&amp;lt;/var&amp;gt; is a valid pattern) displays details for entities that match the specified pattern. The function is either M (modules), N (names), or U (users), and it defaults to U. So for example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;D ECF U L A&amp;lt;/p&amp;gt;&lt;br /&gt;
or&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;D ECF U L A*&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
displays details of ECF users whose names begin with A.&lt;br /&gt;
&lt;br /&gt;
===REGENERATE===&lt;br /&gt;
The &amp;lt;var&amp;gt;[[REGENERATE command|REGENERATE]]&amp;lt;/var&amp;gt; command can now be run in a multi-user environment by multiple users with system manager privileges. A new option USING is provided to specify the ddname of the input journal, so that the full syntax is now as follows:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;  REGENERATE [USING ddname] FILE filename [FROM dumpname | IGNORE]&lt;br /&gt;
  [TO {LAST UPDATE [BEFORE yy.ddd hh:mm:ss.th] | LAST CHECKPOINT [BEFORE yy.dd hh:mm:ss.th] &lt;br /&gt;
  | UPDATE number OF yy.ddd hh:mm:ss.th | CHECKPOINT yy.ddd hh:mm:ss.th} ]&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The default for the using ddname is CCAGEN, but any ddname may be used to allocate an input journal and used. For example:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;  ALLOCATE REGEN1 WITH SCOPE=SYSTEM DSN=PROD1.GDGJ OLD SEQUENTIAL GEN=+2&lt;br /&gt;
  REGENERATE USING REGEN1 FILE TEST&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It is the user&#039;s responsibility to ensure that the file being regenerated is not in use, and so prior to usage, &amp;lt;var&amp;gt;BUMP FILE&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;STOP FILE&amp;lt;/var&amp;gt; should be used to isolate usage against the file. If the file is in use, the REGEN will fail with these messages:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;  M204.1430: Failed to open file TEST&lt;br /&gt;
  M204.1436: Stopped processing file TEST  &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
$STATUS will now be set for &amp;lt;var&amp;gt;REGENERATE&amp;lt;/var&amp;gt; with the following values:&lt;br /&gt;
&amp;lt;blockquote&amp;gt;    &lt;br /&gt;
    0 - Success &amp;lt;br/&amp;gt;&lt;br /&gt;
    1 - No files were processed &amp;lt;br/&amp;gt;&lt;br /&gt;
    2 - At least one file stopped processing &amp;lt;br/&amp;gt;&lt;br /&gt;
    4 - A serious error occurred, REGEN failed &lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Similarly, &amp;lt;var&amp;gt;[[SETGRC command|SETGRC]]&amp;lt;/var&amp;gt; may be used to get the return code and error message.&lt;br /&gt;
&lt;br /&gt;
==New and changed parameters==&lt;br /&gt;
&lt;br /&gt;
===ECMODS===&lt;br /&gt;
The new minimum value for ECMODS, the allowable number of ECF modules, is 1. Prior to V7.8 the minimum value was 0. This change is enabled in V7.7 with the application of zap 77z306.&lt;br /&gt;
&lt;br /&gt;
===ECNAMES===&lt;br /&gt;
The new minimum value for ECNAMES, the allowable number of ECF module names, is 1. Prior to V7.8 the minimum value was 0. This change is enabled in V7.7 with the application of zap 77z306.&lt;br /&gt;
&lt;br /&gt;
===ECPSIZE===&lt;br /&gt;
The new minimum value for ECPSIZE, the initial storage allocation for ECF parameters, is 1024. Prior to V7.8 the minimum value was 0. This change is enabled in V7.7 with the application of zap 77z306.&lt;br /&gt;
&lt;br /&gt;
===ENQTIME===&lt;br /&gt;
Millisecond duration of automatic record locking retry wait.&lt;br /&gt;
&lt;br /&gt;
Prior to this change, if record locking conflicts occur frequently in a busy online, any user with a non-zero value for &amp;lt;var&amp;gt;[[ENQRETRY parameter|ENQRETRY]]&amp;lt;/var&amp;gt; will wait at least 3 seconds before the conflict is dealt with. This can degrade overall system performance.      &lt;br /&gt;
                                                         &lt;br /&gt;
The &amp;lt;var&amp;gt;[[ENQTIME parameter|ENQTIME]]&amp;lt;/var&amp;gt; parameter specifies the number of milliseconds waited for each record locking retry wait. &amp;lt;var&amp;gt;ENQTIME&amp;lt;/var&amp;gt; can be between 1 and 60000, corresponding to a minimum of 1 millisecond and a maximum of 1 minute. The default value of &amp;lt;var&amp;gt;ENQTIME&amp;lt;/var&amp;gt; is 3000 (3 seconds).            &lt;br /&gt;
                                                         &lt;br /&gt;
For example, with &amp;lt;code&amp;gt;ENQTIME = 100&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;ENQRETRY = 7&amp;lt;/code&amp;gt;, after a record locking conflict occurs the thread will retry 7 times with wait intervals of .1 seconds, and so within at most .7 seconds either the lock becomes available or the conflict triggers an On unit or cancels the request.     &lt;br /&gt;
                                                         &lt;br /&gt;
The &amp;lt;var&amp;gt;ENQTIME&amp;lt;/var&amp;gt; parameter may also be reset with $ResetN. &lt;br /&gt;
&lt;br /&gt;
This new parameter is enabled in V7.7 with the application of zap 77z299.&lt;br /&gt;
&lt;br /&gt;
===EVALOPT===&lt;br /&gt;
The new &amp;lt;var&amp;gt;EVALOPT&amp;lt;/var&amp;gt; parameter controls the cancellation of a request on truncation of string data. The default value is 0, and currently there is just one setting, 1, which means &amp;quot;cancel a request if truncation of string data occurs.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
For example, with the default of 0 in place, the following code &amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;    %x is string len 1   &lt;br /&gt;
    %y is string len 2   &lt;br /&gt;
    %y = &#039;ab&#039;            &lt;br /&gt;
    %x = %y              &lt;br /&gt;
    printtext {~} = {%x} &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
would cause silent truncation, and give the result&lt;br /&gt;
    &amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;%x = a &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If &amp;lt;var&amp;gt;EVALOPT&amp;lt;/var&amp;gt; is set to 1, then the above code produces the following message:&lt;br /&gt;
    &amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;M204.0552: Variable too small for result &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and the request is cancelled.&lt;br /&gt;
&lt;br /&gt;
===LFSCB===&lt;br /&gt;
&amp;lt;var&amp;gt;LFSCB&amp;lt;/var&amp;gt;, the length of the full screen buffer, now has a new minimum value of 8 (the previous minimum was 0). This change is enabled in v7.7 with the application of zap 77z042, and within V7.6 with the application of zap 76z393.&lt;br /&gt;
&lt;br /&gt;
===MAXPRE, MAXBOUT, MAXSUBT===&lt;br /&gt;
&amp;lt;p&amp;gt;Introduced in zap 77z257.&amp;lt;/p&amp;gt;&lt;br /&gt;
The new &amp;lt;var&amp;gt;MAXPRE&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;MAXBOUT&amp;lt;/var&amp;gt;, and &amp;lt;var&amp;gt;MAXSUBT&amp;lt;/var&amp;gt; parameters can be used to cancel a runaway transaction and prevent it from filling the checkpoint data set. &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;MAXPRE&amp;lt;/var&amp;gt;:  Maximum number of pre-images per transaction.  &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;MAXBOUT&amp;lt;/var&amp;gt;: Maximum number of backout pages per transaction. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;MAXSUBT&amp;lt;/var&amp;gt;: Maximum number of subtransaction checkpoints that a transaction can span.&amp;lt;/li&amp;gt;&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;Each new parameter defaults to unlimited. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;If a parameter value is set, a transaction is cancelled if that value is exceeded, and the following message is displayed:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;M204.0524: Maximum number (&amp;lt;i&amp;gt;num&amp;lt;/i&amp;gt;) of &amp;lt;i&amp;gt;parameter&amp;lt;/i&amp;gt; exceeded.&amp;lt;/p&amp;gt;&lt;br /&gt;
where &amp;lt;i&amp;gt;num&amp;lt;/i&amp;gt; is the value set for &amp;lt;i&amp;gt;parameter&amp;lt;/i&amp;gt; (&amp;lt;var&amp;gt;MAXPRE&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;MAXBOUT&amp;lt;/var&amp;gt;, or &amp;lt;var&amp;gt;MAXSUBT&amp;lt;/var&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
===NLDAPBUF===&lt;br /&gt;
This new parameter allows the number of LDAP buffers allocated during startup to be set in CCAIN. The default value is 2, and the settable value can range from 0 to 65535.&lt;br /&gt;
&lt;br /&gt;
===PUPDTH (new minimum value)===&lt;br /&gt;
If a user sets the &amp;lt;var&amp;gt;[[PUPDTH parameter|PUPDTH]]&amp;lt;/var&amp;gt; parameter to 0, it will now automatically be increased to 1, its minimum value.&lt;br /&gt;
&lt;br /&gt;
===SERV4G===&lt;br /&gt;
This parameter allows testing of server tables that span a 4-gigabyte boundary. For example, if &amp;lt;var&amp;gt;SERV4G&amp;lt;/var&amp;gt; is &amp;lt;code&amp;gt;X&#039;FFFFF000&#039;&amp;lt;/code&amp;gt;, each ATB server will begin at &amp;lt;code&amp;gt;XX_FFFFF000&amp;lt;/code&amp;gt;. If &amp;lt;var&amp;gt;SERV4G&amp;lt;/var&amp;gt; is &amp;lt;code&amp;gt;X&#039;FFFF0000&#039;&amp;lt;/code&amp;gt;, each ATB server will begin at &amp;lt;code&amp;gt;XX_FFFF0000&amp;lt;/code&amp;gt;. &amp;lt;code&amp;gt;XX&amp;lt;/code&amp;gt; is determined by the storage available on the system. The parameter is set in CCAIN.&lt;br /&gt;
&lt;br /&gt;
The contents of the ATB server are specified by using the &amp;lt;var&amp;gt;[[SERVGA parameter|SERVGA]]&amp;lt;/var&amp;gt; parameter.&lt;br /&gt;
&lt;br /&gt;
For example, if you want VTBL to span the 4G boundary, you can use these settings: &amp;lt;code&amp;gt;SERV4G=X&#039;FFFFF000&#039;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;SERVGA=X&#039;00040000&#039;&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;LVTBL=200 (6400 bytes, X&#039;1900&#039;)&amp;lt;/code&amp;gt;. This will force each server&#039;s VTBL to begin at &amp;lt;code&amp;gt;XX_FFFFF000&amp;lt;/code&amp;gt; and end at &amp;lt;code&amp;gt;XX+1_00000900&amp;lt;/code&amp;gt;.&lt;br /&gt;
===SIRTERM===&lt;br /&gt;
The &amp;lt;var&amp;gt;[[SIRTERM parameter|SIRTERM]]&amp;lt;/var&amp;gt; (Sirius terminal options) parameter settings have changed. &lt;br /&gt;
The changes to &amp;lt;var&amp;gt;SIRTERM&amp;lt;/var&amp;gt; allow a user to preclude a reset to a Model that is not supported by the terminal emulator in use.&lt;br /&gt;
&lt;br /&gt;
The X&#039;01&#039; setting (MODEL 6 support) is no longer used. &lt;br /&gt;
&lt;br /&gt;
The X&#039;02&#039; setting (Write Structured Field Query Support) now supports MODEL 6 terminals by default. &lt;br /&gt;
&lt;br /&gt;
The new X&#039;08&#039; setting always issues a Write Structured Field Query for Terminal Model Resets for terminals connected to Model 204 through VTAM or TELNET, provided that X&#039;02&#039; has been set. This precludes Terminal Model RESETs to Models that are not supported by the terminal emulator in use.&lt;br /&gt;
&lt;br /&gt;
===WEBDFLT===&lt;br /&gt;
At V7.7, the default access rule for non-SSL ports was changed from ALLOW * to DISALLOW *, meaning that unless any ALLOW rules were in place resulting in a login/password prompt, the port couldn&#039;t be accessed. The new &amp;lt;var&amp;gt;[[WEBDFLT_parameter|WEBDFLT]]&amp;lt;/var&amp;gt; parameter may be set to 1 for reversion to the old default of ALLOW *. This new parameter is enabled in V7.7 with the application of zap 77z090. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;var&amp;gt;RESET WEBDFLT&amp;lt;/var&amp;gt; requires system administrator privileges. It is recommended to reset the 1 bit of &amp;lt;var&amp;gt;WEBDFLT&amp;lt;/var&amp;gt; to zero after issuing a series of &amp;lt;var&amp;gt;JANUS DEFINE&amp;lt;/var&amp;gt; commands which need &amp;lt;var&amp;gt;WEBDFLT=1&amp;lt;/var&amp;gt;, as in the CCAIN input stream.&lt;br /&gt;
&lt;br /&gt;
==New and changed statistics==&lt;br /&gt;
===MPR, MBO, MCP, and RCV===&lt;br /&gt;
Introduced in zap 77z257.&lt;br /&gt;
&amp;lt;p&amp;gt;These statistics provide high water mark transaction information. (Since-last values will not be available until V78 GA.)&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;They are useful in conjunction with the &amp;lt;var&amp;gt;MAXPRE&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;MAXBOUT&amp;lt;/var&amp;gt;, and &amp;lt;var&amp;gt;MAXSUBT&amp;lt;/var&amp;gt; parameters. &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
User/system statistics:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;MPR: High water mark of transaction pre-images. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;MBO: High water mark of transaction backout pages. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;MCP: High water mark of transaction chkpoint spans. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
System statistics: &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;RCV: Number of blocks needed for subtransaction recovery &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt; &lt;br /&gt;
&amp;lt;p class=&amp;quot;note&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Notes:&amp;lt;/b&amp;gt; M204.0843 now displays the RCV statistic for subtransaction checkpoints.&lt;br /&gt;
The size of recovery checkpoint must be greater than the sum of the last RCV value plus the number of records in [[System_and_media_recovery#RESTART_recovery_considerations_for_sub-transaction_checkpoints|RESTART and RESTARTS]].&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
===DKWTS and DKWTMICS===&lt;br /&gt;
Introduced in zap 77z7289.&lt;br /&gt;
&amp;lt;p&amp;gt;The new system statistics DKWTS (DisK WaiTs) and DKWTMICS (DisK WaiT MICroSeconds) collect data to provide rough disk I/O service time numbers.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
DKWTS shows the number of disk I/O waits. DKWTMICS shows the total wait time for those waits in microseconds. Dividing the difference in DKWTMICS by the difference in DKWTS over an interval provides the average disk I/O wait time in microseconds.              &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;note&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Notes:&amp;lt;/b&amp;gt; &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The wait time does include internal Model 204 scheduler delays, so on a CPU bound Model 204 system, the service times calculated from DKWTS and DKWTMICS are likely to be an overestimate of actual service times.&amp;lt;/li&amp;gt;  &lt;br /&gt;
                                                                    &lt;br /&gt;
&amp;lt;li&amp;gt;DKWTS and DKWTMICS are not available in SirMon; use &amp;lt;var&amp;gt;[[MONITOR_command|MONITOR]] SYSTEM STATISTICS&amp;lt;/var&amp;gt; to view these statistics.&amp;lt;/li&amp;gt;&amp;lt;/ul&amp;gt;  &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Compatibility issues==&lt;br /&gt;
===&amp;lt;b id=&amp;quot;listNewInit&amp;quot;&amp;gt;&amp;lt;/b&amp;gt;$ListNew cannot be used in Initial clause===&lt;br /&gt;
It is now a compilation error if &amp;lt;var&amp;gt;$ListNew&amp;lt;/var&amp;gt; is attempted to be used in the &amp;lt;var&amp;gt;Initial&amp;lt;/var&amp;gt; clause of a &lt;br /&gt;
[[Using_variables_and_values_in_computation#Declare_statements_for_.25variables|declaration statement]].&lt;br /&gt;
&amp;lt;p&amp;gt;This change is propagated by zap maintenance to versions 7.5 (zap 75Z487), 7.6 (zap 76Z514), and 7.7 (zap 77z281) of Model 204.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote class=&amp;quot;note&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Note:&amp;lt;/b&amp;gt; Strictly speaking, this would not be considered a compilation error, because previously although &amp;lt;code&amp;gt;..&amp;amp;nbsp;Initial($ListNew)&amp;lt;/code&amp;gt; did not produce a compilation error, in almost all circumstances it would produce a snap if the initialized %variable were used with some other &amp;lt;var&amp;gt;$List&amp;lt;i&amp;gt;xxx&amp;lt;/i&amp;gt;&amp;lt;/var&amp;gt; invocation.&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Restricting the use of the CUSTOM=38 setting===&lt;br /&gt;
The &amp;lt;var&amp;gt;[[CUSTOM parameter|CUSTOM=38]]&amp;lt;/var&amp;gt; parameter setting, introduced at V7.5, inadvertently provided System Manager privileges to all users via the &amp;lt;var&amp;gt;RESET&amp;lt;/var&amp;gt; command. This &amp;lt;var&amp;gt;CUSTOM&amp;lt;/var&amp;gt; setting is now restricted to the &amp;lt;var&amp;gt;RESET&amp;lt;/var&amp;gt; of the &amp;lt;var&amp;gt;LAUDIT&amp;lt;/var&amp;gt; parameter.&lt;br /&gt;
&lt;br /&gt;
===Disabling of Closure support===&lt;br /&gt;
Due to a number of bugs related to Closure support, introduced at V7.7, this feature, which can best be described as exposed methods assigned to method variables, has been disabled in this release. This change was also made to V7.7 with application of zap 77z119.&lt;br /&gt;
&lt;br /&gt;
===Password delimiter enforced===&lt;br /&gt;
When using &amp;lt;var&amp;gt;IFSTRTN&amp;lt;/var&amp;gt; to log on to a Model 204 online from an IFAM2 application, both the logonid and password must be followed by a semicolon, which is the delimiter. For example:      &lt;br /&gt;
                                      &lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;CALL IFSTRTN(RC,&#039;logonid;password;&#039;...)&amp;lt;/p&amp;gt;&lt;br /&gt;
                 &lt;br /&gt;
If a semicolon does not follow the password string, the following message will now be issued:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;M204.2964: Password missing or too long &amp;lt;/p&amp;gt;                 &lt;br /&gt;
                                                         &lt;br /&gt;
Previously, a semicolon following the password was not required and the first blank served as a password delimiter.  However, as of V7.7, embedded blanks are valid password characters and a semicolon is now required to delimit the password.&lt;br /&gt;
&lt;br /&gt;
This change is enabled in V7.7 with the application of zap 77z231.&lt;br /&gt;
&lt;br /&gt;
===PAGESZ parameter validated===&lt;br /&gt;
Previously it was possible to set the &amp;lt;var&amp;gt;PAGESZ&amp;lt;/var&amp;gt; parameter to any value, although Model 204 internally supports one page size of 6184, and any deviation from this value would have led to problems during file creation. The value of this parameter is now controlled, such that setting it to any value other than 6184 will generate an M204.1149 message with the parameter being reset to 6184.&lt;br /&gt;
&lt;br /&gt;
===ECPRIV and the IDCAMS facility===&lt;br /&gt;
At V7.7 a security loophole was closed, whereby all ECF modules were run under external-authorizer profile of the calling user. Previously any ECF tasks were run under the owning job&#039;s external-authorizer profile, and in order for certain sites to retain that ability, a new setting of &amp;lt;var&amp;gt;ECPRIV&amp;lt;/var&amp;gt;, value 4, was introduced to retain the ability to run ECF tasks using the job&#039;s security profile. &lt;br /&gt;
&lt;br /&gt;
The &amp;lt;var&amp;gt;ECPRIV&amp;lt;/var&amp;gt; 4 setting potentially introduced a security loophole when calling the IDCAMS interface, based upon what the IDCAMS utility is able to do at a system level. Consequently as of this release, the &amp;lt;var&amp;gt;ECPRIV&amp;lt;/var&amp;gt; 4 setting will be ignored when calling the IDCAMS facility via ECF, and such IDCAMS processes will always use the calling user&#039;s security profile. Any existing jobs that use ECF to call the IDCAMS utility with the &amp;lt;var&amp;gt;ECFPRIV&amp;lt;/var&amp;gt; 4 bit set should be checked to ensure that the calling user&#039;s security profile still satisfies the job&#039;s requirements.&lt;br /&gt;
&lt;br /&gt;
===TCPOPTS is view-only===&lt;br /&gt;
In previous versions the &amp;lt;var&amp;gt;TCPOPTS&amp;lt;/var&amp;gt; parameter, which identifies the type of IP addressing in use (v4 or v6), was resettable, although it was always documented as a view-only parameter. The parameter is now handled as a view-only parameter, and any attempts to reset the parameter will result in the following message:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;gt;   M204.1123: Parameter TCPOPTS not reset&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===ZHPF command can only be issued by a system manager===&lt;br /&gt;
In previous versions it was possible to issue the &amp;lt;var&amp;gt;ZHPF&amp;lt;/var&amp;gt; command without being logged on. From this release onwards, a user must be logged on with system manager privileges in order to issue this command.&lt;br /&gt;
&lt;br /&gt;
Additionally, the command output will now only  display results for currently open files.&lt;br /&gt;
&lt;br /&gt;
This change is enabled in v7.7 with the application of zap 77z264.&lt;br /&gt;
&lt;br /&gt;
===Terminal MODEL reset failure===&lt;br /&gt;
If a reset of the terminal &amp;lt;var&amp;gt;MODEL&amp;lt;/var&amp;gt; parameter fails due to an undersized output page buffer, then in addition to the existing messages that inform the user of this failure:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;gt;    M204.1875 UNABLE TO RESET MODEL TO %C &lt;br /&gt;
    M204.1123: Parameter MODEL not reset&amp;lt;/p&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
the following message will now be issued:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;gt;    M204.1008: LOUTPB must be increased to at least &amp;lt;number&amp;gt; &amp;lt;/p&amp;gt;&lt;br /&gt;
                                                         &lt;br /&gt;
where &amp;lt;number&amp;gt; is the minimum value of &amp;lt;var&amp;gt;LOUTPB&amp;lt;/var&amp;gt; necessary to support the terminal model.&lt;br /&gt;
&lt;br /&gt;
This change is enabled in V7.7 with the application of zap 77z309.&lt;br /&gt;
&lt;br /&gt;
==Notes for system manager and installer==&lt;br /&gt;
===CRAM SVC installation is deprecated===&lt;br /&gt;
The CRAM SVC installation has been deprecated as of version 7.5. &amp;lt;br /&amp;gt;Installation of CRAM-XDM is described as part of the [[Model 204 installation]].&lt;br /&gt;
===Authorization and maintenance zaps===&lt;br /&gt;
When you download Rocket M204 product object files, all relevant authorization keys and all current maintenance zaps are pre-applied to the object files as part of the download process.&lt;br /&gt;
&lt;br /&gt;
==New and changed messages==&lt;br /&gt;
&lt;br /&gt;
See [[New and updated messages in Model 204 version 7.8|New and updated messages in Model 204 version 7.8]] for details.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category: Release notes]]&lt;/div&gt;</summary>
		<author><name>ELowell</name></author>
	</entry>
	<entry>
		<id>https://m204wiki.rocketsoftware.com/index.php?title=Application_Subsystem_development&amp;diff=117754</id>
		<title>Application Subsystem development</title>
		<link rel="alternate" type="text/html" href="https://m204wiki.rocketsoftware.com/index.php?title=Application_Subsystem_development&amp;diff=117754"/>
		<updated>2019-12-31T22:09:26Z</updated>

		<summary type="html">&lt;p&gt;ELowell: /* Automatic COMMIT */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Overview==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Although only a system manager can define a subsystem, the determination of a subsystem&#039;s options and components typically also involves the file manager and application developer. This page focuses on subsystem facility topics most relevant to the application developer:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The Subsystem Management facility of Dictionary lets you define a collection of procedures to &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; as a subsystem and to assign certain characteristics to that subsystem. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Advantages of subsystems===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The following table summarizes the advantages of subsystems over other [[SOUL]] procedure applications: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;tr class=&amp;quot;head&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Advantage &amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Subsystems...&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td nowrap&amp;gt;Minimal end-user intervention &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Require minimal knowledge of &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt;. The end user need not know what files and procedures exist for the application. The subsystem is invoked simply by entering the subsystem name as a &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; command.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Driver facility &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Eliminate the need for user-written drivers containing conditional INCLUDEs based on a global variable. This driver facility leads to smaller, more modular procedures that are easier to maintain and enhance.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td nowrap&amp;gt;Performance improvements &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Improve performance by saving and reloading compiled SOUL requests, called precompiled procedures. Depending upon how often precompiled procedures are included, 20-90% of the operating costs of a &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; application can be saved.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Error handling facilities &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Trap and handle &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; errors in a single, centralized routine. Each subsystem can have one error procedure that is invoked each time a &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; error occurs during that subsystem&#039;s processing. &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; provides facilities for determining the type of error that caused the error procedure to be invoked.   &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Security facilities &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Allow or restrict access to the subsystem. &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Parallel Query Option/204 compatibility &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Can be defined to allow referral to remote files and scattered groups.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Subsystem definition===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The characteristics and components of a subsystem are defined to &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; by the system manager during a process called subsystem definition. The defined options and components are stored in the system file CCASYS. Once a subsystem has been defined, all Dictionary users can display the options and components through Dictionary. For more information about:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;Displaying a subsystem definition, see [[System requirements for Application Subsystems#Overview of the Subsystem Management facility|Overview of the Subsystem Management facility]]. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Defining subsystems that refer to remote files and scattered groups, see [[PQO: Scattered APSY subsystems#Client and service subsystems|PQO client and service subsystems]].  &lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Subsystem design components==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
During subsystem definition, the components listed below can be defined. These components impact various aspects of subsystem design. The following table summarizes the required component designations.    &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;tr class=&amp;quot;head&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Component &amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Subsystem design requires designation of...&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td nowrap&amp;gt;Command line global variable &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;(Optional) parameter global variable. The parameter global variable allows any parameters specified by a user during a subsystem login to be stored in this variable and retained when control is transferred to another subsystem.     &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Communication global variable and exit value &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Communication global variable and exit value. The communication global variable is used to transfer control from one procedure to another. The exit value is used to leave the subsystem. Optionally, a reserved global variable is available for transferring control between subsystems.       &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Error global variable &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Error global variable. If an error occurs while the subsystem is executing, a three-character error code is stored in this variable. This code can then be used by an error procedure to determine the action to be taken by the subsystem.      &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Prefix designations &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Two prefixes for procedure names. These prefixes allow &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; to determine whether a procedure can be saved in its compiled form for later evaluation.   &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Processing components&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Specific procedures for types of special processing. These procedures allow &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; to determine the flow of control within a subsystem.   &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
==Command line global variable==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
A command line global variable allows you to store any parameters specified by an end user during a subsystem login and retain this information when control is transferred to another subsystem. The designation of a command line global variable is optional. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Using the command line global variable===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The command line global variable is used in the following manner:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;A user logs into a subsystem by entering the subsystem name followed by the parameter information. The total length of the parameter information entered by the user can consist of as many as 255 characters. (The portion of the command line reserved for parameter information is discarded if no parameter information is defined.)&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;The portion of the input following the subsystem name is placed into a command line global variable, which then is available to the application program. For example:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;PAYROLL &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;parameter1 parameter2&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
is the command that logs the current user into the subsystem named PAYROLL. The string &amp;lt;i&amp;gt;parameter1 parameter2&amp;lt;/i&amp;gt; is the subsystem command line and is made available to the application via a global variable. If CMDL is the name assigned to the command line global variable, the following statements:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;BEGIN&lt;br /&gt;
  %CMD.LINE = $GETG(&#039;CMDL&#039;)&lt;br /&gt;
  %FIRST.PARM =&lt;br /&gt;
     $Substr(%CMD.LINE,1,$INDEX(%CMD.LINE,&#039; &#039;)-1)&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
would assign the contents of the command line used to enter the subsystem to %CMD.LINE and the first parameter of the line to %FIRST.PARM. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Transferring control to another subsystem===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The contents of command line global variables are not deleted when control is transferred from one subsystem to another. A request can set the contents of the command line global variable of the destination subsystem before transferring control to that subsystem. The effect is the same as if the parameters were entered on the user&#039;s terminal.     &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Impact of the UTABLE command===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The contents of the command line global variable are not deleted by UTABLE commands which normally delete the contents of GTBL, as long as the UTABLE command is issued from within a subsystem.   &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
==Communication global variable==&lt;br /&gt;
 &lt;br /&gt;
===Transferring control===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
A communication global variable lets you transfer control at two levels:        &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;tr class=&amp;quot;head&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;From... &amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Control is transferred by a...&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;One procedure to another &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;User-designated global variable.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;One subsystem to another &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Reserved global variable named XFER. &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Transferring control between procedures===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Subsystem procedures pass control from one to another through the use of the communication global variable. The communication global variable name for a subsystem is specified in the subsystem definition. Each subsystem procedure must set the value of the communication global variable to the name of the next procedure to be executed.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Example====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
For example, the subsystem AUTOS has procedures PRE-MAIN.MENU and PRE-RPT.PGM and the communication global variable NEXT.&lt;br /&gt;
PRE-MAIN.MENU is currently executing and wants to pass control to&lt;br /&gt;
PRE-RPT.PGM. Before PRE-MAIN.MENU finishes, the function $SETG is used to store procedure name PRE-RPT.PGM in NEXT:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;IF $SETG(&#039;NEXT&#039;,&#039;PRE-RPT.PGM&#039;) THEN ...&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
After PRE-MAIN.MENU ends, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; examines NEXT and begins executing PRE-RPT.PGM.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Subsystem exit value====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
A subsystem is exited by setting the value of the communication global variable to the subsystem exit value. The exit value for the communication global variable is also specified in the subsystem definition.    &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
For the AUTOS subsystem used in the preceding example, the exit value of the communication global variable is defined as EXIT. To disconnect the user from the AUTOS subsystem after procedure PRE-RPT.PGM is finished executing, PRE-RPT.PGM assigns the exit value, EXIT, to the communication global variable, NEXT.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;IF $SETG(&#039;NEXT&#039;,&#039;EXIT&#039;) THEN&lt;br /&gt;
    .&lt;br /&gt;
    .&lt;br /&gt;
    .&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Transferring control between subsystems===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
One subsystem can invoke another subsystem by transferring control from itself to another subsystem. To accomplish this, you must perform these steps:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Set the communication global variable to the value XFER.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Set the global variable XFER to the name of the subsystem to which control is being passed. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When the current procedure finishes executing, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; disconnects the user from the old subsystem, transfers control to the new subsystem, and invokes the login procedure for the new subsystem. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Design considerations====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You should consider the following factors when coding logic for transferring control between two subsystems:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The transfer always invokes the login procedure of the subsystem receiving control. For more information on the login procedure, refer to the discussion [[#Subsystem processing flow|Subsystem processing flow]].&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;The destination subsystem must be active. The $SUBSYS function should be used to determine if the subsystem to which control is being transferred is active; refer to the discussion on [[#Subsystem procedure control functions|Subsystem procedure control functions]]. If the destination subsystem does not use the automatic start option, (see [[#Operating options|Operating options]]), the subsystem must be started before control is passed.   &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;The destination subsystem should not reset LGTBL if any parameters are passed in global variables.   &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;To return to the original subsystem, a global variable must be set to the name of the original subsystem. The communication global variable and the XFER global variable can then be used with the global variable that stores the subsystem name to return control to the original subsystem.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;The destination subsystem can return control to the procedure that the user was in when the user transferred. To do this, the subsystem must save the name of the procedure in a global variable. In addition, the login procedure must contain logic to return control to the procedure that the user was in.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;If the transferring subsystem is in test mode (see [[#Security options|Security options]]), the transferring subsystem stops after it passes control. The destination subsystem is not placed in test mode. &lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Example====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The following request in procedure PRE-SUB.MENU provides an example of subsystem transfer code. CREDIT and AUTOS are two defined subsystems with the automatic start option. (See [[#Automatic start|Automatic start]].) Subsystem CREDIT transfers control to AUTOS by setting NEXT (the communication global variable) to XFER and the global variable XFER to AUTOS. After the PRE-SUB.MENU procedure ends, the user is connected to AUTOS.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;BEGIN&lt;br /&gt;
.&lt;br /&gt;
.&lt;br /&gt;
.&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;*SELECTION = 4 INDICATES CHOICE OF AUTOS SUBSYSTEM&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;*&lt;br /&gt;
SEL.AUTOS: IF %CREDITMENU:SELECTION = 4 AND -&lt;br /&gt;
              $SUBSYS(&#039;AUTOS&#039;) =1 THEN&lt;br /&gt;
                  IF $SETG(&#039;XFER&#039;,&#039;AUTOS&#039;) OR -&lt;br /&gt;
                      $SETG(&#039;NEXT&#039;,&#039;XFER&#039;) OR -&lt;br /&gt;
                      $SETG(&#039;SUBFROM&#039;,&#039;CREDIT&#039;) OR -&lt;br /&gt;
                      $SETG(&#039;PROCFROM&#039;,&#039;PRE-SUB.MENU&#039;) THEN&lt;br /&gt;
                      PRINT &#039;GLOBAL TABLE FULL&#039;&lt;br /&gt;
                  END IF&lt;br /&gt;
                  JUMP TO GET.NEXT&lt;br /&gt;
                    .&lt;br /&gt;
                    .&lt;br /&gt;
                    .&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Coding considerations===&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Procedures to which control is passed via the communication global variable must be stored in a designated procedure file. The procedure file is the default file for a subsystem application unless the default file is explicitly changed by a DEFAULT command or overridden by an IN clause.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Each procedure must set the communication global variable to indicate the next procedure to be included. If this variable is not set, an error or loop occurs.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;To exit the subsystem, the communication global variable must be set to the exit value. Server table sizes and other parameters should be reset to the values existing prior to entering the subsystem so that the user is returned to his/her normal operating environment. Parameter values are restored automatically when the automatic login option is used. &lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
==Error global variable==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The name of the error global variable must be specified in the subsystem definition. Whenever an error is detected that is not trapped by an ON unit, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; automatically sets the subsystem&#039;s error global variable to a value which indicates the type of error that occurred.   &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Error code values===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The &amp;quot;Error global variable values and reasons&amp;quot; table lists the error global variable values and their corresponding causes. Correct the cause of the error, and/or change your error procedure as discussed in [[#Error procedures|Error procedures]]. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;caption&amp;gt;Error global variable values and reasons&amp;lt;/caption&amp;gt;&lt;br /&gt;
&amp;lt;tr class=&amp;quot;head&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Error code&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Reason&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;ATN &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;User pressed attention&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;BUG &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Evaluation errors&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;CAN&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Request evaluation canceled due to invalid terminal I/O in error procedure after BUMP or inactive thread time out.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;CNT &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Counting errors&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;FIL - BROKEN &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Referenced file is not initialized, full, or physically inconsistent. Check the audit trail to determine the condition of the file. &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;FIL - NOT OPEN &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Referenced file not open&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;GRP - FTBL &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;FTBL too small&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;GRP - NOT OPEN &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Group not open&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;GRP - TEMP FIELD &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;TEMP group field has wrong type (see [[#Restrictions for temporary and ad hoc groups in precompiled procedures|Restrictions for temporary and ad hoc groups in precompiled procedures]])&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td nowrap&amp;gt;GRP - TEMP MISMATCH &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;TEMP group has wrong type&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;INCLUDE MAX&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Maximum iterations value has been exceeded.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;HNG &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Phone hung up, connection lost&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;HRD &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Hard restart&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;REC &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Record locking table filled up during the load of a&lt;br /&gt;
precompiled request&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;RFR&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;After several tries, an APSY failed to invoke a procedure, because the procedure is in the process of being refreshed.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;SFT &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Soft restart&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;TBL - FSCB &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;FSCB too small&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;TBL - NTBL &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;NTBL too small&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;TBL - QTBL &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;QTBL too small&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;TBL - STBL &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;STBL too small&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;TBL - VTBL &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;VTBL too small&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Error procedures===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
An error procedure must test for different error conditions. The resulting value stored in the error global variable helps the application programmer determine the type of error that occurred.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;For all error codes except ATN, the error procedure should avoid re-executing the procedure that caused the error; otherwise, the error recurs. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;In most cases, the error procedure should display an informational message and set the global communication variable to the exit value. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;If a HNG error code is indicated, all terminal I/O (such as PRINT, READ) is ignored. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;If a HNG, HRD, or SFT error code is indicated, no terminal I/O (such as PRINT or READ) should be attempted. Instead, send a message to the audit trail in an AUDIT statement that indicates the error code encountered.   &lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Considerations for the communications global variable====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The communications global variable is ignored and disconnect processing completed when one of the following conditions occurs:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Error is a soft restart, a hard restart, or a phone hang-up condition. &lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If you attempt to set the communications global variable to the name of another procedure, the procedure is not executed.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;No error procedure is specified in the subsystem definition.  &lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
An example illustrating how a subsystem error procedure can test for different error conditions is provided in [[#Error procedure|Error procedure]]. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
==Precompiled and non-precompiled procedures==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can use two types of procedures in a subsystem:     &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt; &lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;Precompiled procedure&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt; &lt;br /&gt;
The first time a precompilable procedure is invoked after a subsystem starts, it is compiled and stored for re-use. Because the compiler phase is bypassed each subsequent time the procedure is invoked (except as noted below), precompilation saves both CPU and elapsed time. Exceptions include the following:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The procedure is recompiled the first time it is invoked for each SCLASS. The new compilation is evaluated, then discarded. It does not replace the original stored compilation. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Further recompilations might be required due to temporary group differences. See [[#Recompiling precompiled procedures|Recompiling precompiled procedures]] for more on this. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;Non-precompiled procedure&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt; &lt;br /&gt;
A non-precompiled procedure is compiled each time it is invoked.&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
All procedures, whether precompiled or not, are invoked using the communication global variable.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Defining prefixes===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
During subsystem definition, two prefixes must be defined. The first prefix identifies precompiled procedures; the second identifies non-precompiled procedures. All procedures that are included for the subsystem through the use of the communication global variable (such as the login and main processing procedures) must have names that begin with one of these prefixes.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Contents of subsystem procedures===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Subsystem procedures can contain &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; commands, a request, multiple requests, continued requests, sections of User Language code (for example, subroutines), or any combination thereof. However, the form of the procedure affects whether the procedure can be precompiled and should be taken into account when the subsystem is designed. Restrictions for precompiled procedures are discussed in detail below.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Shared versions of precompiled procedures===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Server I/O can be reduced by allowing users executing shared precompiled procedures to use a shared version of QTBL.&lt;br /&gt;
See [[Performance monitoring and tuning#Resident Request feature for precompiled procedures|Resident Request feature for precompiled procedures]]. &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Restrictions for precompiled procedures===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
&amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; must ensure that all of the code compiled and saved for a request with the precompiled prefix is consistent for all loading users. To achieve consistency, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; restricts the way in which certain features are used.    &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Note the following restrictions for precompiled procedures when designing subsystem procedures:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Procedures must contain exactly one request. The last statement must be END or END MORE.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Requests cannot start with MORE.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Procedures that include multiple BEGIN/END blocks are not eligible for precompilation.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Requests must not refer to files or permanent groups that are not mentioned in the subsystem definition.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Precompiled procedures can contain the User Language INCLUDE statement. The included procedures must be from a subsystem file. Any code inserted as a result of an INCLUDE statement is subject to all the restrictions for precompiled procedures. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;If a precompiled procedure issues the INCLUDE command to compile and run a User Language request, the INCLUDE command is saved, not the compilation of the request that was included.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Compiler table sizes must be the same each time a precompiled procedure is invoked. The UTABLE command should be used carefully.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Dummy strings (??, ?$, ?&amp;amp;amp;) in precompiled procedures are resolved only during compilation for the first user.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Dummy string substitution does not take place when saving commands that contain dummy strings. Instead, when the saved commands are loaded and executed, the current value of the dummy string is used. For example, if you include the following command in a precompiled procedure, whatever is currently in the global COMMAND is executed. &lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;?%COMMAND&lt;br /&gt;
&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;If a subsystem file is referenced by a precompiled procedure, no user can RESTORE or INITIALIZE the file, or RENAME, DELETE, or REDEFINE a field while the subsystem is active.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Procedures in UNLOCKed members of a PROCFILE GROUP are not precompiled. &lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Restrictions for temporary and ad hoc groups in precompiled procedures===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Precompiled requests can refer to temporary or ad hoc groups as long as the files making up the group are specified in the subsystem definition. A temporary group of the same name must have the same composition characteristics for all loading users, as described below. If this condition is not met, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; sets the error global variable to GRP-TEMP MISMATCH (see [[#Error global variable|Error global variable]]).&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The temporary group for all loading users must be the same type. &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; assigns a type, based on the following file conditions:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Some files have record security.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;All files are sorted or all are hashed.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The sort or hash key has the same name in all files. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Fields of the same name in the temporary group must be of the same type. Each field referenced in a temporary group each time a precompiled procedure is invoked must be found in a file. If this condition is not met, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; sets the error global variable to GRP-TEMP FIELD (see [[#Error global variable|Error global variable]]). &lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Field definition attributes can change for fields in temporary groups between compile and loading time. The following changes are allowed:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;If the field is NON-CODED in any file at compile time, it can be CODED in all files at loading time.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;If the field is BINARY or FLOAT in any file at compile time, it can be STRING in all files at loading time.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;If the field is non-NUMERIC RANGE in any file at compile time, the field can be NUMERIC RANGE in all of the files at loading time.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Recompiling precompiled procedures===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When designing applications which use precompiled procedures and temporary groups, be aware that temporary groups can cause &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; to recompile precompiled procedures under certain conditions. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Precompiled procedures are recompiled when the request references a temporary group and the:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Compiling user&#039;s temporary group consists of files which are smaller than one or more of the files in the loading user&#039;s temporary group of the same name.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Compiling user&#039;s temporary group has fewer files than the loading user&#039;s temporary group of the same name. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Update and retrieve privileges do not match those of the compiling user&#039;s temporary group (of the same name). &lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If one user&#039;s temporary group contains one large file, and another user&#039;s temporary group contains a number of smaller files, it is possible that a precompiled procedure is recompiled every time it is invoked. To prevent constant recompiling when files are of different sizes, compile temporary groups originally with the largest files and the greatest number files you expect to be included in the temporary group.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If, despite precautions, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; must discard and recompile a precompiled procedure, the loading user must have exclusive access to that procedure: no other user can be executing the procedure within the same subsystem. If another user is executing the procedure, the loading user recompiles a private copy of the procedure. &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; discards the private copy when execution has completed.   &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Procedure compilation and Parallel Query Option/204===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When a non-precompiled procedure that references remote files is invoked, one or more remote nodes participate in the compilation and evaluation. When a precompiled procedure is invoked, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; loads the procedure on each of the nodes that participated in the original compilation.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When a subsystem member becomes unavailable during evaluation, the appropriate ON unit is activated. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Errors which occur while loading a remote procedure produce error messages which have the prefix RMT in the global error variable.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Saving compilations====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
As part of the compilation process, a list of remote nodes referenced in the request is generated with the compiled code. When compilation is complete, the compilation is saved along with the list of nodes. Each remote node referenced in the request is sent a signal to save the compilation. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If for any reason a compilation cannot be saved by a server node, the entire save operation fails.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Loading saved compilations====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
At the client node, the saved remote node reference list is checked to see which nodes are loading the request. When the request is loaded on the client, a signal is transmitted to each referenced server node to load the compilation. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====New and missing nodes====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
A temporary group can be changed so that a node is &amp;lt;b&amp;gt;new&amp;lt;/b&amp;gt; (not previously referenced) or &amp;lt;b&amp;gt;missing&amp;lt;/b&amp;gt; (referenced but no longer available). [[#New and missing nodes|Temporary groups with new and missing nodes]] shows how new and missing nodes affect recompilations and saves. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;caption&amp;gt;Temporary groups with new and missing nodes&amp;lt;/caption&amp;gt;&lt;br /&gt;
&amp;lt;tr class=&amp;quot;head&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;&amp;amp;nbsp;&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;If there are&lt;br /&gt;
missing nodes...&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;If there are no&lt;br /&gt;
missing nodes....&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;And there are new nodes...&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Recompile the procedure, do not save&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Recompile and save again&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;And there are no new nodes...&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Just load and evaluate&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Just load and evaluate&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt; &lt;br /&gt;
 &lt;br /&gt;
====Recompiling saved requests====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Saved requests are always recompiled if a new node is introduced into a temporary group. Recompilation can cause a noticeable delay in response time.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
In addition, the following changes in the composition of a subgroup also force recompilation of a request. A subgroup is the group of files at a server node referenced as a part of a group.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
&amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; recompiles saved requests when:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The number of files in the subgroup has increased (for example, if a user&#039;s request includes a file that was unavailable to the previous user)&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;The maximum number of segments in a subgroup has increased &lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
==Subsystem procedures==&lt;br /&gt;
 &lt;br /&gt;
===Types of subsystem procedures===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Subsystem development involves writing the collection of procedures that make up a subsystem. Subsystem procedures can be categorized as one of four types:     &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;tr class=&amp;quot;head&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Procedure category &amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Performs...&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;var&amp;gt;Initialization&amp;lt;/var&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Specified operations each time the subsystem is initialized.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;var&amp;gt;Login&amp;lt;/var&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;As the entry point for each user of the subsystem.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;var&amp;gt;Main processing&amp;lt;/var&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Specific tasks of the subsystem.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;var&amp;gt;Error&amp;lt;/var&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Error handling. &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Guidelines and restrictions===&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Procedures should be small and modular.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Included procedures normally are included by using the INCLUDE command. Included procedures cannot be precompiled.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Non-subsystem files can be opened and referenced only by non precompiled procedures.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;If a subsystem file is referenced by a precompiled procedure, no user can RESTORE or INITIALIZE the file, or RENAME, DELETE, or REDEFINE a field while the subsystem is active.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;A subsystem procedure cannot issue the CREATE command for a subsystem file.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;LXTBL and LFTBL cannot be reset from within a subsystem procedure.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;All DO YOU REALLY WANT TO messages are suppressed and the default action is assumed. The default action for each type of message is listed in [[M204.1076]].  &lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If you do not wish the default action to be executed, statements to handle a situation that would invoke the message should be added to the procedure. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Initialization procedure===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The initialization procedure stores instructions for tasks you need to perform each time the subsystem is initialized. An example of such a task is the initialization of a particular work file.   &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The initialization procedure is optional. If a subsystem uses an initialization procedure, the procedure name must be specified in the subsystem definition.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Login procedure===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The login procedure performs the start up for each user of an application. Every time a user invokes the subsystem, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; automatically includes the subsystem login procedure. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The login procedure name must be specified in the subsystem definition.   &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Typically, the login procedure is used to store current server table sizes in the global variable table for later reference, issue UTABLE commands to set compiler table sizes for the subsystem, and set the communication global variable to the name of the procedure that displays an initial menu. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Example&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Here is a sample login procedure:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;CLEARG&lt;br /&gt;
BEGIN&lt;br /&gt;
IF $SETG(&#039;NTBL&#039;,$VIEW(&#039;LNTBL&#039;)) OR -&lt;br /&gt;
   $SETG(&#039;VTBL&#039;,$VIEW(&#039;LVTBL&#039;)) OR -&lt;br /&gt;
   $SETG(&#039;QTBL&#039;,$VIEW(&#039;LQTBL&#039;)) OR -&lt;br /&gt;
   $SETG(&#039;STBL&#039;,$VIEW(&#039;LSTBL&#039;)) OR -&lt;br /&gt;
   $SETG(&#039;FSCB&#039;,$VIEW(&#039;LFSCB&#039;)) OR -&lt;br /&gt;
   $SETG(&#039;LECHO&#039;,$VIEW(&#039;LECHO&#039;)) OR -&lt;br /&gt;
   $SETG(&#039;NEXT&#039;,&#039;PRE-MAIN.MENU&#039;) THEN&lt;br /&gt;
         PRINT &#039;GTBL FULL&#039;&lt;br /&gt;
END IF&lt;br /&gt;
END&lt;br /&gt;
UTABLE LNTBL=450,LQTBL=2300,LVTBL=600,LSTBL=3300&lt;br /&gt;
UTABLE LFSCB=5000&lt;br /&gt;
RESET LECHO 0&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Main processing procedures===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Main processing procedures perform the specific tasks of the subsystem. There can be as few or as many main processing procedures as necessary for the subsystem to perform its tasks. Main processing procedures are not specified in the subsystem definition. However, each procedure must follow the procedure naming conventions and subsystem coding rules discussed on this page.   &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Example====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Here is a sample procedure:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;BEGIN&lt;br /&gt;
MENU MAINMENU&lt;br /&gt;
    TITLE &#039;AUTO INSURANCE SYSTEM (MAIN MENU)&#039; AT 10 BRIGHT&lt;br /&gt;
    MAX PFKEY 12&lt;br /&gt;
    SKIP 5 LINES&lt;br /&gt;
    PROMPT &#039;MAINTENANCE&#039; AT 10 BRIGHT&lt;br /&gt;
    SKIP 2 LINES&lt;br /&gt;
    PROMPT &#039;REPORTING&#039; AT 10 BRIGHT&lt;br /&gt;
    SKIP 2 LINES&lt;br /&gt;
    PROMPT &#039;EXIT&#039; AT 10 BRIGHT&lt;br /&gt;
END MENU&lt;br /&gt;
    %NEXT = &#039;X&#039;&lt;br /&gt;
    REPEAT WHILE %NEXT = &#039;X&#039;&lt;br /&gt;
        READ MAINMENU&lt;br /&gt;
        IF %MAINMENU:SELECTION = &#039;1&#039; THEN&lt;br /&gt;
            %NEXT = &#039;PRE-MAINT.PGM&#039;&lt;br /&gt;
        ELSEIF %MAINMENU:SELECTION = &#039;2&#039; THEN&lt;br /&gt;
            %NEXT = &#039;PRE-RPT.PGM&#039;&lt;br /&gt;
        ELSE %NEXT = &#039;NON-FINISH&#039;&lt;br /&gt;
        END IF&lt;br /&gt;
    END REPEAT&lt;br /&gt;
CHK.GTAB: IF $SETG(&#039;NEXT&#039;,%NEXT) THEN&lt;br /&gt;
              AUDIT &#039;GLOBAL TABLE FULL - &amp;quot;NEXT&amp;quot;&#039;&lt;br /&gt;
          END IF&lt;br /&gt;
END&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Error procedure===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
An error procedure, which is optional, performs error handling. This procedure is invoked when a condition occurs that cannot be trapped by the executing procedure (for example, a compiler error or an attention with no ON ATTENTION unit coded). An error procedure tests for different error conditions and determines the next procedure to execute, based on the error code value stored in the error global variable. Terminal I/O in a subsystem error procedure following a BUMP or inactive thread timeout results in cancellation of the procedure.       &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Example====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The following error procedure assumes that the error global variable name is ERRCLASS, the communication global variable name is NEXT, and the exit value of the communication global variable is EXIT.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;PROCEDURE SYS-ERROR&lt;br /&gt;
BEGIN&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;*&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;* GET THE VALUE OF THE ERROR CLASS GLOBAL VARIABLE&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;*&lt;br /&gt;
GET.VALUE: %ERRORCODE = $GETG(&#039;ERRCLASS&#039;)&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;*&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;* IF THE USER HIT ATTENTION, INCLUDE THE MAIN MENU SCREEN&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;*&lt;br /&gt;
IF.ERROR: IF %ERRORCODE = &#039;ATN&#039; THEN&lt;br /&gt;
             %NEXT = &#039;SYS-MAIN-MENU&#039;&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;*&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;* IF PHONE WAS HUNG UP, OR ANY KIND OF RESTART, THEN AUDIT&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;* MESSAGE AND EXIT.  DO NOT ATTEMPT ANY TERMINAL I/O&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;* SINCE USER IS NO LONGER CONNECTED.&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;*&lt;br /&gt;
              ELSEIF %ERRORCODE = &#039;HNG&#039; OR -&lt;br /&gt;
                     %ERRORCODE = &#039;SFT&#039; OR -&lt;br /&gt;
                     %ERRORCODE = &#039;HRD&#039; THEN&lt;br /&gt;
                     AUDIT &#039;SUBSYSTEM ERROR CODE: &#039; -&lt;br /&gt;
                        WITH %ERRORCODE&lt;br /&gt;
                     %NEXT = &#039;EXIT&#039;&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;*&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;* CHECK FOR BROKEN FILE&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;*&lt;br /&gt;
              ELSEIF %ERRORCODE = &#039;FIL - BROKEN&#039; THEN&lt;br /&gt;
                     PRINT &#039; SUBSYSTEM FILE IS BROKEN&#039;&lt;br /&gt;
                     PRINT &#039; CONTACT YOUR FILE MANAGER &#039;&lt;br /&gt;
                     %NEXT = &#039;EXIT&#039;&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;*&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;* SOME UNACCOUNTABLE ERROR HAS OCCURRED, SET EXIT&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;* ROUTINE, AND EXIT WITHOUT DOING ANY TERMINAL I/O.&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;*&lt;br /&gt;
              ELSE&lt;br /&gt;
                    AUDIT &#039;NOT ACCOUNTED FOR SUBSYSTEM ERROR CODE: &#039; -&lt;br /&gt;
                 WITH %ERRORCODE&lt;br /&gt;
                 %NEXT = &#039;EXIT&#039;&lt;br /&gt;
          END IF IF.ERROR&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;*&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;* SET COMMUNICATIONS VARIABLE TO EXIT VALUE&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;*&lt;br /&gt;
COMM.VAR: IF $SETG(&#039;NEXT&#039;,%NEXT) THEN&lt;br /&gt;
              AUDIT &#039;GTBL full in SYS-ERROR trying to set NEXT to &#039; WITH %NEXT&lt;br /&gt;
              PRINT &#039;GTBL FULL&#039;&lt;br /&gt;
          END IF&lt;br /&gt;
END.REQUEST: *&lt;br /&gt;
END&lt;br /&gt;
END PROCEDURE&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
==Security options==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
During subsystem definition, various options are specified for a subsystem. Security options determine subsystem command and file and group privileges assigned to a user.   &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can also specify system operation options during subsystem definition. System operation options are discussed in the [[#Operating options|Operating options]] section.&lt;br /&gt;
For a detailed discussion of subsystem definition options, refer to [[System requirements for Application Subsystems]]. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Status of subsystem===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The status of the subsystem affects the type of subsystem security that is implemented. The subsystem can have one of three status settings: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;tr class=&amp;quot;head&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Status setting &amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Allows access to...&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Public &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;All users. All users who enter a public subsystem are assigned to the single subsystem user class and have the same set of privileges.   &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Semipublic &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;All users but permits different privileges to be assigned for each user. In a semipublic subsystem, one subsystem user class can be defined as the default class for all users not specifically assigned to another subsystem user class. &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Private &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Only to specified users. Using a private subsystem prevents any unauthorized entry into the subsystem. All users who are allowed access must be assigned to one of the defined user classes. Unlike a semipublic subsystem, a private subsystem has no default user class.    &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===User class===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The set of privileges assigned to a user is based on the user&#039;s subsystem user class or SCLASS. The SCLASS is used by &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; to determine the privileges assigned for each file and group in the subsystem when files are opened for the user. File and group privileges must be specified in the subsystem definition because &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; bypasses &amp;lt;var&amp;gt;OPENCTL&amp;lt;/var&amp;gt; parameter settings and file passwords when opening subsystem files and groups for each user. Whenever the user invokes the subsystem, he/she is assigned the file and group privileges of that subsystem user class.         &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The SCLASS also determines whether or not the user can issue any of the subsystem control commands listed below. If &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; discovers that the user does not have the correct privileges to issue a command, an error message is displayed.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;tr class=&amp;quot;head&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Subsystem control commands &amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Directs Model&amp;amp;nbsp;204 to...&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;var&amp;gt;DEBUG SUBSYSTEM&amp;lt;/var&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Establish a test environment for a multiuser version of the &amp;lt;var&amp;gt;TEST&amp;lt;/var&amp;gt; command extension. The subsystem does not have to be stopped to issue the &amp;lt;var&amp;gt;DEBUG&amp;lt;/var&amp;gt; command. &lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When a user enters a subsystem in &amp;lt;var&amp;gt;TEST&amp;lt;/var&amp;gt; or &amp;lt;var&amp;gt;DEBUG&amp;lt;/var&amp;gt; mode, the user&#039;s MSGCTL parameter setting is not changed. All error and informational messages that are not suppressed by the user&#039;s &amp;lt;var&amp;gt;MSGCTL&amp;lt;/var&amp;gt; setting are displayed on the user&#039;s terminal.  &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;var&amp;gt;START SUBSYSTEM&amp;lt;/var&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Activate the subsystem and make it available for use. If the subsystem is inactive when the &amp;lt;var&amp;gt;START&amp;lt;/var&amp;gt; command is issued, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; opens all the subsystem files and includes the subsystem initialization procedure. &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;var&amp;gt;STOP SUBSYSTEM&amp;lt;/var&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Stop the subsystem and make it unavailable for use. Once a subsystem is stopped and all users have exited, then all locking and storage resources held by the subsystem are released and all the subsystem files and groups are closed. &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;var&amp;gt;TEST&amp;lt;/var&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Establish a single user test environment. The &amp;lt;var&amp;gt;TEST&amp;lt;/var&amp;gt; command is extended to &amp;lt;var&amp;gt;TEST DEBUG SUBSYSTEM&amp;lt;/var&amp;gt;. The subsystem must be stopped to enter &amp;lt;var&amp;gt;TEST&amp;lt;/var&amp;gt; mode.&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;note&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Note:&amp;lt;/b&amp;gt; Several aspects of &amp;lt;var&amp;gt;START SUBSYSTEM&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;STOP SUBSYSTEM&amp;lt;/var&amp;gt; processing are unique to distributed applications. For a discussion, see [[PQO: Scattered APSY subsystems#Subsystem command processing|Subsystem command processing]].&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Processing of security violations===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The application subsystem traps security violations that occur while a user is running in a subsystem. File read and update security violations, procedure security violations, and field level security violations are interpreted as compilation or evaluation errors in the error global variable. The audit trail messages produced when the error occurred can be examined in order to identify a compilation or evaluation error as a security violation. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Compiling procedures with a different SCLASS===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
In the following situation, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; saves User 1&#039;s compilation:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;There are multiple SCLASSes for a subsystem.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;User 1 saves a procedure under SCLASS 1.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;User 2, under SCLASS 2, recompiles the procedure.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;User 2&#039;s global variables contain different information from User 1&#039;s so User 2 tries to open different files or groups than User 1.   &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
However, User 2&#039;s compilation is not saved: User 2 receives an error message:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;M204.0468: COMPILATION NOT SAVED - &amp;lt;i&amp;gt;reason&amp;lt;/i&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Operating options==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Operating options affect certain aspects of the overall behavior of a subsystem. Operating options are distinct from security options, which are discussed in [[#Security options|Security options]].&lt;br /&gt;
Subsystem options are also discussed in [[System requirements for Application Subsystems]]. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The following table lists the operating options and what they determine.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;tr class=&amp;quot;head&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Operating option &amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Determines whether...&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Automatic start &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Subsystem automatically starts for the first user entering the subsystem.   &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Locking files and groups for subsystem use &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Users from outside the subsystem can open and update subsystem files while the subsystem is active.   &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Automatic login &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Users are automatically logged into &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; upon entering a subsystem.   &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Automatic logout &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Users are automatically logged out of &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; upon exiting a subsystem.   &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Automatic COMMIT &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Any outstanding updates are committed automatically whenever a subsystem procedure ends and transfers control using the communications global variable.     &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Message displays &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Disconnect, informational, and error messages are displayed for subsystem users.   &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;File usage &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Subsystem can run when one or more files used by the subsystem are unavailable for use. &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Automatic start===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If the automatic start option is selected, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; invokes subsystem initialization when the first user attempts to enter the subsystem. The subsystem can be used without a privileged user first issuing the START SUBSYSTEM command.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If the automatic start option is not selected, subsystem initialization occurs only when the START SUBSYSTEM command is issued. The subsystem is then available for use.       &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Locking files and groups for subsystem use===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If the locking files and groups option is selected, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; prevents users that are not running in the subsystem from opening any of the subsystem files or groups while the subsystem is active.      &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If the locking files and groups option is not selected, users from outside the subsystem can retrieve, modify, or delete records in a subsystem file while the subsystem is active.   &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Automatic login===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If the automatic login option is selected, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; logs on the user when the user enters a subsystem. The user is logged in using the subsystem name as the &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; user ID. If the user already has logged into &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; before entering the subsystem, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; first closes all the user&#039;s files and logs out the user.    &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The LOGOUT operations that occur as a result of Automatic Login (both at subsystem Login and Disconnect) ignore the SYSOPT=8 (DISCONNECT on LOGOUT) option.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If the login option is not selected, the user&#039;s &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; user ID is used during subsystem processing.   &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Automatic logout===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If the automatic logout option is selected, the user is logged out of &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; upon exiting the subsystem. This option is particularly useful when combined with the automatic disconnect feature of &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt;.    &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The START SUBSYSTEM command ignores the SYSOPT=8 option for the Automatic Logout subsystem.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If the automatic logout option is not selected, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; logs the user out of the subsystem in one of three ways:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;If the user was previously logged into &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt;, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; restores the user&#039;s original user ID and returns the user to the &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; command environment.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;If the user was not previously logged into &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt;, the user is logged out of &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt;.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;The SYSOPT=8 option causes the user to be disconnected from &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt;.  &lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Automatic COMMIT===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If the automatic COMMIT option is selected, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; automatically issues a COMMIT statement for any outstanding updates whenever a subsystem procedure terminates and transfers control using the communication global variable. If the COMMIT option is not selected, the application must issue the COMMIT statement to commit any pending updates.                &amp;lt;/p&amp;gt;&lt;br /&gt;
===Commit exits=== &lt;br /&gt;
&amp;lt;p class=&amp;quot;note&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Note:&amp;lt;/b&amp;gt; This feature is available as of Model 204 release 7.8.&amp;lt;/p&amp;gt;&lt;br /&gt;
A commit exit enables you to set up SOUL code to run at commit time, as in: &amp;quot;on commit run &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;xxx&amp;lt;/var&amp;gt;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
When the user executes a commit (or an implied commit), the APSY specified by &amp;lt;var&amp;gt;COMMITX&amp;lt;/var&amp;gt; is driven on a transactional daemon.&lt;br /&gt;
&lt;br /&gt;
The APSY follows standard APSY rules. The commit exit is only driven once; that is, subsequent commits do not call the APSY.  The commit exit is only driven for TBO transactions.&lt;br /&gt;
&lt;br /&gt;
A commit/backout coded inside the commit exit commits/backs out the active transaction. Any new transaction within the exit causes a new update unit to begin.&lt;br /&gt;
&lt;br /&gt;
====COMMITX parameter====&lt;br /&gt;
The commit exit runs within the APSY defined by the &amp;lt;var&amp;gt;COMMITX&amp;lt;/var&amp;gt; parameter and uses normal APSY processing.&lt;br /&gt;
&lt;br /&gt;
The new parameter &amp;lt;var&amp;gt;COMMITX&amp;lt;/var&amp;gt; is settable from User 0&#039;s parameter line or by the system manager. It can be reset at any time by the system manager.&lt;br /&gt;
&lt;br /&gt;
Setting/Resetting the parameter sends a DYRWT message to the issuer and requires a Yes or No response (unless set/reset by user0).&lt;br /&gt;
&lt;br /&gt;
If &amp;lt;var&amp;gt;COMMITX&amp;lt;/var&amp;gt; is specified, all APSY subsystems participate by default but any can be exempted.&lt;br /&gt;
&lt;br /&gt;
====Activating the commit exit APSY====&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;To activate the commit exit APSY, issue:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;Reset COMMITX &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;apsyname&amp;lt;/var&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
where &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;apsyname&amp;lt;/var&amp;gt; is the APSY where you are running the commit exit.&lt;br /&gt;
&amp;lt;p&amp;gt;Enter &amp;lt;code&amp;gt;Yes&amp;lt;/code&amp;gt; at the confirmation prompt.&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;To exempt any APSY subsystem:&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Pull up the SUBSYSMGMT &amp;lt;var&amp;gt;Operational Parameters&amp;lt;/var&amp;gt; screen for that subsystem.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;At the &#039;Subsystem supports commit exit&#039; item, enter &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt;.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt; &lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;To deactivate the commit exit APSY, issue: &lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;Reset COMMITX&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Enter &amp;lt;code&amp;gt;Yes&amp;lt;/code&amp;gt; at the confirmation prompt.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Examples====&lt;br /&gt;
&lt;br /&gt;
The following are examples of login exits which print all changed records.&lt;br /&gt;
=====Example 1=====&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;b                                           &lt;br /&gt;
%d object xmldoc auto new                   &lt;br /&gt;
%rec object xmldoc auto new                 &lt;br /&gt;
%d:loadchangedrecords                       &lt;br /&gt;
%f string len 8                             &lt;br /&gt;
%r float                                     &lt;br /&gt;
%c float initial(1)                         &lt;br /&gt;
repeat %d:selectcount(&#039;//Record&#039;) times     &lt;br /&gt;
 %f = %d:value(&#039;//Record[&#039; %c &#039;]/@file&#039;)    &lt;br /&gt;
 %r = %d:value(&#039;//Record[&#039; %c &#039;]/@number&#039;)  &lt;br /&gt;
 %c = %c + 1                                &lt;br /&gt;
 %rec:loadfromrecord(FILE=%f,RECORDNUMBER=%r)&lt;br /&gt;
%rec:print                                 &lt;br /&gt;
 %rec = new                                 &lt;br /&gt;
end repeat                                  &lt;br /&gt;
if $SETG(&#039;NEXT&#039;,&#039;EXIT&#039;) then                &lt;br /&gt;
  audit &#039;gtbl full&#039;                          &lt;br /&gt;
end if                                      &lt;br /&gt;
end &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Example 2=====&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;b                                           &lt;br /&gt;
%d object xmldoc auto new                   &lt;br /&gt;
%d:loadchangedrecords(fields=true)&lt;br /&gt;
%d:print                       &lt;br /&gt;
if $SETG(&#039;NEXT&#039;,&#039;EXIT&#039;) then                &lt;br /&gt;
  audit &#039;gtbl full&#039;                          &lt;br /&gt;
end if                                      &lt;br /&gt;
end &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Example 3=====&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;b                                           &lt;br /&gt;
%d object xmldoc auto new&lt;br /&gt;
%recs object xmldoc auto new                  &lt;br /&gt;
%n object xmlnode                    &lt;br /&gt;
%d:loadchangedrecords                       &lt;br /&gt;
%f string len 8                             &lt;br /&gt;
%r float                                     &lt;br /&gt;
%c float initial(1) &lt;br /&gt;
%n = %recs:AddElement(&#039;ChangedRecords&#039;)                          &lt;br /&gt;
repeat %d:selectcount(&#039;//Record&#039;) times     &lt;br /&gt;
 %f = %d:value(&#039;//Record[&#039; %c &#039;]/@file&#039;)    &lt;br /&gt;
 %r = %d:value(&#039;//Record[&#039; %c &#039;]/@number&#039;)  &lt;br /&gt;
 %c = %c + 1                                &lt;br /&gt;
 %n:loadfromrecord(FILE=%f,RECORDNUMBER=%r,HEADER=TRUE)&lt;br /&gt;
end repeat&lt;br /&gt;
%recs:print                                       &lt;br /&gt;
if $SETG(&#039;NEXT&#039;,&#039;EXIT&#039;) then                &lt;br /&gt;
  audit &#039;gtbl full&#039;                          &lt;br /&gt;
end if                                      &lt;br /&gt;
end  &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
There are new parameters for several of the methods (as demonstrated above):&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;LoadChangedRecords:   &lt;br /&gt;
    Fields=boolean   (default=false)&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If true, each individual changed record is loaded into the XMLDOC similar to LoadFromRecord.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;LoadFromRecord:    &lt;br /&gt;
    File=name&lt;br /&gt;
    RecordNumber=number &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
LoadFrom Record must normally be issued within a FOR record context. However, if both of these name required parameters are specified, the LoadFromRecord statement need not be within a FOR record context.&lt;br /&gt;
&lt;br /&gt;
If either of these name required parameters is specified from within a FOR record context, an error message will be issued: &amp;lt;code&amp;gt;ERROR 1081:  %C inside record loop: Recordnumber/File parameters not allowed&amp;lt;/code&amp;gt;                                                               &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;LoadFromRecord:            &lt;br /&gt;
    Header=Boolean  (default=false)&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If true, the header line of the method will be included for each item. This may be useful when LoadFromRecord is issued in order to load an XMLNODE.&lt;br /&gt;
&lt;br /&gt;
The header will separate each record and designate the file and record number.&lt;br /&gt;
&lt;br /&gt;
====Error handling====&lt;br /&gt;
&lt;br /&gt;
=====Current behavior without commit exits=====&lt;br /&gt;
&lt;br /&gt;
Without commit exits, an APSY does not commit automatically unless AUTOCOMMIT=Y is specified in the APSY definition.&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;If a transactional daemon is created:&lt;br /&gt;
Commit/backout must be explicitly specified within a daemon in order to effect the master’s transaction.&lt;br /&gt;
Implicit commit on the daemon is never done. Normal end of the daemon does not affect the master.&lt;br /&gt;
If the daemon procedure is cancelled, the master transaction is backed out.&lt;br /&gt;
If the daemon procedure is abended, the master transaction is backed out and the APSY error proc is run on the master.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;If a non-transactional daemon is created: &lt;br /&gt;
The master transaction is unaffected by the daemon.&lt;br /&gt;
Both implicit and explicit commit affect the daemon transaction only.&lt;br /&gt;
If the daemon procedure is cancelled, only the daemon transaction is backed out.&lt;br /&gt;
If the daemon procedure is abended, both the daemon and master transaction are backed out and the APSY error proc is run on the master.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Each time that an APSY loads a new procedure, the various KSERRC flags are always cleared. So when an error procedure is called, the error flags are always zero.&lt;br /&gt;
&lt;br /&gt;
=====With commit exits=====&lt;br /&gt;
&lt;br /&gt;
With the commit exits feature, the commit exit essentially runs as a transactional daemon with the original user being a pseudo master. Lower level daemons follow normal daemon behavior.&lt;br /&gt;
&amp;lt;p&amp;gt;If a commit exit is running, and the APSY fails, the APSY error exit is scheduled to run. If the APSY error exit exists, the original transaction unit will be unaffected, unless the exit specifically designates a commit/backout. If there is no APSY error exit, the original transaction unit is aborted with &amp;lt;code&amp;gt;ERROR 2971: Action disabled by commit exit&amp;lt;/code&amp;gt; and the user is restarted.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Message displays===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
&amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; provides these message display options for subsystem users: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Disconnect message display&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; informational message display&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; error message display  &lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When a message display option is selected, messages of that type are displayed on the user&#039;s terminal. If a message display option is not selected, all messages of that type are not displayed on the user&#039;s terminal. Note that if the display of any &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; type message is suppressed, messages for the corresponding type are not displayed on the user&#039;s terminal, but are written to the audit trail file (CCAAUDIT).&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Typically, subsystem applications are written so that all messages displayed on the user&#039;s terminal are produced by the subsystem and &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; messages are suppressed.   &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===File usage===&lt;br /&gt;
====Mandatory vs. optional members====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Files and permanent groups contained within the subsystem definition can be designated as mandatory (the default) or optional members of the subsystem:   &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Mandatory members&lt;br /&gt;
&amp;lt;p&amp;gt; &lt;br /&gt;
Mandatory files or groups are automatically opened by &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; when a user logs into a subsystem and automatically closed when the user leaves the subsystem. Subsystem requests can assume that all mandatory files are open and that they are physically consistent. The user&#039;s file privileges are those defined in the subsystem definition for the current user&#039;s SCLASS. The opening of a mandatory member cannot be prevented by the subsystem administrator with the &amp;lt;var&amp;gt;STOP FILE&amp;lt;/var&amp;gt; command when the subsystem is active. A mandatory member cannot be accessed by another copy of &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; until the entire subsystem is stopped.&amp;lt;/p&amp;gt; &lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If a subsystem procedure issues an &amp;lt;var&amp;gt;OPEN&amp;lt;/var&amp;gt; or &amp;lt;var&amp;gt;CLOSE&amp;lt;/var&amp;gt; command for a mandatory member, the command is ignored by &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; and the user&#039;s current privileges are not changed.&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Optional members&lt;br /&gt;
&amp;lt;p&amp;gt; &lt;br /&gt;
Optional files or groups provide the ability for a file or group to be stopped by a subsystem administrator (using the &amp;lt;var&amp;gt;STOP FILE&amp;lt;/var&amp;gt; command) without stopping the entire subsystem. If a member is defined as optional, it is not automatically opened during the subsystem login. It must be opened by the application by using an OPEN/OPENC statement or command. The file privileges assigned are those specified in the subsystem definition for the current user&#039;s SCLASS. The member is closed (for that user only) when the user leaves the subsystem if a &amp;lt;var&amp;gt;CLOSE&amp;lt;/var&amp;gt; command has not been issued.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When an optional member is not in use, it can be processed by another copy of &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt;. &amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Requests that reference mandatory or optional members can be precompiled. Files not contained in the subsystem definition can be opened and referenced within a subsystem application, but the requests that reference those files cannot be precompiled. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Automatic vs. manual members====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Subsystem files and permanent group members can also be designated automatic or manual:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;An automatic member is a subsystem group or file that is opened automatically when the subsystem is started or when a user enters the subsystem. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;A manual member is a group or file that must be opened explicitly by the OPEN or OPENC command.  &lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Mandatory files cannot be designated manual. Optional files can be designated either automatic or manual.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Permanent vs. temporary groups in subsystem definitions====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The GROUP parameter of the subsystem definition applies &amp;lt;strong&amp;gt;only&amp;lt;/strong&amp;gt; to permanent groups. Temporary group names cannot be used. To include temporary group members in a subsystem definition, and thus to enable their use in precompiled code, the members of the temporary group should be individually specified in the subsystem definition.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Summary of file definition options====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
[[#Summary of file definition options|Subsystem file definition options]] summarizes the subsystem file definition options. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;caption&amp;gt;Subsystem file definition options&amp;lt;/caption&amp;gt;&lt;br /&gt;
&amp;lt;tr class=&amp;quot;head&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Subsystem definition &amp;lt;br&amp;gt;option&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Automatic&lt;br /&gt;
open &amp;lt;br&amp;gt;and close?&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;&lt;br /&gt;
Pre-compiled &amp;lt;br&amp;gt;code?&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Start/stop file &amp;lt;br&amp;gt;command allowed?&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;File privileges &amp;lt;br&amp;gt;assigned&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Mandatory&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Must be automatic&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Yes&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;No&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;SCLASS&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Optional&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Can be automatic or manual&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Yes&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Yes&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;SCLASS&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;None&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Cannot be&lt;br /&gt;
automatic&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;No&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Yes&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;File Password&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Subsystem processing flow==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
To design a subsystem, you must be familiar with the flow of control that occurs during subsystem processing. Subsystem processing typically involves the following phases:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;tr class=&amp;quot;head&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Type of processing &amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;During this processing...&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Initialization &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Subsystem is started and an optional initialization procedure is included. &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Login &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;User is logged into the subsystem; the user&#039;s privileges are determined by the subsystem definition. The appropriate required files and groups are opened for access.   &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Driver &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Procedures that make up the main body of the application are included.   &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Disconnect &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;All files and groups are closed for the user, who is then logged out of the subsystem.   &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Error &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;An optional error procedure is included. The type of error that occurred is available to the error procedure. For many types of errors, the error procedure can resume normal driver processing.   &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Initialization processing===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Initialization processing is invoked when the subsystem is started. A subsystem is started by the START SUBSYSTEM command, or, if the start option is indicated in the subsystem definition, when the first user enters the subsystem. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
During subsystem initialization, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; finds the subsystem definition and opens only required subsystem files and groups. If a required file or group cannot be opened, the subsystem initialization procedure terminates and the user is returned to command level.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
One of the subsystem components opened during initialization is the procedure file (or group, if a multiple-procedure group has been specified). The procedure file or group must contain all of the subsystem procedures that are included by the subsystem through the communication global variable. &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; scans the subsystem procedure file or group for all procedures whose names begin with either of the subsystem procedure prefixes.   &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The subsystem initialization procedure is included at this time. This is the only time during subsystem processing that the initialization procedure is executed.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If no error occurs, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; adds the subsystem name to the list of active subsystems. At this point, the subsystem is initialized and ready for use.   &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Login processing===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Login processing is invoked when a user enters a subsystem. If the automatic login option is indicated in the subsystem definition, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; logs on the user using the subsystem name as the user ID. If the automatic login option is not indicated, the user&#039;s &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; user ID remains in use. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
&amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; next finds the user&#039;s subsystem user class definition in CCASYS and opens only the required subsystem files and groups with the privileges that are found for that user class. The MSGCTL parameter automatically is set for the user according to the subsystem definition.    &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
&amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; sets the communication global variable to the name of subsystem login procedure and proceeds into driver processing.    &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Driver processing===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
&amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; determines which procedure to include next by examining the value of the communication global variable. The procedure name must be one of the names located by the scan of the procedure file during subsystem initialization.    &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If either the global variable or the procedure name cannot be found, the subsystem&#039;s error procedure is included. If an error procedure is not specified in the subsystem definition, the user is disconnected from the subsystem.   &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If the procedure name is found, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; determines which prefix begins the procedure name. Processing then occurs as follows:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;If the procedure name begins with the non-precompiled prefix, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; includes the procedure for compilation and evaluation.   &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;If the procedure name begins with the precompiled prefix, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; verifies whether the procedure was compiled previously with the set of privileges defined by the user&#039;s subsystem user class. &lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Once the compilation status of the procedure is determined, processing is as follows:       &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt; &lt;br /&gt;
&amp;lt;li&amp;gt;If the procedure was not previously compiled successfully for the set of privileges defined by the user&#039;s subsystem user class, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; includes the procedure for compilation and evaluation. If compilation is successful and no previous compilation was saved for the procedure, the contents of the compiler tables are saved in the system file CCATEMP.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;If the procedure was previously compiled successfully for the user&#039;s privilege set, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; loads the contents of the compiler tables from CCATEMP and evaluates the request.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
&amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; repeats driver processing until the value of the communication global variable is set to the exit value specified in the subsystem definition. When the communication global variable is set to the exit value, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; proceeds into disconnect processing.   &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Disconnect processing===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Disconnect processing is invoked when the subsystem application sets the communication variable to the exit value, when an error occurs with no subsystem error procedure, or when a subsystem user is restarted by &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt;. During disconnect processing, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; closes all required subsystem files and groups for the user, as well as any optional files and groups that have not been closed by the application.    &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Depending upon whether the automatic logout option is indicated, the user is then either logged out of &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; or returned to the &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; command environment.      &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Error processing===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Error processing is invoked whenever a &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; error occurs that cannot be handled by the procedure being executed at the time. When an error is detected, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; sets the value of the error global variable.       &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If the subsystem has a defined error procedure, the error procedure is included at this time. If the subsystem does not have a defined error procedure, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; proceeds into disconnect processing. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If the error trapped by the subsystem is a soft restart, a hard restart, or a terminal disconnect condition, the error procedure is invoked. The communication global variable is ignored when the error procedure completes and &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; proceeds with subsystem disconnect processing.      &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
==Parallel Query Option/204 (PQO) considerations==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
This section introduces several terms and concepts which are unique to subsystems that reference remote files and scattered groups. These concepts, and related design considerations, are discussed in greater detail in [[PQO: Scattered APSY subsystems]]. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Remote file access===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Parallel Query Option/204 provides access to remote files under the Subsystem Management facility by allowing the system manager to define client and service subsystems:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;A client subsystem is the subsystem a user is running in when requesting access to remote data. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;A service subsystem is the subsystem on a server node that a client user&#039;s service thread is logged into.  &lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
A service subsystem definition is stored in the CCASYS file on each node that the client subsystem accesses. The name of a subsystem must be the same at each node. The location of the client node is included in the subsystem name to uniquely identify it to the server node.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Node availability===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
A server node can be available or unavailable to a client subsystem.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;A node is available if the service subsystem has been successfully started. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;If the service subsystem has not been started, it does not have a subsystem definition structure accessible to the client and is therefore unavailable. &lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
A node can only be marked unavailable during start processing if there are mandatory members on a server node and the service subsystem cannot be started. If this happens, start processing also fails on the client node.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Client subsystems attempting to access service subsystems that are not started receive an error message from the server node. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
A previously available node can become unavailable when: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Resumption of communication fails after recovering from a system failure.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;A user attempts to log into the service subsystem by logging into the client subsystem, the service subsystem definition is not found, and at least one mandatory member resides on that node.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;A user attempts to open a file on a node where the user was not previously logged in. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The user is automatically logged into all associated service subsystems when entering a subsystem that contains remote files. If the service subsystem is unavailable on a node, the user cannot be logged in. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===File and group availability===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The members of a subsystem are files and permanent groups. With Parallel Query Option/204, members can be either automatic or manual: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;An automatic member is a subsystem group or file that is opened automatically when the subsystem is started or when a user enters the subsystem. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;A manual member is a group or file that must be opened explicitly by the OPEN or OPENC command. &lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Members can also be either mandatory or optional:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;A mandatory member must be open in order to access a subsystem. Mandatory members cannot be manual.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;An optional member is not required for subsystem access (start and login processing can succeed without it). &lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
At any given time a member can be open or closed to a subsystem or to a user within a subsystem. The following sections explain the conditions under which the different kinds of members are accessible to APSY subsystems and their users.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Member availability to subsystems====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Automatic members of subsystems are always opened by the START SUBSYSTEM command or by SUBSYSTEM LOGIN. At the end of START processing, each automatic member is open unless either the START or OPEN failed. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Manual members of subsystems are in the closed state at the completion of START SUBSYSTEM processing and must be explicitly opened by the user. Manual members become open to the subsystem if an OPEN operation succeeds. If OPEN fails due to node unavailability or for user-specific reasons (for example, if the user&#039;s line goes down) the member remains closed to the subsystem.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If a node becomes unavailable to a subsystem, all automatic subsystem members and all open manual subsystem members residing on the unavailable node are marked disabled.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If a STOP FILE/GROUP command is issued for a manual member on the client subsystem&#039;s node, the member is closed to the client subsystem when the last user closes it. If the member is located on the service subsystem node, the file is closed to the service subsystem when the STOP is complete or the last user closes the file.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Member availability to subsystem users====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When a user enters a subsystem, automatic subsystem members are opened.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If a user LOGIN or OPEN operation fails for an optional member, the member is left closed for the user but remains available to the subsystem. If a mandatory member cannot be opened, the user is denied access to the subsystem.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If a user LOGIN or OPEN operation fails for an already open member, the member is left disabled for the user but remains open to the subsystem. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If an automatic mandatory member is closed to the subsystem, new users are not allowed to enter the subsystem.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Manual members of subsystems are closed for a user within a subsystem until the user issues an OPEN command or statement. In this case it does not matter whether the member is open or closed to the subsystem.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If compilation and/or loading of a request fails due to a communications failure, previously opened members on the failing node become disabled to the user. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
A user can close optional members at any time by issuing the CLOSE command.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Enabling disabled subsystem files====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
In the event that a subsystem file or group is marked disabled, you can enable it (after correcting the problem) without having to bring the subsystem down. To do this, use the ENABLE SUBSYSTEM command:&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Syntax====&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;ENABLE SUBSYSTEM &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;subsysname&amp;lt;/span&amp;gt; &lt;br /&gt;
 [FILE &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;name&amp;lt;/span&amp;gt; AT &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;location&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;squareb&amp;quot;&amp;gt;|&amp;lt;/span&amp;gt; GROUP &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;name&amp;lt;/span&amp;gt;]&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
Where:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;subsysname&amp;lt;/var&amp;gt; is the name of the client subsystem&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;location&amp;lt;/var&amp;gt; is the name of the remote node where the file is stored. Note that the location must be explicitly specified; you cannot reference local files with the ENABLE SUBSYSTEM command. &lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Intentionally disabling a subsystem file====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can make a subsystem file or group (or an entire subsystem, if a file is mandatory) temporarily inaccessible without having to bring the subsystem down, using the DISABLE SUBSYSTEM command:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;DISABLE SUBSYSTEM &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;subsysname&amp;lt;/span&amp;gt; &lt;br /&gt;
 [FILE &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;name&amp;lt;/span&amp;gt; AT &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;location&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;squareb&amp;quot;&amp;gt;|&amp;lt;/span&amp;gt; GROUP &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;name&amp;lt;/span&amp;gt;]&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When a file or group is intentionally disabled with the DISABLE SUBSYSTEM command, subsystem behavior is exactly the same as when a communications failure causes the disabling. This behavior is described in [[#File and group availability|File and group availability]].&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Trust===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
As an alternative to the privilege settings normally available through the Subsystem Management facility, the system manager at a service node can control client subsystem access by creating a trust definition for the client subsystem. If a client subsystem is fully or partially trusted, the trust definition is sufficient for maintaining the relationship with the client; the system manager at the service node does not have to create and maintain a separate set of file and SCLASS definitions for the client subsystem.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
For example, suppose a subsystem located on a node named DETROIT (the client node) includes in its definition files located on a node named CLEVELAND (the service node). Further, suppose the subsystem is fully or partially trusted by CLEVELAND. In this case, the file and SCLASS definitions are maintained only on the client node (DETROIT), and the service node (CLEVELAND) needs only to maintain the trust definition.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The four levels of trust available with Parallel Query Option/204 are:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;Full trust&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Only the subsystem name and location appear on the service node&#039;s definition, which you create on the Subsystem Trust screen.&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;Partial trust&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Along with the subsystem name and location, you can specify maximum file privileges. In this case, the client subsystem is trusted, but the maximum file privileges and field level security levels specified on the Subsystem Trust screen cannot be exceeded.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;If a user requests file privileges that would exceed the maximum, the service node does not open the file to that user.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;If a user requests a field level security status that would exceed the maximum, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; automatically resets the request to the allowed level (that is, the maximum) and opens the file to that user.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;Restricted trust&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
For a subsystem that has a restricted trust definition, you make no entries on the Subsystem Trust screen. A restricted trust definition is based solely on entries you make on these five screens:&amp;lt;/p&amp;gt;  &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Subsystem Activity&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Subsystem File Use&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Operational Parameters&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Subsystem Classes&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Subsystem Class Users&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The accessibility of service node files to a client subsystem is determined by the SCLASS, user, and file privileges that you specify on these screens. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;No trust&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
No subsystem service definition exists for the subsystem. The client subsystem cannot access any files on the service node as subsystem files. The files on the service node can, however, be accessed from within a client subsystem as individual, non-subsystem files if the following criteria are met:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Parallel Query Option/204 is installed at both sites.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Horizon is installed at both sites, and there are link, processgroup, and process definitions connecting the client node to the service node.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;For any given file, the value of the &amp;lt;var&amp;gt;[[OPENCTL parameter|OPENCTL]]&amp;lt;/var&amp;gt; parameter allows remote access (X&#039;02&#039;, X&#039;04&#039;, or X&#039;08&#039;). &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
See the&lt;br /&gt;
&amp;lt;var class=&amp;quot;book&amp;quot;&amp;gt;Rocket Parallel Query Option/204 User&#039;s Guide&amp;lt;/var&amp;gt; for detailed information on creating and managing trust definitions.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Subsystem design considerations==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
This section presents coding considerations for subsystem procedures. Some of the guidelines listed below also appear in earlier sections. They are consolidated here for the convenience of the application developer.    &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Coding considerations===&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Procedures should be small and modular.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Procedures to which control is passed via the communication global variable must be stored in a designated procedure file. The procedure file is the default file for a subsystem application unless the default file is explicitly changed by a DEFAULT command or overridden by an IN clause.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Each procedure must set the communication global variable to indicate the next procedure to be included. If this variable is not set, an error or loop occurs.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;The communication global variable must be set to the exit value in order to exit the subsystem. Server table sizes and other parameters should be reset to the values existing prior to entering the subsystem so that the user is returned to his/her normal operating environment. Parameter values are restored automatically when the automatic login option is used.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Included procedures normally are included by using the INCLUDE command. Included procedures cannot be precompiled.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Non-subsystem files can be opened and referenced only by non-precompiled procedures.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Precompiled procedures cannot reference PERM groups that are not members of the same subsystem.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Compiler table sizes must be the same each time a precompiled procedure is invoked. The UTABLE command should be used carefully.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;The contents of the command line global variable are not deleted by UTABLE commands which normally delete the contents of GTBL, as long as the UTABLE command is issued from within a subsystem.     &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Distinct group numbers are assigned to optional groups at START SUBSYSTEM time. Those numbers cannot be used by non-subsystem members opened within the subsystem. Thus the NGROUP limit used for earlier releases might be exceeded during either START or OPEN processing inside the subsystem.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;To prevent you from having the wrong file or group privileges in a subsystem, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; closes optional files and groups before entering a subsystem. In earlier releases, optional files and groups were only closed when you left the subsystem. &lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Users should be aware of the following conditions when coding applications to run under the Subsystem Management facility:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Dummy strings (??, ?$, ?&amp;amp;amp;) in precompiled procedures are resolved only during compilation for the first user.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;If a subsystem file is referenced by a precompiled procedure, no user can RESTORE or INITIALIZE the file, or RENAME, DELETE, or REDEFINE a field while the subsystem is active.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;A subsystem procedure cannot issue the CREATE command for a subsystem file.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;LXTBL and LFTBL cannot be reset from within a subsystem procedure.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;All DO YOU REALLY WANT TO messages are suppressed and the default action is assumed. &lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The default action for each type of message is listed in [[M204.1076]]. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If you do not wish the default action to be executed, you need to add a message handler routine to the procedure containing the statement that invokes the message. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Keeping track of the number of files referenced====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
To keep track of the files referenced in a subsystem procedure, which cannot exceed 6,043 files &amp;amp;mdash; a CCATEMP page, use the following formula:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;NFILE + NRFILE + 1 (for CCAGRP) + 1 (for CCASYS)&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
==Record locking considerations==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Depending upon the subsystem definition, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; might place a share lock on one or more subsystem procedure names or group names. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If the subsystem is defined with permanent groups, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; locks the group names to ensure that the group definitions do not change while the subsystem is running. A share lock is maintained for each group while the subsystem is active.       &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===If subsystem files are defined as unlocked===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If the subsystem definition specifies that subsystem files are unlocked, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; locks in share mode each of the subsystem procedures to ensure that the procedures do not change or move. This prevents any user from:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Issuing the DELETE PROCEDURE command&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Issuing the RENAME PROCEDURE command&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Updating the procedure while the subsystem is active.   &lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
==Subsystem procedure control functions==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The User Language functions, [[$Sclass#$Sclass|$Sclass]] and [[$Subsys#$Subsys|$Subsys]] can be useful in determining subsystem program control.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===$Sclass function===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The $Sclass function returns the Sclass name of the current user. $Sclass is useful when the transfer of control is dependent upon a user&#039;s privileges. For example:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt; BRANCH:  JUMP TO (ADD.REC, VIEW.REC, UPD.REC) -&lt;br /&gt;
              %MAIN.MENU:SELECTION&lt;br /&gt;
                   .&lt;br /&gt;
                   .&lt;br /&gt;
                   .&lt;br /&gt;
 UPD.REC: IF $sclass = &#039;READ&#039; THEN&lt;br /&gt;
              IF $SETG(&#039;NEXT&#039;,&#039;PRE-RPT.PGM&#039;) THEN&lt;br /&gt;
                  PRINT &#039;GLOBAL TABLE FULL&#039;&lt;br /&gt;
              END IF&lt;br /&gt;
          ELSEIF $sclass = &#039;UPDATE&#039; THEN&lt;br /&gt;
              IF $setg(&#039;NEXT&#039;,&#039;PRE-MAINT.PGM&#039;) THEN&lt;br /&gt;
                  PRINT &#039;GLOBAL TABLE FULL&#039;&lt;br /&gt;
              END IF&lt;br /&gt;
                   .&lt;br /&gt;
                   .&lt;br /&gt;
                   .&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===$Subsys function===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The $Subsys function returns a numeric value indicating the status of a subsystem, or the name of the current subsystem (if no argument is specified). $Subsys often is used to determine whether a subsystem is active before a transfer is attempted.   &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Subsystem development tools==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
This section describes three &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; features that are useful in developing, testing and debugging subsystem procedures:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The &amp;lt;var&amp;gt;[[DEBUG command|DEBUG]]&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;[[TEST command|TEST]]&amp;lt;/var&amp;gt; commands, which assist subsystem debugging by allowing you to display the global communications variable and specify the next procedure to be INCLUDEd.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Multiple procedure file groups, which allow users to change procedures without stopping the subsystem or interfering with other users.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;The Cross-Reference facility, which produces reports on the variable names, global dummy strings, and other language elements used in a specified set of User Language procedures.    &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Debugging and testing facilities===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; DEBUG and TEST SUBSYSTEM commands assist you in debugging subsystem code while it is being developed. Both commands display the value of the communication global variable, prompt you for changes, and display since-last statistics.     &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
DEBUG differs from TEST SUBSYSTEM in the following ways:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;DEBUG can be executed by more than one user in the same subsystem at the same time; TEST SUBSYSTEM can only be executed by a single user.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;To execute TEST SUBSYSTEM, the user must stop the subsystem, which will be restarted in single user mode as a result of issuing the TEST command. To execute DEBUG, the user does not have to stop the subsystem. The DEBUG command can be issued for any subsystem that has been started, or for any subsystem that has the AUTOSTART feature.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Since-last statistics are provided automatically with DEBUG; they are optional with TEST.  &lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
In general, the DEBUG command is more convenient for subsystem developers in a multiuser environment.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
To execute the DEBUG command, the user must be named to an SCLASS which has been granted either the TEST or DEBUG privilege. The DEBUG privilege does not entitle the user to execute the TEST command.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Syntax====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The format of the DEBUG command is:     &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;DEBUG SUBSYSTEM &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;subsystemname&amp;lt;/span&amp;gt; [&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;parameters&amp;lt;/span&amp;gt;]&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The extended format of the TEST command is:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;TEST [DEBUG] [STATS] [SUBSYSTEM] &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;subsystemname&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;parameters&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
Where:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;DEBUG specifies that the communication global variable is displayed on the user&#039;s terminal before the next procedure is included. The user then has the option of specifying a different procedure to be included next. If the user presses &amp;lt;var&amp;gt;ENTER&amp;lt;/var&amp;gt; without specifying a different procedure, the procedure whose name is currently displayed is included next.   &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;STATS specifies that since-last statistics are displayed on the user&#039;s terminal after each procedure is evaluated. Since-last statistics are described in [[Using system statistics#User since-last statistics|User since-last statistics]]. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;SUBSYSTEM specifies that the word following the keyword is the name of a subsystem and that parameters follow the subsystem name. This keyword can be used to eliminate confusion when DEBUG or STATS is the name of a subsystem or subsystem parameter.    &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;i&amp;gt;parameters&amp;lt;/i&amp;gt; specifies the parameters to be stored in the command line global variable. The parameter information can be as many as 255 characters in length. &lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Multiple procedure files===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If &amp;lt;code&amp;gt;PROCFILE=*&amp;lt;/code&amp;gt; is specified when a group is created, then several files in a group can contain procedures. When the &amp;lt;var&amp;gt;INCLUDE&amp;lt;/var&amp;gt; command is executed in the context of a multiple procedure file group, files are searched, left to right, in the order they were defined in the original &amp;lt;var&amp;gt;CREATE GROUP&amp;lt;/var&amp;gt; command.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Multiple procedure file groups make it possible to change subsystem procedures without having to stop the subsystem. This is accomplished by setting &amp;lt;b&amp;gt;GROUP&amp;lt;/b&amp;gt; to &amp;lt;code&amp;gt;Y&amp;lt;/code&amp;gt; for the subsystem&#039;s procedure file in the subsystem definition, and by specifying a number value for &amp;lt;b&amp;gt;Procs NUMLK&amp;lt;/b&amp;gt; that is less than the number of files in the group. The application subsystem locks the procedures in the last (or rightmost) NUMLK number of files, as determined by the right-to-left order they were specified in the &amp;lt;var&amp;gt;CREATE GROUP&amp;lt;/var&amp;gt; command that defined the procedure group. For an example, see [[System requirements for Application Subsystems#Subsystem File Use screen|Subsystem File Use screen]].&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The multiple procedure file option also allows different users to make changes to procedures in the same subsystem without interfering with each other. The procedure group specified in the subsystem definition must have a corresponding &amp;lt;var&amp;gt;CREATE PERM GROUP&amp;lt;/var&amp;gt; definition. However, any individual user can create or open a temporary group with the same name as the subsystem&#039;s permanent procedure group. If a user has such a temporary group open and enters a subsystem, the subsystem uses the temporary group instead of the subsystem&#039;s permanent group. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The following restrictions apply to the use of temporary groups to store subsystem procedure files:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The user&#039;s SCLASS must have the &amp;lt;var&amp;gt;TEST&amp;lt;/var&amp;gt; or &amp;lt;var&amp;gt;DEBUG&amp;lt;/var&amp;gt; privilege.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;The last &amp;lt;i&amp;gt;n&amp;lt;/i&amp;gt; files of the &amp;lt;var&amp;gt;CREATE PERM GROUP&amp;lt;/var&amp;gt; command (where &amp;lt;i&amp;gt;n&amp;lt;/i&amp;gt; is set by the &amp;lt;code&amp;gt;NUMLK&amp;lt;/code&amp;gt; parameter) must correspond exactly to the last &amp;lt;i&amp;gt;n&amp;lt;/i&amp;gt; files of the &amp;lt;var&amp;gt;CREATE TEMP GROUP&amp;lt;/var&amp;gt; command. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Cross-Reference facility===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The Cross-Reference facility is a Dictionary facility that can be invoked from both the Dictionary Main Menu and &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; command level. It produces reports for users who develop and maintain &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; User Language procedures.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The output reports show the line numbers where language elements such as labels, functions, images and variable names occur in a specified set of procedures. Elements within subroutines and nested INCLUDEs can also be cross-referenced.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The Cross-Reference Report is produced in batch mode (by a batch job in OS and DOS, by a service machine in CMS). Prior to submitting a cross-reference job, the user can specify:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;A set of procedures in a procedure file or group&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;A set of language elements to be cross referenced&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Substitute values for User Language global dummy strings&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Job-related parameters such as output destination and lines per page &lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The Cross-Reference facility also includes Preview and Browse functions, which inform the user about the procedures selected for processing.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
For a complete description of the Cross-Reference facility, refer to the [[:Category:Dictionary/204#Dictionary/204 topics|Dictionary/204 topics]].&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
[[Category:SOUL]]&lt;/div&gt;</summary>
		<author><name>ELowell</name></author>
	</entry>
	<entry>
		<id>https://m204wiki.rocketsoftware.com/index.php?title=Release_notes_for_Model_204_version_7.8&amp;diff=117752</id>
		<title>Release notes for Model 204 version 7.8</title>
		<link rel="alternate" type="text/html" href="https://m204wiki.rocketsoftware.com/index.php?title=Release_notes_for_Model_204_version_7.8&amp;diff=117752"/>
		<updated>2019-12-18T21:58:22Z</updated>

		<summary type="html">&lt;p&gt;ELowell: /* SIRTERM */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;&amp;lt;b&amp;gt;******THIS IS A DRAFT DOCUMENT.******&amp;lt;/b&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
These release notes list the enhancements and other changes contained in Model 204 version 7.8, &amp;lt;b&amp;gt;&amp;lt;i&amp;gt;which is still in development&amp;lt;/i&amp;gt;&amp;lt;/b&amp;gt;. Until the commercial release of the software, Rocket reserves the right to add to, remove, or change anything described herein. &lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
These release notes contain installation and features information for the Rocket Model 204 version 7.8 release.&lt;br /&gt;
Before beginning your installation, please read through this information about product installation and changes.&lt;br /&gt;
&lt;br /&gt;
==New in this release==&lt;br /&gt;
The table below cites some highlights of Model&amp;amp;nbsp;204 version 7.8. For a full list of features, refer to the Table of Contents. &lt;br /&gt;
&amp;lt;p&amp;gt;See also the [[#Compatibility Issues|Compatibility]] section for possible issues.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;tr class=&amp;quot;head&amp;quot;&amp;gt;&amp;lt;th&amp;gt;Category&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Feature&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;SOUL&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The new [[#AmIndependent method|AmIndependent]] method returns TRUE for daemons spawned by RunIndependently.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The Object class now supports the [[#Support for copying Object class objects|copy and deepCopy methods]].&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Janus Web&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[[#Web Sockets|Janus Web Sockets]] are now supported.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td nowrap&amp;gt;Networking&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Note:&amp;lt;/b&amp;gt; The two-phase commit and commit exits features are licensed and purchased separately from Model 204.&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Two-phase commit. A Model 204 online can now be configured to use two-phase commit (2PC). The Janus internal socket API is used for the calls to the coordinator. JANUS commands are used for all 2PC configuration. A new JANUS port type has been added, 2PC.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Commit exits are now supported. The commit exit runs within the APSY, which is defined by the &amp;lt;var&amp;gt;COMMITX&amp;lt;/var&amp;gt; parameter and uses normal APSY processing.  &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;ECF tables&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The new &amp;lt;var&amp;gt;DISPLAY ECF&amp;lt;/var&amp;gt; command and &amp;lt;var&amp;gt;EXTERNAL REMOVE&amp;lt;/var&amp;gt; statement enable more efficient management of [[#Managing ECF tables more efficiently|ECF tables]].&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Performance&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[[#MP/204 offload improvements|MP/204 offload improvements]] -- application code for these SOUL statements is now fully offloadable: &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;File Records In/On&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Remember&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Position&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Sort Values&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Reset Header/Trailer&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Find and Print Count&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Find All Values&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;For Each Value&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Security&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;CA-Top Secret can [[#CA-Top Secret can disallow CCASTAT logins|disallow CCASTAT logins]].&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[[#DEFUSER can specify a jobname not authorized to access M204|DEFUSER]] can specify a jobname not authorized to access M204.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td nowrap&amp;gt;System enhancements&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The &amp;lt;var&amp;gt;MONITOR USERS&amp;lt;/var&amp;gt; command output displays [[#New wait types for daemon/master waits|two new wait types]].&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td nowrap&amp;gt;AUDIT204 enhancements&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The new TIMEHH parameter on the &amp;lt;var&amp;gt;[[#FORMAT command|FORMAT]]&amp;lt;/var&amp;gt; command of the AUDIT204 utility provides greater time stamp precision.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td nowrap&amp;gt;New commands&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;[[#DISPLAY ECF|DISPLAY ECF]]&amp;lt;/var&amp;gt; displays details from ECF tables, or the current status of users accessing ECF modules.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td nowrap&amp;gt;New parameters&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;[[#ENQTIME|ENQTIME]]&amp;lt;/var&amp;gt; specifies the number of milliseconds waited for each record locking retry wait.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;[[#EVALOPT|EVALOPT]]&amp;lt;/var&amp;gt; controls the cancellation of a request on truncation of string data.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;[[#MAXPRE, MAXBOUT, MAXSUBT|MAXPRE, MAXBOUT, and MAXSUBT]]&amp;lt;/var&amp;gt; can be used to cancel a runaway transaction and prevent it from filling the checkpoint data set.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;[[#NLDAPBUF|NLDAPBUF]]&amp;lt;/var&amp;gt; allows the number of LDAP buffers allocated during startup to be set in CCAIN.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;[[#SERV4G|SERV4G]]&amp;lt;/var&amp;gt; allows testing of server tables that span a 4-gigabyte boundary.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;[[#WEBDFLT|WEBDFLT]]&amp;lt;/var&amp;gt; changes the default JANUS WEB ALLOW rule back to ALLOW.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td nowrap&amp;gt;Janus and TN3270 debuggers&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The debuggers can now view or watch the values of [[#Access to exposed variables|variables exposed to local routines/methods]].&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;When execution pauses, the debuggers now [[#Subroutine or method display|display the subroutine or method]] being executed.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td nowrap&amp;gt;User/system statistics&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;[[#MPR, MBO, MCP, and RCV|MPR, MBO, MCP, and RCV]]&amp;lt;/var&amp;gt; provide high water mark transaction information in conjunction with the &amp;lt;var&amp;gt;MAXPRE&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;MAXBOUT&amp;lt;/var&amp;gt;, and &amp;lt;var&amp;gt;MAXSUBT&amp;lt;/var&amp;gt; parameters. &lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[[#DKWTS and DKWTMICS|New system statistics]] DKWTS (DisK WaiTs) and DKWTMICS (DisK WaiT MICroSeconds) collect data to provide rough disk I/O service time numbers.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Operating system and hardware requirements==&lt;br /&gt;
&lt;br /&gt;
===Operating system requirements===&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;IBM z/OS versions supported:&amp;lt;/b&amp;gt; &lt;br /&gt;
  &amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;All IBM supported releases up to and including z/OS 2.3. &amp;lt;br /&amp;gt;(For z/OS 2.2, see [[IBM z/OS 2.2 PTF requirement]].)&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;p&amp;gt;Version 1.07 is sufficient for all functionality except for the following features:&amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;ul&amp;gt;&lt;br /&gt;
    &amp;lt;li&amp;gt;zHPF support requires version [[IBM z/OS 2.1 compatibility issue|2.1]].&amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;li&amp;gt;Large (1 MB) page support requires version 1.9.&amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;li&amp;gt;Extended address volumes (EAV) requires version 1.12.&amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;/ul&amp;gt;&lt;br /&gt;
  &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
On z/OS, Model 204 release 7.8 operates as an APF authorized load module, as required by many 7.8 features. &amp;lt;br /&amp;gt;&lt;br /&gt;
To run Model 204 unauthorized, [[Contacting Rocket Software Technical Support|contact Technical Support]].&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;IBM z/VM versions supported:&amp;lt;/b&amp;gt; &lt;br /&gt;
  &amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;All IBM supported releases up to and including z/VM 6.4.&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;IBM z/VSE versions supported:&amp;lt;/b&amp;gt;&lt;br /&gt;
  &amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;All IBM supported releases up to and including z/VSE 6.1.&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Hardware requirements===&lt;br /&gt;
 &lt;br /&gt;
In general, Model 204 version 7.8 requires the IBM z/890 or above processor.&lt;br /&gt;
&amp;lt;p&amp;gt;However, the IBM z10 or above processor is required for the following features:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;large (1 MB) page support&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;IBM&#039;s High Performance FICON (zHPF) support&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Connect&amp;lt;sup&amp;gt;&amp;amp;#9733;&amp;lt;/sup&amp;gt; compatibility with Model 204===&lt;br /&gt;
&lt;br /&gt;
Connect&amp;lt;span class=&amp;quot;superstar&amp;quot;&amp;gt;&amp;amp;#9733;&amp;lt;/span&amp;gt; version 7.5 or 7.7 is compatible with Model 204 version 7.8.&lt;br /&gt;
&lt;br /&gt;
For more information on Connect&amp;lt;span class=&amp;quot;superstar&amp;quot;&amp;gt;&amp;amp;#9733;&amp;lt;/span&amp;gt; installation, see the [[:Category:Connect*|Connect&amp;lt;span class=&amp;quot;superstar&amp;quot;&amp;gt;&amp;amp;#9733;&amp;lt;/span&amp;gt; wiki pages]].&lt;br /&gt;
&lt;br /&gt;
==SOUL (User Language) enhancements==&lt;br /&gt;
===AmIndependent method===&lt;br /&gt;
The &amp;lt;var&amp;gt;AmIndependent&amp;lt;/var&amp;gt; method returns TRUE for daemons spawned by &amp;lt;var&amp;gt;[[RunIndependently_(Daemon_subroutine)|RunIndependently]]&amp;lt;/var&amp;gt;. (The action of &amp;lt;var&amp;gt;[[AmDaemon_(Daemon_property)|AmDaemon]]&amp;lt;/var&amp;gt; remains unchanged.)&lt;br /&gt;
&lt;br /&gt;
The following table shows the values returned by &amp;lt;var&amp;gt;AmIndependent&amp;lt;/var&amp;gt; versus &amp;lt;var&amp;gt;AmDaemon&amp;lt;/var&amp;gt; for different daemon types:&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Type&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;AmDaemon&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;AmIndependent&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;$COMBG&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;False&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;False&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Independent daemon&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;False&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;True&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Other daemon&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;True&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;False&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Web, etc.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;False&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;False&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===$ProcOpn===&lt;br /&gt;
&amp;lt;var&amp;gt;[[$ProcOpn|$ProcOpn]]&amp;lt;/var&amp;gt; now supports the opening of a procedure with an all-numeric name, and including a leading zero, such as:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;%result = $procOpn(&#039;0123&#039;, &#039;MYFILE&#039;)&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Support for such procedure names was initially introduced at V7.7, and this feature of &amp;lt;var&amp;gt;$ProcOpn&amp;lt;/var&amp;gt; is enabled in V7.7 with the application of zap 77z054.&lt;br /&gt;
&lt;br /&gt;
===Allow parentheses to surround a boolean enumeration object===&lt;br /&gt;
The following sample code:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;   begin                                       &lt;br /&gt;
   variables are undefined                  &lt;br /&gt;
   %isValid is boolean initial (True)       &lt;br /&gt;
   if (%isValid) then                  &lt;br /&gt;
      print &#039;in IF&#039;                            &lt;br /&gt;
   end if                                   &lt;br /&gt;
   end   &amp;lt;/p&amp;gt;      &lt;br /&gt;
&lt;br /&gt;
will now compile and run successfully, since this syntax: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;if (%isValid) then &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
is logically equivalent to this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;if %isValid then &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Prior to V7.8 the presence of parentheses surrounding the boolean enumeration object would have caused a compilation error. This change is enabled in V7.7 with the application of zap 77z370.&lt;br /&gt;
&lt;br /&gt;
===Support for copying Object class objects===&lt;br /&gt;
The Object class now supports the copy and deepCopy methods. For example, an Object object can be copied as follows:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;   begin               &lt;br /&gt;
   %x is object object &lt;br /&gt;
   %y is object object &lt;br /&gt;
   %y = new            &lt;br /&gt;
   %x = %y:copy        &lt;br /&gt;
   end &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This change is enabled in v7.7 with the application of zap 77z076, and within V7.6 with the application of zap 76z412.&lt;br /&gt;
&lt;br /&gt;
===Assignment of enumeration values to method variables===&lt;br /&gt;
Enumeration values can now be assigned to method variables whose result is an enumeration. So, for example, the following code:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;   begin                                               &lt;br /&gt;
   enumeration colour                                  &lt;br /&gt;
      public                                           &lt;br /&gt;
         value red                                     &lt;br /&gt;
         value white                                   &lt;br /&gt;
         value blue                                    &lt;br /&gt;
      end public                                       &lt;br /&gt;
   end enumeration                                     &lt;br /&gt;
   %func    is function getColour is enumeration colour&lt;br /&gt;
   local function getColour is enumeration colour      &lt;br /&gt;
      return blue                                      &lt;br /&gt;
   end function                                        &lt;br /&gt;
   %func    = getColour                                &lt;br /&gt;
   %func    = (colour):red                             &lt;br /&gt;
   printText {~=%(Local):(%func)}                      &lt;br /&gt;
   end  &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
will produce this result:&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt; %(Local):(%func)=red &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
whereas previously this line:   &lt;br /&gt;
&lt;br /&gt;
  &amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt; %func    = (colour):red &amp;lt;/p&amp;gt;   &lt;br /&gt;
&lt;br /&gt;
would have been rejected with this message:&lt;br /&gt;
&lt;br /&gt;
   &amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;MSIR.0993: Assignment invalid: mismatch between method and method variable &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This change is enabled in V7.7 with the application of zap 77z128.&lt;br /&gt;
&lt;br /&gt;
===Optional output method parameters===&lt;br /&gt;
Prior to this release output parameters could not be optional or have default values. In this release output parameters can be specified as &amp;lt;var&amp;gt;Optional&amp;lt;/var&amp;gt;, and a default value can be specified with &amp;lt;var&amp;gt;Default&amp;lt;/var&amp;gt;. One related change is that if a &amp;lt;var&amp;gt;Len&amp;lt;/var&amp;gt; value is specified with &amp;lt;var&amp;gt;Optional&amp;lt;/var&amp;gt; or &amp;lt;var&amp;gt;Default&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;Output&amp;lt;/var&amp;gt;, it indicates the length of the hidden target for the output parameter if none was passed. For all other &amp;lt;var&amp;gt;Output&amp;lt;/var&amp;gt; parameters, &amp;lt;var&amp;gt;Len&amp;lt;/var&amp;gt; is meaningless, just as it was before Model 204 V7.8. The following is an example of the use of an optional output parameter:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;function getRemote( -&lt;br /&gt;
   %target is string len 32, %errorReason is string len 80 optional output -&lt;br /&gt;
) is float&lt;br /&gt;
  ...&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
In this example, if &amp;lt;code&amp;gt;%errorReason&amp;lt;/code&amp;gt; is not specified in a call and then set to a value longer than 80 bytes it wil be truncated to 80 bytes. However, if a string of a different length is passed, the length of that string will determine truncation behavior.&lt;br /&gt;
&lt;br /&gt;
==External Call Facility enhancements==&lt;br /&gt;
===Managing ECF tables more efficiently===&lt;br /&gt;
The are two new features to help manage ECF tables more efficiently, avoid conditions where the table can fill, and prevent the definition of further entities.&lt;br /&gt;
&lt;br /&gt;
The first feature is the new &amp;lt;var&amp;gt;DISPLAY ECF&amp;lt;/var&amp;gt; command, which displays the contents of ECF tables and also the current status of users accessing ECF modules. See more details of the &amp;lt;var&amp;gt;[[#DISPLAY ECF|DISPLAY ECF]]&amp;lt;/var&amp;gt; command below.&lt;br /&gt;
&lt;br /&gt;
The second feature is a new &amp;lt;var&amp;gt;EXTERNAL REMOVE&amp;lt;/var&amp;gt; statement with the following syntax:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;EXTERNAL REMOVE &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;modulename&amp;lt;/span&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This statement causes the entry for the named module to be removed from the module table. The table entry is then placed on a free chain of entries and can be reused by issuing the &amp;lt;var&amp;gt;EXTERNAL MODULE&amp;lt;/var&amp;gt; statement. This allows the module table to be managed with redundant entries removed, without having to recycle the ONLINE.&lt;br /&gt;
&lt;br /&gt;
An &amp;lt;var&amp;gt;EXTERNAL REMOVE&amp;lt;/var&amp;gt; statement will return &amp;lt;code&amp;gt;$status/$statusd&amp;lt;/code&amp;gt; values of &amp;lt;code&amp;gt;0/0&amp;lt;/code&amp;gt;, and most other status values that can be returned by the &amp;lt;var&amp;gt;EXTERNAL REMOVE&amp;lt;/var&amp;gt; statement are already documented in the ECF return codes table. If an &amp;lt;var&amp;gt;EXTERNAL REMOVE&amp;lt;/var&amp;gt; is attempted against a module that is currently being called (in use), then &amp;lt;code&amp;gt;$status/$statusd&amp;lt;/code&amp;gt; will return the values &amp;lt;code&amp;gt;20/1&amp;lt;/code&amp;gt; (module unavailable).&lt;br /&gt;
&lt;br /&gt;
==System enhancements==&lt;br /&gt;
&lt;br /&gt;
===New wait types for daemon/master waits===&lt;br /&gt;
&lt;br /&gt;
Two new wait types, viewable on the &amp;lt;var&amp;gt;[[MONITOR_command|MONITOR]] USERS&amp;lt;/var&amp;gt; command output, have been implemented as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;57&amp;lt;/code&amp;gt; - Means a daemon thread waiting for its master thread  &amp;lt;br /&amp;gt;     &lt;br /&gt;
&amp;lt;code&amp;gt;58&amp;lt;/code&amp;gt; - Means a master thread waiting for one of its daemon threads&lt;br /&gt;
&lt;br /&gt;
This change is enabled in V7.7 with the application of zap 77z410.&lt;br /&gt;
&lt;br /&gt;
===Snap formatting changes===&lt;br /&gt;
Date/time stamps in the page headers of snaps will now be shown in normal format, rather than in Julian format as in previous versions. So in the following example, a particular snap header under v7.7 or previous versions would show as: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;SNAPID    1   19226.060155  M204.0022: Bug .. nnnnn               PAGE     1 &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
whereas the same snap header under v7.8 would show as: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;SNAPID    1  2019/08/14 06:01:06   M204.0022: Bug .. nnnnn        PAGE     1 &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Also, due to improvements in handling trailing blanks in snap output, a snap generated under v7.8 should be marginally smaller than the same snap generated under previous versions, assuming the same &amp;lt;var&amp;gt;SNAPCTL&amp;lt;/var&amp;gt; settings.&lt;br /&gt;
&lt;br /&gt;
===Call stack trace for problem diagnosis===&lt;br /&gt;
A  call stack trace is now provided to help diagnose and resolve common errors. To enable the stack trace, do either of the following: &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Set the &amp;lt;var&amp;gt;[[SIRFACT parameter|SIRFACT]] X&#039;01&#039;&amp;lt;/var&amp;gt; bit.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Set the &amp;lt;var&amp;gt;[[DEBUGUL parameter|DEBUGL]]&amp;lt;/var&amp;gt; parameter. Note that the &amp;lt;var&amp;gt;DEBUGUL&amp;lt;/var&amp;gt; approach will introduce extra QTBL overhead. &amp;lt;p&amp;gt;(&amp;lt;var&amp;gt;DEBUGUL&amp;lt;/var&amp;gt; provides a similar facility with an include trace of procedures leading to the error, but this might not be potentially as useful as the call trace.)&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt; &lt;br /&gt;
&lt;br /&gt;
The call stack trace can assist in diagnosing run-time errors that might occur, as illustrated by the following &amp;quot;Variable too small for result&amp;quot; and &amp;quot;MBSCAN exceeded&amp;quot; examples.&lt;br /&gt;
&lt;br /&gt;
====Variable too small for result====&lt;br /&gt;
When the stack trace is enabled, a &amp;quot;variable too small&amp;quot; error results in the following message:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;M204.2966: Error at line n, procedure &#039;&#039;procname&#039;&#039; in file &#039;&#039;procfile&#039;&#039;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
which identifies the line within a procedure where the error is occurring, in addition to the usual message:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;M204.0552: Variable too small for result&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Any subsequent M204.2966 messages indicate the point in the code from where the code in error was called. For example, a stack of three subroutine calls leading to a &amp;quot;variable too small&amp;quot; error might result in the following messaging:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;   M204.0552: Variable too small for result                             &lt;br /&gt;
   M204.2966: Error at line 9, procedure MYPROC.LEVEL4 in file MYPROC   &lt;br /&gt;
   M204.2966: Called from line 5, procedure MYPROC.LEVEL3 in file MYPROC&lt;br /&gt;
   M204.2966: Called from line 5, procedure MYPROC.LEVEL2 in file MYPROC&lt;br /&gt;
   M204.2966: Called from line 5, procedure MYPROC.LEVEL1 in file MYPROC &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This information should help in diagnosing the problem. &lt;br /&gt;
&lt;br /&gt;
If the error occurs within a command level program rather than a procedure, then the M204.2966 message is replaced by an M204.2967 message, and a similar error condition to the above with a preceding call stack might be audited as follows:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;   M204.0552: Variable too small for result              &lt;br /&gt;
   M204.2967: Error at line 14 of command level program  &lt;br /&gt;
   M204.2967: Called from line 5 of command level program&lt;br /&gt;
   M204.2967: Called from line 3 of command level program &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If neither &amp;lt;var&amp;gt;SIRFACT X&#039;01&#039;&amp;lt;/var&amp;gt; nor &amp;lt;var&amp;gt;DEBUGUL&amp;lt;/var&amp;gt; is set, then the &amp;quot;variable too small&amp;quot; error produces the following messages:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;   M204.0552: Variable too small for result &lt;br /&gt;
   M204.2968: Error: no debug info &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====MBSCAN exceeded====&lt;br /&gt;
Similarly to the handling of the &amp;quot;variable too small for result&amp;quot; error, the call stack can also be used to diagnose errors where the value of &amp;lt;var&amp;gt;[[MBSCAN parameter|MBSCAN]]&amp;lt;/var&amp;gt; is exceeded as a result of a direct search of Table B records. &lt;br /&gt;
&amp;lt;p&amp;gt;Again, under V7.8, with either the &amp;lt;var&amp;gt;SIRFACT X&#039;01&#039;&amp;lt;/var&amp;gt; bit set or &amp;lt;var&amp;gt;DEBUGUL&amp;lt;/var&amp;gt; set, if a long request occurs as a result of exceeding &amp;lt;var&amp;gt;MBSCAN&amp;lt;/var&amp;gt;, then initially the following message is produced, as before:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;M204.0569: File &#039;&#039;filename&#039;&#039;, Find: Table B records to be searched = &#039;&#039;nnnn&#039;&#039;&amp;lt;/p&amp;gt;&lt;br /&gt;
followed by a DYRWT prompt message. If the user replies &#039;N&#039; to the prompt, or if the request is run in an environment (such as a batch job) where the default response is &#039;N&#039;, the following message is produced after the M204.0569 message:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;Cancelling request: M204.2969: MBSCAN (&#039;&#039;mm&#039;&#039;) exceeded, records to be searched = &#039;&#039;nnnn&#039;&#039;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
where &#039;&#039;mm&#039;&#039; is the current setting of &amp;lt;var&amp;gt;MBSCAN&amp;lt;/var&amp;gt;. The M204.2969 message is followed by M204.2966 messages displaying the call stack trace. Thus, if the following code is run from procedure MYPROC.MBSCAN against the demo database, with an &amp;lt;var&amp;gt;MBSCAN&amp;lt;/var&amp;gt; setting of 10:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;   b                           &lt;br /&gt;
   call sub1                   &lt;br /&gt;
   sub1: subroutine            &lt;br /&gt;
   fd1:                        &lt;br /&gt;
      in clients fd city = ONTARIO&lt;br /&gt;
              end find         &lt;br /&gt;
      fr fd1                      &lt;br /&gt;
         pai                      &lt;br /&gt;
         print                    &lt;br /&gt;
      end for                     &lt;br /&gt;
   end subroutine              &lt;br /&gt;
   end &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
then the following messages are produced, assuming any prompts are responded to with an &#039;N&#039;:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;   M204.0569: File CLIENTS, Find: Table B records to be searched = 3415&lt;br /&gt;
   Cancelling request: M204.2969: MBSCAN (10) exceeded, records to be searched = 3415  &lt;br /&gt;
   M204.2966: Error at line 6, procedure MYPROC.MBSCAN in file MYPROC&lt;br /&gt;
   M204.2966: Called from line 3, procedure MYPROC.MBSCAN in file MYPROC  &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===appendJournalData===&lt;br /&gt;
The &amp;lt;var&amp;gt;[[AppendJournalData_(Stringlist_function)|AppendJournalData]]&amp;lt;/var&amp;gt; function is now more tolerant of an outstanding BUMP request. Previously, if &amp;lt;var&amp;gt;AppendJournalData&amp;lt;/var&amp;gt; was called to inadvertently retrieve a large amount of journal data, typically when called implicitly from within SirScan, then any outstanding BUMP request wouldn&#039;t be honored until all of the data had been retrieved, at which point the BUMP request would be completed, and all data would be lost.&lt;br /&gt;
&lt;br /&gt;
Now, the &amp;lt;var&amp;gt;AppendJournalData&amp;lt;/var&amp;gt; process checks for outstanding BUMP requests before each track I/O is executed, thus avoiding excessive I/Os against the journal and long waits for the BUMP of such a process to complete.&lt;br /&gt;
&lt;br /&gt;
==AUDIT204 enhancements==&lt;br /&gt;
===FORMAT command===&lt;br /&gt;
TIMEHH is a new parameter used with the FORMAT command of the [[Tracking_system_activity_(CCAJRNL,_CCAAUDIT,_CCAJLOG)#AUDIT204_utility|AUDIT204]] utility.  It indicates that timestamps, printed at the beginning of each line of output, should include hundredths of a second. Requires no other arguments.&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;b&amp;gt;NOTE:&amp;lt;/b&amp;gt; This parameter and the 78 version (or later) of AUDIT204 may be used against a 77 (or later) CCAJRNL.&amp;lt;/p&amp;gt;&lt;br /&gt;
For example:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;//CCAIN DD *&lt;br /&gt;
FORMAT YEARFORM 4&lt;br /&gt;
TIMEHH&lt;br /&gt;
TYPE ER MS LI&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Recovery enhancements==&lt;br /&gt;
===Media Recovery in a multi-user environment===&lt;br /&gt;
It is now possible to perform media recovery by issuing the &amp;lt;var&amp;gt;REGENERATE&amp;lt;/var&amp;gt; command to roll forward selected files in a multi-user environment, with the media recovery being carried out by different users with system manager privileges. The new USING option allows for the specification of a ddname for the input journal stream to be used by the &amp;lt;var&amp;gt;REGENERATE&amp;lt;/var&amp;gt; command. Previously media recovery was restricted to single user batch jobs, using the CCAGEN ddname for the input journal. For more details, see the &amp;lt;var&amp;gt;[[#REGENERATE|REGENERATE]]&amp;lt;/var&amp;gt; command below.&lt;br /&gt;
&lt;br /&gt;
==Security enhancements==&lt;br /&gt;
===CA-Top Secret can disallow CCASTAT logins===&lt;br /&gt;
The [[CA-Top_Secret_interface|CA-Top Secret]] interface now recognizes the &amp;lt;code&amp;gt;DEFACID=&amp;lt;/code&amp;gt;, setting and does not allow CCASTAT logins in the online if &amp;lt;code&amp;gt;DEFACID&amp;lt;/code&amp;gt; is set to null. (There is no attempt to log on M204USR.) Therefore, to disallow CCASTAT logons, set DEFACID=, in [[CA-Top_Secret_interface#Preparing_a_TOPSPARM_parameter_module_with_TOPSGEN|TOPSPARM]]. CCASTAT will be opened because it contains file and group passwords, but it will not be used for logons if CCASTAT logons are not allowed.&lt;br /&gt;
&lt;br /&gt;
===CUSTOM=11 and mixed cased input===&lt;br /&gt;
The &amp;lt;var&amp;gt;[[CUSTOM_parameter|CUSTOM]]&amp;lt;/var&amp;gt; parameter &amp;lt;var&amp;gt;CUSTOM=11&amp;lt;/var&amp;gt; setting no longer requires that a &amp;lt;var&amp;gt;*LOWER&amp;lt;/var&amp;gt; command be issued prior to a &amp;lt;var&amp;gt;LOGCTL&amp;lt;/var&amp;gt; command (to add or change a  password) to preserve mixed case input. Prior to this release, with &amp;lt;var&amp;gt;CUSTOM=11&amp;lt;/var&amp;gt; in place, *LOWER had to be issued before a &amp;lt;var&amp;gt;LOGCTL&amp;lt;/var&amp;gt; command, otherwise any mixed case password strings would automatically be translated into uppercase. This change is enabled in V7.7 with the application of zap 77z108.&lt;br /&gt;
&lt;br /&gt;
===DEFUSER can specify a jobname not authorized to access M204===&lt;br /&gt;
When specifying DEFUSER=JOBNAME and VALIDAT=LOGON in the RACFGEN parms for an ONLINE, if the specified jobname (the owning id for the ONLINE job) isn&#039;t authorized to use Model 204 via RACF, any LOGIN commands specifying no userid will now succeed (previously such a LOGON would have failed). This enables users to submit jobs with USE $JOB, whereby the string USER=jobname will be added to the submitted JCL. This in turn is useful if the specified jobname has dataset access privileges to datasets required by the submitted jobs, even if the jobname itself isn&#039;t authorized to use M204.&lt;br /&gt;
&lt;br /&gt;
==Janus product enhancements==&lt;br /&gt;
&lt;br /&gt;
===Web Sockets===&lt;br /&gt;
Web Sockets are now supported in Janus Web Server.&lt;br /&gt;
&lt;br /&gt;
The Web Socket protocol provides various advantages over the HTTP protocol:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Web Sockets allow full-duplex communication.&amp;lt;/li&amp;gt; &lt;br /&gt;
&amp;lt;li&amp;gt;Efficient framing of payload data uses minimal overhead.&amp;lt;/li&amp;gt;  &lt;br /&gt;
&amp;lt;li&amp;gt;The Web Socket protocol is end-user extensible.&amp;lt;/li&amp;gt;  &lt;br /&gt;
&amp;lt;li&amp;gt;Most importantly, Web Sockets can be deployed completely within an existing HTTP/HTTPS framework.&amp;lt;/li&amp;gt; &lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To implement Web Sockets, you must enable the Janus Web port for Web Socket upgrades with the new &amp;lt;var&amp;gt;WEBSOCKET&amp;lt;/var&amp;gt; parameter. The WEBSOCKET option can be specified on either the port definition or the JANUS WEB rule for the URL. &lt;br /&gt;
Likewise, an individual Janus Web rule can either allow or disallow Web Socket connections with the &amp;lt;var&amp;gt;WEBSOCKET&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;NOWEBSOCKET&amp;lt;/var&amp;gt; parameters, respectively. &lt;br /&gt;
&lt;br /&gt;
For details on implementing Web Sockets, see the [[WebSocket_(Socket_function)|WebSocket]] wiki page.&lt;br /&gt;
&lt;br /&gt;
===Janus Web Server access rule===&lt;br /&gt;
The automatic &amp;lt;var&amp;gt;[[JANUS WEB ALLOW]]&amp;lt;/var&amp;gt; rule, which allowed any user to access the port without requiring a login, is changed &amp;lt;i&amp;gt;for non-SSL ports&amp;lt;/i&amp;gt; to the following:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;JANUS WEB &amp;lt;i&amp;gt;portname&amp;lt;/i&amp;gt; DISALLOW *&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
This rule requires a system administrator to explicitly define &amp;lt;var&amp;gt;ALLOW&amp;lt;/var&amp;gt; rules to enable users to access non-SSL ports.&lt;br /&gt;
The rule applies unless overridden by user-added rules. &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;blockquote class=&amp;quot;note&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;b&amp;gt;Note:&amp;lt;/b&amp;gt; To revert from this change in the JANUS DEFINE default and make the default &lt;br /&gt;
 non-SSL &amp;lt;var&amp;gt;ALLOW&amp;lt;/var&amp;gt; rule as it was in version 7.5 and earlier (&amp;lt;code&amp;gt;ALLOW *&amp;lt;/code&amp;gt;), turn on the 1 bit of the &amp;lt;var&amp;gt;[[WEBDFLT parameter|WEBDFLT]]&amp;lt;/var&amp;gt; parameter: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;RESET WEBDFLT=1&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Increase in pending accepts for Janus BPX ports===&lt;br /&gt;
The default number of pending accepts for Janus BPX server ports has been increased from 3 to 12, thus reducing the likelihood that a pending accept may fail with the message&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;MSIR.0019 Connection request rejected for port (port), MAXCON exceeded&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The actual number of pending accepts to be supported on the port can be set with the new parameter MAXPEND, set on the &amp;lt;var&amp;gt;[[JANUS_DEFINE|JANUS DEFINE]]&amp;lt;/var&amp;gt; command, where MAXPEND can vary from 3 up to a maximum value of 32. The change to the default value is enabled in V7.7 with the application of zap 77z269.&lt;br /&gt;
&lt;br /&gt;
===TCP listen backlog increased===&lt;br /&gt;
&lt;br /&gt;
The [[Program_Communication_facilities#LISTEN_call|TCP listen]] backlog has been increased from 16 to 1024 under z/OS.&lt;br /&gt;
&lt;br /&gt;
This update tells the TCP stack to queue up a maximum of 1024 such requests before dropping any. This increased backlog reduces, or in most cases eliminates, the likelihood of a connection request drop, other than in exceptional circumstances, such as a denial of service attack. This change is enabled in V7.7 with the application of zap 77z340.&lt;br /&gt;
&lt;br /&gt;
===Defer the freeing of XMLSCREEN input XML===&lt;br /&gt;
&lt;br /&gt;
The freeing of &amp;lt;var&amp;gt;[[XMLSCREEN_and_NOXMLSCREEN_(JANUS_DEFINE_parameters)|XMLSCREEN]]&amp;lt;/var&amp;gt; input XML is now deferred until the next Read Screen or session termination. This means that if an application error is detected, the input XML can be retrieved with [[$Web_Input_Content|$Web_Input_Content]] and then logged for problem analysis. &lt;br /&gt;
&lt;br /&gt;
Prior to this release the XML received from the client was freed immediately after being used to set the input data for a Read Screen, rendering it unavailable for problem determination.&lt;br /&gt;
&lt;br /&gt;
This change is enabled in V7.7 with the application of zap 77z368.&lt;br /&gt;
&lt;br /&gt;
===XMLSCREEN and Janus Web Legacy blank stripping===&lt;br /&gt;
&lt;br /&gt;
xmlScreens and Janus Web Legacy screens now adhere to the same standard as standard screen processing in terms of stripping leading blanks from input fields defined as [[Full-screen_feature#DEBLANK_or_NODEBLANK_option|DEBLANK]] (either explicitly or implicitly).&lt;br /&gt;
&lt;br /&gt;
This change is enabled in V7.7 with the application of zap 77z400.&lt;br /&gt;
&lt;br /&gt;
===SSL input buffer size===&lt;br /&gt;
&lt;br /&gt;
The default value of &amp;lt;var&amp;gt;[[SSLIBSIZE_(JANUS_DEFINE_parameter)|SSLIBSIZE]]&amp;lt;/var&amp;gt; has been increased to 16384 + 128, or 16512. This size should ensure correct communication with all TLS spec compliant applications. It is the maximum size allowed unless you use &amp;lt;var&amp;gt;[[CUSTOM_parameter#Using_CUSTOM.3D.2818.29|CUSTOM=18]]&amp;lt;/var&amp;gt;.    &lt;br /&gt;
&lt;br /&gt;
This change is enabled in V7.7 with the application of zap 77z415.&lt;br /&gt;
&lt;br /&gt;
===Increasing LDAP buffers===&lt;br /&gt;
&lt;br /&gt;
The number of LDAP buffers allocated at startup can now be changed by setting the &amp;lt;var&amp;gt;NLDAPBUF&amp;lt;/var&amp;gt; parameter in CCAIN. See below for details on &amp;lt;var&amp;gt;[[#NLDAPBUF|NLDAPBUF]]&amp;lt;/var&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Increase URL length returned with $web_form_action===&lt;br /&gt;
With this release the maximum Janus Web Server incoming URL that can be handled by &amp;lt;var&amp;gt;$web_form_action&amp;lt;/var&amp;gt; is increased from 512 bytes to 1024 bytes. This change is enabled in V7.7 with the application of zap 77z424.&lt;br /&gt;
&lt;br /&gt;
===Maximum RBSIZE setting increased===&lt;br /&gt;
The maximum value for RBSIZE, set on the &amp;lt;var&amp;gt;[[JANUS DEFINE|JANUS DEFINE]]&amp;lt;/var&amp;gt; command, is now increased to 16777215 (previously the maximum was 65534). RBSIZE specifies the RPC or Request Buffer size.  On a Web port, the Janus request buffer holds browser request information such as header data, cookies, and form data. On other port types, it holds RPC input and output parameters. This change is enabled in V7.7 with the application of zap 77z427.&lt;br /&gt;
&lt;br /&gt;
==Debugger enhancements==&lt;br /&gt;
These enhancements apply to the Janus and TN3270 debuggers. &lt;br /&gt;
&lt;br /&gt;
===Access to exposed variables===&lt;br /&gt;
The debuggers can now view or watch the values of variables exposed to local routines/methods. Previously, any attempts to access an exposed variable would have displayed &amp;quot;%varname has no value&amp;quot; in the debugger session. This feature is enabled in V7.7 with the application of zap 77z363.&lt;br /&gt;
&lt;br /&gt;
===Subroutine or method display===&lt;br /&gt;
When execution pauses for a break point or runtime error, the subroutine or method being executed is indicated in the status area.  In addition, the source code line information available by right-clicking on a source line now also indicates the subroutine or method.&lt;br /&gt;
&lt;br /&gt;
==Performance enhancements==&lt;br /&gt;
&lt;br /&gt;
===MP/204 offload improvements===&lt;br /&gt;
Application code issuing the following SOUL statements will now now be fully offloadable:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;File Records In/On&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Remember&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt; &lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Position&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Sort Values&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;                                             &lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Reset Header/Trailer&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Find and Print Count&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Find All Values&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;For Each Value&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
The above improvements are enabled in V7.7 with the application of zaps 77z419 and 77z420.&lt;br /&gt;
&lt;br /&gt;
===X3270OUT exit offloadable===&lt;br /&gt;
When running MP/204 (AMPSUBS&amp;gt;0) and using the [[Coding_SNA_Communications_Server_conversion_exit_routines#X3270OUT_.28convert_output_from_3270_format.29|X3270OUT]] exit to convert a 3270 output data stream to the appropriate device protocol, the exit can now run in parallel mode to improve performance. This change is enabled in V7.7 with the application of zap 77z313.&lt;br /&gt;
&lt;br /&gt;
The X3270OUT exit must be written to be re-entrant.&lt;br /&gt;
&lt;br /&gt;
==New and changed commands==&lt;br /&gt;
===DISPLAY ECF===&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;DISPLAY ECF {{ M | N | U } like ?} &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This new command displays details from ECF tables, or the current status of users accessing ECF modules.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;D ECF M&amp;lt;/code&amp;gt; displays the contents of the module table. For example:&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;    D ECF M &lt;br /&gt;
    Module   Loadlib  Address:Length     Loaded@      Lastused@   #Calls  Flags &lt;br /&gt;
    QATUM13C PROGLIB 2FB91FB8:00000028 19023:121506 19023:121506 00000001 &lt;br /&gt;
    QATUM13B PROGLIB 2FE65000:00009C18 19023:121506 19023:121506 00000001 &lt;br /&gt;
    QATUM13A PROGLIB 2FE6EC18:00001CD8 19023:121506 19023:121506 00000001  &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
(flags may be D=deleted; S=shared; H=halted; I=Idle)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;D ECF N&amp;lt;/code&amp;gt; displays contents of the name table. For example: &amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;    D ECF N&lt;br /&gt;
    Module   Logical-call-name &lt;br /&gt;
    QATUM13C MOD_QATUM13C &lt;br /&gt;
    QATUM13B MOD_QATUM13B &lt;br /&gt;
    QATUM13A MOD_QATUM13A &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;D ECF U&amp;lt;/code&amp;gt; displays details of users currently accessing ECF modules. This is also the default option, and so &amp;lt;code&amp;gt;D ECF&amp;lt;/code&amp;gt; will display the same output as &amp;lt;code&amp;gt;D ECF U&amp;lt;/code&amp;gt;. For example:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;    D ECF U                           &lt;br /&gt;
    User# Userid     Module   Parmlen &lt;br /&gt;
    00002 ADMIN      --none--         &lt;br /&gt;
    00003 ADMIN      COBSAMP1 00000002&lt;br /&gt;
    00004 ADMIN      COBSAMP1 00000002 &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;D ECF &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;function&amp;lt;/var&amp;gt; LIKE &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;?&amp;lt;/var&amp;gt; &amp;lt;/code&amp;gt; (where &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;?&amp;lt;/var&amp;gt; is a valid pattern) displays details for entities that match the specified pattern. The function is either M (modules), N (names), or U (users), and it defaults to U. So for example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;D ECF U L A&amp;lt;/p&amp;gt;&lt;br /&gt;
or&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;D ECF U L A*&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
displays details of ECF users whose names begin with A.&lt;br /&gt;
&lt;br /&gt;
===REGENERATE===&lt;br /&gt;
The &amp;lt;var&amp;gt;[[REGENERATE command|REGENERATE]]&amp;lt;/var&amp;gt; command can now be run in a multi-user environment by multiple users with system manager privileges. A new option USING is provided to specify the ddname of the input journal, so that the full syntax is now as follows:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;  REGENERATE [USING ddname] FILE filename [FROM dumpname | IGNORE]&lt;br /&gt;
  [TO {LAST UPDATE [BEFORE yy.ddd hh:mm:ss.th] | LAST CHECKPOINT [BEFORE yy.dd hh:mm:ss.th] &lt;br /&gt;
  | UPDATE number OF yy.ddd hh:mm:ss.th | CHECKPOINT yy.ddd hh:mm:ss.th} ]&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The default for the using ddname is CCAGEN, but any ddname may be used to allocate an input journal and used. For example:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;  ALLOCATE REGEN1 WITH SCOPE=SYSTEM DSN=PROD1.GDGJ OLD SEQUENTIAL GEN=+2&lt;br /&gt;
  REGENERATE USING REGEN1 FILE TEST&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It is the user&#039;s responsibility to ensure that the file being regenerated is not in use, and so prior to usage, &amp;lt;var&amp;gt;BUMP FILE&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;STOP FILE&amp;lt;/var&amp;gt; should be used to isolate usage against the file. If the file is in use, the REGEN will fail with these messages:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;  M204.1430: Failed to open file TEST&lt;br /&gt;
  M204.1436: Stopped processing file TEST  &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
$STATUS will now be set for &amp;lt;var&amp;gt;REGENERATE&amp;lt;/var&amp;gt; with the following values:&lt;br /&gt;
&amp;lt;blockquote&amp;gt;    &lt;br /&gt;
    0 - Success &amp;lt;br/&amp;gt;&lt;br /&gt;
    1 - No files were processed &amp;lt;br/&amp;gt;&lt;br /&gt;
    2 - At least one file stopped processing &amp;lt;br/&amp;gt;&lt;br /&gt;
    4 - A serious error occurred, REGEN failed &lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Similarly, &amp;lt;var&amp;gt;[[SETGRC command|SETGRC]]&amp;lt;/var&amp;gt; may be used to get the return code and error message.&lt;br /&gt;
&lt;br /&gt;
==New and changed parameters==&lt;br /&gt;
&lt;br /&gt;
===ECMODS===&lt;br /&gt;
The new minimum value for ECMODS, the allowable number of ECF modules, is 1. Prior to V7.8 the minimum value was 0. This change is enabled in V7.7 with the application of zap 77z306.&lt;br /&gt;
&lt;br /&gt;
===ECNAMES===&lt;br /&gt;
The new minimum value for ECNAMES, the allowable number of ECF module names, is 1. Prior to V7.8 the minimum value was 0. This change is enabled in V7.7 with the application of zap 77z306.&lt;br /&gt;
&lt;br /&gt;
===ECPSIZE===&lt;br /&gt;
The new minimum value for ECPSIZE, the initial storage allocation for ECF parameters, is 1024. Prior to V7.8 the minimum value was 0. This change is enabled in V7.7 with the application of zap 77z306.&lt;br /&gt;
&lt;br /&gt;
===ENQTIME===&lt;br /&gt;
Millisecond duration of automatic record locking retry wait.&lt;br /&gt;
&lt;br /&gt;
Prior to this change, if record locking conflicts occur frequently in a busy online, any user with a non-zero value for &amp;lt;var&amp;gt;[[ENQRETRY parameter|ENQRETRY]]&amp;lt;/var&amp;gt; will wait at least 3 seconds before the conflict is dealt with. This can degrade overall system performance.      &lt;br /&gt;
                                                         &lt;br /&gt;
The &amp;lt;var&amp;gt;[[ENQTIME parameter|ENQTIME]]&amp;lt;/var&amp;gt; parameter specifies the number of milliseconds waited for each record locking retry wait. &amp;lt;var&amp;gt;ENQTIME&amp;lt;/var&amp;gt; can be between 1 and 60000, corresponding to a minimum of 1 millisecond and a maximum of 1 minute. The default value of &amp;lt;var&amp;gt;ENQTIME&amp;lt;/var&amp;gt; is 3000 (3 seconds).            &lt;br /&gt;
                                                         &lt;br /&gt;
For example, with &amp;lt;code&amp;gt;ENQTIME = 100&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;ENQRETRY = 7&amp;lt;/code&amp;gt;, after a record locking conflict occurs the thread will retry 7 times with wait intervals of .1 seconds, and so within at most .7 seconds either the lock becomes available or the conflict triggers an On unit or cancels the request.     &lt;br /&gt;
                                                         &lt;br /&gt;
The &amp;lt;var&amp;gt;ENQTIME&amp;lt;/var&amp;gt; parameter may also be reset with $ResetN. &lt;br /&gt;
&lt;br /&gt;
This new parameter is enabled in V7.7 with the application of zap 77z299.&lt;br /&gt;
&lt;br /&gt;
===EVALOPT===&lt;br /&gt;
The new &amp;lt;var&amp;gt;EVALOPT&amp;lt;/var&amp;gt; parameter controls the cancellation of a request on truncation of string data. The default value is 0, and currently there is just one setting, 1, which means &amp;quot;cancel a request if truncation of string data occurs.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
For example, with the default of 0 in place, the following code &amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;    %x is string len 1   &lt;br /&gt;
    %y is string len 2   &lt;br /&gt;
    %y = &#039;ab&#039;            &lt;br /&gt;
    %x = %y              &lt;br /&gt;
    printtext {~} = {%x} &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
would cause silent truncation, and give the result&lt;br /&gt;
    &amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;%x = a &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If &amp;lt;var&amp;gt;EVALOPT&amp;lt;/var&amp;gt; is set to 1, then the above code produces the following message:&lt;br /&gt;
    &amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;M204.0552: Variable too small for result &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and the request is cancelled.&lt;br /&gt;
&lt;br /&gt;
===LFSCB===&lt;br /&gt;
&amp;lt;var&amp;gt;LFSCB&amp;lt;/var&amp;gt;, the length of the full screen buffer, now has a new minimum value of 8 (the previous minimum was 0). This change is enabled in v7.7 with the application of zap 77z042, and within V7.6 with the application of zap 76z393.&lt;br /&gt;
&lt;br /&gt;
===MAXPRE, MAXBOUT, MAXSUBT===&lt;br /&gt;
&amp;lt;p&amp;gt;Introduced in zap 77z257.&amp;lt;/p&amp;gt;&lt;br /&gt;
The new &amp;lt;var&amp;gt;MAXPRE&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;MAXBOUT&amp;lt;/var&amp;gt;, and &amp;lt;var&amp;gt;MAXSUBT&amp;lt;/var&amp;gt; parameters can be used to cancel a runaway transaction and prevent it from filling the checkpoint data set. &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;MAXPRE&amp;lt;/var&amp;gt;:  Maximum number of pre-images per transaction.  &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;MAXBOUT&amp;lt;/var&amp;gt;: Maximum number of backout pages per transaction. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;MAXSUBT&amp;lt;/var&amp;gt;: Maximum number of subtransaction checkpoints that a transaction can span.&amp;lt;/li&amp;gt;&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;Each new parameter defaults to unlimited. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;If a parameter value is set, a transaction is cancelled if that value is exceeded, and the following message is displayed:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;M204.0524: Maximum number (&amp;lt;i&amp;gt;num&amp;lt;/i&amp;gt;) of &amp;lt;i&amp;gt;parameter&amp;lt;/i&amp;gt; exceeded.&amp;lt;/p&amp;gt;&lt;br /&gt;
where &amp;lt;i&amp;gt;num&amp;lt;/i&amp;gt; is the value set for &amp;lt;i&amp;gt;parameter&amp;lt;/i&amp;gt; (&amp;lt;var&amp;gt;MAXPRE&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;MAXBOUT&amp;lt;/var&amp;gt;, or &amp;lt;var&amp;gt;MAXSUBT&amp;lt;/var&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
===NLDAPBUF===&lt;br /&gt;
This new parameter allows the number of LDAP buffers allocated during startup to be set in CCAIN. The default value is 2, and the settable value can range from 0 to 65535.&lt;br /&gt;
&lt;br /&gt;
===PUPDTH (new minimum value)===&lt;br /&gt;
If a user sets the &amp;lt;var&amp;gt;[[PUPDTH parameter|PUPDTH]]&amp;lt;/var&amp;gt; parameter to 0, it will now automatically be increased to 1, its minimum value.&lt;br /&gt;
&lt;br /&gt;
===SERV4G===&lt;br /&gt;
This parameter allows testing of server tables that span a 4-gigabyte boundary. For example, if &amp;lt;var&amp;gt;SERV4G&amp;lt;/var&amp;gt; is &amp;lt;code&amp;gt;X&#039;FFFFF000&#039;&amp;lt;/code&amp;gt;, each ATB server will begin at &amp;lt;code&amp;gt;XX_FFFFF000&amp;lt;/code&amp;gt;. If &amp;lt;var&amp;gt;SERV4G&amp;lt;/var&amp;gt; is &amp;lt;code&amp;gt;X&#039;FFFF0000&#039;&amp;lt;/code&amp;gt;, each ATB server will begin at &amp;lt;code&amp;gt;XX_FFFF0000&amp;lt;/code&amp;gt;. &amp;lt;code&amp;gt;XX&amp;lt;/code&amp;gt; is determined by the storage available on the system. The parameter is set in CCAIN.&lt;br /&gt;
&lt;br /&gt;
The contents of the ATB server are specified by using the &amp;lt;var&amp;gt;[[SERVGA parameter|SERVGA]]&amp;lt;/var&amp;gt; parameter.&lt;br /&gt;
&lt;br /&gt;
For example, if you want VTBL to span the 4G boundary, you can use these settings: &amp;lt;code&amp;gt;SERV4G=X&#039;FFFFF000&#039;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;SERVGA=X&#039;00040000&#039;&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;LVTBL=200 (6400 bytes, X&#039;1900&#039;)&amp;lt;/code&amp;gt;. This will force each server&#039;s VTBL to begin at &amp;lt;code&amp;gt;XX_FFFFF000&amp;lt;/code&amp;gt; and end at &amp;lt;code&amp;gt;XX+1_00000900&amp;lt;/code&amp;gt;.&lt;br /&gt;
===SIRTERM===&lt;br /&gt;
The &amp;lt;var&amp;gt;[[SIRTERM parameter|SIRTERM]]&amp;lt;/var&amp;gt; (Sirius terminal options) parameter settings have changed. &lt;br /&gt;
The changes to &amp;lt;var&amp;gt;SIRTERM&amp;lt;/var&amp;gt; allow a user to preclude a reset to a Model that is not supported by the terminal emulator in use.&lt;br /&gt;
&lt;br /&gt;
The X&#039;01&#039; setting (MODEL 6 support) is no longer used. &lt;br /&gt;
&lt;br /&gt;
The X&#039;02&#039; setting (Write Structured Field Query Support) now supports MODEL 6 terminals by default. &lt;br /&gt;
&lt;br /&gt;
The new X&#039;08&#039; setting always issues a Write Structured Field Query for Terminal Model Resets for terminals connected to Model 204 through VTAM or TELNET, provided that X&#039;02&#039; has been set. This precludes Terminal Model RESETs to Models that are not supported by the terminal emulator in use.&lt;br /&gt;
&lt;br /&gt;
===WEBDFLT===&lt;br /&gt;
At V7.7, the default access rule for non-SSL ports was changed from ALLOW * to DISALLOW *, meaning that unless any ALLOW rules were in place resulting in a login/password prompt, the port couldn&#039;t be accessed. The new &amp;lt;var&amp;gt;[[WEBDFLT_parameter|WEBDFLT]]&amp;lt;/var&amp;gt; parameter may be set to 1 for reversion to the old default of ALLOW *. This new parameter is enabled in V7.7 with the application of zap 77z090. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;var&amp;gt;RESET WEBDFLT&amp;lt;/var&amp;gt; requires system administrator privileges. It is recommended to reset the 1 bit of &amp;lt;var&amp;gt;WEBDFLT&amp;lt;/var&amp;gt; to zero after issuing a series of &amp;lt;var&amp;gt;JANUS DEFINE&amp;lt;/var&amp;gt; commands which need &amp;lt;var&amp;gt;WEBDFLT=1&amp;lt;/var&amp;gt;, as in the CCAIN input stream.&lt;br /&gt;
&lt;br /&gt;
==New and changed statistics==&lt;br /&gt;
===MPR, MBO, MCP, and RCV===&lt;br /&gt;
Introduced in zap 77z257.&lt;br /&gt;
&amp;lt;p&amp;gt;These statistics provide high water mark transaction information. (Since-last values will not be available until V78 GA.)&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;They are useful in conjunction with the &amp;lt;var&amp;gt;MAXPRE&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;MAXBOUT&amp;lt;/var&amp;gt;, and &amp;lt;var&amp;gt;MAXSUBT&amp;lt;/var&amp;gt; parameters. &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
User/system statistics:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;MPR: High water mark of transaction pre-images. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;MBO: High water mark of transaction backout pages. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;MCP: High water mark of transaction chkpoint spans. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
System statistics: &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;RCV: Number of blocks needed for subtransaction recovery &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt; &lt;br /&gt;
&amp;lt;p class=&amp;quot;note&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Notes:&amp;lt;/b&amp;gt; M204.0843 now displays the RCV statistic for subtransaction checkpoints.&lt;br /&gt;
The size of recovery checkpoint must be greater than the sum of the last RCV value plus the number of records in [[System_and_media_recovery#RESTART_recovery_considerations_for_sub-transaction_checkpoints|RESTART and RESTARTS]].&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
===DKWTS and DKWTMICS===&lt;br /&gt;
Introduced in zap 77z7289.&lt;br /&gt;
&amp;lt;p&amp;gt;The new system statistics DKWTS (DisK WaiTs) and DKWTMICS (DisK WaiT MICroSeconds) collect data to provide rough disk I/O service time numbers.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
DKWTS shows the number of disk I/O waits. DKWTMICS shows the total wait time for those waits in microseconds. Dividing the difference in DKWTMICS by the difference in DKWTS over an interval provides the average disk I/O wait time in microseconds.              &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;note&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Notes:&amp;lt;/b&amp;gt; &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The wait time does include internal Model 204 scheduler delays, so on a CPU bound Model 204 system, the service times calculated from DKWTS and DKWTMICS are likely to be an overestimate of actual service times.&amp;lt;/li&amp;gt;  &lt;br /&gt;
                                                                    &lt;br /&gt;
&amp;lt;li&amp;gt;DKWTS and DKWTMICS are not available in SirMon; use &amp;lt;var&amp;gt;[[MONITOR_command|MONITOR]] SYSTEM STATISTICS&amp;lt;/var&amp;gt; to view these statistics.&amp;lt;/li&amp;gt;&amp;lt;/ul&amp;gt;  &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Compatibility issues==&lt;br /&gt;
===&amp;lt;b id=&amp;quot;listNewInit&amp;quot;&amp;gt;&amp;lt;/b&amp;gt;$ListNew cannot be used in Initial clause===&lt;br /&gt;
It is now a compilation error if &amp;lt;var&amp;gt;$ListNew&amp;lt;/var&amp;gt; is attempted to be used in the &amp;lt;var&amp;gt;Initial&amp;lt;/var&amp;gt; clause of a &lt;br /&gt;
[[Using_variables_and_values_in_computation#Declare_statements_for_.25variables|declaration statement]].&lt;br /&gt;
&amp;lt;p&amp;gt;This change is propagated by zap maintenance to versions 7.5 (zap 75Z487), 7.6 (zap 76Z514), and 7.7 (zap 77z281) of Model 204.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote class=&amp;quot;note&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Note:&amp;lt;/b&amp;gt; Strictly speaking, this would not be considered a compilation error, because previously although &amp;lt;code&amp;gt;..&amp;amp;nbsp;Initial($ListNew)&amp;lt;/code&amp;gt; did not produce a compilation error, in almost all circumstances it would produce a snap if the initialized %variable were used with some other &amp;lt;var&amp;gt;$List&amp;lt;i&amp;gt;xxx&amp;lt;/i&amp;gt;&amp;lt;/var&amp;gt; invocation.&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Restricting the use of the CUSTOM=38 setting===&lt;br /&gt;
The &amp;lt;var&amp;gt;[[CUSTOM parameter|CUSTOM=38]]&amp;lt;/var&amp;gt; parameter setting, introduced at V7.5, inadvertently provided System Manager privileges to all users via the &amp;lt;var&amp;gt;RESET&amp;lt;/var&amp;gt; command. This &amp;lt;var&amp;gt;CUSTOM&amp;lt;/var&amp;gt; setting is now restricted to the &amp;lt;var&amp;gt;RESET&amp;lt;/var&amp;gt; of the &amp;lt;var&amp;gt;LAUDIT&amp;lt;/var&amp;gt; parameter.&lt;br /&gt;
&lt;br /&gt;
===Disabling of Closure support===&lt;br /&gt;
Due to a number of bugs related to Closure support, introduced at V7.7, this feature, which can best be described as exposed methods assigned to method variables, has been disabled in this release. This change was also made to V7.7 with application of zap 77z119.&lt;br /&gt;
&lt;br /&gt;
===Password delimiter enforced===&lt;br /&gt;
When using &amp;lt;var&amp;gt;IFSTRTN&amp;lt;/var&amp;gt; to log on to a Model 204 online from an IFAM2 application, both the logonid and password must be followed by a semicolon, which is the delimiter. For example:      &lt;br /&gt;
                                      &lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;CALL IFSTRTN(RC,&#039;logonid;password;&#039;...)&amp;lt;/p&amp;gt;&lt;br /&gt;
                 &lt;br /&gt;
If a semicolon does not follow the password string, the following message will now be issued:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;M204.2964: Password missing or too long &amp;lt;/p&amp;gt;                 &lt;br /&gt;
                                                         &lt;br /&gt;
Previously, a semicolon following the password was not required and the first blank served as a password delimiter.  However, as of V7.7, embedded blanks are valid password characters and a semicolon is now required to delimit the password.&lt;br /&gt;
&lt;br /&gt;
This change is enabled in V7.7 with the application of zap 77z231.&lt;br /&gt;
&lt;br /&gt;
===PAGESZ parameter validated===&lt;br /&gt;
Previously it was possible to set the &amp;lt;var&amp;gt;PAGESZ&amp;lt;/var&amp;gt; parameter to any value, although Model 204 internally supports one page size of 6184, and any deviation from this value would have led to problems during file creation. The value of this parameter is now controlled, such that setting it to any value other than 6184 will generate an M204.1149 message with the parameter being reset to 6184.&lt;br /&gt;
&lt;br /&gt;
===ECPRIV and the IDCAMS facility===&lt;br /&gt;
At V7.7 a security loophole was closed, whereby all ECF modules were run under external-authorizer profile of the calling user. Previously any ECF tasks were run under the owning job&#039;s external-authorizer profile, and in order for certain sites to retain that ability, a new setting of &amp;lt;var&amp;gt;ECPRIV&amp;lt;/var&amp;gt;, value 4, was introduced to retain the ability to run ECF tasks using the job&#039;s security profile. &lt;br /&gt;
&lt;br /&gt;
The &amp;lt;var&amp;gt;ECPRIV&amp;lt;/var&amp;gt; 4 setting potentially introduced a security loophole when calling the IDCAMS interface, based upon what the IDCAMS utility is able to do at a system level. Consequently as of this release, the &amp;lt;var&amp;gt;ECPRIV&amp;lt;/var&amp;gt; 4 setting will be ignored when calling the IDCAMS facility via ECF, and such IDCAMS processes will always use the calling user&#039;s security profile. Any existing jobs that use ECF to call the IDCAMS utility with the &amp;lt;var&amp;gt;ECFPRIV&amp;lt;/var&amp;gt; 4 bit set should be checked to ensure that the calling user&#039;s security profile still satisfies the job&#039;s requirements.&lt;br /&gt;
&lt;br /&gt;
===TCPOPTS is view-only===&lt;br /&gt;
In previous versions the &amp;lt;var&amp;gt;TCPOPTS&amp;lt;/var&amp;gt; parameter, which identifies the type of IP addressing in use (v4 or v6), was resettable, although it was always documented as a view-only parameter. The parameter is now handled as a view-only parameter, and any attempts to reset the parameter will result in the following message:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;gt;   M204.1123: Parameter TCPOPTS not reset&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===ZHPF command can only be issued by a system manager===&lt;br /&gt;
In previous versions it was possible to issue the &amp;lt;var&amp;gt;ZHPF&amp;lt;/var&amp;gt; command without being logged on. From this release onwards, a user must be logged on with system manager privileges in order to issue this command.&lt;br /&gt;
&lt;br /&gt;
Additionally, the command output will now only  display results for currently open files.&lt;br /&gt;
&lt;br /&gt;
This change is enabled in v7.7 with the application of zap 77z264.&lt;br /&gt;
&lt;br /&gt;
===Terminal MODEL reset failure===&lt;br /&gt;
If a reset of the terminal &amp;lt;var&amp;gt;MODEL&amp;lt;/var&amp;gt; parameter fails due to an undersized output page buffer, then in addition to the existing messages that inform the user of this failure:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;gt;    M204.1875 UNABLE TO RESET MODEL TO %C &lt;br /&gt;
    M204.1123: Parameter MODEL not reset&amp;lt;/p&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
the following message will now be issued:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;gt;    M204.1008: LOUTPB must be increased to at least &amp;lt;number&amp;gt; &amp;lt;/p&amp;gt;&lt;br /&gt;
                                                         &lt;br /&gt;
where &amp;lt;number&amp;gt; is the minimum value of &amp;lt;var&amp;gt;LOUTPB&amp;lt;/var&amp;gt; necessary to support the terminal model.&lt;br /&gt;
&lt;br /&gt;
This change is enabled in V7.7 with the application of zap 77z309.&lt;br /&gt;
&lt;br /&gt;
==Notes for system manager and installer==&lt;br /&gt;
===CRAM SVC installation is deprecated===&lt;br /&gt;
The CRAM SVC installation has been deprecated as of version 7.5. &amp;lt;br /&amp;gt;Installation of CRAM-XDM is described as part of the [[Model 204 installation]].&lt;br /&gt;
===Authorization and maintenance zaps===&lt;br /&gt;
When you download Rocket M204 product object files, all relevant authorization keys and all current maintenance zaps are pre-applied to the object files as part of the download process.&lt;br /&gt;
&lt;br /&gt;
==New and changed messages==&lt;br /&gt;
&lt;br /&gt;
See [[New and updated messages in Model 204 version 7.8|New and updated messages in Model 204 version 7.8]] for details.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category: Release notes]]&lt;/div&gt;</summary>
		<author><name>ELowell</name></author>
	</entry>
	<entry>
		<id>https://m204wiki.rocketsoftware.com/index.php?title=Release_notes_for_Model_204_version_7.8&amp;diff=117744</id>
		<title>Release notes for Model 204 version 7.8</title>
		<link rel="alternate" type="text/html" href="https://m204wiki.rocketsoftware.com/index.php?title=Release_notes_for_Model_204_version_7.8&amp;diff=117744"/>
		<updated>2019-12-18T00:21:43Z</updated>

		<summary type="html">&lt;p&gt;ELowell: minor formatting changes&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;&amp;lt;b&amp;gt;******THIS IS A DRAFT DOCUMENT.******&amp;lt;/b&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
These release notes list the enhancements and other changes contained in Model 204 version 7.8, &amp;lt;b&amp;gt;&amp;lt;i&amp;gt;which is still in development&amp;lt;/i&amp;gt;&amp;lt;/b&amp;gt;. Until the commercial release of the software, Rocket reserves the right to add to, remove, or change anything described herein. &lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
These release notes contain installation and features information for the Rocket Model 204 version 7.8 release.&lt;br /&gt;
Before beginning your installation, please read through this information about product installation and changes.&lt;br /&gt;
&lt;br /&gt;
==New in this release==&lt;br /&gt;
The table below cites some highlights of Model&amp;amp;nbsp;204 version 7.8. For a full list of features, refer to the Table of Contents. &lt;br /&gt;
&amp;lt;p&amp;gt;See also the [[#Compatibility Issues|Compatibility]] section for possible issues.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;tr class=&amp;quot;head&amp;quot;&amp;gt;&amp;lt;th&amp;gt;Category&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Feature&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;SOUL&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The new [[#AmIndependent method|AmIndependent]] method returns TRUE for daemons spawned by RunIndependently.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The Object class now supports the [[#Support for copying Object class objects|copy and deepCopy methods]].&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Janus Web&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[[#Web Sockets|Janus Web Sockets]] are now supported.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td nowrap&amp;gt;Networking&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Note:&amp;lt;/b&amp;gt; The two-phase commit and commit exits features are licensed and purchased separately from Model 204.&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Two-phase commit. A Model 204 online can now be configured to use two-phase commit (2PC). The Janus internal socket API is used for the calls to the coordinator. JANUS commands are used for all 2PC configuration. A new JANUS port type has been added, 2PC.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Commit exits are now supported. The commit exit runs within the APSY, which is defined by the &amp;lt;var&amp;gt;COMMITX&amp;lt;/var&amp;gt; parameter and uses normal APSY processing.  &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;ECF tables&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The new &amp;lt;var&amp;gt;DISPLAY ECF&amp;lt;/var&amp;gt; command and &amp;lt;var&amp;gt;EXTERNAL REMOVE&amp;lt;/var&amp;gt; statement enable more efficient management of [[#Managing ECF tables more efficiently|ECF tables]].&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Performance&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[[#MP/204 offload improvements|MP/204 offload improvements]] -- application code for these SOUL statements is now fully offloadable: &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;File Records In/On&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Remember&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Position&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Sort Values&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Reset Header/Trailer&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Find and Print Count&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Find All Values&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;For Each Value&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Security&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;CA-Top Secret can [[#CA-Top Secret can disallow CCASTAT logins|disallow CCASTAT logins]].&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[[#DEFUSER can specify a jobname not authorized to access M204|DEFUSER]] can specify a jobname not authorized to access M204.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td nowrap&amp;gt;System enhancements&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The &amp;lt;var&amp;gt;MONITOR USERS&amp;lt;/var&amp;gt; command output displays [[#New wait types for daemon/master waits|two new wait types]].&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td nowrap&amp;gt;AUDIT204 enhancements&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The new TIMEHH parameter on the &amp;lt;var&amp;gt;[[#FORMAT command|FORMAT]]&amp;lt;/var&amp;gt; command of the AUDIT204 utility provides greater time stamp precision.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td nowrap&amp;gt;New commands&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;[[#DISPLAY ECF|DISPLAY ECF]]&amp;lt;/var&amp;gt; displays details from ECF tables, or the current status of users accessing ECF modules.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td nowrap&amp;gt;New parameters&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;[[#ENQTIME|ENQTIME]]&amp;lt;/var&amp;gt; specifies the number of milliseconds waited for each record locking retry wait.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;[[#EVALOPT|EVALOPT]]&amp;lt;/var&amp;gt; controls the cancellation of a request on truncation of string data.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;[[#MAXPRE, MAXBOUT, MAXSUBT|MAXPRE, MAXBOUT, and MAXSUBT]]&amp;lt;/var&amp;gt; can be used to cancel a runaway transaction and prevent it from filling the checkpoint data set.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;[[#NLDAPBUF|NLDAPBUF]]&amp;lt;/var&amp;gt; allows the number of LDAP buffers allocated during startup to be set in CCAIN.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;[[#SERV4G|SERV4G]]&amp;lt;/var&amp;gt; allows testing of server tables that span a 4-gigabyte boundary.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;[[#WEBDFLT|WEBDFLT]]&amp;lt;/var&amp;gt; changes the default JANUS WEB ALLOW rule back to ALLOW.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td nowrap&amp;gt;Janus and TN3270 debuggers&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The debuggers can now view or watch the values of [[#Access to exposed variables|variables exposed to local routines/methods]].&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;When execution pauses, the debuggers now [[#Subroutine or method display|display the subroutine or method]] being executed.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td nowrap&amp;gt;User/system statistics&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;[[#MPR, MBO, MCP, and RCV|MPR, MBO, MCP, and RCV]]&amp;lt;/var&amp;gt; provide high water mark transaction information in conjunction with the &amp;lt;var&amp;gt;MAXPRE&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;MAXBOUT&amp;lt;/var&amp;gt;, and &amp;lt;var&amp;gt;MAXSUBT&amp;lt;/var&amp;gt; parameters. &lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[[#DKWTS and DKWTMICS|New system statistics]] DKWTS (DisK WaiTs) and DKWTMICS (DisK WaiT MICroSeconds) collect data to provide rough disk I/O service time numbers.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Operating system and hardware requirements==&lt;br /&gt;
&lt;br /&gt;
===Operating system requirements===&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;IBM z/OS versions supported:&amp;lt;/b&amp;gt; &lt;br /&gt;
  &amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;All IBM supported releases up to and including z/OS 2.3. &amp;lt;br /&amp;gt;(For z/OS 2.2, see [[IBM z/OS 2.2 PTF requirement]].)&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;p&amp;gt;Version 1.07 is sufficient for all functionality except for the following features:&amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;ul&amp;gt;&lt;br /&gt;
    &amp;lt;li&amp;gt;zHPF support requires version [[IBM z/OS 2.1 compatibility issue|2.1]].&amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;li&amp;gt;Large (1 MB) page support requires version 1.9.&amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;li&amp;gt;Extended address volumes (EAV) requires version 1.12.&amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;/ul&amp;gt;&lt;br /&gt;
  &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
On z/OS, Model 204 release 7.8 operates as an APF authorized load module, as required by many 7.8 features. &amp;lt;br /&amp;gt;&lt;br /&gt;
To run Model 204 unauthorized, [[Contacting Rocket Software Technical Support|contact Technical Support]].&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;IBM z/VM versions supported:&amp;lt;/b&amp;gt; &lt;br /&gt;
  &amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;All IBM supported releases up to and including z/VM 6.4.&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;IBM z/VSE versions supported:&amp;lt;/b&amp;gt;&lt;br /&gt;
  &amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;All IBM supported releases up to and including z/VSE 6.1.&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Hardware requirements===&lt;br /&gt;
 &lt;br /&gt;
In general, Model 204 version 7.8 requires the IBM z/890 or above processor.&lt;br /&gt;
&amp;lt;p&amp;gt;However, the IBM z10 or above processor is required for the following features:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;large (1 MB) page support&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;IBM&#039;s High Performance FICON (zHPF) support&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Connect&amp;lt;sup&amp;gt;&amp;amp;#9733;&amp;lt;/sup&amp;gt; compatibility with Model 204===&lt;br /&gt;
&lt;br /&gt;
Connect&amp;lt;span class=&amp;quot;superstar&amp;quot;&amp;gt;&amp;amp;#9733;&amp;lt;/span&amp;gt; version 7.5 or 7.7 is compatible with Model 204 version 7.8.&lt;br /&gt;
&lt;br /&gt;
For more information on Connect&amp;lt;span class=&amp;quot;superstar&amp;quot;&amp;gt;&amp;amp;#9733;&amp;lt;/span&amp;gt; installation, see the [[:Category:Connect*|Connect&amp;lt;span class=&amp;quot;superstar&amp;quot;&amp;gt;&amp;amp;#9733;&amp;lt;/span&amp;gt; wiki pages]].&lt;br /&gt;
&lt;br /&gt;
==SOUL (User Language) enhancements==&lt;br /&gt;
===AmIndependent method===&lt;br /&gt;
The &amp;lt;var&amp;gt;AmIndependent&amp;lt;/var&amp;gt; method returns TRUE for daemons spawned by &amp;lt;var&amp;gt;[[RunIndependently_(Daemon_subroutine)|RunIndependently]]&amp;lt;/var&amp;gt;. (The action of &amp;lt;var&amp;gt;[[AmDaemon_(Daemon_property)|AmDaemon]]&amp;lt;/var&amp;gt; remains unchanged.)&lt;br /&gt;
&lt;br /&gt;
The following table shows the values returned by &amp;lt;var&amp;gt;AmIndependent&amp;lt;/var&amp;gt; versus &amp;lt;var&amp;gt;AmDaemon&amp;lt;/var&amp;gt; for different daemon types:&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Type&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;AmDaemon&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;AmIndependent&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;$COMBG&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;False&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;False&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Independent daemon&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;False&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;True&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Other daemon&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;True&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;False&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Web, etc.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;False&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;False&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===$ProcOpn===&lt;br /&gt;
&amp;lt;var&amp;gt;[[$ProcOpn|$ProcOpn]]&amp;lt;/var&amp;gt; now supports the opening of a procedure with an all-numeric name, and including a leading zero, such as:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;%result = $procOpn(&#039;0123&#039;, &#039;MYFILE&#039;)&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Support for such procedure names was initially introduced at V7.7, and this feature of &amp;lt;var&amp;gt;$ProcOpn&amp;lt;/var&amp;gt; is enabled in V7.7 with the application of zap 77z054.&lt;br /&gt;
&lt;br /&gt;
===Allow parentheses to surround a boolean enumeration object===&lt;br /&gt;
The following sample code:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;   begin                                       &lt;br /&gt;
   variables are undefined                  &lt;br /&gt;
   %isValid is boolean initial (True)       &lt;br /&gt;
   if (%isValid) then                  &lt;br /&gt;
      print &#039;in IF&#039;                            &lt;br /&gt;
   end if                                   &lt;br /&gt;
   end   &amp;lt;/p&amp;gt;      &lt;br /&gt;
&lt;br /&gt;
will now compile and run successfully, since this syntax: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;if (%isValid) then &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
is logically equivalent to this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;if %isValid then &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Prior to V7.8 the presence of parentheses surrounding the boolean enumeration object would have caused a compilation error. This change is enabled in V7.7 with the application of zap 77z370.&lt;br /&gt;
&lt;br /&gt;
===Support for copying Object class objects===&lt;br /&gt;
The Object class now supports the copy and deepCopy methods. For example, an Object object can be copied as follows:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;   begin               &lt;br /&gt;
   %x is object object &lt;br /&gt;
   %y is object object &lt;br /&gt;
   %y = new            &lt;br /&gt;
   %x = %y:copy        &lt;br /&gt;
   end &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This change is enabled in v7.7 with the application of zap 77z076, and within V7.6 with the application of zap 76z412.&lt;br /&gt;
&lt;br /&gt;
===Assignment of enumeration values to method variables===&lt;br /&gt;
Enumeration values can now be assigned to method variables whose result is an enumeration. So, for example, the following code:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;   begin                                               &lt;br /&gt;
   enumeration colour                                  &lt;br /&gt;
      public                                           &lt;br /&gt;
         value red                                     &lt;br /&gt;
         value white                                   &lt;br /&gt;
         value blue                                    &lt;br /&gt;
      end public                                       &lt;br /&gt;
   end enumeration                                     &lt;br /&gt;
   %func    is function getColour is enumeration colour&lt;br /&gt;
   local function getColour is enumeration colour      &lt;br /&gt;
      return blue                                      &lt;br /&gt;
   end function                                        &lt;br /&gt;
   %func    = getColour                                &lt;br /&gt;
   %func    = (colour):red                             &lt;br /&gt;
   printText {~=%(Local):(%func)}                      &lt;br /&gt;
   end  &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
will produce this result:&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt; %(Local):(%func)=red &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
whereas previously this line:   &lt;br /&gt;
&lt;br /&gt;
  &amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt; %func    = (colour):red &amp;lt;/p&amp;gt;   &lt;br /&gt;
&lt;br /&gt;
would have been rejected with this message:&lt;br /&gt;
&lt;br /&gt;
   &amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;MSIR.0993: Assignment invalid: mismatch between method and method variable &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This change is enabled in V7.7 with the application of zap 77z128.&lt;br /&gt;
&lt;br /&gt;
===Optional output method parameters===&lt;br /&gt;
Prior to this release output parameters could not be optional or have default values. In this release output parameters can be specified as &amp;lt;var&amp;gt;Optional&amp;lt;/var&amp;gt;, and a default value can be specified with &amp;lt;var&amp;gt;Default&amp;lt;/var&amp;gt;. One related change is that if a &amp;lt;var&amp;gt;Len&amp;lt;/var&amp;gt; value is specified with &amp;lt;var&amp;gt;Optional&amp;lt;/var&amp;gt; or &amp;lt;var&amp;gt;Default&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;Output&amp;lt;/var&amp;gt;, it indicates the length of the hidden target for the output parameter if none was passed. For all other &amp;lt;var&amp;gt;Output&amp;lt;/var&amp;gt; parameters, &amp;lt;var&amp;gt;Len&amp;lt;/var&amp;gt; is meaningless, just as it was before Model 204 V7.8. The following is an example of the use of an optional output parameter:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;function getRemote( -&lt;br /&gt;
   %target is string len 32, %errorReason is string len 80 optional output -&lt;br /&gt;
) is float&lt;br /&gt;
  ...&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
In this example, if &amp;lt;code&amp;gt;%errorReason&amp;lt;/code&amp;gt; is not specified in a call and then set to a value longer than 80 bytes it wil be truncated to 80 bytes. However, if a string of a different length is passed, the length of that string will determine truncation behavior.&lt;br /&gt;
&lt;br /&gt;
==External Call Facility enhancements==&lt;br /&gt;
===Managing ECF tables more efficiently===&lt;br /&gt;
The are two new features to help manage ECF tables more efficiently, avoid conditions where the table can fill, and prevent the definition of further entities.&lt;br /&gt;
&lt;br /&gt;
The first feature is the new &amp;lt;var&amp;gt;DISPLAY ECF&amp;lt;/var&amp;gt; command, which displays the contents of ECF tables and also the current status of users accessing ECF modules. See more details of the &amp;lt;var&amp;gt;[[#DISPLAY ECF|DISPLAY ECF]]&amp;lt;/var&amp;gt; command below.&lt;br /&gt;
&lt;br /&gt;
The second feature is a new &amp;lt;var&amp;gt;EXTERNAL REMOVE&amp;lt;/var&amp;gt; statement with the following syntax:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;EXTERNAL REMOVE &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;modulename&amp;lt;/span&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This statement causes the entry for the named module to be removed from the module table. The table entry is then placed on a free chain of entries and can be reused by issuing the &amp;lt;var&amp;gt;EXTERNAL MODULE&amp;lt;/var&amp;gt; statement. This allows the module table to be managed with redundant entries removed, without having to recycle the ONLINE.&lt;br /&gt;
&lt;br /&gt;
An &amp;lt;var&amp;gt;EXTERNAL REMOVE&amp;lt;/var&amp;gt; statement will return &amp;lt;code&amp;gt;$status/$statusd&amp;lt;/code&amp;gt; values of &amp;lt;code&amp;gt;0/0&amp;lt;/code&amp;gt;, and most other status values that can be returned by the &amp;lt;var&amp;gt;EXTERNAL REMOVE&amp;lt;/var&amp;gt; statement are already documented in the ECF return codes table. If an &amp;lt;var&amp;gt;EXTERNAL REMOVE&amp;lt;/var&amp;gt; is attempted against a module that is currently being called (in use), then &amp;lt;code&amp;gt;$status/$statusd&amp;lt;/code&amp;gt; will return the values &amp;lt;code&amp;gt;20/1&amp;lt;/code&amp;gt; (module unavailable).&lt;br /&gt;
&lt;br /&gt;
==System enhancements==&lt;br /&gt;
&lt;br /&gt;
===New wait types for daemon/master waits===&lt;br /&gt;
&lt;br /&gt;
Two new wait types, viewable on the &amp;lt;var&amp;gt;[[MONITOR_command|MONITOR]] USERS&amp;lt;/var&amp;gt; command output, have been implemented as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;57&amp;lt;/code&amp;gt; - Means a daemon thread waiting for its master thread  &amp;lt;br /&amp;gt;     &lt;br /&gt;
&amp;lt;code&amp;gt;58&amp;lt;/code&amp;gt; - Means a master thread waiting for one of its daemon threads&lt;br /&gt;
&lt;br /&gt;
This change is enabled in V7.7 with the application of zap 77z410.&lt;br /&gt;
&lt;br /&gt;
===Snap formatting changes===&lt;br /&gt;
Date/time stamps in the page headers of snaps will now be shown in normal format, rather than in Julian format as in previous versions. So in the following example, a particular snap header under v7.7 or previous versions would show as: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;SNAPID    1   19226.060155  M204.0022: Bug .. nnnnn               PAGE     1 &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
whereas the same snap header under v7.8 would show as: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;SNAPID    1  2019/08/14 06:01:06   M204.0022: Bug .. nnnnn        PAGE     1 &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Also, due to improvements in handling trailing blanks in snap output, a snap generated under v7.8 should be marginally smaller than the same snap generated under previous versions, assuming the same &amp;lt;var&amp;gt;SNAPCTL&amp;lt;/var&amp;gt; settings.&lt;br /&gt;
&lt;br /&gt;
===Call stack trace for problem diagnosis===&lt;br /&gt;
A  call stack trace is now provided to help diagnose and resolve common errors. To enable the stack trace, do either of the following: &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Set the &amp;lt;var&amp;gt;[[SIRFACT parameter|SIRFACT]] X&#039;01&#039;&amp;lt;/var&amp;gt; bit.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Set the &amp;lt;var&amp;gt;[[DEBUGUL parameter|DEBUGL]]&amp;lt;/var&amp;gt; parameter. Note that the &amp;lt;var&amp;gt;DEBUGUL&amp;lt;/var&amp;gt; approach will introduce extra QTBL overhead. &amp;lt;p&amp;gt;(&amp;lt;var&amp;gt;DEBUGUL&amp;lt;/var&amp;gt; provides a similar facility with an include trace of procedures leading to the error, but this might not be potentially as useful as the call trace.)&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt; &lt;br /&gt;
&lt;br /&gt;
The call stack trace can assist in diagnosing run-time errors that might occur, as illustrated by the following &amp;quot;Variable too small for result&amp;quot; and &amp;quot;MBSCAN exceeded&amp;quot; examples.&lt;br /&gt;
&lt;br /&gt;
====Variable too small for result====&lt;br /&gt;
When the stack trace is enabled, a &amp;quot;variable too small&amp;quot; error results in the following message:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;M204.2966: Error at line n, procedure &#039;&#039;procname&#039;&#039; in file &#039;&#039;procfile&#039;&#039;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
which identifies the line within a procedure where the error is occurring, in addition to the usual message:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;M204.0552: Variable too small for result&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Any subsequent M204.2966 messages indicate the point in the code from where the code in error was called. For example, a stack of three subroutine calls leading to a &amp;quot;variable too small&amp;quot; error might result in the following messaging:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;   M204.0552: Variable too small for result                             &lt;br /&gt;
   M204.2966: Error at line 9, procedure MYPROC.LEVEL4 in file MYPROC   &lt;br /&gt;
   M204.2966: Called from line 5, procedure MYPROC.LEVEL3 in file MYPROC&lt;br /&gt;
   M204.2966: Called from line 5, procedure MYPROC.LEVEL2 in file MYPROC&lt;br /&gt;
   M204.2966: Called from line 5, procedure MYPROC.LEVEL1 in file MYPROC &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This information should help in diagnosing the problem. &lt;br /&gt;
&lt;br /&gt;
If the error occurs within a command level program rather than a procedure, then the M204.2966 message is replaced by an M204.2967 message, and a similar error condition to the above with a preceding call stack might be audited as follows:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;   M204.0552: Variable too small for result              &lt;br /&gt;
   M204.2967: Error at line 14 of command level program  &lt;br /&gt;
   M204.2967: Called from line 5 of command level program&lt;br /&gt;
   M204.2967: Called from line 3 of command level program &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If neither &amp;lt;var&amp;gt;SIRFACT X&#039;01&#039;&amp;lt;/var&amp;gt; nor &amp;lt;var&amp;gt;DEBUGUL&amp;lt;/var&amp;gt; is set, then the &amp;quot;variable too small&amp;quot; error produces the following messages:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;   M204.0552: Variable too small for result &lt;br /&gt;
   M204.2968: Error: no debug info &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====MBSCAN exceeded====&lt;br /&gt;
Similarly to the handling of the &amp;quot;variable too small for result&amp;quot; error, the call stack can also be used to diagnose errors where the value of &amp;lt;var&amp;gt;[[MBSCAN parameter|MBSCAN]]&amp;lt;/var&amp;gt; is exceeded as a result of a direct search of Table B records. &lt;br /&gt;
&amp;lt;p&amp;gt;Again, under V7.8, with either the &amp;lt;var&amp;gt;SIRFACT X&#039;01&#039;&amp;lt;/var&amp;gt; bit set or &amp;lt;var&amp;gt;DEBUGUL&amp;lt;/var&amp;gt; set, if a long request occurs as a result of exceeding &amp;lt;var&amp;gt;MBSCAN&amp;lt;/var&amp;gt;, then initially the following message is produced, as before:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;M204.0569: File &#039;&#039;filename&#039;&#039;, Find: Table B records to be searched = &#039;&#039;nnnn&#039;&#039;&amp;lt;/p&amp;gt;&lt;br /&gt;
followed by a DYRWT prompt message. If the user replies &#039;N&#039; to the prompt, or if the request is run in an environment (such as a batch job) where the default response is &#039;N&#039;, the following message is produced after the M204.0569 message:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;Cancelling request: M204.2969: MBSCAN (&#039;&#039;mm&#039;&#039;) exceeded, records to be searched = &#039;&#039;nnnn&#039;&#039;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
where &#039;&#039;mm&#039;&#039; is the current setting of &amp;lt;var&amp;gt;MBSCAN&amp;lt;/var&amp;gt;. The M204.2969 message is followed by M204.2966 messages displaying the call stack trace. Thus, if the following code is run from procedure MYPROC.MBSCAN against the demo database, with an &amp;lt;var&amp;gt;MBSCAN&amp;lt;/var&amp;gt; setting of 10:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;   b                           &lt;br /&gt;
   call sub1                   &lt;br /&gt;
   sub1: subroutine            &lt;br /&gt;
   fd1:                        &lt;br /&gt;
      in clients fd city = ONTARIO&lt;br /&gt;
              end find         &lt;br /&gt;
      fr fd1                      &lt;br /&gt;
         pai                      &lt;br /&gt;
         print                    &lt;br /&gt;
      end for                     &lt;br /&gt;
   end subroutine              &lt;br /&gt;
   end &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
then the following messages are produced, assuming any prompts are responded to with an &#039;N&#039;:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;   M204.0569: File CLIENTS, Find: Table B records to be searched = 3415&lt;br /&gt;
   Cancelling request: M204.2969: MBSCAN (10) exceeded, records to be searched = 3415  &lt;br /&gt;
   M204.2966: Error at line 6, procedure MYPROC.MBSCAN in file MYPROC&lt;br /&gt;
   M204.2966: Called from line 3, procedure MYPROC.MBSCAN in file MYPROC  &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===appendJournalData===&lt;br /&gt;
The &amp;lt;var&amp;gt;[[AppendJournalData_(Stringlist_function)|AppendJournalData]]&amp;lt;/var&amp;gt; function is now more tolerant of an outstanding BUMP request. Previously, if &amp;lt;var&amp;gt;AppendJournalData&amp;lt;/var&amp;gt; was called to inadvertently retrieve a large amount of journal data, typically when called implicitly from within SirScan, then any outstanding BUMP request wouldn&#039;t be honored until all of the data had been retrieved, at which point the BUMP request would be completed, and all data would be lost.&lt;br /&gt;
&lt;br /&gt;
Now, the &amp;lt;var&amp;gt;AppendJournalData&amp;lt;/var&amp;gt; process checks for outstanding BUMP requests before each track I/O is executed, thus avoiding excessive I/Os against the journal and long waits for the BUMP of such a process to complete.&lt;br /&gt;
&lt;br /&gt;
==AUDIT204 enhancements==&lt;br /&gt;
===FORMAT command===&lt;br /&gt;
TIMEHH is a new parameter used with the FORMAT command of the [[Tracking_system_activity_(CCAJRNL,_CCAAUDIT,_CCAJLOG)#AUDIT204_utility|AUDIT204]] utility.  It indicates that timestamps, printed at the beginning of each line of output, should include hundredths of a second. Requires no other arguments.&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;b&amp;gt;NOTE:&amp;lt;/b&amp;gt; This parameter and the 78 version (or later) of AUDIT204 may be used against a 77 (or later) CCAJRNL.&amp;lt;/p&amp;gt;&lt;br /&gt;
For example:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;//CCAIN DD *&lt;br /&gt;
FORMAT YEARFORM 4&lt;br /&gt;
TIMEHH&lt;br /&gt;
TYPE ER MS LI&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Recovery enhancements==&lt;br /&gt;
===Media Recovery in a multi-user environment===&lt;br /&gt;
It is now possible to perform media recovery by issuing the &amp;lt;var&amp;gt;REGENERATE&amp;lt;/var&amp;gt; command to roll forward selected files in a multi-user environment, with the media recovery being carried out by different users with system manager privileges. The new USING option allows for the specification of a ddname for the input journal stream to be used by the &amp;lt;var&amp;gt;REGENERATE&amp;lt;/var&amp;gt; command. Previously media recovery was restricted to single user batch jobs, using the CCAGEN ddname for the input journal. For more details, see the &amp;lt;var&amp;gt;[[#REGENERATE|REGENERATE]]&amp;lt;/var&amp;gt; command below.&lt;br /&gt;
&lt;br /&gt;
==Security enhancements==&lt;br /&gt;
===CA-Top Secret can disallow CCASTAT logins===&lt;br /&gt;
The [[CA-Top_Secret_interface|CA-Top Secret]] interface now recognizes the &amp;lt;code&amp;gt;DEFACID=&amp;lt;/code&amp;gt;, setting and does not allow CCASTAT logins in the online if &amp;lt;code&amp;gt;DEFACID&amp;lt;/code&amp;gt; is set to null. (There is no attempt to log on M204USR.) Therefore, to disallow CCASTAT logons, set DEFACID=, in [[CA-Top_Secret_interface#Preparing_a_TOPSPARM_parameter_module_with_TOPSGEN|TOPSPARM]]. CCASTAT will be opened because it contains file and group passwords, but it will not be used for logons if CCASTAT logons are not allowed.&lt;br /&gt;
&lt;br /&gt;
===CUSTOM=11 and mixed cased input===&lt;br /&gt;
The &amp;lt;var&amp;gt;[[CUSTOM_parameter|CUSTOM]]&amp;lt;/var&amp;gt; parameter &amp;lt;var&amp;gt;CUSTOM=11&amp;lt;/var&amp;gt; setting no longer requires that a &amp;lt;var&amp;gt;*LOWER&amp;lt;/var&amp;gt; command be issued prior to a &amp;lt;var&amp;gt;LOGCTL&amp;lt;/var&amp;gt; command (to add or change a  password) to preserve mixed case input. Prior to this release, with &amp;lt;var&amp;gt;CUSTOM=11&amp;lt;/var&amp;gt; in place, *LOWER had to be issued before a &amp;lt;var&amp;gt;LOGCTL&amp;lt;/var&amp;gt; command, otherwise any mixed case password strings would automatically be translated into uppercase. This change is enabled in V7.7 with the application of zap 77z108.&lt;br /&gt;
&lt;br /&gt;
===DEFUSER can specify a jobname not authorized to access M204===&lt;br /&gt;
When specifying DEFUSER=JOBNAME and VALIDAT=LOGON in the RACFGEN parms for an ONLINE, if the specified jobname (the owning id for the ONLINE job) isn&#039;t authorized to use Model 204 via RACF, any LOGIN commands specifying no userid will now succeed (previously such a LOGON would have failed). This enables users to submit jobs with USE $JOB, whereby the string USER=jobname will be added to the submitted JCL. This in turn is useful if the specified jobname has dataset access privileges to datasets required by the submitted jobs, even if the jobname itself isn&#039;t authorized to use M204.&lt;br /&gt;
&lt;br /&gt;
==Janus product enhancements==&lt;br /&gt;
&lt;br /&gt;
===Web Sockets===&lt;br /&gt;
Web Sockets are now supported in Janus Web Server.&lt;br /&gt;
&lt;br /&gt;
The Web Socket protocol provides various advantages over the HTTP protocol:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Web Sockets allow full-duplex communication.&amp;lt;/li&amp;gt; &lt;br /&gt;
&amp;lt;li&amp;gt;Efficient framing of payload data uses minimal overhead.&amp;lt;/li&amp;gt;  &lt;br /&gt;
&amp;lt;li&amp;gt;The Web Socket protocol is end-user extensible.&amp;lt;/li&amp;gt;  &lt;br /&gt;
&amp;lt;li&amp;gt;Most importantly, Web Sockets can be deployed completely within an existing HTTP/HTTPS framework.&amp;lt;/li&amp;gt; &lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To implement Web Sockets, you must enable the Janus Web port for Web Socket upgrades with the new &amp;lt;var&amp;gt;WEBSOCKET&amp;lt;/var&amp;gt; parameter. The WEBSOCKET option can be specified on either the port definition or the JANUS WEB rule for the URL. &lt;br /&gt;
Likewise, an individual Janus Web rule can either allow or disallow Web Socket connections with the &amp;lt;var&amp;gt;WEBSOCKET&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;NOWEBSOCKET&amp;lt;/var&amp;gt; parameters, respectively. &lt;br /&gt;
&lt;br /&gt;
For details on implementing Web Sockets, see the [[WebSocket_(Socket_function)|WebSocket]] wiki page.&lt;br /&gt;
&lt;br /&gt;
===Janus Web Server access rule===&lt;br /&gt;
The automatic &amp;lt;var&amp;gt;[[JANUS WEB ALLOW]]&amp;lt;/var&amp;gt; rule, which allowed any user to access the port without requiring a login, is changed &amp;lt;i&amp;gt;for non-SSL ports&amp;lt;/i&amp;gt; to the following:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;JANUS WEB &amp;lt;i&amp;gt;portname&amp;lt;/i&amp;gt; DISALLOW *&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
This rule requires a system administrator to explicitly define &amp;lt;var&amp;gt;ALLOW&amp;lt;/var&amp;gt; rules to enable users to access non-SSL ports.&lt;br /&gt;
The rule applies unless overridden by user-added rules. &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;blockquote class=&amp;quot;note&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;b&amp;gt;Note:&amp;lt;/b&amp;gt; To revert from this change in the JANUS DEFINE default and make the default &lt;br /&gt;
 non-SSL &amp;lt;var&amp;gt;ALLOW&amp;lt;/var&amp;gt; rule as it was in version 7.5 and earlier (&amp;lt;code&amp;gt;ALLOW *&amp;lt;/code&amp;gt;), turn on the 1 bit of the &amp;lt;var&amp;gt;[[WEBDFLT parameter|WEBDFLT]]&amp;lt;/var&amp;gt; parameter: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;RESET WEBDFLT=1&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Increase in pending accepts for Janus BPX ports===&lt;br /&gt;
The default number of pending accepts for Janus BPX server ports has been increased from 3 to 12, thus reducing the likelihood that a pending accept may fail with the message&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;MSIR.0019 Connection request rejected for port (port), MAXCON exceeded&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The actual number of pending accepts to be supported on the port can be set with the new parameter MAXPEND, set on the &amp;lt;var&amp;gt;[[JANUS_DEFINE|JANUS DEFINE]]&amp;lt;/var&amp;gt; command, where MAXPEND can vary from 3 up to a maximum value of 32. The change to the default value is enabled in V7.7 with the application of zap 77z269.&lt;br /&gt;
&lt;br /&gt;
===TCP listen backlog increased===&lt;br /&gt;
&lt;br /&gt;
The [[Program_Communication_facilities#LISTEN_call|TCP listen]] backlog has been increased from 16 to 1024 under z/OS.&lt;br /&gt;
&lt;br /&gt;
This update tells the TCP stack to queue up a maximum of 1024 such requests before dropping any. This increased backlog reduces, or in most cases eliminates, the likelihood of a connection request drop, other than in exceptional circumstances, such as a denial of service attack. This change is enabled in V7.7 with the application of zap 77z340.&lt;br /&gt;
&lt;br /&gt;
===Defer the freeing of XMLSCREEN input XML===&lt;br /&gt;
&lt;br /&gt;
The freeing of &amp;lt;var&amp;gt;[[XMLSCREEN_and_NOXMLSCREEN_(JANUS_DEFINE_parameters)|XMLSCREEN]]&amp;lt;/var&amp;gt; input XML is now deferred until the next Read Screen or session termination. This means that if an application error is detected, the input XML can be retrieved with [[$Web_Input_Content|$Web_Input_Content]] and then logged for problem analysis. &lt;br /&gt;
&lt;br /&gt;
Prior to this release the XML received from the client was freed immediately after being used to set the input data for a Read Screen, rendering it unavailable for problem determination.&lt;br /&gt;
&lt;br /&gt;
This change is enabled in V7.7 with the application of zap 77z368.&lt;br /&gt;
&lt;br /&gt;
===XMLSCREEN and Janus Web Legacy blank stripping===&lt;br /&gt;
&lt;br /&gt;
xmlScreens and Janus Web Legacy screens now adhere to the same standard as standard screen processing in terms of stripping leading blanks from input fields defined as [[Full-screen_feature#DEBLANK_or_NODEBLANK_option|DEBLANK]] (either explicitly or implicitly).&lt;br /&gt;
&lt;br /&gt;
This change is enabled in V7.7 with the application of zap 77z400.&lt;br /&gt;
&lt;br /&gt;
===SSL input buffer size===&lt;br /&gt;
&lt;br /&gt;
The default value of &amp;lt;var&amp;gt;[[SSLIBSIZE_(JANUS_DEFINE_parameter)|SSLIBSIZE]]&amp;lt;/var&amp;gt; has been increased to 16384 + 128, or 16512. This size should ensure correct communication with all TLS spec compliant applications. It is the maximum size allowed unless you use &amp;lt;var&amp;gt;[[CUSTOM_parameter#Using_CUSTOM.3D.2818.29|CUSTOM=18]]&amp;lt;/var&amp;gt;.    &lt;br /&gt;
&lt;br /&gt;
This change is enabled in V7.7 with the application of zap 77z415.&lt;br /&gt;
&lt;br /&gt;
===Increasing LDAP buffers===&lt;br /&gt;
&lt;br /&gt;
The number of LDAP buffers allocated at startup can now be changed by setting the &amp;lt;var&amp;gt;NLDAPBUF&amp;lt;/var&amp;gt; parameter in CCAIN. See below for details on &amp;lt;var&amp;gt;[[#NLDAPBUF|NLDAPBUF]]&amp;lt;/var&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Increase URL length returned with $web_form_action===&lt;br /&gt;
With this release the maximum Janus Web Server incoming URL that can be handled by &amp;lt;var&amp;gt;$web_form_action&amp;lt;/var&amp;gt; is increased from 512 bytes to 1024 bytes. This change is enabled in V7.7 with the application of zap 77z424.&lt;br /&gt;
&lt;br /&gt;
===Maximum RBSIZE setting increased===&lt;br /&gt;
The maximum value for RBSIZE, set on the &amp;lt;var&amp;gt;[[JANUS DEFINE|JANUS DEFINE]]&amp;lt;/var&amp;gt; command, is now increased to 16777215 (previously the maximum was 65534). RBSIZE specifies the RPC or Request Buffer size.  On a Web port, the Janus request buffer holds browser request information such as header data, cookies, and form data. On other port types, it holds RPC input and output parameters. This change is enabled in V7.7 with the application of zap 77z427.&lt;br /&gt;
&lt;br /&gt;
==Debugger enhancements==&lt;br /&gt;
These enhancements apply to the Janus and TN3270 debuggers. &lt;br /&gt;
&lt;br /&gt;
===Access to exposed variables===&lt;br /&gt;
The debuggers can now view or watch the values of variables exposed to local routines/methods. Previously, any attempts to access an exposed variable would have displayed &amp;quot;%varname has no value&amp;quot; in the debugger session. This feature is enabled in V7.7 with the application of zap 77z363.&lt;br /&gt;
&lt;br /&gt;
===Subroutine or method display===&lt;br /&gt;
When execution pauses for a break point or runtime error, the subroutine or method being executed is indicated in the status area.  In addition, the source code line information available by right-clicking on a source line now also indicates the subroutine or method.&lt;br /&gt;
&lt;br /&gt;
==Performance enhancements==&lt;br /&gt;
&lt;br /&gt;
===MP/204 offload improvements===&lt;br /&gt;
Application code issuing the following SOUL statements will now now be fully offloadable:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;File Records In/On&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Remember&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt; &lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Position&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Sort Values&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;                                             &lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Reset Header/Trailer&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Find and Print Count&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Find All Values&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;For Each Value&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
The above improvements are enabled in V7.7 with the application of zaps 77z419 and 77z420.&lt;br /&gt;
&lt;br /&gt;
===X3270OUT exit offloadable===&lt;br /&gt;
When running MP/204 (AMPSUBS&amp;gt;0) and using the [[Coding_SNA_Communications_Server_conversion_exit_routines#X3270OUT_.28convert_output_from_3270_format.29|X3270OUT]] exit to convert a 3270 output data stream to the appropriate device protocol, the exit can now run in parallel mode to improve performance. This change is enabled in V7.7 with the application of zap 77z313.&lt;br /&gt;
&lt;br /&gt;
The X3270OUT exit must be written to be re-entrant.&lt;br /&gt;
&lt;br /&gt;
==New and changed commands==&lt;br /&gt;
===DISPLAY ECF===&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;DISPLAY ECF {{ M | N | U } like ?} &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This new command displays details from ECF tables, or the current status of users accessing ECF modules.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;D ECF M&amp;lt;/code&amp;gt; displays the contents of the module table. For example:&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;    D ECF M &lt;br /&gt;
    Module   Loadlib  Address:Length     Loaded@      Lastused@   #Calls  Flags &lt;br /&gt;
    QATUM13C PROGLIB 2FB91FB8:00000028 19023:121506 19023:121506 00000001 &lt;br /&gt;
    QATUM13B PROGLIB 2FE65000:00009C18 19023:121506 19023:121506 00000001 &lt;br /&gt;
    QATUM13A PROGLIB 2FE6EC18:00001CD8 19023:121506 19023:121506 00000001  &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
(flags may be D=deleted; S=shared; H=halted; I=Idle)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;D ECF N&amp;lt;/code&amp;gt; displays contents of the name table. For example: &amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;    D ECF N&lt;br /&gt;
    Module   Logical-call-name &lt;br /&gt;
    QATUM13C MOD_QATUM13C &lt;br /&gt;
    QATUM13B MOD_QATUM13B &lt;br /&gt;
    QATUM13A MOD_QATUM13A &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;D ECF U&amp;lt;/code&amp;gt; displays details of users currently accessing ECF modules. This is also the default option, and so &amp;lt;code&amp;gt;D ECF&amp;lt;/code&amp;gt; will display the same output as &amp;lt;code&amp;gt;D ECF U&amp;lt;/code&amp;gt;. For example:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;    D ECF U                           &lt;br /&gt;
    User# Userid     Module   Parmlen &lt;br /&gt;
    00002 ADMIN      --none--         &lt;br /&gt;
    00003 ADMIN      COBSAMP1 00000002&lt;br /&gt;
    00004 ADMIN      COBSAMP1 00000002 &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;D ECF &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;function&amp;lt;/var&amp;gt; LIKE &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;?&amp;lt;/var&amp;gt; &amp;lt;/code&amp;gt; (where &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;?&amp;lt;/var&amp;gt; is a valid pattern) displays details for entities that match the specified pattern. The function is either M (modules), N (names), or U (users), and it defaults to U. So for example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;D ECF U L A&amp;lt;/p&amp;gt;&lt;br /&gt;
or&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;D ECF U L A*&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
displays details of ECF users whose names begin with A.&lt;br /&gt;
&lt;br /&gt;
===REGENERATE===&lt;br /&gt;
The &amp;lt;var&amp;gt;[[REGENERATE command|REGENERATE]]&amp;lt;/var&amp;gt; command can now be run in a multi-user environment by multiple users with system manager privileges. A new option USING is provided to specify the ddname of the input journal, so that the full syntax is now as follows:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;  REGENERATE [USING ddname] FILE filename [FROM dumpname | IGNORE]&lt;br /&gt;
  [TO {LAST UPDATE [BEFORE yy.ddd hh:mm:ss.th] | LAST CHECKPOINT [BEFORE yy.dd hh:mm:ss.th] &lt;br /&gt;
  | UPDATE number OF yy.ddd hh:mm:ss.th | CHECKPOINT yy.ddd hh:mm:ss.th} ]&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The default for the using ddname is CCAGEN, but any ddname may be used to allocate an input journal and used. For example:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;  ALLOCATE REGEN1 WITH SCOPE=SYSTEM DSN=PROD1.GDGJ OLD SEQUENTIAL GEN=+2&lt;br /&gt;
  REGENERATE USING REGEN1 FILE TEST&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It is the user&#039;s responsibility to ensure that the file being regenerated is not in use, and so prior to usage, &amp;lt;var&amp;gt;BUMP FILE&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;STOP FILE&amp;lt;/var&amp;gt; should be used to isolate usage against the file. If the file is in use, the REGEN will fail with these messages:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;  M204.1430: Failed to open file TEST&lt;br /&gt;
  M204.1436: Stopped processing file TEST  &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
$STATUS will now be set for &amp;lt;var&amp;gt;REGENERATE&amp;lt;/var&amp;gt; with the following values:&lt;br /&gt;
&amp;lt;blockquote&amp;gt;    &lt;br /&gt;
    0 - Success &amp;lt;br/&amp;gt;&lt;br /&gt;
    1 - No files were processed &amp;lt;br/&amp;gt;&lt;br /&gt;
    2 - At least one file stopped processing &amp;lt;br/&amp;gt;&lt;br /&gt;
    4 - A serious error occurred, REGEN failed &lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Similarly, &amp;lt;var&amp;gt;[[SETGRC command|SETGRC]]&amp;lt;/var&amp;gt; may be used to get the return code and error message.&lt;br /&gt;
&lt;br /&gt;
==New and changed parameters==&lt;br /&gt;
&lt;br /&gt;
===ECMODS===&lt;br /&gt;
The new minimum value for ECMODS, the allowable number of ECF modules, is 1. Prior to V7.8 the minimum value was 0. This change is enabled in V7.7 with the application of zap 77z306.&lt;br /&gt;
&lt;br /&gt;
===ECNAMES===&lt;br /&gt;
The new minimum value for ECNAMES, the allowable number of ECF module names, is 1. Prior to V7.8 the minimum value was 0. This change is enabled in V7.7 with the application of zap 77z306.&lt;br /&gt;
&lt;br /&gt;
===ECPSIZE===&lt;br /&gt;
The new minimum value for ECPSIZE, the initial storage allocation for ECF parameters, is 1024. Prior to V7.8 the minimum value was 0. This change is enabled in V7.7 with the application of zap 77z306.&lt;br /&gt;
&lt;br /&gt;
===ENQTIME===&lt;br /&gt;
Millisecond duration of automatic record locking retry wait.&lt;br /&gt;
&lt;br /&gt;
Prior to this change, if record locking conflicts occur frequently in a busy online, any user with a non-zero value for &amp;lt;var&amp;gt;[[ENQRETRY parameter|ENQRETRY]]&amp;lt;/var&amp;gt; will wait at least 3 seconds before the conflict is dealt with. This can degrade overall system performance.      &lt;br /&gt;
                                                         &lt;br /&gt;
The &amp;lt;var&amp;gt;[[ENQTIME parameter|ENQTIME]]&amp;lt;/var&amp;gt; parameter specifies the number of milliseconds waited for each record locking retry wait. &amp;lt;var&amp;gt;ENQTIME&amp;lt;/var&amp;gt; can be between 1 and 60000, corresponding to a minimum of 1 millisecond and a maximum of 1 minute. The default value of &amp;lt;var&amp;gt;ENQTIME&amp;lt;/var&amp;gt; is 3000 (3 seconds).            &lt;br /&gt;
                                                         &lt;br /&gt;
For example, with &amp;lt;code&amp;gt;ENQTIME = 100&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;ENQRETRY = 7&amp;lt;/code&amp;gt;, after a record locking conflict occurs the thread will retry 7 times with wait intervals of .1 seconds, and so within at most .7 seconds either the lock becomes available or the conflict triggers an On unit or cancels the request.     &lt;br /&gt;
                                                         &lt;br /&gt;
The &amp;lt;var&amp;gt;ENQTIME&amp;lt;/var&amp;gt; parameter may also be reset with $ResetN. &lt;br /&gt;
&lt;br /&gt;
This new parameter is enabled in V7.7 with the application of zap 77z299.&lt;br /&gt;
&lt;br /&gt;
===EVALOPT===&lt;br /&gt;
The new &amp;lt;var&amp;gt;EVALOPT&amp;lt;/var&amp;gt; parameter controls the cancellation of a request on truncation of string data. The default value is 0, and currently there is just one setting, 1, which means &amp;quot;cancel a request if truncation of string data occurs.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
For example, with the default of 0 in place, the following code &amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;    %x is string len 1   &lt;br /&gt;
    %y is string len 2   &lt;br /&gt;
    %y = &#039;ab&#039;            &lt;br /&gt;
    %x = %y              &lt;br /&gt;
    printtext {~} = {%x} &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
would cause silent truncation, and give the result&lt;br /&gt;
    &amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;%x = a &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If &amp;lt;var&amp;gt;EVALOPT&amp;lt;/var&amp;gt; is set to 1, then the above code produces the following message:&lt;br /&gt;
    &amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;M204.0552: Variable too small for result &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and the request is cancelled.&lt;br /&gt;
&lt;br /&gt;
===LFSCB===&lt;br /&gt;
&amp;lt;var&amp;gt;LFSCB&amp;lt;/var&amp;gt;, the length of the full screen buffer, now has a new minimum value of 8 (the previous minimum was 0). This change is enabled in v7.7 with the application of zap 77z042, and within V7.6 with the application of zap 76z393.&lt;br /&gt;
&lt;br /&gt;
===MAXPRE, MAXBOUT, MAXSUBT===&lt;br /&gt;
&amp;lt;p&amp;gt;Introduced in zap 77z257.&amp;lt;/p&amp;gt;&lt;br /&gt;
The new &amp;lt;var&amp;gt;MAXPRE&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;MAXBOUT&amp;lt;/var&amp;gt;, and &amp;lt;var&amp;gt;MAXSUBT&amp;lt;/var&amp;gt; parameters can be used to cancel a runaway transaction and prevent it from filling the checkpoint data set. &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;MAXPRE&amp;lt;/var&amp;gt;:  Maximum number of pre-images per transaction.  &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;MAXBOUT&amp;lt;/var&amp;gt;: Maximum number of backout pages per transaction. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;MAXSUBT&amp;lt;/var&amp;gt;: Maximum number of subtransaction checkpoints that a transaction can span.&amp;lt;/li&amp;gt;&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;Each new parameter defaults to unlimited. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;If a parameter value is set, a transaction is cancelled if that value is exceeded, and the following message is displayed:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;M204.0524: Maximum number (&amp;lt;i&amp;gt;num&amp;lt;/i&amp;gt;) of &amp;lt;i&amp;gt;parameter&amp;lt;/i&amp;gt; exceeded.&amp;lt;/p&amp;gt;&lt;br /&gt;
where &amp;lt;i&amp;gt;num&amp;lt;/i&amp;gt; is the value set for &amp;lt;i&amp;gt;parameter&amp;lt;/i&amp;gt; (&amp;lt;var&amp;gt;MAXPRE&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;MAXBOUT&amp;lt;/var&amp;gt;, or &amp;lt;var&amp;gt;MAXSUBT&amp;lt;/var&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
===NLDAPBUF===&lt;br /&gt;
This new parameter allows the number of LDAP buffers allocated during startup to be set in CCAIN. The default value is 2, and the settable value can range from 0 to 65535.&lt;br /&gt;
&lt;br /&gt;
===PUPDTH (new minimum value)===&lt;br /&gt;
If a user sets the &amp;lt;var&amp;gt;[[PUPDTH parameter|PUPDTH]]&amp;lt;/var&amp;gt; parameter to 0, it will now automatically be increased to 1, its minimum value.&lt;br /&gt;
&lt;br /&gt;
===SERV4G===&lt;br /&gt;
This parameter allows testing of server tables that span a 4-gigabyte boundary. For example, if &amp;lt;var&amp;gt;SERV4G&amp;lt;/var&amp;gt; is &amp;lt;code&amp;gt;X&#039;FFFFF000&#039;&amp;lt;/code&amp;gt;, each ATB server will begin at &amp;lt;code&amp;gt;XX_FFFFF000&amp;lt;/code&amp;gt;. If &amp;lt;var&amp;gt;SERV4G&amp;lt;/var&amp;gt; is &amp;lt;code&amp;gt;X&#039;FFFF0000&#039;&amp;lt;/code&amp;gt;, each ATB server will begin at &amp;lt;code&amp;gt;XX_FFFF0000&amp;lt;/code&amp;gt;. &amp;lt;code&amp;gt;XX&amp;lt;/code&amp;gt; is determined by the storage available on the system. The parameter is set in CCAIN.&lt;br /&gt;
&lt;br /&gt;
The contents of the ATB server are specified by using the &amp;lt;var&amp;gt;[[SERVGA parameter|SERVGA]]&amp;lt;/var&amp;gt; parameter.&lt;br /&gt;
&lt;br /&gt;
For example, if you want VTBL to span the 4G boundary, you can use these settings: &amp;lt;code&amp;gt;SERV4G=X&#039;FFFFF000&#039;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;SERVGA=X&#039;00040000&#039;&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;LVTBL=200 (6400 bytes, X&#039;1900&#039;)&amp;lt;/code&amp;gt;. This will force each server&#039;s VTBL to begin at &amp;lt;code&amp;gt;XX_FFFFF000&amp;lt;/code&amp;gt; and end at &amp;lt;code&amp;gt;XX+1_00000900&amp;lt;/code&amp;gt;.&lt;br /&gt;
===SIRTERM===&lt;br /&gt;
The &amp;lt;var&amp;gt;[[SIRTERM parameter|SIRTERM]]&amp;lt;/var&amp;gt; (Sirius terminal options) parameter settings have changed. &lt;br /&gt;
The changes to &amp;lt;var&amp;gt;SIRTERM&amp;lt;/var&amp;gt; allow a user to preclude a reset to a Model that is not supported by the terminal emulator in use.&lt;br /&gt;
&lt;br /&gt;
The X&#039;01&#039; setting (MODEL 6 support) is no longer used. &lt;br /&gt;
&lt;br /&gt;
The X&#039;02&#039; setting (Write Structured Field Query Support) now supports MODEL 6 terminals by default. &lt;br /&gt;
&lt;br /&gt;
The new X&#039;08&#039; setting  always issues a Write Structured Field Query for Terminal Model Resets for terminals connected to Model 204 through VTAM  or TELNET. This precludes Terminal Model RESETs to Models that are not supported by the terminal emulator in use.&lt;br /&gt;
&lt;br /&gt;
===WEBDFLT===&lt;br /&gt;
At V7.7, the default access rule for non-SSL ports was changed from ALLOW * to DISALLOW *, meaning that unless any ALLOW rules were in place resulting in a login/password prompt, the port couldn&#039;t be accessed. The new &amp;lt;var&amp;gt;[[WEBDFLT_parameter|WEBDFLT]]&amp;lt;/var&amp;gt; parameter may be set to 1 for reversion to the old default of ALLOW *. This new parameter is enabled in V7.7 with the application of zap 77z090. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;var&amp;gt;RESET WEBDFLT&amp;lt;/var&amp;gt; requires system administrator privileges. It is recommended to reset the 1 bit of &amp;lt;var&amp;gt;WEBDFLT&amp;lt;/var&amp;gt; to zero after issuing a series of &amp;lt;var&amp;gt;JANUS DEFINE&amp;lt;/var&amp;gt; commands which need &amp;lt;var&amp;gt;WEBDFLT=1&amp;lt;/var&amp;gt;, as in the CCAIN input stream.&lt;br /&gt;
&lt;br /&gt;
==New and changed statistics==&lt;br /&gt;
===MPR, MBO, MCP, and RCV===&lt;br /&gt;
Introduced in zap 77z257.&lt;br /&gt;
&amp;lt;p&amp;gt;These statistics provide high water mark transaction information. (Since-last values will not be available until V78 GA.)&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;They are useful in conjunction with the &amp;lt;var&amp;gt;MAXPRE&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;MAXBOUT&amp;lt;/var&amp;gt;, and &amp;lt;var&amp;gt;MAXSUBT&amp;lt;/var&amp;gt; parameters. &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
User/system statistics:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;MPR: High water mark of transaction pre-images. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;MBO: High water mark of transaction backout pages. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;MCP: High water mark of transaction chkpoint spans. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
System statistics: &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;RCV: Number of blocks needed for subtransaction recovery &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt; &lt;br /&gt;
&amp;lt;p class=&amp;quot;note&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Notes:&amp;lt;/b&amp;gt; M204.0843 now displays the RCV statistic for subtransaction checkpoints.&lt;br /&gt;
The size of recovery checkpoint must be greater than the sum of the last RCV value plus the number of records in [[System_and_media_recovery#RESTART_recovery_considerations_for_sub-transaction_checkpoints|RESTART and RESTARTS]].&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
===DKWTS and DKWTMICS===&lt;br /&gt;
Introduced in zap 77z7289.&lt;br /&gt;
&amp;lt;p&amp;gt;The new system statistics DKWTS (DisK WaiTs) and DKWTMICS (DisK WaiT MICroSeconds) collect data to provide rough disk I/O service time numbers.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
DKWTS shows the number of disk I/O waits. DKWTMICS shows the total wait time for those waits in microseconds. Dividing the difference in DKWTMICS by the difference in DKWTS over an interval provides the average disk I/O wait time in microseconds.              &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;note&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Notes:&amp;lt;/b&amp;gt; &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The wait time does include internal Model 204 scheduler delays, so on a CPU bound Model 204 system, the service times calculated from DKWTS and DKWTMICS are likely to be an overestimate of actual service times.&amp;lt;/li&amp;gt;  &lt;br /&gt;
                                                                    &lt;br /&gt;
&amp;lt;li&amp;gt;DKWTS and DKWTMICS are not available in SirMon; use &amp;lt;var&amp;gt;[[MONITOR_command|MONITOR]] SYSTEM STATISTICS&amp;lt;/var&amp;gt; to view these statistics.&amp;lt;/li&amp;gt;&amp;lt;/ul&amp;gt;  &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Compatibility issues==&lt;br /&gt;
===&amp;lt;b id=&amp;quot;listNewInit&amp;quot;&amp;gt;&amp;lt;/b&amp;gt;$ListNew cannot be used in Initial clause===&lt;br /&gt;
It is now a compilation error if &amp;lt;var&amp;gt;$ListNew&amp;lt;/var&amp;gt; is attempted to be used in the &amp;lt;var&amp;gt;Initial&amp;lt;/var&amp;gt; clause of a &lt;br /&gt;
[[Using_variables_and_values_in_computation#Declare_statements_for_.25variables|declaration statement]].&lt;br /&gt;
&amp;lt;p&amp;gt;This change is propagated by zap maintenance to versions 7.5 (zap 75Z487), 7.6 (zap 76Z514), and 7.7 (zap 77z281) of Model 204.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote class=&amp;quot;note&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Note:&amp;lt;/b&amp;gt; Strictly speaking, this would not be considered a compilation error, because previously although &amp;lt;code&amp;gt;..&amp;amp;nbsp;Initial($ListNew)&amp;lt;/code&amp;gt; did not produce a compilation error, in almost all circumstances it would produce a snap if the initialized %variable were used with some other &amp;lt;var&amp;gt;$List&amp;lt;i&amp;gt;xxx&amp;lt;/i&amp;gt;&amp;lt;/var&amp;gt; invocation.&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Restricting the use of the CUSTOM=38 setting===&lt;br /&gt;
The &amp;lt;var&amp;gt;[[CUSTOM parameter|CUSTOM=38]]&amp;lt;/var&amp;gt; parameter setting, introduced at V7.5, inadvertently provided System Manager privileges to all users via the &amp;lt;var&amp;gt;RESET&amp;lt;/var&amp;gt; command. This &amp;lt;var&amp;gt;CUSTOM&amp;lt;/var&amp;gt; setting is now restricted to the &amp;lt;var&amp;gt;RESET&amp;lt;/var&amp;gt; of the &amp;lt;var&amp;gt;LAUDIT&amp;lt;/var&amp;gt; parameter.&lt;br /&gt;
&lt;br /&gt;
===Disabling of Closure support===&lt;br /&gt;
Due to a number of bugs related to Closure support, introduced at V7.7, this feature, which can best be described as exposed methods assigned to method variables, has been disabled in this release. This change was also made to V7.7 with application of zap 77z119.&lt;br /&gt;
&lt;br /&gt;
===Password delimiter enforced===&lt;br /&gt;
When using &amp;lt;var&amp;gt;IFSTRTN&amp;lt;/var&amp;gt; to log on to a Model 204 online from an IFAM2 application, both the logonid and password must be followed by a semicolon, which is the delimiter. For example:      &lt;br /&gt;
                                      &lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;CALL IFSTRTN(RC,&#039;logonid;password;&#039;...)&amp;lt;/p&amp;gt;&lt;br /&gt;
                 &lt;br /&gt;
If a semicolon does not follow the password string, the following message will now be issued:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;M204.2964: Password missing or too long &amp;lt;/p&amp;gt;                 &lt;br /&gt;
                                                         &lt;br /&gt;
Previously, a semicolon following the password was not required and the first blank served as a password delimiter.  However, as of V7.7, embedded blanks are valid password characters and a semicolon is now required to delimit the password.&lt;br /&gt;
&lt;br /&gt;
This change is enabled in V7.7 with the application of zap 77z231.&lt;br /&gt;
&lt;br /&gt;
===PAGESZ parameter validated===&lt;br /&gt;
Previously it was possible to set the &amp;lt;var&amp;gt;PAGESZ&amp;lt;/var&amp;gt; parameter to any value, although Model 204 internally supports one page size of 6184, and any deviation from this value would have led to problems during file creation. The value of this parameter is now controlled, such that setting it to any value other than 6184 will generate an M204.1149 message with the parameter being reset to 6184.&lt;br /&gt;
&lt;br /&gt;
===ECPRIV and the IDCAMS facility===&lt;br /&gt;
At V7.7 a security loophole was closed, whereby all ECF modules were run under external-authorizer profile of the calling user. Previously any ECF tasks were run under the owning job&#039;s external-authorizer profile, and in order for certain sites to retain that ability, a new setting of &amp;lt;var&amp;gt;ECPRIV&amp;lt;/var&amp;gt;, value 4, was introduced to retain the ability to run ECF tasks using the job&#039;s security profile. &lt;br /&gt;
&lt;br /&gt;
The &amp;lt;var&amp;gt;ECPRIV&amp;lt;/var&amp;gt; 4 setting potentially introduced a security loophole when calling the IDCAMS interface, based upon what the IDCAMS utility is able to do at a system level. Consequently as of this release, the &amp;lt;var&amp;gt;ECPRIV&amp;lt;/var&amp;gt; 4 setting will be ignored when calling the IDCAMS facility via ECF, and such IDCAMS processes will always use the calling user&#039;s security profile. Any existing jobs that use ECF to call the IDCAMS utility with the &amp;lt;var&amp;gt;ECFPRIV&amp;lt;/var&amp;gt; 4 bit set should be checked to ensure that the calling user&#039;s security profile still satisfies the job&#039;s requirements.&lt;br /&gt;
&lt;br /&gt;
===TCPOPTS is view-only===&lt;br /&gt;
In previous versions the &amp;lt;var&amp;gt;TCPOPTS&amp;lt;/var&amp;gt; parameter, which identifies the type of IP addressing in use (v4 or v6), was resettable, although it was always documented as a view-only parameter. The parameter is now handled as a view-only parameter, and any attempts to reset the parameter will result in the following message:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;gt;   M204.1123: Parameter TCPOPTS not reset&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===ZHPF command can only be issued by a system manager===&lt;br /&gt;
In previous versions it was possible to issue the &amp;lt;var&amp;gt;ZHPF&amp;lt;/var&amp;gt; command without being logged on. From this release onwards, a user must be logged on with system manager privileges in order to issue this command.&lt;br /&gt;
&lt;br /&gt;
Additionally, the command output will now only  display results for currently open files.&lt;br /&gt;
&lt;br /&gt;
This change is enabled in v7.7 with the application of zap 77z264.&lt;br /&gt;
&lt;br /&gt;
===Terminal MODEL reset failure===&lt;br /&gt;
If a reset of the terminal &amp;lt;var&amp;gt;MODEL&amp;lt;/var&amp;gt; parameter fails due to an undersized output page buffer, then in addition to the existing messages that inform the user of this failure:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;gt;    M204.1875 UNABLE TO RESET MODEL TO %C &lt;br /&gt;
    M204.1123: Parameter MODEL not reset&amp;lt;/p&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
the following message will now be issued:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;gt;    M204.1008: LOUTPB must be increased to at least &amp;lt;number&amp;gt; &amp;lt;/p&amp;gt;&lt;br /&gt;
                                                         &lt;br /&gt;
where &amp;lt;number&amp;gt; is the minimum value of &amp;lt;var&amp;gt;LOUTPB&amp;lt;/var&amp;gt; necessary to support the terminal model.&lt;br /&gt;
&lt;br /&gt;
This change is enabled in V7.7 with the application of zap 77z309.&lt;br /&gt;
&lt;br /&gt;
==Notes for system manager and installer==&lt;br /&gt;
===CRAM SVC installation is deprecated===&lt;br /&gt;
The CRAM SVC installation has been deprecated as of version 7.5. &amp;lt;br /&amp;gt;Installation of CRAM-XDM is described as part of the [[Model 204 installation]].&lt;br /&gt;
===Authorization and maintenance zaps===&lt;br /&gt;
When you download Rocket M204 product object files, all relevant authorization keys and all current maintenance zaps are pre-applied to the object files as part of the download process.&lt;br /&gt;
&lt;br /&gt;
==New and changed messages==&lt;br /&gt;
&lt;br /&gt;
See [[New and updated messages in Model 204 version 7.8|New and updated messages in Model 204 version 7.8]] for details.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category: Release notes]]&lt;/div&gt;</summary>
		<author><name>ELowell</name></author>
	</entry>
	<entry>
		<id>https://m204wiki.rocketsoftware.com/index.php?title=Release_notes_for_Model_204_version_7.8&amp;diff=117743</id>
		<title>Release notes for Model 204 version 7.8</title>
		<link rel="alternate" type="text/html" href="https://m204wiki.rocketsoftware.com/index.php?title=Release_notes_for_Model_204_version_7.8&amp;diff=117743"/>
		<updated>2019-12-17T23:49:08Z</updated>

		<summary type="html">&lt;p&gt;ELowell: minor formatting and wordsmithing&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;&amp;lt;b&amp;gt;******THIS IS A DRAFT DOCUMENT.******&amp;lt;/b&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
These release notes list the enhancements and other changes contained in Model 204 version 7.8, &amp;lt;b&amp;gt;&amp;lt;i&amp;gt;which is still in development&amp;lt;/i&amp;gt;&amp;lt;/b&amp;gt;. Until the commercial release of the software, Rocket reserves the right to add to, remove, or change anything described herein. &lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
These release notes contain installation and features information for the Rocket Model 204 version 7.8 release.&lt;br /&gt;
Before beginning your installation, please read through this information about product installation and changes.&lt;br /&gt;
&lt;br /&gt;
==New in this release==&lt;br /&gt;
The table below cites some highlights of Model&amp;amp;nbsp;204 version 7.8. For a full list of features, refer to the Table of Contents. &lt;br /&gt;
&amp;lt;p&amp;gt;See also the [[#Compatibility Issues|Compatibility]] section for possible issues.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;tr class=&amp;quot;head&amp;quot;&amp;gt;&amp;lt;th&amp;gt;Category&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Feature&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;SOUL&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The new [[#AmIndependent method|AmIndependent]] method returns TRUE for daemons spawned by RunIndependently.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The Object class now supports the [[#Support for copying Object class objects|copy and deepCopy methods]].&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Janus Web&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[[#Web Sockets|Janus Web Sockets]] are now supported.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td nowrap&amp;gt;Networking&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Note:&amp;lt;/b&amp;gt; The two-phase commit and commit exits features are licensed and purchased separately from Model 204.&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Two-phase commit. A Model 204 online can now be configured to use two-phase commit (2PC). The Janus internal socket API is used for the calls to the coordinator. JANUS commands are used for all 2PC configuration. A new JANUS port type has been added, 2PC.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Commit exits are now supported. The commit exit runs within the APSY, which is defined by the &amp;lt;var&amp;gt;COMMITX&amp;lt;/var&amp;gt; parameter and uses normal APSY processing.  &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;ECF tables&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The new &amp;lt;var&amp;gt;DISPLAY ECF&amp;lt;/var&amp;gt; command and &amp;lt;var&amp;gt;EXTERNAL REMOVE&amp;lt;/var&amp;gt; statement enable more efficient management of [[#Managing ECF tables more efficiently|ECF tables]].&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Performance&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[[#MP/204 offload improvements|MP/204 offload improvements]] -- application code for these SOUL statements is now fully offloadable: &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;File Records In/On&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Remember&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Position&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Sort Values&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Reset Header/Trailer&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Find and Print Count&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Find All Values&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;For Each Value&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Security&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;CA-Top Secret can [[#CA-Top Secret can disallow CCASTAT logins|disallow CCASTAT logins]].&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[[#DEFUSER can specify a jobname not authorized to access M204|DEFUSER]] can specify a jobname not authorized to access M204.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td nowrap&amp;gt;System enhancements&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The &amp;lt;var&amp;gt;MONITOR USERS&amp;lt;/var&amp;gt; command output displays [[#New wait types for daemon/master waits|two new wait types]].&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td nowrap&amp;gt;AUDIT204 enhancements&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The new TIMEHH parameter on the &amp;lt;var&amp;gt;[[#FORMAT command|FORMAT]]&amp;lt;/var&amp;gt; command of the AUDIT204 utility provides greater time stamp precision.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td nowrap&amp;gt;New commands&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;[[#DISPLAY ECF|DISPLAY ECF]]&amp;lt;/var&amp;gt; displays details from ECF tables, or the current status of users accessing ECF modules.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td nowrap&amp;gt;New parameters&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;[[#ENQTIME|ENQTIME]]&amp;lt;/var&amp;gt; specifies the number of milliseconds waited for each record locking retry wait.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;[[#EVALOPT|EVALOPT]]&amp;lt;/var&amp;gt; controls the cancellation of a request on truncation of string data.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;[[#MAXPRE, MAXBOUT, MAXSUBT|MAXPRE, MAXBOUT, and MAXSUBT]]&amp;lt;/var&amp;gt; can be used to cancel a runaway transaction and prevent it from filling the checkpoint data set.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;[[#NLDAPBUF|NLDAPBUF]]&amp;lt;/var&amp;gt; allows the number of LDAP buffers allocated during startup to be set in CCAIN.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;[[#SERV4G|SERV4G]]&amp;lt;/var&amp;gt; allows testing of server tables that span a 4-gigabyte boundary.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;[[#WEBDFLT|WEBDFLT]]&amp;lt;/var&amp;gt; changes the default JANUS WEB ALLOW rule back to ALLOW.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td nowrap&amp;gt;Janus and TN3270 debuggers&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The debuggers can now view or watch the values of [[#Access to exposed variables|variables exposed to local routines/methods]].&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;When execution pauses, the debuggers now [[#Subroutine or method display|display the subroutine or method]] being executed.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td nowrap&amp;gt;User/system statistics&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;[[#MPR, MBO, MCP, and RCV|MPR, MBO, MCP, and RCV]]&amp;lt;/var&amp;gt; provide high water mark transaction information in conjunction with the &amp;lt;var&amp;gt;MAXPRE&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;MAXBOUT&amp;lt;/var&amp;gt;, and &amp;lt;var&amp;gt;MAXSUBT&amp;lt;/var&amp;gt; parameters. &lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[[#DKWTS and DKWTMICS|New system statistics]] DKWTS (DisK WaiTs) and DKWTMICS (DisK WaiT MICroSeconds) collect data to provide rough disk I/O service time numbers.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Operating system and hardware requirements==&lt;br /&gt;
&lt;br /&gt;
===Operating system requirements===&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;IBM z/OS versions supported:&amp;lt;/b&amp;gt; &lt;br /&gt;
  &amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;All IBM supported releases up to and including z/OS 2.3. &amp;lt;br /&amp;gt;(For z/OS 2.2, see [[IBM z/OS 2.2 PTF requirement]].)&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;p&amp;gt;Version 1.07 is sufficient for all functionality except for the following features:&amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;ul&amp;gt;&lt;br /&gt;
    &amp;lt;li&amp;gt;zHPF support requires version [[IBM z/OS 2.1 compatibility issue|2.1]].&amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;li&amp;gt;Large (1 MB) page support requires version 1.9.&amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;li&amp;gt;Extended address volumes (EAV) requires version 1.12.&amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;/ul&amp;gt;&lt;br /&gt;
  &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
On z/OS, Model 204 release 7.8 operates as an APF authorized load module, as required by many 7.8 features. &amp;lt;br /&amp;gt;&lt;br /&gt;
To run Model 204 unauthorized, [[Contacting Rocket Software Technical Support|contact Technical Support]].&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;IBM z/VM versions supported:&amp;lt;/b&amp;gt; &lt;br /&gt;
  &amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;All IBM supported releases up to and including z/VM 6.4.&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;IBM z/VSE versions supported:&amp;lt;/b&amp;gt;&lt;br /&gt;
  &amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;All IBM supported releases up to and including z/VSE 6.1.&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Hardware requirements===&lt;br /&gt;
 &lt;br /&gt;
In general, Model 204 version 7.8 requires the IBM z/890 or above processor.&lt;br /&gt;
&amp;lt;p&amp;gt;However, the IBM z10 or above processor is required for the following features:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;large (1 MB) page support&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;IBM&#039;s High Performance FICON (zHPF) support&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Connect&amp;lt;sup&amp;gt;&amp;amp;#9733;&amp;lt;/sup&amp;gt; compatibility with Model 204===&lt;br /&gt;
&lt;br /&gt;
Connect&amp;lt;span class=&amp;quot;superstar&amp;quot;&amp;gt;&amp;amp;#9733;&amp;lt;/span&amp;gt; version 7.5 or 7.7 is compatible with Model 204 version 7.8.&lt;br /&gt;
&lt;br /&gt;
For more information on Connect&amp;lt;span class=&amp;quot;superstar&amp;quot;&amp;gt;&amp;amp;#9733;&amp;lt;/span&amp;gt; installation, see the [[:Category:Connect*|Connect&amp;lt;span class=&amp;quot;superstar&amp;quot;&amp;gt;&amp;amp;#9733;&amp;lt;/span&amp;gt; wiki pages]].&lt;br /&gt;
&lt;br /&gt;
==SOUL (User Language) enhancements==&lt;br /&gt;
===AmIndependent method===&lt;br /&gt;
The &amp;lt;var&amp;gt;AmIndependent&amp;lt;/var&amp;gt; method returns TRUE for daemons spawned by &amp;lt;var&amp;gt;[[RunIndependently_(Daemon_subroutine)|RunIndependently]]&amp;lt;/var&amp;gt;. (The action of &amp;lt;var&amp;gt;[[AmDaemon_(Daemon_property)|AmDaemon]]&amp;lt;/var&amp;gt; remains unchanged.)&lt;br /&gt;
&lt;br /&gt;
The following table shows the values returned by &amp;lt;var&amp;gt;AmIndependent&amp;lt;/var&amp;gt; versus &amp;lt;var&amp;gt;AmDaemon&amp;lt;/var&amp;gt; for different daemon types:&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Type&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;AmDaemon&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;AmIndependent&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;$COMBG&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;False&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;False&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Independent daemon&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;False&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;True&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Other daemon&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;True&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;False&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Web, etc.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;False&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;False&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===$ProcOpn===&lt;br /&gt;
&amp;lt;var&amp;gt;[[$ProcOpn|$ProcOpn]]&amp;lt;/var&amp;gt; now supports the opening of a procedure with an all-numeric name, and including a leading zero, such as:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;%result = $procOpn(&#039;0123&#039;, &#039;MYFILE&#039;)&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Support for such procedure names was initially introduced at V7.7, and this feature of &amp;lt;var&amp;gt;$ProcOpn&amp;lt;/var&amp;gt; is enabled in V7.7 with the application of zap 77z054.&lt;br /&gt;
&lt;br /&gt;
===Allow parentheses to surround a boolean enumeration object===&lt;br /&gt;
The following sample code:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;   begin                                       &lt;br /&gt;
   variables are undefined                  &lt;br /&gt;
   %isValid is boolean initial (True)       &lt;br /&gt;
   if (%isValid) then                  &lt;br /&gt;
      print &#039;in IF&#039;                            &lt;br /&gt;
   end if                                   &lt;br /&gt;
   end   &amp;lt;/p&amp;gt;      &lt;br /&gt;
&lt;br /&gt;
will now compile and run successfully, since this syntax: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;if (%isValid) then &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
is logically equivalent to this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;if %isValid then &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Prior to V7.8 the presence of parentheses surrounding the boolean enumeration object would have caused a compilation error. This change is enabled in V7.7 with the application of zap 77z370.&lt;br /&gt;
&lt;br /&gt;
===Support for copying Object class objects===&lt;br /&gt;
The Object class now supports the copy and deepCopy methods. For example, an Object object can be copied as follows:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;   begin               &lt;br /&gt;
   %x is object object &lt;br /&gt;
   %y is object object &lt;br /&gt;
   %y = new            &lt;br /&gt;
   %x = %y:copy        &lt;br /&gt;
   end &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This change is enabled in v7.7 with the application of zap 77z076, and within V7.6 with the application of zap 76z412.&lt;br /&gt;
&lt;br /&gt;
===Assignment of enumeration values to method variables===&lt;br /&gt;
Enumerations values can now be assigned to method variables whose result is an enumeration. So, for example, the following code:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;   begin                                               &lt;br /&gt;
   enumeration colour                                  &lt;br /&gt;
      public                                           &lt;br /&gt;
         value red                                     &lt;br /&gt;
         value white                                   &lt;br /&gt;
         value blue                                    &lt;br /&gt;
      end public                                       &lt;br /&gt;
   end enumeration                                     &lt;br /&gt;
   %func    is function getColour is enumeration colour&lt;br /&gt;
   local function getColour is enumeration colour      &lt;br /&gt;
      return blue                                      &lt;br /&gt;
   end function                                        &lt;br /&gt;
   %func    = getColour                                &lt;br /&gt;
   %func    = (colour):red                             &lt;br /&gt;
   printText {~=%(Local):(%func)}                      &lt;br /&gt;
   end  &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
will produce this result:&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt; %(Local):(%func)=red &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
whereas previously this line:   &lt;br /&gt;
&lt;br /&gt;
  &amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt; %func    = (colour):red &amp;lt;/p&amp;gt;   &lt;br /&gt;
&lt;br /&gt;
would have been rejected with this message:&lt;br /&gt;
&lt;br /&gt;
   &amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;MSIR.0993: Assignment invalid: mismatch between method and method variable &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This change is enabled in V7.7 with the application of zap 77z128.&lt;br /&gt;
&lt;br /&gt;
===Optional output method parameters===&lt;br /&gt;
Prior to this release output parameters could not be optional or have default values. In this release output parameters can be specified as &amp;lt;var&amp;gt;Optional&amp;lt;/var&amp;gt;, and a default value can be specified with &amp;lt;var&amp;gt;Default&amp;lt;/var&amp;gt;. One related change is that if a &amp;lt;var&amp;gt;Len&amp;lt;/var&amp;gt; value is specified with &amp;lt;var&amp;gt;Optional&amp;lt;/var&amp;gt; or &amp;lt;var&amp;gt;Default&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;Output&amp;lt;/var&amp;gt;, it indicates the length of the hidden target for the output parameter if none was passed. For all other &amp;lt;var&amp;gt;Output&amp;lt;/var&amp;gt; parameters, &amp;lt;var&amp;gt;Len&amp;lt;/var&amp;gt; is meaningless, just as it was before Model 204 V7.8. The following is an example of the use of an optional output parameter:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;function getRemote( -&lt;br /&gt;
   %target is string len 32, %errorReason is string len 80 optional output -&lt;br /&gt;
) is float&lt;br /&gt;
  ...&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
In this example, if &amp;lt;code&amp;gt;%errorReason&amp;lt;/code&amp;gt; is not specified in a call and then set to a value longer than 80 bytes it wil be truncated to 80 bytes. However, if a string of a different length is passed, the length of that string determines truncation behavior.&lt;br /&gt;
&lt;br /&gt;
==External Call Facility enhancements==&lt;br /&gt;
===Managing ECF tables more efficiently===&lt;br /&gt;
The are two new features to help manage ECF tables more efficiently, avoid conditions where the table can fill, and prevent the definition of further entities.&lt;br /&gt;
&lt;br /&gt;
The first feature is the new &amp;lt;var&amp;gt;DISPLAY ECF&amp;lt;/var&amp;gt; command, which displays the contents of ECF tables and also the current status of users accessing ECF modules. See more details of the &amp;lt;var&amp;gt;[[#DISPLAY ECF|DISPLAY ECF]]&amp;lt;/var&amp;gt; command below.&lt;br /&gt;
&lt;br /&gt;
The second feature is a new &amp;lt;var&amp;gt;EXTERNAL REMOVE&amp;lt;/var&amp;gt; statement with the following syntax:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;EXTERNAL REMOVE &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;modulename&amp;lt;/span&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This statement causes the entry for the named module to be removed from the module table. The table entry is then placed on a free chain of entries and can be reused by issuing the &amp;lt;var&amp;gt;EXTERNAL MODULE&amp;lt;/var&amp;gt; statement. This allows the module table to be managed with redundant entries removed, without having to recycle the ONLINE.&lt;br /&gt;
&lt;br /&gt;
An &amp;lt;var&amp;gt;EXTERNAL REMOVE&amp;lt;/var&amp;gt; statement will return &amp;lt;code&amp;gt;$status/$statusd&amp;lt;/code&amp;gt; values of &amp;lt;code&amp;gt;0/0&amp;lt;/code&amp;gt;, and most other status values that can be returned by the &amp;lt;var&amp;gt;EXTERNAL REMOVE&amp;lt;/var&amp;gt; statement are already documented in the ECF return codes table. If an &amp;lt;var&amp;gt;EXTERNAL REMOVE&amp;lt;/var&amp;gt; is attempted against a module that is currently being called (in use), then &amp;lt;code&amp;gt;$status/$statusd&amp;lt;/code&amp;gt; will return the values &amp;lt;code&amp;gt;20/1&amp;lt;/code&amp;gt; (module unavailable).&lt;br /&gt;
&lt;br /&gt;
==System enhancements==&lt;br /&gt;
&lt;br /&gt;
===New wait types for daemon/master waits===&lt;br /&gt;
&lt;br /&gt;
Two new wait types, viewable on the &amp;lt;var&amp;gt;[[MONITOR_command|MONITOR]] USERS&amp;lt;/var&amp;gt; command output, have been implemented as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;57&amp;lt;/code&amp;gt; - Means a daemon thread waiting for its master thread  &amp;lt;br /&amp;gt;     &lt;br /&gt;
&amp;lt;code&amp;gt;58&amp;lt;/code&amp;gt; - Means a master thread waiting for one of its daemon threads&lt;br /&gt;
&lt;br /&gt;
This change is enabled in V7.7 with the application of zap 77z410.&lt;br /&gt;
&lt;br /&gt;
===Snap formatting changes===&lt;br /&gt;
Date/time stamps in the page headers of snaps will now be shown in normal format, rather than in julian format as in previous versions. So in the following example, a particular snap header under v7.7 or previous versions would show as: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;SNAPID    1   19226.060155  M204.0022: Bug .. nnnnn               PAGE     1 &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
whereas the same snap header under v7.8 would show as: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;SNAPID    1  2019/08/14 06:01:06   M204.0022: Bug .. nnnnn        PAGE     1 &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Also, due to improvements in handling trailing blanks in snap output, a snap generated under v7.8 should be marginally smaller than the same snap generated under previous versions, assuming the same SNAPCTL settings.&lt;br /&gt;
&lt;br /&gt;
===Call stack trace for problem diagnosis===&lt;br /&gt;
A  call stack trace is now provided to help diagnose and resolve common errors. To enable the stack trace, do either of the following: &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Set the &amp;lt;var&amp;gt;[[SIRFACT parameter|SIRFACT]] X&#039;01&#039;&amp;lt;/var&amp;gt; bit.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Set the &amp;lt;var&amp;gt;[[DEBUGUL parameter|DEBUGL]]&amp;lt;/var&amp;gt; parameter. Note that the &amp;lt;var&amp;gt;DEBUGUL&amp;lt;/var&amp;gt; approach will introduce extra QTBL overhead. &amp;lt;p&amp;gt;(&amp;lt;var&amp;gt;DEBUGUL&amp;lt;/var&amp;gt; provides a similar facility with an include trace of procedures leading to the error, but this might not be potentially as useful as the call trace.)&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt; &lt;br /&gt;
&lt;br /&gt;
The call stack trace can assist in diagnosing run-time errors that might occur, as illustrated by the following &amp;quot;Variable too small for result&amp;quot; and &amp;quot;MBSCAN exceeded&amp;quot; examples.&lt;br /&gt;
&lt;br /&gt;
====Variable too small for result====&lt;br /&gt;
When the stack trace is enabled, a &amp;quot;variable too small&amp;quot; error results in the following message:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;M204.2966: Error at line n, procedure &#039;&#039;procname&#039;&#039; in file &#039;&#039;procfile&#039;&#039;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
which identifies the line within a procedure where the error is occurring, in addition to the usual message:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;M204.0552: Variable too small for result&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Any subsequent M204.2966 messages indicate the point in the code from where the code in error was called. For example, a stack of three subroutine calls leading to a &amp;quot;variable too small&amp;quot; error might result in the following messaging:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;   M204.0552: Variable too small for result                             &lt;br /&gt;
   M204.2966: Error at line 9, procedure MYPROC.LEVEL4 in file MYPROC   &lt;br /&gt;
   M204.2966: Called from line 5, procedure MYPROC.LEVEL3 in file MYPROC&lt;br /&gt;
   M204.2966: Called from line 5, procedure MYPROC.LEVEL2 in file MYPROC&lt;br /&gt;
   M204.2966: Called from line 5, procedure MYPROC.LEVEL1 in file MYPROC &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This information should help in diagnosing the problem. &lt;br /&gt;
&lt;br /&gt;
If the error occurs within a command level program rather than a procedure, then the M204.2966 message is replaced by an M204.2967 message, and a similar error condition to the above with a preceding call stack might be audited as follows:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;   M204.0552: Variable too small for result              &lt;br /&gt;
   M204.2967: Error at line 14 of command level program  &lt;br /&gt;
   M204.2967: Called from line 5 of command level program&lt;br /&gt;
   M204.2967: Called from line 3 of command level program &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If neither &amp;lt;var&amp;gt;SIRFACT X&#039;01&#039;&amp;lt;/var&amp;gt; nor &amp;lt;var&amp;gt;DEBUGUL&amp;lt;/var&amp;gt; is set, then the &amp;quot;variable too small&amp;quot; error produces the following messages:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;   M204.0552: Variable too small for result &lt;br /&gt;
   M204.2968: Error: no debug info &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====MBSCAN exceeded====&lt;br /&gt;
Similarly to the handling of the &amp;quot;variable too small for result&amp;quot; error, the call stack can also be used to diagnose errors where the value of &amp;lt;var&amp;gt;[[MBSCAN parameter|MBSCAN]]&amp;lt;/var&amp;gt; is exceeded as a result of a direct search of Table B records. &lt;br /&gt;
&amp;lt;p&amp;gt;Again, under V7.8, with either the &amp;lt;var&amp;gt;SIRFACT X&#039;01&#039;&amp;lt;/var&amp;gt; bit set or &amp;lt;var&amp;gt;DEBUGUL&amp;lt;/var&amp;gt; set, if a long request occurs as a result of exceeding &amp;lt;var&amp;gt;MBSCAN&amp;lt;/var&amp;gt;, then initially the following message is produced, as before:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;M204.0569: File &#039;&#039;filename&#039;&#039;, Find: Table B records to be searched = &#039;&#039;nnnn&#039;&#039;&amp;lt;/p&amp;gt;&lt;br /&gt;
followed by a DYRWT prompt message. If the user replies &#039;N&#039; to the prompt, or if the request is run in an environment (such as a batch job) where the default response is &#039;N&#039;, the following message is produced after the M204.0569 message:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;Cancelling request: M204.2969: MBSCAN (&#039;&#039;mm&#039;&#039;) exceeded, records to be searched = &#039;&#039;nnnn&#039;&#039;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
where &#039;&#039;mm&#039;&#039; is the current setting of &amp;lt;var&amp;gt;MBSCAN&amp;lt;/var&amp;gt;. The M204.2969 message is followed by M204.2966 messages displaying the call stack trace. Thus, if the following code is run from procedure MYPROC.MBSCAN against the demo database, with an &amp;lt;var&amp;gt;MBSCAN&amp;lt;/var&amp;gt; setting of 10:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;   b                           &lt;br /&gt;
   call sub1                   &lt;br /&gt;
   sub1: subroutine            &lt;br /&gt;
   fd1:                        &lt;br /&gt;
      in clients fd city = ONTARIO&lt;br /&gt;
              end find         &lt;br /&gt;
      fr fd1                      &lt;br /&gt;
         pai                      &lt;br /&gt;
         print                    &lt;br /&gt;
      end for                     &lt;br /&gt;
   end subroutine              &lt;br /&gt;
   end &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
then the following messages are produced, assuming any prompts are responded to with an &#039;N&#039;:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;   M204.0569: File CLIENTS, Find: Table B records to be searched = 3415&lt;br /&gt;
   Cancelling request: M204.2969: MBSCAN (10) exceeded, records to be searched = 3415  &lt;br /&gt;
   M204.2966: Error at line 6, procedure MYPROC.MBSCAN in file MYPROC&lt;br /&gt;
   M204.2966: Called from line 3, procedure MYPROC.MBSCAN in file MYPROC  &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===appendJournalData===&lt;br /&gt;
The &amp;lt;var&amp;gt;[[AppendJournalData_(Stringlist_function)|AppendJournalData]]&amp;lt;/var&amp;gt; function is now more tolerant of an outstanding BUMP request. Previously, if &amp;lt;var&amp;gt;AppendJournalData&amp;lt;/var&amp;gt; was called to inadvertently retrieve a large amount of journal data, typically when called implicitly from within SirScan, then any outstanding BUMP request wouldn&#039;t be honored until all of the data had been retrieved, at which point the BUMP request would be completed, and all data would be lost.&lt;br /&gt;
&lt;br /&gt;
Now, the &amp;lt;var&amp;gt;AppendJournalData&amp;lt;/var&amp;gt; process checks for outstanding BUMP requests before each track I/O is executed, thus avoiding excessive I/Os against the journal and long waits for the BUMP of such a process to complete.&lt;br /&gt;
&lt;br /&gt;
==AUDIT204 enhancements==&lt;br /&gt;
===FORMAT command===&lt;br /&gt;
TIMEHH is a new parameter used with the FORMAT command of the [[Tracking_system_activity_(CCAJRNL,_CCAAUDIT,_CCAJLOG)#AUDIT204_utility|AUDIT204]] utility.  It indicates that timestamps, printed at the beginning of each line of output, should include hundredths of a second. Requires no other arguments.&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;b&amp;gt;NOTE:&amp;lt;/b&amp;gt; This parameter and the 78 version (or later) of AUDIT204 may be used against a 77 (or later) CCAJRNL.&amp;lt;/p&amp;gt;&lt;br /&gt;
For example:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;//CCAIN DD *&lt;br /&gt;
FORMAT YEARFORM 4&lt;br /&gt;
TIMEHH&lt;br /&gt;
TYPE ER MS LI&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Recovery enhancements==&lt;br /&gt;
===Media Recovery in a multi-user environment===&lt;br /&gt;
It is now possible to perform media recovery by issuing the &amp;lt;var&amp;gt;REGENERATE&amp;lt;/var&amp;gt; command to roll forward selected files in a multi-user environment, with the media recovery being carried out by different users with system manager privileges. The new USING option allows for the specification of a ddname for the input journal stream to be used by the &amp;lt;var&amp;gt;REGENERATE&amp;lt;/var&amp;gt; command. Previously media recovery was restricted to single user batch jobs, using the CCAGEN ddname for the input journal. For more details, see the &amp;lt;var&amp;gt;[[#REGENERATE|REGENERATE]]&amp;lt;/var&amp;gt; command below.&lt;br /&gt;
&lt;br /&gt;
==Security enhancements==&lt;br /&gt;
===CA-Top Secret can disallow CCASTAT logins===&lt;br /&gt;
The [[CA-Top_Secret_interface|CA-Top Secret]] interface now recognizes the &amp;lt;code&amp;gt;DEFACID=&amp;lt;/code&amp;gt;, setting and does not allow CCASTAT logins in the online if &amp;lt;code&amp;gt;DEFACID&amp;lt;/code&amp;gt; is set to null. (There is no attempt to log on M204USR.) Therefore, to disallow CCASTAT logons, set DEFACID=, in [[CA-Top_Secret_interface#Preparing_a_TOPSPARM_parameter_module_with_TOPSGEN|TOPSPARM]]. CCASTAT will be opened because it contains file and group passwords, but it will not be used for logons if CCASTAT logons are not allowed.&lt;br /&gt;
&lt;br /&gt;
===CUSTOM=11 and mixed cased input===&lt;br /&gt;
The &amp;lt;var&amp;gt;[[CUSTOM_parameter|CUSTOM]]&amp;lt;/var&amp;gt; parameter &amp;lt;var&amp;gt;CUSTOM=11&amp;lt;/var&amp;gt; setting no longer requires that a &amp;lt;var&amp;gt;*LOWER&amp;lt;/var&amp;gt; command be issued prior to a &amp;lt;var&amp;gt;LOGCTL&amp;lt;/var&amp;gt; command (to add or change a  password) to preserve mixed case input. Prior to this release, with &amp;lt;var&amp;gt;CUSTOM=11&amp;lt;/var&amp;gt; in place, *LOWER had to be issued before a &amp;lt;var&amp;gt;LOGCTL&amp;lt;/var&amp;gt; command, otherwise any mixed case password strings would automatically be translated into uppercase. This change is enabled in V7.7 with the application of zap 77z108.&lt;br /&gt;
&lt;br /&gt;
===DEFUSER can specify a jobname not authorized to access M204===&lt;br /&gt;
When specifying DEFUSER=JOBNAME and VALIDAT=LOGON in the RACFGEN parms for an ONLINE, if the specified jobname (the owning id for the ONLINE job) isn&#039;t authorized to use Model 204 via RACF, any LOGIN commands specifying no userid will now succeed (previously such a LOGON would have failed). This enables users to submit jobs with USE $JOB, whereby the string USER=jobname will be added to the submitted JCL. This in turn is useful if the specified jobname has dataset access privileges to datasets required by the submitted jobs, even if the jobname itself isn&#039;t authorized to use M204.&lt;br /&gt;
&lt;br /&gt;
==Janus product enhancements==&lt;br /&gt;
&lt;br /&gt;
===Web Sockets===&lt;br /&gt;
Web Sockets are now supported in Janus Web Server.&lt;br /&gt;
&lt;br /&gt;
The Web Socket protocol provides various advantages over the HTTP protocol:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Web Sockets allow full-duplex communication.&amp;lt;/li&amp;gt; &lt;br /&gt;
&amp;lt;li&amp;gt;Efficient framing of payload data uses minimal overhead.&amp;lt;/li&amp;gt;  &lt;br /&gt;
&amp;lt;li&amp;gt;The Web Socket protocol is end-user extensible.&amp;lt;/li&amp;gt;  &lt;br /&gt;
&amp;lt;li&amp;gt;Most importantly, Web Sockets can be deployed completely within an existing HTTP/HTTPS framework.&amp;lt;/li&amp;gt; &lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To implement Web Sockets, you must enable the Janus Web port for Web Socket upgrades with the new &amp;lt;var&amp;gt;WEBSOCKET&amp;lt;/var&amp;gt; parameter. The WEBSOCKET option can be specified on either the port definition or the JANUS WEB rule for the URL. &lt;br /&gt;
Likewise, an individual Janus Web rule can either allow or disallow Web Socket connections with the &amp;lt;var&amp;gt;WEBSOCKET&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;NOWEBSOCKET&amp;lt;/var&amp;gt; parameters, respectively. &lt;br /&gt;
&lt;br /&gt;
For details on implementing Web Sockets, see the [[WebSocket_(Socket_function)|WebSocket]] wiki page.&lt;br /&gt;
&lt;br /&gt;
===Janus Web Server access rule===&lt;br /&gt;
The automatic &amp;lt;var&amp;gt;[[JANUS WEB ALLOW]]&amp;lt;/var&amp;gt; rule, which allowed any user to access the port without requiring a login, is changed &amp;lt;i&amp;gt;for non-SSL ports&amp;lt;/i&amp;gt; to the following:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;JANUS WEB &amp;lt;i&amp;gt;portname&amp;lt;/i&amp;gt; DISALLOW *&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
This rule requires a system administrator to explicitly define &amp;lt;var&amp;gt;ALLOW&amp;lt;/var&amp;gt; rules to enable users to access non-SSL ports.&lt;br /&gt;
The rule applies unless overridden by user-added rules. &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;blockquote class=&amp;quot;note&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;b&amp;gt;Note:&amp;lt;/b&amp;gt; To revert from this change in the JANUS DEFINE default and make the default &lt;br /&gt;
 non-SSL &amp;lt;var&amp;gt;ALLOW&amp;lt;/var&amp;gt; rule as it was in version 7.5 and earlier (&amp;lt;code&amp;gt;ALLOW *&amp;lt;/code&amp;gt;), turn on the 1 bit of the &amp;lt;var&amp;gt;[[WEBDFLT parameter|WEBDFLT]]&amp;lt;/var&amp;gt; parameter: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;RESET WEBDFLT=1&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Increase in pending accepts for Janus BPX ports===&lt;br /&gt;
The default number of pending accepts for Janus BPX server ports has been increased from 3 to 12, thus reducing the likelihood that a pending accept may fail with the message&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;MSIR.0019 Connection request rejected for port (port), MAXCON exceeded&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The actual number of pending accepts to be supported on the port can be set with the new parameter MAXPEND, set on the &amp;lt;var&amp;gt;[[JANUS_DEFINE|JANUS DEFINE]]&amp;lt;/var&amp;gt; command, where MAXPEND can vary from 3 up to a maximum value of 32. The change to the default value is enabled in V7.7 with the application of zap 77z269.&lt;br /&gt;
&lt;br /&gt;
===TCP listen backlog increased===&lt;br /&gt;
&lt;br /&gt;
The [[Program_Communication_facilities#LISTEN_call|TCP listen]] backlog has been increased from 16 to 1024 under z/OS.&lt;br /&gt;
&lt;br /&gt;
This update tells the TCP stack to queue up a maximum of 1024 such requests before dropping any. This increased backlog reduces, or in most cases eliminates, the likelihood of a connection request drop, other than in exceptional circumstances, such as a denial of service attack. This change is enabled in V7.7 with the application of zap 77z340.&lt;br /&gt;
&lt;br /&gt;
===Defer the freeing of XMLSCREEN input XML===&lt;br /&gt;
&lt;br /&gt;
The freeing of &amp;lt;var&amp;gt;[[XMLSCREEN_and_NOXMLSCREEN_(JANUS_DEFINE_parameters)|XMLSCREEN]]&amp;lt;/var&amp;gt; input XML is now deferred until the next Read Screen or session termination. This means that if an application error is detected, the input XML can be retrieved with [[$Web_Input_Content|$Web_Input_Content]] and then logged for problem analysis. &lt;br /&gt;
&lt;br /&gt;
Prior to this release the XML received from the client was freed immediately after being used to set the input data for a Read Screen, rendering it unavailable for problem determination.&lt;br /&gt;
&lt;br /&gt;
This change is enabled in V7.7 with the application of zap 77z368.&lt;br /&gt;
&lt;br /&gt;
===XMLSCREEN and Janus Web Legacy blank stripping===&lt;br /&gt;
&lt;br /&gt;
xmlScreens and Janus Web Legacy screens now adhere to the same standard as standard screen processing in terms of stripping leading blanks from input fields defined as [[Full-screen_feature#DEBLANK_or_NODEBLANK_option|DEBLANK]] (either explicitly or implicitly).&lt;br /&gt;
&lt;br /&gt;
This change is enabled in V7.7 with the application of zap 77z400.&lt;br /&gt;
&lt;br /&gt;
===SSL input buffer size===&lt;br /&gt;
&lt;br /&gt;
The default value of &amp;lt;var&amp;gt;[[SSLIBSIZE_(JANUS_DEFINE_parameter)|SSLIBSIZE]]&amp;lt;/var&amp;gt; has been increased to 16384 + 128, or 16512. This size should ensure correct communication with all TLS spec compliant applications. It is the maximum size allowed unless you use &amp;lt;var&amp;gt;[[CUSTOM_parameter#Using_CUSTOM.3D.2818.29|CUSTOM=18]]&amp;lt;/var&amp;gt;.    &lt;br /&gt;
&lt;br /&gt;
This change is enabled in V7.7 with the application of zap 77z415.&lt;br /&gt;
&lt;br /&gt;
===Increasing LDAP buffers===&lt;br /&gt;
&lt;br /&gt;
The number of LDAP buffers allocated at startup can now be changed by setting the &amp;lt;var&amp;gt;NLDAPBUF&amp;lt;/var&amp;gt; parameter in CCAIN. See below for details on &amp;lt;var&amp;gt;[[#NLDAPBUF|NLDAPBUF]]&amp;lt;/var&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Increase URL length returned with $web_form_action===&lt;br /&gt;
With this release the maximum Janus Web Server incoming URL that can be handled by &amp;lt;var&amp;gt;$web_form_action&amp;lt;/var&amp;gt; is increased from 512 bytes to 1024 bytes. This change is enabled in V7.7 with the application of zap 77z424.&lt;br /&gt;
&lt;br /&gt;
===Maximum RBSIZE setting increased===&lt;br /&gt;
The maximum value for RBSIZE, set on the &amp;lt;var&amp;gt;[[JANUS DEFINE|JANUS DEFINE]]&amp;lt;/var&amp;gt; command, is now increased to 16777215 (previously the maximum was 65534). RBSIZE specifies the RPC or Request Buffer size.  On a Web port, the Janus request buffer holds browser request information such as header data, cookies, and form data. On other port types, it holds RPC input and output parameters. This change is enabled in V7.7 with the application of zap 77z427.&lt;br /&gt;
&lt;br /&gt;
==Debugger enhancements==&lt;br /&gt;
These enhancements apply to the Janus and TN3270 debuggers. &lt;br /&gt;
&lt;br /&gt;
===Access to exposed variables===&lt;br /&gt;
The debuggers can now view or watch the values of variables exposed to local routines/methods. Previously, any attempts to access an exposed variable would have displayed &amp;quot;%varname has no value&amp;quot; in the debugger session. This feature is enabled in V7.7 with the application of zap 77z363.&lt;br /&gt;
&lt;br /&gt;
===Subroutine or method display===&lt;br /&gt;
When execution pauses for a break point or runtime error, the subroutine or method being executed is indicated in the status area.  In addition, the source code line information available by right-clicking on a source line now also indicates the subroutine or method.&lt;br /&gt;
&lt;br /&gt;
==Performance enhancements==&lt;br /&gt;
&lt;br /&gt;
===MP/204 offload improvements===&lt;br /&gt;
Application code issuing the following SOUL statements will now now be fully offloadable:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;File Records In/On&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Remember&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt; &lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Position&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Sort Values&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;                                             &lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Reset Header/Trailer&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Find and Print Count&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Find All Values&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;For Each Value&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
The above improvements are enabled in V7.7 with the application of zaps 77z419 and 77z420.&lt;br /&gt;
&lt;br /&gt;
===X3270OUT exit offloadable===&lt;br /&gt;
When running MP/204 (AMPSUBS&amp;gt;0) and using the [[Coding_SNA_Communications_Server_conversion_exit_routines#X3270OUT_.28convert_output_from_3270_format.29|X3270OUT]] exit to convert a 3270 output data stream to the appropriate device protocol, the exit can now run in parallel mode to improve performance. This change is enabled in V7.7 with the application of zap 77z313.&lt;br /&gt;
&lt;br /&gt;
The X3270OUT exit must be written to be re-entrant.&lt;br /&gt;
&lt;br /&gt;
==New and changed commands==&lt;br /&gt;
===DISPLAY ECF===&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;DISPLAY ECF {{ M | N | U } like ?} &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This new command displays details from ECF tables, or the current status of users accessing ECF modules.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;D ECF M&amp;lt;/code&amp;gt; displays the contents of the module table. For example:&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;    D ECF M &lt;br /&gt;
    Module   Loadlib  Address:Length     Loaded@      Lastused@   #Calls  Flags &lt;br /&gt;
    QATUM13C PROGLIB 2FB91FB8:00000028 19023:121506 19023:121506 00000001 &lt;br /&gt;
    QATUM13B PROGLIB 2FE65000:00009C18 19023:121506 19023:121506 00000001 &lt;br /&gt;
    QATUM13A PROGLIB 2FE6EC18:00001CD8 19023:121506 19023:121506 00000001  &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
(flags may be D=deleted; S=shared; H=halted; I=Idle)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;D ECF N&amp;lt;/code&amp;gt; displays contents of the name table. For example: &amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;    D ECF N&lt;br /&gt;
    Module   Logical-call-name &lt;br /&gt;
    QATUM13C MOD_QATUM13C &lt;br /&gt;
    QATUM13B MOD_QATUM13B &lt;br /&gt;
    QATUM13A MOD_QATUM13A &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;D ECF U&amp;lt;/code&amp;gt; displays details of users currently accessing ECF modules. This is also the default option, and so &amp;lt;code&amp;gt;D ECF&amp;lt;/code&amp;gt; will display the same output as &amp;lt;code&amp;gt;D ECF U&amp;lt;/code&amp;gt;. For example:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;    D ECF U                           &lt;br /&gt;
    User# Userid     Module   Parmlen &lt;br /&gt;
    00002 ADMIN      --none--         &lt;br /&gt;
    00003 ADMIN      COBSAMP1 00000002&lt;br /&gt;
    00004 ADMIN      COBSAMP1 00000002 &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;D ECF &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;function&amp;lt;/var&amp;gt; LIKE &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;?&amp;lt;/var&amp;gt; &amp;lt;/code&amp;gt; (where &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;?&amp;lt;/var&amp;gt; is a valid pattern) displays details for entities that match the specified pattern. The function is either M (modules), N (names), or U (users), and it defaults to U. So for example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;D ECF U L A&amp;lt;/p&amp;gt;&lt;br /&gt;
or&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;D ECF U L A*&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
displays details of ECF users whose names begin with A.&lt;br /&gt;
&lt;br /&gt;
===REGENERATE===&lt;br /&gt;
The &amp;lt;var&amp;gt;[[REGENERATE command|REGENERATE]]&amp;lt;/var&amp;gt; command can now be run in a multi-user environment by multiple users with system manager privileges. A new option USING is provided to specify the ddname of the input journal, so that the full syntax is now as follows:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;  REGENERATE [USING ddname] FILE filename [FROM dumpname | IGNORE]&lt;br /&gt;
  [TO {LAST UPDATE [BEFORE yy.ddd hh:mm:ss.th] | LAST CHECKPOINT [BEFORE yy.dd hh:mm:ss.th] &lt;br /&gt;
  | UPDATE number OF yy.ddd hh:mm:ss.th | CHECKPOINT yy.ddd hh:mm:ss.th} ]&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The default for the using ddname is CCAGEN, but any ddname may be used to allocate an input journal and used. For example:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;  ALLOCATE REGEN1 WITH SCOPE=SYSTEM DSN=PROD1.GDGJ OLD SEQUENTIAL GEN=+2&lt;br /&gt;
  REGENERATE USING REGEN1 FILE TEST&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It is the user&#039;s responsibility to ensure that the file being regenerated is not in use, and so prior to usage, &amp;lt;var&amp;gt;BUMP FILE&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;STOP FILE&amp;lt;/var&amp;gt; should be used to isolate usage against the file. If the file is in use, the REGEN will fail with these messages:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;  M204.1430: Failed to open file TEST&lt;br /&gt;
  M204.1436: Stopped processing file TEST  &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
$STATUS will now be set for &amp;lt;var&amp;gt;REGENERATE&amp;lt;/var&amp;gt; with the following values:&lt;br /&gt;
&amp;lt;blockquote&amp;gt;    &lt;br /&gt;
    0 - Success &amp;lt;br/&amp;gt;&lt;br /&gt;
    1 - No files were processed &amp;lt;br/&amp;gt;&lt;br /&gt;
    2 - At least one file stopped processing &amp;lt;br/&amp;gt;&lt;br /&gt;
    4 - A serious error occurred, REGEN failed &lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Similarly, &amp;lt;var&amp;gt;[[SETGRC command|SETGRC]]&amp;lt;/var&amp;gt; may be used to get the return code and error message.&lt;br /&gt;
&lt;br /&gt;
==New and changed parameters==&lt;br /&gt;
&lt;br /&gt;
===ECMODS===&lt;br /&gt;
The new minimum value for ECMODS, the allowable number of ECF modules, is 1. Prior to V7.8 the minimum value was 0. This change is enabled in V7.7 with the application of zap 77z306.&lt;br /&gt;
&lt;br /&gt;
===ECNAMES===&lt;br /&gt;
The new minimum value for ECNAMES, the allowable number of ECF module names, is 1. Prior to V7.8 the minimum value was 0. This change is enabled in V7.7 with the application of zap 77z306.&lt;br /&gt;
&lt;br /&gt;
===ECPSIZE===&lt;br /&gt;
The new minimum value for ECPSIZE, the initial storage allocation for ECF parameters, is 1024. Prior to V7.8 the minimum value was 0. This change is enabled in V7.7 with the application of zap 77z306.&lt;br /&gt;
&lt;br /&gt;
===ENQTIME===&lt;br /&gt;
Millisecond duration of automatic record locking retry wait.&lt;br /&gt;
&lt;br /&gt;
Prior to this change, if record locking conflicts occur frequently in a busy online, any user with a non-zero value for &amp;lt;var&amp;gt;[[ENQRETRY parameter|ENQRETRY]]&amp;lt;/var&amp;gt; will wait at least 3 seconds before the conflict is dealt with. This can degrade overall system performance.      &lt;br /&gt;
                                                         &lt;br /&gt;
The &amp;lt;var&amp;gt;[[ENQTIME parameter|ENQTIME]]&amp;lt;/var&amp;gt; parameter specifies the number of milliseconds waited for each record locking retry wait. &amp;lt;var&amp;gt;ENQTIME&amp;lt;/var&amp;gt; can be between 1 and 60000, corresponding to a minimum of 1 millisecond and a maximum of 1 minute. The default value of &amp;lt;var&amp;gt;ENQTIME&amp;lt;/var&amp;gt; is 3000 (3 seconds).            &lt;br /&gt;
                                                         &lt;br /&gt;
For example, with &amp;lt;code&amp;gt;ENQTIME = 100&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;ENQRETRY = 7&amp;lt;/code&amp;gt;, after a record locking conflict occurs the thread will retry 7 times with wait intervals of .1 seconds, and so within at most .7 seconds either the lock becomes available or the conflict triggers an On unit or cancels the request.     &lt;br /&gt;
                                                         &lt;br /&gt;
The &amp;lt;var&amp;gt;ENQTIME&amp;lt;/var&amp;gt; parameter may also be reset with $ResetN. &lt;br /&gt;
&lt;br /&gt;
This new parameter is enabled in V7.7 with the application of zap 77z299.&lt;br /&gt;
&lt;br /&gt;
===EVALOPT===&lt;br /&gt;
The new &amp;lt;var&amp;gt;EVALOPT&amp;lt;/var&amp;gt; parameter controls the cancellation of a request on truncation of string data. The default value is 0, and currently there is just one setting, 1, which means &amp;quot;cancel a request if truncation of string data occurs.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
For example, with the default of 0 in place, the following code &amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;    %x is string len 1   &lt;br /&gt;
    %y is string len 2   &lt;br /&gt;
    %y = &#039;ab&#039;            &lt;br /&gt;
    %x = %y              &lt;br /&gt;
    printtext {~} = {%x} &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
would cause silent truncation, and give the result&lt;br /&gt;
    &amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;%x = a &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If &amp;lt;var&amp;gt;EVALOPT&amp;lt;/var&amp;gt; is set to 1, then the above code produces the following message:&lt;br /&gt;
    &amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;M204.0552: Variable too small for result &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and the request is cancelled.&lt;br /&gt;
&lt;br /&gt;
===LFSCB===&lt;br /&gt;
&amp;lt;var&amp;gt;LFSCB&amp;lt;/var&amp;gt;, the length of the full screen buffer, now has a new minimum value of 8 (the previous minimum was 0). This change is enabled in v7.7 with the application of zap 77z042, and within V7.6 with the application of zap 76z393.&lt;br /&gt;
&lt;br /&gt;
===MAXPRE, MAXBOUT, MAXSUBT===&lt;br /&gt;
&amp;lt;p&amp;gt;Introduced in zap 77z257.&amp;lt;/p&amp;gt;&lt;br /&gt;
The new &amp;lt;var&amp;gt;MAXPRE&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;MAXBOUT&amp;lt;/var&amp;gt;, and &amp;lt;var&amp;gt;MAXSUBT&amp;lt;/var&amp;gt; parameters can be used to cancel a runaway transaction and prevent it from filling the checkpoint data set. &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;MAXPRE&amp;lt;/var&amp;gt;:  Maximum number of pre-images per transaction.  &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;MAXBOUT&amp;lt;/var&amp;gt;: Maximum number of backout pages per transaction. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;MAXSUBT&amp;lt;/var&amp;gt;: Maximum number of subtransaction checkpoints that a transaction can span.&amp;lt;/li&amp;gt;&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;Each new parameter defaults to unlimited. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;If a parameter value is set, a transaction is cancelled if that value is exceeded, and the following message is displayed:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;M204.0524: Maximum number (&amp;lt;i&amp;gt;num&amp;lt;/i&amp;gt;) of &amp;lt;i&amp;gt;parameter&amp;lt;/i&amp;gt; exceeded.&amp;lt;/p&amp;gt;&lt;br /&gt;
where &amp;lt;i&amp;gt;num&amp;lt;/i&amp;gt; is the value set for &amp;lt;i&amp;gt;parameter&amp;lt;/i&amp;gt; (&amp;lt;var&amp;gt;MAXPRE&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;MAXBOUT&amp;lt;/var&amp;gt;, or &amp;lt;var&amp;gt;MAXSUBT&amp;lt;/var&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
===NLDAPBUF===&lt;br /&gt;
This new parameter allows the number of LDAP buffers allocated during startup to be set in CCAIN. The default value is 2, and the settable value can range from 0 to 65535.&lt;br /&gt;
&lt;br /&gt;
===PUPDTH (new minimum value)===&lt;br /&gt;
If a user sets the &amp;lt;var&amp;gt;[[PUPDTH parameter|PUPDTH]]&amp;lt;/var&amp;gt; parameter to 0, it will now automatically be increased to 1, its minimum value.&lt;br /&gt;
&lt;br /&gt;
===SERV4G===&lt;br /&gt;
This parameter allows testing of server tables that span a 4-gigabyte boundary. For example, if &amp;lt;var&amp;gt;SERV4G&amp;lt;/var&amp;gt; is &amp;lt;code&amp;gt;X&#039;FFFFF000&#039;&amp;lt;/code&amp;gt;, each ATB server will begin at &amp;lt;code&amp;gt;XX_FFFFF000&amp;lt;/code&amp;gt;. If &amp;lt;var&amp;gt;SERV4G&amp;lt;/var&amp;gt; is &amp;lt;code&amp;gt;X&#039;FFFF0000&#039;&amp;lt;/code&amp;gt;, each ATB server will begin at &amp;lt;code&amp;gt;XX_FFFF0000&amp;lt;/code&amp;gt;. &amp;lt;code&amp;gt;XX&amp;lt;/code&amp;gt; is determined by the storage available on the system. The parameter is set in CCAIN.&lt;br /&gt;
&lt;br /&gt;
The contents of the ATB server are specified by using the &amp;lt;var&amp;gt;[[SERVGA parameter|SERVGA]]&amp;lt;/var&amp;gt; parameter.&lt;br /&gt;
&lt;br /&gt;
For example, if you want VTBL to span the 4G boundary, you can use these settings: &amp;lt;code&amp;gt;SERV4G=X&#039;FFFFF000&#039;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;SERVGA=X&#039;00040000&#039;&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;LVTBL=200 (6400 bytes, X&#039;1900&#039;)&amp;lt;/code&amp;gt;. This will force each server&#039;s VTBL to begin at &amp;lt;code&amp;gt;XX_FFFFF000&amp;lt;/code&amp;gt; and end at &amp;lt;code&amp;gt;XX+1_00000900&amp;lt;/code&amp;gt;.&lt;br /&gt;
===SIRTERM===&lt;br /&gt;
The &amp;lt;var&amp;gt;[[SIRTERM parameter|SIRTERM]]&amp;lt;/var&amp;gt; (Sirius terminal options) parameter settings have changed. &lt;br /&gt;
The changes to &amp;lt;var&amp;gt;SIRTERM&amp;lt;/var&amp;gt; allow a user to preclude a reset to a Model that is not supported by the terminal emulator in use.&lt;br /&gt;
&lt;br /&gt;
The X&#039;01&#039; setting (MODEL 6 support) is no longer used. &lt;br /&gt;
&lt;br /&gt;
The X&#039;02&#039; setting (Write Structured Field Query Support) now supports MODEL 6 terminals by default. &lt;br /&gt;
&lt;br /&gt;
The new X&#039;08&#039; setting  always issues a Write Structured Field Query for Terminal Model Resets for terminals connected to Model 204 through VTAM  or TELNET. This precludes Terminal Model RESETs to Models that are not supported by the terminal emulator in use.&lt;br /&gt;
&lt;br /&gt;
===WEBDFLT===&lt;br /&gt;
At V7.7, the default access rule for non-SSL ports was changed from ALLOW * to DISALLOW *, meaning that unless any ALLOW rules were in place resulting in a login/password prompt, the port couldn&#039;t be accessed. The new &amp;lt;var&amp;gt;[[WEBDFLT_parameter|WEBDFLT]]&amp;lt;/var&amp;gt; parameter may be set to 1 for reversion to the old default of ALLOW *. This new parameter is enabled in V7.7 with the application of zap 77z090. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;var&amp;gt;RESET WEBDFLT&amp;lt;/var&amp;gt; requires system administrator privileges. It is recommended to reset the 1 bit of &amp;lt;var&amp;gt;WEBDFLT&amp;lt;/var&amp;gt; to zero after issuing a series of &amp;lt;var&amp;gt;JANUS DEFINE&amp;lt;/var&amp;gt; commands which need &amp;lt;var&amp;gt;WEBDFLT=1&amp;lt;/var&amp;gt;, as in the CCAIN input stream.&lt;br /&gt;
&lt;br /&gt;
==New and changed statistics==&lt;br /&gt;
===MPR, MBO, MCP, and RCV===&lt;br /&gt;
Introduced in zap 77z257.&lt;br /&gt;
&amp;lt;p&amp;gt;These statistics provide high water mark transaction information. (Since-last values will not be available until V78 GA.)&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;They are useful in conjunction with the &amp;lt;var&amp;gt;MAXPRE&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;MAXBOUT&amp;lt;/var&amp;gt;, and &amp;lt;var&amp;gt;MAXSUBT&amp;lt;/var&amp;gt; parameters. &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
User/system statistics:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;MPR: High water mark of transaction pre-images. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;MBO: High water mark of transaction backout pages. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;MCP: High water mark of transaction chkpoint spans. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
System statistics: &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;RCV: Number of blocks needed for subtransaction recovery &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt; &lt;br /&gt;
&amp;lt;p class=&amp;quot;note&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Notes:&amp;lt;/b&amp;gt; M204.0843 now displays the RCV statistic for subtransaction checkpoints.&lt;br /&gt;
The size of recovery checkpoint must be greater than the sum of the last RCV value plus the number of records in [[System_and_media_recovery#RESTART_recovery_considerations_for_sub-transaction_checkpoints|RESTART and RESTARTS]].&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
===DKWTS and DKWTMICS===&lt;br /&gt;
Introduced in zap 77z7289.&lt;br /&gt;
&amp;lt;p&amp;gt;The new system statistics DKWTS (DisK WaiTs) and DKWTMICS (DisK WaiT MICroSeconds) collect data to provide rough disk I/O service time numbers.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
DKWTS shows the number of disk I/O waits. DKWTMICS shows the total wait time for those waits in microseconds. Dividing the difference in DKWTMICS by the difference in DKWTS over an interval provides the average disk I/O wait time in microseconds.              &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;note&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Notes:&amp;lt;/b&amp;gt; &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The wait time does include internal Model 204 scheduler delays, so on a CPU bound Model 204 system, the service times calculated from DKWTS and DKWTMICS are likely to be an overestimate of actual service times.&amp;lt;/li&amp;gt;  &lt;br /&gt;
                                                                    &lt;br /&gt;
&amp;lt;li&amp;gt;DKWTS and DKWTMICS are not available in SirMon; use &amp;lt;var&amp;gt;[[MONITOR_command|MONITOR]] SYSTEM STATISTICS&amp;lt;/var&amp;gt; to view these statistics.&amp;lt;/li&amp;gt;&amp;lt;/ul&amp;gt;  &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Compatibility issues==&lt;br /&gt;
===&amp;lt;b id=&amp;quot;listNewInit&amp;quot;&amp;gt;&amp;lt;/b&amp;gt;$ListNew cannot be used in Initial clause===&lt;br /&gt;
It is now a compilation error if &amp;lt;var&amp;gt;$ListNew&amp;lt;/var&amp;gt; is attempted to be used in the &amp;lt;var&amp;gt;Initial&amp;lt;/var&amp;gt; clause of a &lt;br /&gt;
[[Using_variables_and_values_in_computation#Declare_statements_for_.25variables|declaration statement]].&lt;br /&gt;
&amp;lt;p&amp;gt;This change is propagated by zap maintenance to versions 7.5 (zap 75Z487), 7.6 (zap 76Z514), and 7.7 (zap 77z281) of Model 204.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote class=&amp;quot;note&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Note:&amp;lt;/b&amp;gt; Strictly speaking, this would not be considered a compilation error, because previously although &amp;lt;code&amp;gt;..&amp;amp;nbsp;Initial($ListNew)&amp;lt;/code&amp;gt; did not produce a compilation error, in almost all circumstances it would produce a snap if the initialized %variable were used with some other &amp;lt;var&amp;gt;$List&amp;lt;i&amp;gt;xxx&amp;lt;/i&amp;gt;&amp;lt;/var&amp;gt; invocation.&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Restricting the use of the CUSTOM=38 setting===&lt;br /&gt;
The &amp;lt;var&amp;gt;[[CUSTOM parameter|CUSTOM=38]]&amp;lt;/var&amp;gt; parameter setting, introduced at V7.5, inadvertently provided System Manager privileges to all users via the &amp;lt;var&amp;gt;RESET&amp;lt;/var&amp;gt; command. This &amp;lt;var&amp;gt;CUSTOM&amp;lt;/var&amp;gt; setting is now restricted to the &amp;lt;var&amp;gt;RESET&amp;lt;/var&amp;gt; of the &amp;lt;var&amp;gt;LAUDIT&amp;lt;/var&amp;gt; parameter.&lt;br /&gt;
&lt;br /&gt;
===Disabling of Closure support===&lt;br /&gt;
Due to a number of bugs related to Closure support, introduced at V7.7, this feature, which can best be described as exposed methods assigned to method variables, has been disabled in this release. This change was also made to V7.7 with application of zap 77z119.&lt;br /&gt;
&lt;br /&gt;
===Password delimiter enforced===&lt;br /&gt;
When using &amp;lt;var&amp;gt;IFSTRTN&amp;lt;/var&amp;gt; to log on to a Model 204 online from an IFAM2 application, both the logonid and password must be followed by a semicolon, which is the delimiter. For example:      &lt;br /&gt;
                                      &lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;CALL IFSTRTN(RC,&#039;logonid;password;&#039;...)&amp;lt;/p&amp;gt;&lt;br /&gt;
                 &lt;br /&gt;
If a semicolon does not follow the password string, the following message will now be issued:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;M204.2964: Password missing or too long &amp;lt;/p&amp;gt;                 &lt;br /&gt;
                                                         &lt;br /&gt;
Previously, a semicolon following the password was not required and the first blank served as a password delimiter.  However, as of V7.7, embedded blanks are valid password characters and a semicolon is now required to delimit the password.&lt;br /&gt;
&lt;br /&gt;
This change is enabled in V7.7 with the application of zap 77z231.&lt;br /&gt;
&lt;br /&gt;
===PAGESZ parameter validated===&lt;br /&gt;
Previously it was possible to set the &amp;lt;var&amp;gt;PAGESZ&amp;lt;/var&amp;gt; parameter to any value, although Model 204 internally supports one page size of 6184, and any deviation from this value would have led to problems during file creation. The value of this parameter is now controlled, such that setting it to any value other than 6184 will generate an &amp;lt;code&amp;gt;M204.1149&amp;lt;/code&amp;gt; message with the parameter being reset to 6184.&lt;br /&gt;
&lt;br /&gt;
===ECPRIV and the IDCAMS facility===&lt;br /&gt;
At V7.7 a security loophole was closed, whereby all ECF modules were run under external-authorizer profile of the calling user. Previously any ECF tasks were run under the owning job&#039;s external-authorizer profile, and in order for certain sites to retain that ability, a new setting of &amp;lt;var&amp;gt;ECPRIV&amp;lt;/var&amp;gt;, value 4, was introduced to retain the ability to run ECF tasks using the job&#039;s security profile. &lt;br /&gt;
&lt;br /&gt;
The &amp;lt;var&amp;gt;ECPRIV&amp;lt;/var&amp;gt; 4 setting potentially introduced a security loophole when calling the IDCAMS interface, based upon what the IDCAMS utility is able to do at a system level. Consequently as of this release, the &amp;lt;var&amp;gt;ECPRIV&amp;lt;/var&amp;gt; 4 setting will be ignored when calling the IDCAMS facility via ECF, and such IDCAMS processes will always use the calling user&#039;s security profile. Any existing jobs that use ECF to call the IDCAMS utility with the &amp;lt;var&amp;gt;ECFPRIV&amp;lt;/var&amp;gt; 4 bit set should be checked to ensure that the calling user&#039;s security profile still satisfies the job&#039;s requirements.&lt;br /&gt;
&lt;br /&gt;
===TCPOPTS is view-only===&lt;br /&gt;
In previous versions the &amp;lt;var&amp;gt;TCPOPTS&amp;lt;/var&amp;gt; parameter, which identifies the type of IP addressing in use (v4 or v6), was resettable, although it was always documented as a view-only parameter. The parameter is now handled as a view-only parameter, and any attempts to reset the parameter will result in the following message:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;gt;   M204.1123: Parameter TCPOPTS not reset&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===ZHPF command can only be issued by a system manager===&lt;br /&gt;
In previous versions it was possible to issue the &amp;lt;var&amp;gt;ZHPF&amp;lt;/var&amp;gt; command without being logged on. From this release onwards, a user must be logged on with system manager privileges in order to issue this command.&lt;br /&gt;
&lt;br /&gt;
Additionally, the command output will now only  display results for currently open files.&lt;br /&gt;
&lt;br /&gt;
This change is enabled in v7.7 with the application of zap 77z264.&lt;br /&gt;
&lt;br /&gt;
===Terminal MODEL reset failure===&lt;br /&gt;
If a reset of the terminal &amp;lt;var&amp;gt;MODEL&amp;lt;/var&amp;gt; parameter fails due to an undersized output page buffer, then in addition to the existing messages that inform the user of this failure:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;gt;    M204.1875 UNABLE TO RESET MODEL TO %C &lt;br /&gt;
    M204.1123: Parameter MODEL not reset&amp;lt;/p&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
the following message will now be issued:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;gt;    M204.1008: LOUTPB must be increased to at least &amp;lt;number&amp;gt; &amp;lt;/p&amp;gt;&lt;br /&gt;
                                                         &lt;br /&gt;
where &amp;lt;number&amp;gt; is the minimum value of &amp;lt;var&amp;gt;LOUTPB&amp;lt;/var&amp;gt; necessary to support the terminal model.&lt;br /&gt;
&lt;br /&gt;
This change is enabled in V7.7 with the application of zap 77z309.&lt;br /&gt;
&lt;br /&gt;
==Notes for system manager and installer==&lt;br /&gt;
===CRAM SVC installation is deprecated===&lt;br /&gt;
The CRAM SVC installation has been deprecated as of version 7.5. &amp;lt;br /&amp;gt;Installation of CRAM-XDM is described as part of the [[Model 204 installation]].&lt;br /&gt;
===Authorization and maintenance zaps===&lt;br /&gt;
When you download Rocket M204 product object files, all relevant authorization keys and all current maintenance zaps are pre-applied to the object files as part of the download process.&lt;br /&gt;
&lt;br /&gt;
==New and changed messages==&lt;br /&gt;
&lt;br /&gt;
See [[New and updated messages in Model 204 version 7.8|New and updated messages in Model 204 version 7.8]] for details.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category: Release notes]]&lt;/div&gt;</summary>
		<author><name>ELowell</name></author>
	</entry>
	<entry>
		<id>https://m204wiki.rocketsoftware.com/index.php?title=Release_notes_for_Model_204_version_7.8&amp;diff=117742</id>
		<title>Release notes for Model 204 version 7.8</title>
		<link rel="alternate" type="text/html" href="https://m204wiki.rocketsoftware.com/index.php?title=Release_notes_for_Model_204_version_7.8&amp;diff=117742"/>
		<updated>2019-12-17T20:54:37Z</updated>

		<summary type="html">&lt;p&gt;ELowell: formatting/run-on sentence cleanup&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;&amp;lt;b&amp;gt;******THIS IS A DRAFT DOCUMENT.******&amp;lt;/b&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
These release notes list the enhancements and other changes contained in Model 204 version 7.8, &amp;lt;b&amp;gt;&amp;lt;i&amp;gt;which is still in development&amp;lt;/i&amp;gt;&amp;lt;/b&amp;gt;. Until the commercial release of the software, Rocket reserves the right to add to, remove, or change anything described herein. &lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
These release notes contain installation and features information for the Rocket Model 204 version 7.8 release.&lt;br /&gt;
Before beginning your installation, please read through this information about product installation and changes.&lt;br /&gt;
&lt;br /&gt;
==New in this release==&lt;br /&gt;
The table below cites some highlights of Model&amp;amp;nbsp;204 version 7.8. For a full list of features, refer to the Table of Contents. &lt;br /&gt;
&amp;lt;p&amp;gt;See also the [[#Compatibility Issues|Compatibility]] section for possible issues.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;tr class=&amp;quot;head&amp;quot;&amp;gt;&amp;lt;th&amp;gt;Category&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Feature&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;SOUL&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The new [[#AmIndependent method|AmIndependent]] method returns TRUE for daemons spawned by RunIndependently.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The Object class now supports the [[#Support for copying Object class objects|copy and deepCopy methods]].&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Janus Web&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[[#Web Sockets|Janus Web Sockets]] are now supported.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td nowrap&amp;gt;Networking&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Note:&amp;lt;/b&amp;gt; The two-phase commit and commit exits features are licensed and purchased separately from Model 204.&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Two-phase commit. A Model 204 online can now be configured to use two-phase commit (2PC). The Janus internal socket API is used for the calls to the coordinator. JANUS commands are used for all 2PC configuration. A new JANUS port type has been added, 2PC.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Commit exits are now supported. The commit exit runs within the APSY, which is defined by the &amp;lt;var&amp;gt;COMMITX&amp;lt;/var&amp;gt; parameter and uses normal APSY processing.  &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;ECF tables&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The new &amp;lt;var&amp;gt;DISPLAY ECF&amp;lt;/var&amp;gt; command and &amp;lt;var&amp;gt;EXTERNAL REMOVE&amp;lt;/var&amp;gt; statement enable more efficient management of [[#Managing ECF tables more efficiently|ECF tables]].&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Performance&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[[#MP/204 offload improvements|MP/204 offload improvements]] -- application code for these SOUL statements is now fully offloadable: &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;File Records In/On&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Remember&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Position&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Sort Values&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Reset Header/Trailer&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Find and Print Count&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Find All Values&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;For Each Value&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Security&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;CA-Top Secret can [[#CA-Top Secret can disallow CCASTAT logins|disallow CCASTAT logins]].&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[[#DEFUSER can specify a jobname not authorized to access M204|DEFUSER]] can specify a jobname not authorized to access M204.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td nowrap&amp;gt;System enhancements&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The &amp;lt;var&amp;gt;MONITOR USERS&amp;lt;/var&amp;gt; command output displays [[#New wait types for daemon/master waits|two new wait types]].&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td nowrap&amp;gt;AUDIT204 enhancements&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The new TIMEHH parameter on the &amp;lt;var&amp;gt;[[#FORMAT command|FORMAT]]&amp;lt;/var&amp;gt; command of the AUDIT204 utility provides greater time stamp precision.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td nowrap&amp;gt;New commands&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;[[#DISPLAY ECF|DISPLAY ECF]]&amp;lt;/var&amp;gt; displays details from ECF tables, or the current status of users accessing ECF modules.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td nowrap&amp;gt;New parameters&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;[[#ENQTIME|ENQTIME]]&amp;lt;/var&amp;gt; specifies the number of milliseconds waited for each record locking retry wait.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;[[#EVALOPT|EVALOPT]]&amp;lt;/var&amp;gt; controls the cancellation of a request on truncation of string data.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;[[#MAXPRE, MAXBOUT, MAXSUBT|MAXPRE, MAXBOUT, and MAXSUBT]]&amp;lt;/var&amp;gt; can be used to cancel a runaway transaction and prevent it from filling the checkpoint data set.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;[[#NLDAPBUF|NLDAPBUF]]&amp;lt;/var&amp;gt; allows the number of LDAP buffers allocated during startup to be set in CCAIN.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;[[#SERV4G|SERV4G]]&amp;lt;/var&amp;gt; allows testing of server tables that span a 4-gigabyte boundary.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;[[#WEBDFLT|WEBDFLT]]&amp;lt;/var&amp;gt; changes the default JANUS WEB ALLOW rule back to ALLOW.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td nowrap&amp;gt;Janus and TN3270 debuggers&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The debuggers can now view or watch the values of [[#Access to exposed variables|variables exposed to local routines/methods]].&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;When execution pauses, the debuggers now [[#Subroutine or method display|display the subroutine or method]] being executed.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td nowrap&amp;gt;User/system statistics&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;[[#MPR, MBO, MCP, and RCV|MPR, MBO, MCP, and RCV]]&amp;lt;/var&amp;gt; provide high water mark transaction information in conjunction with the &amp;lt;var&amp;gt;MAXPRE&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;MAXBOUT&amp;lt;/var&amp;gt;, and &amp;lt;var&amp;gt;MAXSUBT&amp;lt;/var&amp;gt; parameters. &lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[[#DKWTS and DKWTMICS|New system statistics]] DKWTS (DisK WaiTs) and DKWTMICS (DisK WaiT MICroSeconds) collect data to provide rough disk I/O service time numbers.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Operating system and hardware requirements==&lt;br /&gt;
&lt;br /&gt;
===Operating system requirements===&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;IBM z/OS versions supported:&amp;lt;/b&amp;gt; &lt;br /&gt;
  &amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;All IBM supported releases up to and including z/OS 2.3. &amp;lt;br /&amp;gt;(For z/OS 2.2, see [[IBM z/OS 2.2 PTF requirement]].)&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;p&amp;gt;Version 1.07 is sufficient for all functionality except for the following features:&amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;ul&amp;gt;&lt;br /&gt;
    &amp;lt;li&amp;gt;zHPF support requires version [[IBM z/OS 2.1 compatibility issue|2.1]].&amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;li&amp;gt;Large (1 MB) page support requires version 1.9.&amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;li&amp;gt;Extended address volumes (EAV) requires version 1.12.&amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;/ul&amp;gt;&lt;br /&gt;
  &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
On z/OS, Model 204 release 7.8 operates as an APF authorized load module, as required by many 7.8 features. &amp;lt;br /&amp;gt;&lt;br /&gt;
To run Model 204 unauthorized, [[Contacting Rocket Software Technical Support|contact Technical Support]].&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;IBM z/VM versions supported:&amp;lt;/b&amp;gt; &lt;br /&gt;
  &amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;All IBM supported releases up to and including z/VM 6.4.&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;IBM z/VSE versions supported:&amp;lt;/b&amp;gt;&lt;br /&gt;
  &amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;All IBM supported releases up to and including z/VSE 6.1.&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Hardware requirements===&lt;br /&gt;
 &lt;br /&gt;
In general, Model 204 version 7.8 requires the IBM z/890 or above processor.&lt;br /&gt;
&amp;lt;p&amp;gt;However, the IBM z10 or above processor is required for the following features:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;large (1 MB) page support&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;IBM&#039;s High Performance FICON (zHPF) support&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Connect&amp;lt;sup&amp;gt;&amp;amp;#9733;&amp;lt;/sup&amp;gt; compatibility with Model 204===&lt;br /&gt;
&lt;br /&gt;
Connect&amp;lt;span class=&amp;quot;superstar&amp;quot;&amp;gt;&amp;amp;#9733;&amp;lt;/span&amp;gt; version 7.5 or 7.7 is compatible with Model 204 version 7.8.&lt;br /&gt;
&lt;br /&gt;
For more information on Connect&amp;lt;span class=&amp;quot;superstar&amp;quot;&amp;gt;&amp;amp;#9733;&amp;lt;/span&amp;gt; installation, see the [[:Category:Connect*|Connect&amp;lt;span class=&amp;quot;superstar&amp;quot;&amp;gt;&amp;amp;#9733;&amp;lt;/span&amp;gt; wiki pages]].&lt;br /&gt;
&lt;br /&gt;
==SOUL (User Language) enhancements==&lt;br /&gt;
===AmIndependent method===&lt;br /&gt;
The &amp;lt;var&amp;gt;AmIndependent&amp;lt;/var&amp;gt; method returns TRUE for daemons spawned by &amp;lt;var&amp;gt;[[RunIndependently_(Daemon_subroutine)|RunIndependently]]&amp;lt;/var&amp;gt;. (The action of &amp;lt;var&amp;gt;[[AmDaemon_(Daemon_property)|AmDaemon]]&amp;lt;/var&amp;gt; remains unchanged.)&lt;br /&gt;
&lt;br /&gt;
The following table shows the values returned by &amp;lt;var&amp;gt;AmIndependent&amp;lt;/var&amp;gt; versus &amp;lt;var&amp;gt;AmDaemon&amp;lt;/var&amp;gt; for different daemon types:&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Type&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;AmDaemon&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;AmIndependent&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;$COMBG&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;False&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;False&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Independent daemon&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;False&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;True&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Other daemon&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;True&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;False&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Web, etc.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;False&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;False&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===$ProcOpn===&lt;br /&gt;
&amp;lt;var&amp;gt;[[$ProcOpn|$ProcOpn]]&amp;lt;/var&amp;gt; now supports the opening of a procedure with an all-numeric name, and including a leading zero, such as:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;%result = $procOpn(&#039;0123&#039;, &#039;MYFILE&#039;)&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Support for such procedure names was initially introduced at V7.7, and this feature of &amp;lt;var&amp;gt;$ProcOpn&amp;lt;/var&amp;gt; is enabled in V7.7 with the application of zap 77z054.&lt;br /&gt;
&lt;br /&gt;
===Allow parentheses to surround a boolean enumeration object===&lt;br /&gt;
The following sample code:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;   begin                                       &lt;br /&gt;
   variables are undefined                  &lt;br /&gt;
   %isValid is boolean initial (True)       &lt;br /&gt;
   if (%isValid) then                  &lt;br /&gt;
      print &#039;in IF&#039;                            &lt;br /&gt;
   end if                                   &lt;br /&gt;
   end   &amp;lt;/p&amp;gt;      &lt;br /&gt;
&lt;br /&gt;
will now compile and run successfully, since this syntax: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;if (%isValid) then &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
is logically equivalent to this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;if %isValid then &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Prior to V7.8 the presence of parentheses surrounding the boolean enumeration object would have caused a compilation error. This change is enabled in V7.7 with the application of zap 77z370.&lt;br /&gt;
&lt;br /&gt;
===Support for copying Object class objects===&lt;br /&gt;
The Object class now supports the copy and deepCopy methods. For example, an Object object can be copied as follows:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;   begin               &lt;br /&gt;
   %x is object object &lt;br /&gt;
   %y is object object &lt;br /&gt;
   %y = new            &lt;br /&gt;
   %x = %y:copy        &lt;br /&gt;
   end &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This change is enabled in v7.7 with the application of zap 77z076, and within V7.6 with the application of zap 76z412.&lt;br /&gt;
&lt;br /&gt;
===Assignment of enumeration values to method variables===&lt;br /&gt;
Enumerations values can now be assigned to method variables whose result is an enumeration. So, for example, the following code:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;   begin                                               &lt;br /&gt;
   enumeration colour                                  &lt;br /&gt;
      public                                           &lt;br /&gt;
         value red                                     &lt;br /&gt;
         value white                                   &lt;br /&gt;
         value blue                                    &lt;br /&gt;
      end public                                       &lt;br /&gt;
   end enumeration                                     &lt;br /&gt;
   %func    is function getColour is enumeration colour&lt;br /&gt;
   local function getColour is enumeration colour      &lt;br /&gt;
      return blue                                      &lt;br /&gt;
   end function                                        &lt;br /&gt;
   %func    = getColour                                &lt;br /&gt;
   %func    = (colour):red                             &lt;br /&gt;
   printText {~=%(Local):(%func)}                      &lt;br /&gt;
   end  &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
will produce this result:&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt; %(Local):(%func)=red &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
whereas previously this line:   &lt;br /&gt;
&lt;br /&gt;
  &amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt; %func    = (colour):red &amp;lt;/p&amp;gt;   &lt;br /&gt;
&lt;br /&gt;
would have been rejected with this message:&lt;br /&gt;
&lt;br /&gt;
   &amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;MSIR.0993: Assignment invalid: mismatch between method and method variable &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This change is enabled in V7.7 with the application of zap 77z128.&lt;br /&gt;
&lt;br /&gt;
===Optional output method parameters===&lt;br /&gt;
Prior to this release output parameters could not be optional or have default values. In this release output parameters can be specified as &amp;lt;var&amp;gt;Optional&amp;lt;/var&amp;gt;, and a default value can be specified with &amp;lt;var&amp;gt;Default&amp;lt;/var&amp;gt;. One related change is that if a &amp;lt;var&amp;gt;Len&amp;lt;/var&amp;gt; value is specified with &amp;lt;var&amp;gt;Optional&amp;lt;/var&amp;gt; or &amp;lt;var&amp;gt;Default&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;Output&amp;lt;/var&amp;gt;, it indicates the length of the hidden target for the output parameter if none was passed. For all other &amp;lt;var&amp;gt;Output&amp;lt;/var&amp;gt; parameters, &amp;lt;var&amp;gt;Len&amp;lt;/var&amp;gt; is meaningless, just as it was before Model 204 V7.8. The following is an example of the use of an optional output parameter:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;function getRemote( -&lt;br /&gt;
   %target is string len 32, %errorReason is string len 80 optional output -&lt;br /&gt;
) is float&lt;br /&gt;
  ...&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
In this example, if &amp;lt;code&amp;gt;%errorReason&amp;lt;/code&amp;gt; is not specified in a call and then set to a value longer than 80 bytes it wil be truncated to 80 bytes. However, if a string of a different length is passed, the length of that string determines truncation behavior.&lt;br /&gt;
&lt;br /&gt;
==External Call Facility enhancements==&lt;br /&gt;
===Managing ECF tables more efficiently===&lt;br /&gt;
The are two new features to help manage ECF tables more efficiently, avoid conditions where the table can fill, and prevent the definition of further entities.&lt;br /&gt;
&lt;br /&gt;
The first feature is the new &amp;lt;var&amp;gt;DISPLAY ECF&amp;lt;/var&amp;gt; command, which displays the contents of ECF tables and also the current status of users accessing ECF modules. See more details of the &amp;lt;var&amp;gt;[[#DISPLAY ECF|DISPLAY ECF]]&amp;lt;/var&amp;gt; command below.&lt;br /&gt;
&lt;br /&gt;
The second feature is a new &amp;lt;var&amp;gt;EXTERNAL REMOVE&amp;lt;/var&amp;gt; statement with the following syntax:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;EXTERNAL REMOVE &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;modulename&amp;lt;/span&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This statement causes the entry for the named module to be removed from the module table. The table entry is then placed on a free chain of entries and can be reused by issuing the &amp;lt;var&amp;gt;EXTERNAL MODULE&amp;lt;/var&amp;gt; statement. This allows the module table to be managed with redundant entries removed, without having to recycle the ONLINE.&lt;br /&gt;
&lt;br /&gt;
An &amp;lt;var&amp;gt;EXTERNAL REMOVE&amp;lt;/var&amp;gt; statement will return &amp;lt;code&amp;gt;$status/$statusd&amp;lt;/code&amp;gt; values of &amp;lt;code&amp;gt;0/0&amp;lt;/code&amp;gt;, and most other status values that can be returned by the &amp;lt;var&amp;gt;EXTERNAL REMOVE&amp;lt;/var&amp;gt; statement are already documented in the ECF return codes table. If an &amp;lt;var&amp;gt;EXTERNAL REMOVE&amp;lt;/var&amp;gt; is attempted against a module that is currently being called (in use), then &amp;lt;code&amp;gt;$status/$statusd&amp;lt;/code&amp;gt; will return the values &amp;lt;code&amp;gt;20/1&amp;lt;/code&amp;gt; (module unavailable).&lt;br /&gt;
&lt;br /&gt;
==System enhancements==&lt;br /&gt;
&lt;br /&gt;
===New wait types for daemon/master waits===&lt;br /&gt;
&lt;br /&gt;
Two new wait types, viewable on the &amp;lt;var&amp;gt;[[MONITOR_command|MONITOR]] USERS&amp;lt;/var&amp;gt; command output, have been implemented as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;57&amp;lt;/code&amp;gt; - Means a daemon thread waiting for its master thread  &amp;lt;br /&amp;gt;     &lt;br /&gt;
&amp;lt;code&amp;gt;58&amp;lt;/code&amp;gt; - Means a master thread waiting for one of its daemon threads&lt;br /&gt;
&lt;br /&gt;
This change is enabled in V7.7 with the application of zap 77z410.&lt;br /&gt;
&lt;br /&gt;
===Snap formatting changes===&lt;br /&gt;
Date/time stamps in the page headers of snaps will now be shown in normal format, rather than in julian format as in previous versions. So in the following example, a particular snap header under v7.7 or previous versions would show as: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;SNAPID    1   19226.060155  M204.0022: Bug .. nnnnn               PAGE     1 &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
whereas the same snap header under v7.8 would show as: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;SNAPID    1  2019/08/14 06:01:06   M204.0022: Bug .. nnnnn        PAGE     1 &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Also, due to improvements in handling trailing blanks in snap output, a snap generated under v7.8 should be marginally smaller than the same snap generated under previous versions, assuming the same SNAPCTL settings.&lt;br /&gt;
&lt;br /&gt;
===Call stack trace for problem diagnosis===&lt;br /&gt;
A  call stack trace is now provided to help diagnose and resolve common errors. To enable the stack trace, do either of the following: &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Set the &amp;lt;var&amp;gt;[[SIRFACT parameter|SIRFACT]] X&#039;01&#039;&amp;lt;/var&amp;gt; bit.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Set the &amp;lt;var&amp;gt;[[DEBUGUL parameter|DEBUGL]]&amp;lt;/var&amp;gt; parameter. Note that the &amp;lt;var&amp;gt;DEBUGUL&amp;lt;/var&amp;gt; approach will introduce extra QTBL overhead. &amp;lt;p&amp;gt;(&amp;lt;var&amp;gt;DEBUGUL&amp;lt;/var&amp;gt; provides a similar facility with an include trace of procedures leading to the error, but this might not be potentially as useful as the call trace.)&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt; &lt;br /&gt;
&lt;br /&gt;
The call stack trace can assist in diagnosing run-time errors that might occur, as illustrated by the following &amp;quot;Variable too small for result&amp;quot; and &amp;quot;MBSCAN exceeded&amp;quot; examples.&lt;br /&gt;
&lt;br /&gt;
====Variable too small for result====&lt;br /&gt;
When the stack trace is enabled, a &amp;quot;variable too small&amp;quot; error results in the following message:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;M204.2966: Error at line n, procedure &#039;&#039;procname&#039;&#039; in file &#039;&#039;procfile&#039;&#039;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
which identifies the line within a procedure where the error is occurring, in addition to the usual message:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;M204.0552: Variable too small for result&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Any subsequent M204.2966 messages indicate the point in the code from where the code in error was called. For example, a stack of three subroutine calls leading to a &amp;quot;variable too small&amp;quot; error might result in the following messaging:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;   M204.0552: Variable too small for result                             &lt;br /&gt;
   M204.2966: Error at line 9, procedure MYPROC.LEVEL4 in file MYPROC   &lt;br /&gt;
   M204.2966: Called from line 5, procedure MYPROC.LEVEL3 in file MYPROC&lt;br /&gt;
   M204.2966: Called from line 5, procedure MYPROC.LEVEL2 in file MYPROC&lt;br /&gt;
   M204.2966: Called from line 5, procedure MYPROC.LEVEL1 in file MYPROC &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This information should help in diagnosing the problem. &lt;br /&gt;
&lt;br /&gt;
If the error occurs within a command level program rather than a procedure, then the M204.2966 message is replaced by an M204.2967 message, and a similar error condition to the above with a preceding call stack might be audited as follows:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;   M204.0552: Variable too small for result              &lt;br /&gt;
   M204.2967: Error at line 14 of command level program  &lt;br /&gt;
   M204.2967: Called from line 5 of command level program&lt;br /&gt;
   M204.2967: Called from line 3 of command level program &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If neither &amp;lt;var&amp;gt;SIRFACT X&#039;01&#039;&amp;lt;/var&amp;gt; nor &amp;lt;var&amp;gt;DEBUGUL&amp;lt;/var&amp;gt; is set, then the &amp;quot;variable too small&amp;quot; error produces the following messages:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;   M204.0552: Variable too small for result &lt;br /&gt;
   M204.2968: Error: no debug info &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====MBSCAN exceeded====&lt;br /&gt;
Similarly to the handling of the &amp;quot;variable too small for result&amp;quot; error, the call stack can also be used to diagnose errors where the value of &amp;lt;var&amp;gt;[[MBSCAN parameter|MBSCAN]]&amp;lt;/var&amp;gt; is exceeded as a result of a direct search of Table B records. &lt;br /&gt;
&amp;lt;p&amp;gt;Again, under V7.8, with either the &amp;lt;var&amp;gt;SIRFACT X&#039;01&#039;&amp;lt;/var&amp;gt; bit set or &amp;lt;var&amp;gt;DEBUGUL&amp;lt;/var&amp;gt; set, if a long request occurs as a result of exceeding &amp;lt;var&amp;gt;MBSCAN&amp;lt;/var&amp;gt;, then initially the following message is produced, as before:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;M204.0569: File &#039;&#039;filename&#039;&#039;, Find: Table B records to be searched = &#039;&#039;nnnn&#039;&#039;&amp;lt;/p&amp;gt;&lt;br /&gt;
followed by a DYRWT prompt message. If the user replies &#039;N&#039; to the prompt, or if the request is run in an environment (such as a batch job) where the default response is &#039;N&#039;, the following message is produced after the M204.0569 message:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;Cancelling request: M204.2969: MBSCAN (&#039;&#039;mm&#039;&#039;) exceeded, records to be searched = &#039;&#039;nnnn&#039;&#039;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
where &#039;&#039;mm&#039;&#039; is the current setting of &amp;lt;var&amp;gt;MBSCAN&amp;lt;/var&amp;gt;. The M204.2969 message is followed by M204.2966 messages displaying the call stack trace. Thus, if the following code is run from procedure MYPROC.MBSCAN against the demo database, with an &amp;lt;var&amp;gt;MBSCAN&amp;lt;/var&amp;gt; setting of 10:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;   b                           &lt;br /&gt;
   call sub1                   &lt;br /&gt;
   sub1: subroutine            &lt;br /&gt;
   fd1:                        &lt;br /&gt;
      in clients fd city = ONTARIO&lt;br /&gt;
              end find         &lt;br /&gt;
      fr fd1                      &lt;br /&gt;
         pai                      &lt;br /&gt;
         print                    &lt;br /&gt;
      end for                     &lt;br /&gt;
   end subroutine              &lt;br /&gt;
   end &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
then the following messages are produced, assuming any prompts are responded to with an &#039;N&#039;:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;   M204.0569: File CLIENTS, Find: Table B records to be searched = 3415&lt;br /&gt;
   Cancelling request: M204.2969: MBSCAN (10) exceeded, records to be searched = 3415  &lt;br /&gt;
   M204.2966: Error at line 6, procedure MYPROC.MBSCAN in file MYPROC&lt;br /&gt;
   M204.2966: Called from line 3, procedure MYPROC.MBSCAN in file MYPROC  &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===appendJournalData===&lt;br /&gt;
The &amp;lt;var&amp;gt;[[AppendJournalData_(Stringlist_function)|AppendJournalData]]&amp;lt;/var&amp;gt; function is now more tolerant of an outstanding BUMP request. Previously, if &amp;lt;var&amp;gt;AppendJournalData&amp;lt;/var&amp;gt; was called to inadvertently retrieve a large amount of journal data, typically when called implicitly from within SirScan, then any outstanding BUMP request wouldn&#039;t be honored until all of the data had been retrieved, at which point the BUMP request would be completed, and all data would be lost.&lt;br /&gt;
&lt;br /&gt;
Now, the &amp;lt;var&amp;gt;AppendJournalData&amp;lt;/var&amp;gt; process checks for outstanding BUMP requests before each track I/O is executed, thus avoiding excessive I/Os against the journal and long waits for the BUMP of such a process to complete.&lt;br /&gt;
&lt;br /&gt;
==AUDIT204 enhancements==&lt;br /&gt;
===FORMAT command===&lt;br /&gt;
TIMEHH is a new parameter used with the FORMAT command of the [[Tracking_system_activity_(CCAJRNL,_CCAAUDIT,_CCAJLOG)#AUDIT204_utility|AUDIT204]] utility.  It indicates that timestamps, printed at the beginning of each line of output, should include hundredths of a second. Requires no other arguments.&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;b&amp;gt;NOTE:&amp;lt;/b&amp;gt; This parameter and the 78 version (or later) of AUDIT204 may be used against a 77 (or later) CCAJRNL.&amp;lt;/p&amp;gt;&lt;br /&gt;
For example:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;//CCAIN DD *&lt;br /&gt;
FORMAT YEARFORM 4&lt;br /&gt;
TIMEHH&lt;br /&gt;
TYPE ER MS LI&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Recovery enhancements==&lt;br /&gt;
===Media Recovery in a multi-user environment===&lt;br /&gt;
It is now possible to perform media recovery by issuing the &amp;lt;var&amp;gt;REGENERATE&amp;lt;/var&amp;gt; command to roll forward selected files in a multi-user environment, with the media recovery being carried out by different users with system manager privileges. The new USING option allows for the specification of a ddname for the input journal stream to be used by the &amp;lt;var&amp;gt;REGENERATE&amp;lt;/var&amp;gt; command. Previously media recovery was restricted to single user batch jobs, using the CCAGEN ddname for the input journal. For more details, see the &amp;lt;var&amp;gt;[[#REGENERATE|REGENERATE]]&amp;lt;/var&amp;gt; command below.&lt;br /&gt;
&lt;br /&gt;
==Security enhancements==&lt;br /&gt;
===CA-Top Secret can disallow CCASTAT logins===&lt;br /&gt;
The [[CA-Top_Secret_interface|CA-Top Secret]] interface now recognizes the &amp;lt;code&amp;gt;DEFACID=&amp;lt;/code&amp;gt;, setting and does not allow CCASTAT logins in the online if &amp;lt;code&amp;gt;DEFACID&amp;lt;/code&amp;gt; is set to null. (There is no attempt to log on M204USR.) Therefore, to disallow CCASTAT logons, set DEFACID=, in [[CA-Top_Secret_interface#Preparing_a_TOPSPARM_parameter_module_with_TOPSGEN|TOPSPARM]]. CCASTAT will be opened because it contains file and group passwords, but it will not be used for logons if CCASTAT logons are not allowed.&lt;br /&gt;
&lt;br /&gt;
===CUSTOM=11 and mixed cased input===&lt;br /&gt;
The &amp;lt;var&amp;gt;[[CUSTOM_parameter|CUSTOM]]&amp;lt;/var&amp;gt; parameter &amp;lt;var&amp;gt;CUSTOM=11&amp;lt;/var&amp;gt; setting no longer requires that a &amp;lt;var&amp;gt;*LOWER&amp;lt;/var&amp;gt; command be issued prior to a &amp;lt;var&amp;gt;LOGCTL&amp;lt;/var&amp;gt; command (to add or change a  password) to preserve mixed case input. Prior to this release, with &amp;lt;var&amp;gt;CUSTOM=11&amp;lt;/var&amp;gt; in place, *LOWER had to be issued before a &amp;lt;var&amp;gt;LOGCTL&amp;lt;/var&amp;gt; command, otherwise any mixed case password strings would automatically be translated into uppercase. This change is enabled in V7.7 with the application of zap 77z108.&lt;br /&gt;
&lt;br /&gt;
===DEFUSER can specify a jobname not authorized to access M204===&lt;br /&gt;
When specifying DEFUSER=JOBNAME and VALIDAT=LOGON in the RACFGEN parms for an ONLINE, if the specified jobname (the owning id for the ONLINE job) isn&#039;t authorized to use Model 204 via RACF, any LOGIN commands specifying no userid will now succeed (previously such a LOGON would have failed). This enables users to submit jobs with USE $JOB, whereby the string USER=jobname will be added to the submitted JCL. This in turn is useful if the specified jobname has dataset access privileges to datasets required by the submitted jobs, even if the jobname itself isn&#039;t authorized to use M204.&lt;br /&gt;
&lt;br /&gt;
==Janus product enhancements==&lt;br /&gt;
&lt;br /&gt;
===Web Sockets===&lt;br /&gt;
Web Sockets are now supported in Janus Web Server.&lt;br /&gt;
&lt;br /&gt;
The Web Socket protocol provides various advantages over the HTTP protocol:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Web Sockets allow full-duplex communication.&amp;lt;/li&amp;gt; &lt;br /&gt;
&amp;lt;li&amp;gt;Efficient framing of payload data uses minimal overhead.&amp;lt;/li&amp;gt;  &lt;br /&gt;
&amp;lt;li&amp;gt;The Web Socket protocol is end-user extensible.&amp;lt;/li&amp;gt;  &lt;br /&gt;
&amp;lt;li&amp;gt;Most importantly, Web Sockets can be deployed completely within an existing HTTP/HTTPS framework.&amp;lt;/li&amp;gt; &lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To implement Web Sockets, you must enable the Janus Web port for Web Socket upgrades with the new &amp;lt;var&amp;gt;WEBSOCKET&amp;lt;/var&amp;gt; parameter. The WEBSOCKET option can be specified on either the port definition or the JANUS WEB rule for the URL. &lt;br /&gt;
Likewise, an individual Janus Web rule can either allow or disallow Web Socket connections with the &amp;lt;var&amp;gt;WEBSOCKET&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;NOWEBSOCKET&amp;lt;/var&amp;gt; parameters, respectively. &lt;br /&gt;
&lt;br /&gt;
For details on implementing Web Sockets, see the [[WebSocket_(Socket_function)|WebSocket]] wiki page.&lt;br /&gt;
&lt;br /&gt;
===Janus Web Server access rule===&lt;br /&gt;
The automatic &amp;lt;var&amp;gt;[[JANUS WEB ALLOW]]&amp;lt;/var&amp;gt; rule, which allowed any user to access the port without requiring a login, is changed &amp;lt;i&amp;gt;for non-SSL ports&amp;lt;/i&amp;gt; to the following:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;JANUS WEB &amp;lt;i&amp;gt;portname&amp;lt;/i&amp;gt; DISALLOW *&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
This rule requires a system administrator to explicitly define &amp;lt;var&amp;gt;ALLOW&amp;lt;/var&amp;gt; rules to enable users to access non-SSL ports.&lt;br /&gt;
The rule applies unless overridden by user-added rules. &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;blockquote class=&amp;quot;note&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;b&amp;gt;Note:&amp;lt;/b&amp;gt; To revert from this change in the JANUS DEFINE default and make the default &lt;br /&gt;
 non-SSL &amp;lt;var&amp;gt;ALLOW&amp;lt;/var&amp;gt; rule as it was in version 7.5 and earlier (&amp;lt;code&amp;gt;ALLOW *&amp;lt;/code&amp;gt;), turn on the 1 bit of the &amp;lt;var&amp;gt;[[WEBDFLT parameter|WEBDFLT]]&amp;lt;/var&amp;gt; parameter: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;RESET WEBDFLT=1&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Increase in pending accepts for Janus BPX ports===&lt;br /&gt;
The default number of pending accepts for Janus BPX server ports has been increased from 3 to 12, thus reducing the likelihood that a pending accept may fail with the message&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;MSIR.0019 Connection request rejected for port (port), MAXCON exceeded&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The actual number of pending accepts to be supported on the port can be set with the new parameter MAXPEND, set on the &amp;lt;var&amp;gt;[[JANUS_DEFINE|JANUS DEFINE]]&amp;lt;/var&amp;gt; command, where MAXPEND can vary from 3 up to a maximum value of 32. The change to the default value is enabled in V7.7 with the application of zap 77z269.&lt;br /&gt;
&lt;br /&gt;
===TCP listen backlog increased===&lt;br /&gt;
&lt;br /&gt;
The [[Program_Communication_facilities#LISTEN_call|TCP listen]] backlog has been increased from 16 to 1024 under z/OS.&lt;br /&gt;
&lt;br /&gt;
This update tells the TCP stack to queue up a maximum of 1024 such requests before dropping any. This increased backlog reduces, or in most cases eliminates, the likelihood of a connection request drop, other than in exceptional circumstances, such as a denial of service attack. This change is enabled in V7.7 with the application of zap 77z340.&lt;br /&gt;
&lt;br /&gt;
===Defer the freeing of XMLSCREEN input XML===&lt;br /&gt;
&lt;br /&gt;
The freeing of &amp;lt;var&amp;gt;[[XMLSCREEN_and_NOXMLSCREEN_(JANUS_DEFINE_parameters)|XMLSCREEN]]&amp;lt;/var&amp;gt; input XML is now deferred until the next Read Screen or session termination. This means that if an application error is detected, the input XML can be retrieved with [[$Web_Input_Content|$Web_Input_Content]] and then logged for problem analysis. &lt;br /&gt;
&lt;br /&gt;
Prior to this release the XML received from the client was freed immediately after being used to set the input data for a Read Screen, rendering it unavailable for problem determination.&lt;br /&gt;
&lt;br /&gt;
This change is enabled in V7.7 with the application of zap 77z368.&lt;br /&gt;
&lt;br /&gt;
===XMLSCREEN and Janus Web Legacy blank stripping===&lt;br /&gt;
&lt;br /&gt;
xmlScreens and Janus Web Legacy screens now adhere to the same standard as standard screen processing in terms of stripping leading blanks from input fields defined as [[Full-screen_feature#DEBLANK_or_NODEBLANK_option|DEBLANK]] (either explicitly or implicitly).&lt;br /&gt;
&lt;br /&gt;
This change is enabled in V7.7 with the application of zap 77z400.&lt;br /&gt;
&lt;br /&gt;
===SSL input buffer size===&lt;br /&gt;
&lt;br /&gt;
The default value of &amp;lt;var&amp;gt;[[SSLIBSIZE_(JANUS_DEFINE_parameter)|SSLIBSIZE]]&amp;lt;/var&amp;gt; has been increased to 16384 + 128, or 16512. This size should ensure correct communication with all TLS spec compliant applications. It is the maximum size allowed unless you use &amp;lt;var&amp;gt;[[CUSTOM_parameter#Using_CUSTOM.3D.2818.29|CUSTOM=18]]&amp;lt;/var&amp;gt;.    &lt;br /&gt;
&lt;br /&gt;
This change is enabled in V7.7 with the application of zap 77z415.&lt;br /&gt;
&lt;br /&gt;
===Increasing LDAP buffers===&lt;br /&gt;
&lt;br /&gt;
The number of LDAP buffers allocated at startup can now be changed by setting the &amp;lt;var&amp;gt;NLDAPBUF&amp;lt;/var&amp;gt; parameter in CCAIN. See below for details on &amp;lt;var&amp;gt;[[#NLDAPBUF|NLDAPBUF]]&amp;lt;/var&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Increase URL length returned with $web_form_action===&lt;br /&gt;
With this release the maximum Janus Web Server incoming URL that can be handled by &amp;lt;var&amp;gt;$web_form_action&amp;lt;/var&amp;gt; is increased from 512 bytes to 1024 bytes. This change is enabled in V7.7 with the application of zap 77z424.&lt;br /&gt;
&lt;br /&gt;
===Maximum RBSIZE setting increased===&lt;br /&gt;
The maximum value for RBSIZE, set on the &amp;lt;var&amp;gt;[[JANUS DEFINE|JANUS DEFINE]]&amp;lt;/var&amp;gt; command, is now increased to 16777215 (previously the maximum was 65534). RBSIZE specifies the RPC or Request Buffer size.  On a Web port, the Janus request buffer holds browser request information such as header data, cookies, and form data. On other port types, it holds RPC input and output parameters. This change is enabled in V7.7 with the application of zap 77z427.&lt;br /&gt;
&lt;br /&gt;
==Debugger enhancements==&lt;br /&gt;
These enhancements apply to the Janus and TN3270 debuggers. &lt;br /&gt;
&lt;br /&gt;
===Access to exposed variables===&lt;br /&gt;
The debuggers can now view or watch the values of variables exposed to local routines/methods. Previously, any attempts to access an exposed variable would have displayed &amp;quot;%varname has no value&amp;quot; in the debugger session. This feature is enabled in V7.7 with the application of zap 77z363.&lt;br /&gt;
&lt;br /&gt;
===Subroutine or method display===&lt;br /&gt;
When execution pauses for a break point or runtime error, the subroutine or method being executed is indicated in the status area.  In addition, the source code line information available by right-clicking on a source line now also indicates the subroutine or method.&lt;br /&gt;
&lt;br /&gt;
==Performance enhancements==&lt;br /&gt;
&lt;br /&gt;
===MP/204 offload improvements===&lt;br /&gt;
Application code issuing the following SOUL statements will now now be fully offloadable:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;File Records In/On&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Remember&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt; &lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Position&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Sort Values&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;                                             &lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Reset Header/Trailer&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Find and Print Count&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Find All Values&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;For Each Value&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
The above improvements are enabled in V7.7 with the application of zaps 77z419 and 77z420.&lt;br /&gt;
&lt;br /&gt;
===X3270OUT exit offloadable===&lt;br /&gt;
When running MP/204 (AMPSUBS&amp;gt;0) and using the [[Coding_SNA_Communications_Server_conversion_exit_routines#X3270OUT_.28convert_output_from_3270_format.29|X3270OUT]] exit to convert a 3270 output data stream to the appropriate device protocol, the exit can now run in parallel mode to improve performance. This change is enabled in V7.7 with the application of zap 77z313.&lt;br /&gt;
&lt;br /&gt;
The X3270OUT exit must be written to be re-entrant.&lt;br /&gt;
&lt;br /&gt;
==New and changed commands==&lt;br /&gt;
===DISPLAY ECF===&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;DISPLAY ECF {{ M | N | U } like ?} &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This new command displays details from ECF tables, or the current status of users accessing ECF modules.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;D ECF M&amp;lt;/code&amp;gt; displays the contents of the module table. For example:&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;    D ECF M &lt;br /&gt;
    Module   Loadlib  Address:Length     Loaded@      Lastused@   #Calls  Flags &lt;br /&gt;
    QATUM13C PROGLIB 2FB91FB8:00000028 19023:121506 19023:121506 00000001 &lt;br /&gt;
    QATUM13B PROGLIB 2FE65000:00009C18 19023:121506 19023:121506 00000001 &lt;br /&gt;
    QATUM13A PROGLIB 2FE6EC18:00001CD8 19023:121506 19023:121506 00000001  &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
(flags may be D=deleted; S=shared; H=halted; I=Idle)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;D ECF N&amp;lt;/code&amp;gt; displays contents of the name table. For example: &amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;    D ECF N&lt;br /&gt;
    Module   Logical-call-name &lt;br /&gt;
    QATUM13C MOD_QATUM13C &lt;br /&gt;
    QATUM13B MOD_QATUM13B &lt;br /&gt;
    QATUM13A MOD_QATUM13A &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;D ECF U&amp;lt;/code&amp;gt; displays details of users currently accessing ECF modules. This is also the default option, and so &amp;lt;code&amp;gt;D ECF&amp;lt;/code&amp;gt; will display the same output as &amp;lt;code&amp;gt;D ECF U&amp;lt;/code&amp;gt;. For example:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;    D ECF U                           &lt;br /&gt;
    User# Userid     Module   Parmlen &lt;br /&gt;
    00002 ADMIN      --none--         &lt;br /&gt;
    00003 ADMIN      COBSAMP1 00000002&lt;br /&gt;
    00004 ADMIN      COBSAMP1 00000002 &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;D ECF &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;function&amp;lt;/var&amp;gt; LIKE &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;?&amp;lt;/var&amp;gt; &amp;lt;/code&amp;gt; (where &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;?&amp;lt;/var&amp;gt; is a valid pattern) displays details for entities that match the specified pattern. The function is either M (modules), N (names), or U (users), and it defaults to U. So for example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;D ECF U L A&amp;lt;/p&amp;gt;&lt;br /&gt;
or&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;D ECF U L A*&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
displays details of ECF users whose names begin with A.&lt;br /&gt;
&lt;br /&gt;
===REGENERATE===&lt;br /&gt;
The &amp;lt;var&amp;gt;[[REGENERATE command|REGENERATE]]&amp;lt;/var&amp;gt; command can now be run in a multi-user environment by multiple users with system manager privileges. A new option USING is provided to specify the ddname of the input journal, so that the full syntax is now as follows:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;  REGENERATE [USING ddname] FILE filename [FROM dumpname | IGNORE]&lt;br /&gt;
  [TO {LAST UPDATE [BEFORE yy.ddd hh:mm:ss.th] | LAST CHECKPOINT [BEFORE yy.dd hh:mm:ss.th] &lt;br /&gt;
  | UPDATE number OF yy.ddd hh:mm:ss.th | CHECKPOINT yy.ddd hh:mm:ss.th} ]&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The default for the using ddname is CCAGEN, but any ddname may be used to allocate an input journal and used. For example:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;  ALLOCATE REGEN1 WITH SCOPE=SYSTEM DSN=PROD1.GDGJ OLD SEQUENTIAL GEN=+2&lt;br /&gt;
  REGENERATE USING REGEN1 FILE TEST&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It is the user&#039;s responsibility to ensure that the file being regenerated is not in use, and so prior to usage, &amp;lt;var&amp;gt;BUMP FILE&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;STOP FILE&amp;lt;/var&amp;gt; should be used to isolate usage against the file. If the file is in use, the REGEN will fail with these messages:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;  M204.1430: Failed to open file TEST&lt;br /&gt;
  M204.1436: Stopped processing file TEST  &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
$STATUS will now be set for &amp;lt;var&amp;gt;REGENERATE&amp;lt;/var&amp;gt; with the following values:&lt;br /&gt;
&amp;lt;blockquote&amp;gt;    &lt;br /&gt;
    0 - Success &amp;lt;br/&amp;gt;&lt;br /&gt;
    1 - No files were processed &amp;lt;br/&amp;gt;&lt;br /&gt;
    2 - At least one file stopped processing &amp;lt;br/&amp;gt;&lt;br /&gt;
    4 - A serious error occurred, REGEN failed &lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Similarly, &amp;lt;var&amp;gt;[[SETGRC command|SETGRC]]&amp;lt;/var&amp;gt; may be used to get the return code and error message.&lt;br /&gt;
&lt;br /&gt;
==New and changed parameters==&lt;br /&gt;
&lt;br /&gt;
===ECMODS===&lt;br /&gt;
The new minimum value for ECMODS, the allowable number of ECF modules, is 1. Prior to V7.8 the minimum value was 0. This change is enabled in V7.7 with the application of zap 77z306.&lt;br /&gt;
&lt;br /&gt;
===ECNAMES===&lt;br /&gt;
The new minimum value for ECNAMES, the allowable number of ECF module names, is 1. Prior to V7.8 the minimum value was 0. This change is enabled in V7.7 with the application of zap 77z306.&lt;br /&gt;
&lt;br /&gt;
===ECPSIZE===&lt;br /&gt;
The new minimum value for ECPSIZE, the initial storage allocation for ECF parameters, is 1024. Prior to V7.8 the minimum value was 0. This change is enabled in V7.7 with the application of zap 77z306.&lt;br /&gt;
&lt;br /&gt;
===ENQTIME===&lt;br /&gt;
Millisecond duration of automatic record locking retry wait.&lt;br /&gt;
&lt;br /&gt;
Prior to this change, if record locking conflicts occur frequently in a busy online, any user with a non-zero value for &amp;lt;var&amp;gt;[[ENQRETRY parameter|ENQRETRY]]&amp;lt;/var&amp;gt; will wait at least 3 seconds before the conflict is dealt with. This can degrade overall system performance.      &lt;br /&gt;
                                                         &lt;br /&gt;
The &amp;lt;var&amp;gt;[[ENQTIME parameter|ENQTIME]]&amp;lt;/var&amp;gt; parameter specifies the number of milliseconds waited for each record locking retry wait. ENQTIME can be between 1 and 60000, corresponding to a minimum of 1 millisecond and a maximum of 1 minute. The default value of ENQTIME is 3000 (3 seconds).            &lt;br /&gt;
                                                         &lt;br /&gt;
For example, with ENQTIME = 100 and ENQRETRY = 7, after a record locking conflict occurs the thread will retry 7 times with wait intervals of .1 seconds, and so within at most .7 seconds either the lock becomes available or the conflict triggers an On unit or cancels the request.     &lt;br /&gt;
                                                         &lt;br /&gt;
The ENQTIME parameter may also be reset with $ResetN. &lt;br /&gt;
&lt;br /&gt;
This new parameter is enabled in V7.7 with the application of zap 77z299.&lt;br /&gt;
&lt;br /&gt;
===EVALOPT===&lt;br /&gt;
The new &amp;lt;var&amp;gt;EVALOPT&amp;lt;/var&amp;gt; parameter controls the cancellation of a request on truncation of string data. The default value is 0, and currently there is just one setting, 1, which means &amp;quot;cancel a request if truncation of string data occurs.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
For example, with the default of 0 in place, the following code &amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;    %x is string len 1   &lt;br /&gt;
    %y is string len 2   &lt;br /&gt;
    %y = &#039;ab&#039;            &lt;br /&gt;
    %x = %y              &lt;br /&gt;
    printtext {~} = {%x} &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
would cause silent truncation, and give the result&lt;br /&gt;
    &amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;%x = a &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If &amp;lt;var&amp;gt;EVALOPT&amp;lt;/var&amp;gt; is set to 1, then the above code produces the following message:&lt;br /&gt;
    &amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;M204.0552: Variable too small for result &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and the request is cancelled.&lt;br /&gt;
&lt;br /&gt;
===LFSCB===&lt;br /&gt;
LFSCB, the length of the full screen buffer, now has a new minimum value of 8 (the previous minimum was 0). This change is enabled in v7.7 with the application of zap 77z042, and within V7.6 with the application of zap 76z393.&lt;br /&gt;
&lt;br /&gt;
===MAXPRE, MAXBOUT, MAXSUBT===&lt;br /&gt;
&amp;lt;p&amp;gt;Introduced in zap 77z257.&amp;lt;/p&amp;gt;&lt;br /&gt;
The new &amp;lt;var&amp;gt;MAXPRE&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;MAXBOUT&amp;lt;/var&amp;gt;, and &amp;lt;var&amp;gt;MAXSUBT&amp;lt;/var&amp;gt; parameters can be used to cancel a runaway transaction and prevent it from filling the checkpoint data set. &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;MAXPRE&amp;lt;/var&amp;gt;:  Maximum number of pre-images per transaction.  &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;MAXBOUT&amp;lt;/var&amp;gt;: Maximum number of backout pages per transaction. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;MAXSUBT&amp;lt;/var&amp;gt;: Maximum number of subtransaction checkpoints that a transaction can span.&amp;lt;/li&amp;gt;&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;Each new parameter defaults to unlimited. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;If a parameter value is set, a transaction is cancelled if that value is exceeded, and the following message is displayed:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;M204.0524: Maximum number (&amp;lt;i&amp;gt;num&amp;lt;/i&amp;gt;) of &amp;lt;i&amp;gt;parameter&amp;lt;/i&amp;gt; exceeded.&amp;lt;/p&amp;gt;&lt;br /&gt;
where &amp;lt;i&amp;gt;num&amp;lt;/i&amp;gt; is the value set for &amp;lt;i&amp;gt;parameter&amp;lt;/i&amp;gt; (&amp;lt;var&amp;gt;MAXPRE&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;MAXBOUT&amp;lt;/var&amp;gt;, or &amp;lt;var&amp;gt;MAXSUBT&amp;lt;/var&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
===NLDAPBUF===&lt;br /&gt;
This new parameter allows the number of LDAP buffers allocated during startup to be set in CCAIN. The default value is 2, and the settable value can range from 0 to 65535.&lt;br /&gt;
&lt;br /&gt;
===PUPDTH (new minimum value)===&lt;br /&gt;
If a user sets the &amp;lt;var&amp;gt;[[PUPDTH parameter|PUPDTH]]&amp;lt;/var&amp;gt; parameter to 0, it will now automatically be increased to 1, its minimum value.&lt;br /&gt;
&lt;br /&gt;
===SERV4G===&lt;br /&gt;
This parameter allows testing of server tables that span a 4-gigabyte boundary. For example, if &amp;lt;var&amp;gt;SERV4G&amp;lt;/var&amp;gt; is &amp;lt;code&amp;gt;X&#039;FFFFF000&#039;&amp;lt;/code&amp;gt;, each ATB server will begin at &amp;lt;code&amp;gt;XX_FFFFF000&amp;lt;/code&amp;gt;. If SERV4G is &amp;lt;code&amp;gt;X&#039;FFFF0000&#039;&amp;lt;/code&amp;gt;, each ATB server will begin at &amp;lt;code&amp;gt;XX_FFFF0000&amp;lt;/code&amp;gt;. &amp;lt;code&amp;gt;XX&amp;lt;/code&amp;gt; is determined by the storage available on the system. The parameter is set in CCAIN.&lt;br /&gt;
&lt;br /&gt;
The contents of the ATB server are specified by using the &amp;lt;var&amp;gt;[[SERVGA parameter|SERVGA]]&amp;lt;/var&amp;gt; parameter.&lt;br /&gt;
&lt;br /&gt;
For example, if you want VTBL to span the 4G boundary, you can use these settings: &amp;lt;code&amp;gt;SERV4G=X&#039;FFFFF000&#039;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;SERVGA=X&#039;00040000&#039;&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;LVTBL=200 (6400 bytes, X&#039;1900&#039;)&amp;lt;/code&amp;gt;. This will force each server&#039;s VTBL to begin at &amp;lt;code&amp;gt;XX_FFFFF000&amp;lt;/code&amp;gt; and end at &amp;lt;code&amp;gt;XX+1_00000900&amp;lt;/code&amp;gt;.&lt;br /&gt;
===SIRTERM===&lt;br /&gt;
The &amp;lt;var&amp;gt;[[SIRTERM parameter|SIRTERM]]&amp;lt;/var&amp;gt; (Sirius terminal options) parameter settings have changed. &lt;br /&gt;
The changes to &amp;lt;var&amp;gt;SIRTERM&amp;lt;/var&amp;gt; allow a user to preclude a reset to a Model that is not supported by the terminal emulator in use.&lt;br /&gt;
&lt;br /&gt;
The X&#039;01&#039; setting (MODEL 6 support) is no longer used. &lt;br /&gt;
&lt;br /&gt;
The X&#039;02&#039; setting (Write Structured Field Query Support) now supports MODEL 6 terminals by default. &lt;br /&gt;
&lt;br /&gt;
The new X&#039;08&#039; setting  always issues a Write Structured Field Query for Terminal Model Resets for terminals connected to Model 204 through VTAM  or TELNET. This precludes Terminal Model RESETs to Models that are not supported by the terminal emulator in use.&lt;br /&gt;
&lt;br /&gt;
===WEBDFLT===&lt;br /&gt;
At V7.7, the default access rule for non-SSL ports was changed from ALLOW * to DISALLOW *, meaning that unless any ALLOW rules were in place resulting in a login/password prompt, the port couldn&#039;t be accessed. The new &amp;lt;var&amp;gt;[[WEBDFLT_parameter|WEBDFLT]]&amp;lt;/var&amp;gt; parameter may be set to 1 for reversion to the old default of ALLOW *. This new parameter is enabled in V7.7 with the application of zap 77z090. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;var&amp;gt;RESET WEBDFLT&amp;lt;/var&amp;gt; requires system administrator privileges. It is recommended to reset the 1 bit of &amp;lt;var&amp;gt;WEBDFLT&amp;lt;/var&amp;gt; to zero after issuing a series of &amp;lt;var&amp;gt;JANUS DEFINE&amp;lt;/var&amp;gt; commands which need WEBDFLT=1, as in the CCAIN input stream.&lt;br /&gt;
&lt;br /&gt;
==New and changed statistics==&lt;br /&gt;
===MPR, MBO, MCP, and RCV===&lt;br /&gt;
Introduced in zap 77z257.&lt;br /&gt;
&amp;lt;p&amp;gt;These statistics provide high water mark transaction information. (Since-last values will not be available until V78 GA.)&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;They are useful in conjunction with the &amp;lt;var&amp;gt;MAXPRE&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;MAXBOUT&amp;lt;/var&amp;gt;, and &amp;lt;var&amp;gt;MAXSUBT&amp;lt;/var&amp;gt; parameters. &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
User/system statistics:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;MPR: High water mark of transaction pre-images. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;MBO: High water mark of transaction backout pages. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;MCP: High water mark of transaction chkpoint spans. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
System statistics: &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;RCV: Number of blocks needed for subtransaction recovery &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt; &lt;br /&gt;
&amp;lt;p class=&amp;quot;note&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Notes:&amp;lt;/b&amp;gt; M204.0843 now displays the RCV statistic for subtransaction checkpoints.&lt;br /&gt;
The size of recovery checkpoint must be greater than the sum of the last RCV value plus the number of records in [[System_and_media_recovery#RESTART_recovery_considerations_for_sub-transaction_checkpoints|RESTART and RESTARTS]].&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
===DKWTS and DKWTMICS===&lt;br /&gt;
Introduced in zap 77z7289.&lt;br /&gt;
&amp;lt;p&amp;gt;The new system statistics DKWTS (DisK WaiTs) and DKWTMICS (DisK WaiT MICroSeconds) collect data to provide rough disk I/O service time numbers.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
DKWTS shows the number of disk I/O waits. DKWTMICS shows the total wait time for those waits in microseconds. Dividing the difference in DKWTMICS by the difference in DKWTS over an interval provides the average disk I/O wait time in microseconds.              &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;note&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Notes:&amp;lt;/b&amp;gt; &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The wait time does include internal Model 204 scheduler delays, so on a CPU bound Model 204 system, the service times calculated from DKWTS and DKWTMICS are likely to be an overestimate of actual service times.&amp;lt;/li&amp;gt;  &lt;br /&gt;
                                                                    &lt;br /&gt;
&amp;lt;li&amp;gt;DKWTS and DKWTMICS are not available in SirMon; use [[MONITOR_command|MONITOR]] SYSTEM STATISTICS to view these statistics.&amp;lt;/li&amp;gt;&amp;lt;/ul&amp;gt;  &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Compatibility issues==&lt;br /&gt;
===&amp;lt;b id=&amp;quot;listNewInit&amp;quot;&amp;gt;&amp;lt;/b&amp;gt;$ListNew cannot be used in Initial clause===&lt;br /&gt;
It is now a compilation error if &amp;lt;var&amp;gt;$ListNew&amp;lt;/var&amp;gt; is attempted to be used in the &amp;lt;var&amp;gt;Initial&amp;lt;/var&amp;gt; clause of a &lt;br /&gt;
[[Using_variables_and_values_in_computation#Declare_statements_for_.25variables|declaration statement]].&lt;br /&gt;
&amp;lt;p&amp;gt;This change is propagated by zap maintenance to versions 7.5 (zap 75Z487), 7.6 (zap 76Z514), and 7.7 (zap 77z281) of Model 204.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote class=&amp;quot;note&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Note:&amp;lt;/b&amp;gt; Strictly speaking, this would not be considered a compilation error, because previously although &amp;lt;code&amp;gt;..&amp;amp;nbsp;Initial($ListNew)&amp;lt;/code&amp;gt; did not produce a compilation error, in almost all circumstances it would produce a snap if the initialized %variable were used with some other &amp;lt;var&amp;gt;$List&amp;lt;i&amp;gt;xxx&amp;lt;/i&amp;gt;&amp;lt;/var&amp;gt; invocation.&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Restricting the use of the CUSTOM=38 setting===&lt;br /&gt;
The &amp;lt;var&amp;gt;[[CUSTOM parameter|CUSTOM=38]]&amp;lt;/var&amp;gt; parameter setting, introduced at V7.5, inadvertently provided System Manager privileges to all users via the RESET command. This CUSTOM setting is now restricted to the RESETting of the LAUDIT parameter.&lt;br /&gt;
&lt;br /&gt;
===Disabling of Closure support===&lt;br /&gt;
Due to a number of bugs related to Closure support, introduced at V7.7, this feature, which can best be described as exposed methods assigned to method variables, has been disabled in this release. This change was also made to V7.7 with application of zap 77z119.&lt;br /&gt;
&lt;br /&gt;
===Password delimiter enforced===&lt;br /&gt;
When using &amp;lt;var&amp;gt;IFSTRTN&amp;lt;/var&amp;gt; to log on to a Model 204 online from an IFAM2 application, both the logonid and password must be followed by a semicolon, which is the delimiter. For example:      &lt;br /&gt;
                                      &lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;CALL IFSTRTN(RC,&#039;logonid;password;&#039;...)&amp;lt;/p&amp;gt;&lt;br /&gt;
                 &lt;br /&gt;
If a semicolon does not follow the password string, the following message will now be issued:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;M204.2964: Password missing or too long &amp;lt;/p&amp;gt;                 &lt;br /&gt;
                                                         &lt;br /&gt;
Previously, a semicolon following the password was not required and the first blank served as a password delimiter.  However, as of V7.7, embedded blanks are valid password characters and a semicolon is now required to delimit the password.&lt;br /&gt;
&lt;br /&gt;
This change is enabled in V7.7 with the application of zap 77z231.&lt;br /&gt;
&lt;br /&gt;
===PAGESZ parameter validated===&lt;br /&gt;
Previously it was possible to set the PAGESZ parameter to any value, although Model 204 internally supports one page size of 6184, and any deviation from this value would have led to problems during file creation. The value of this parameter is now controlled, such that setting it to any value other than 6184 will generate an M204.1149 message with the parameter being reset to 6184.&lt;br /&gt;
&lt;br /&gt;
===ECPRIV and the IDCAMS facility===&lt;br /&gt;
At V7.7 a security loophole was closed, whereby all ECF modules were run under external-authorizer profile of the calling user. Previously any ECF tasks were run under the owning job&#039;s external-authorizer profile, and in order for certain sites to retain that ability, a new setting of ECPRIV, value 4, was introduced to retain the ability to run ECF tasks using the job&#039;s security profile. &lt;br /&gt;
&lt;br /&gt;
The ECPRIV 4 setting potentially introduced a security loophole when calling the IDCAMS interface, based upon what the IDCAMS utility is able to do at a system level. Consequently as of this release, the ECPRIV 4 setting will be ignored when calling the IDCAMS facility via ECF, and such IDCAMS processes will always use the calling user&#039;s security profile. Any existing jobs that use ECF to call the IDCAMS utility with the ECFPRIV 4 bit set should be checked to ensure that the calling user&#039;s security profile still satisfies the job&#039;s requirements.&lt;br /&gt;
&lt;br /&gt;
===TCPOPTS is view-only===&lt;br /&gt;
In previous versions the &amp;lt;var&amp;gt;TCPOPTS&amp;lt;/var&amp;gt; parameter, which identifies the type of IP addressing in use (v4 or v6), was resetable, although it was always documented as a view-only parameter. The parameter is now handled as a view-only parameter, and any attempts to reset the parameter will result in the following message:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;gt;   M204.1123: Parameter TCPOPTS not reset&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===ZHPF command can only be issued by a system manager===&lt;br /&gt;
In previous versions it was possible to issue the ZHPF command without being logged on. From this release onwards, a user would have to be logged on with system manager privileges to be able to issue this command.&lt;br /&gt;
&lt;br /&gt;
Additionally, the command output will now only  display results for currently open files.&lt;br /&gt;
&lt;br /&gt;
This change is enabled in v7.7 with the application of zap 77z264.&lt;br /&gt;
&lt;br /&gt;
===Terminal MODEL reset failure===&lt;br /&gt;
If a reset of the terminal MODEL parameter fails due to an undersized output page buffer, then in addition to the existing messages that inform the user of this failure:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;gt;    M204.1875 UNABLE TO RESET MODEL TO %C &lt;br /&gt;
    M204.1123: Parameter MODEL not reset&amp;lt;/p&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
the following message will now be issued:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;gt;    M204.1008: LOUTPB must be increased to at least &amp;lt;number&amp;gt; &amp;lt;/p&amp;gt;&lt;br /&gt;
                                                         &lt;br /&gt;
where &amp;lt;number&amp;gt; is the minimum value of LOUTPB necessary to support the terminal model.&lt;br /&gt;
&lt;br /&gt;
This change is enabled in V7.7 with the application of zap 77z309.&lt;br /&gt;
&lt;br /&gt;
==Notes for system manager and installer==&lt;br /&gt;
===CRAM SVC installation is deprecated===&lt;br /&gt;
The CRAM SVC installation has been deprecated as of version 7.5. &amp;lt;br /&amp;gt;Installation of CRAM-XDM is described as part of the [[Model 204 installation]].&lt;br /&gt;
===Authorization and maintenance zaps===&lt;br /&gt;
When you download Rocket M204 product object files, all relevant authorization keys and all current maintenance zaps are pre-applied to the object files as part of the download process.&lt;br /&gt;
&lt;br /&gt;
==New and changed messages==&lt;br /&gt;
&lt;br /&gt;
See [[New and updated messages in Model 204 version 7.8|New and updated messages in Model 204 version 7.8]] for details.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category: Release notes]]&lt;/div&gt;</summary>
		<author><name>ELowell</name></author>
	</entry>
	<entry>
		<id>https://m204wiki.rocketsoftware.com/index.php?title=Release_notes_for_Model_204_version_7.8&amp;diff=117741</id>
		<title>Release notes for Model 204 version 7.8</title>
		<link rel="alternate" type="text/html" href="https://m204wiki.rocketsoftware.com/index.php?title=Release_notes_for_Model_204_version_7.8&amp;diff=117741"/>
		<updated>2019-12-17T00:03:41Z</updated>

		<summary type="html">&lt;p&gt;ELowell: /* SIRTERM */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;&amp;lt;b&amp;gt;******THIS IS A DRAFT DOCUMENT.******&amp;lt;/b&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
These release notes list the enhancements and other changes contained in Model 204 version 7.8, &amp;lt;b&amp;gt;&amp;lt;i&amp;gt;which is still in development&amp;lt;/i&amp;gt;&amp;lt;/b&amp;gt;. Until the commercial release of the software, Rocket reserves the right to add to, remove, or change anything described herein. &lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
These release notes contain installation and features information for the Rocket Model 204 version 7.8 release.&lt;br /&gt;
Before beginning your installation, please read through this information about product installation and changes.&lt;br /&gt;
&lt;br /&gt;
==New in this release==&lt;br /&gt;
The table below cites some highlights of Model&amp;amp;nbsp;204 version 7.8. For a full list of features, refer to the Table of Contents. &lt;br /&gt;
&amp;lt;p&amp;gt;See also the [[#Compatibility Issues|Compatibility]] section for possible issues.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;tr class=&amp;quot;head&amp;quot;&amp;gt;&amp;lt;th&amp;gt;Category&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Feature&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;SOUL&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The new [[#AmIndependent method|AmIndependent]] method returns TRUE for daemons spawned by RunIndependently.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The Object class now supports the [[#Support for copying Object class objects|copy and deepCopy methods]].&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Janus Web&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[[#Web Sockets|Janus Web Sockets]] are now supported.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td nowrap&amp;gt;Networking&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Note:&amp;lt;/b&amp;gt; The two-phase commit and commit exits features are licensed and purchased separately from Model 204.&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Two-phase commit. A Model 204 online can now be configured to use two-phase commit (2PC). The Janus internal socket API is used for the calls to the coordinator. JANUS commands are used for all 2PC configuration. A new JANUS port type has been added, 2PC.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Commit exits are now supported. The commit exit runs within the APSY, which is defined by the &amp;lt;var&amp;gt;COMMITX&amp;lt;/var&amp;gt; parameter and uses normal APSY processing.  &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;ECF tables&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The new &amp;lt;var&amp;gt;DISPLAY ECF&amp;lt;/var&amp;gt; command and &amp;lt;var&amp;gt;EXTERNAL REMOVE&amp;lt;/var&amp;gt; statement enable more efficient management of [[#Managing ECF tables more efficiently|ECF tables]].&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Performance&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[[#MP/204 offload improvements|MP/204 offload improvements]] -- application code for these SOUL statements is now fully offloadable: &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;File Records In/On&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Remember&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Position&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Sort Values&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Reset Header/Trailer&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Find and Print Count&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Find All Values&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;For Each Value&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Security&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;CA-Top Secret can [[#CA-Top Secret can disallow CCASTAT logins|disallow CCASTAT logins]].&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[[#DEFUSER can specify a jobname not authorized to access M204|DEFUSER]] can specify a jobname not authorized to access M204.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td nowrap&amp;gt;System enhancements&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The &amp;lt;var&amp;gt;MONITOR USERS&amp;lt;/var&amp;gt; command output displays [[#New wait types for daemon/master waits|two new wait types]].&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td nowrap&amp;gt;AUDIT204 enhancements&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The new TIMEHH parameter on the &amp;lt;var&amp;gt;[[#FORMAT command|FORMAT]]&amp;lt;/var&amp;gt; command of the AUDIT204 utility provides greater time stamp precision.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td nowrap&amp;gt;New commands&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;[[#DISPLAY ECF|DISPLAY ECF]]&amp;lt;/var&amp;gt; displays details from ECF tables, or the current status of users accessing ECF modules.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td nowrap&amp;gt;New parameters&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;[[#ENQTIME|ENQTIME]]&amp;lt;/var&amp;gt; specifies the number of milliseconds waited for each record locking retry wait.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;[[#EVALOPT|EVALOPT]]&amp;lt;/var&amp;gt; controls the cancellation of a request on truncation of string data.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;[[#MAXPRE, MAXBOUT, MAXSUBT|MAXPRE, MAXBOUT, and MAXSUBT]]&amp;lt;/var&amp;gt; can be used to cancel a runaway transaction and prevent it from filling the checkpoint data set.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;[[#NLDAPBUF|NLDAPBUF]]&amp;lt;/var&amp;gt; allows the number of LDAP buffers allocated during startup to be set in CCAIN.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;[[#SERV4G|SERV4G]]&amp;lt;/var&amp;gt; allows testing of server tables that span a 4-gigabyte boundary.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;[[#WEBDFLT|WEBDFLT]]&amp;lt;/var&amp;gt; changes the default JANUS WEB ALLOW rule back to ALLOW.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td nowrap&amp;gt;Janus and TN3270 debuggers&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The debuggers can now view or watch the values of [[#Access to exposed variables|variables exposed to local routines/methods]].&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;When execution pauses, the debuggers now [[#Subroutine or method display|display the subroutine or method]] being executed.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td nowrap&amp;gt;User/system statistics&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;[[#MPR, MBO, MCP, and RCV|MPR, MBO, MCP, and RCV]]&amp;lt;/var&amp;gt; provide high water mark transaction information in conjunction with the &amp;lt;var&amp;gt;MAXPRE&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;MAXBOUT&amp;lt;/var&amp;gt;, and &amp;lt;var&amp;gt;MAXSUBT&amp;lt;/var&amp;gt; parameters. &lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[[#DKWTS and DKWTMICS|New system statistics]] DKWTS (DisK WaiTs) and DKWTMICS (DisK WaiT MICroSeconds) collect data to provide rough disk I/O service time numbers.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Operating system and hardware requirements==&lt;br /&gt;
&lt;br /&gt;
===Operating system requirements===&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;IBM z/OS versions supported:&amp;lt;/b&amp;gt; &lt;br /&gt;
  &amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;All IBM supported releases up to and including z/OS 2.3. &amp;lt;br /&amp;gt;(For z/OS 2.2, see [[IBM z/OS 2.2 PTF requirement]].)&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;p&amp;gt;Version 1.07 is sufficient for all functionality except for the following features:&amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;ul&amp;gt;&lt;br /&gt;
    &amp;lt;li&amp;gt;zHPF support requires version [[IBM z/OS 2.1 compatibility issue|2.1]].&amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;li&amp;gt;Large (1 MB) page support requires version 1.9.&amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;li&amp;gt;Extended address volumes (EAV) requires version 1.12.&amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;/ul&amp;gt;&lt;br /&gt;
  &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
On z/OS, Model 204 release 7.8 operates as an APF authorized load module, as required by many 7.8 features. &amp;lt;br /&amp;gt;&lt;br /&gt;
To run Model 204 unauthorized, [[Contacting Rocket Software Technical Support|contact Technical Support]].&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;IBM z/VM versions supported:&amp;lt;/b&amp;gt; &lt;br /&gt;
  &amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;All IBM supported releases up to and including z/VM 6.4.&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;IBM z/VSE versions supported:&amp;lt;/b&amp;gt;&lt;br /&gt;
  &amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;All IBM supported releases up to and including z/VSE 6.1.&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Hardware requirements===&lt;br /&gt;
 &lt;br /&gt;
In general, Model 204 version 7.8 requires the IBM z/890 or above processor.&lt;br /&gt;
&amp;lt;p&amp;gt;However, the IBM z10 or above processor is required for the following features:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;large (1 MB) page support&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;IBM&#039;s High Performance FICON (zHPF) support&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Connect&amp;lt;sup&amp;gt;&amp;amp;#9733;&amp;lt;/sup&amp;gt; compatibility with Model 204===&lt;br /&gt;
&lt;br /&gt;
Connect&amp;lt;span class=&amp;quot;superstar&amp;quot;&amp;gt;&amp;amp;#9733;&amp;lt;/span&amp;gt; version 7.5 or 7.7 is compatible with Model 204 version 7.8.&lt;br /&gt;
&lt;br /&gt;
For more information on Connect&amp;lt;span class=&amp;quot;superstar&amp;quot;&amp;gt;&amp;amp;#9733;&amp;lt;/span&amp;gt; installation, see the [[:Category:Connect*|Connect&amp;lt;span class=&amp;quot;superstar&amp;quot;&amp;gt;&amp;amp;#9733;&amp;lt;/span&amp;gt; wiki pages]].&lt;br /&gt;
&lt;br /&gt;
==SOUL (User Language) enhancements==&lt;br /&gt;
===AmIndependent method===&lt;br /&gt;
The &amp;lt;var&amp;gt;AmIndependent&amp;lt;/var&amp;gt; method returns TRUE for daemons spawned by &amp;lt;var&amp;gt;[[RunIndependently_(Daemon_subroutine)|RunIndependently]]&amp;lt;/var&amp;gt;. (The action of &amp;lt;var&amp;gt;[[AmDaemon_(Daemon_property)|AmDaemon]]&amp;lt;/var&amp;gt; remains unchanged.)&lt;br /&gt;
&lt;br /&gt;
The following table shows the values returned by &amp;lt;var&amp;gt;AmIndependent&amp;lt;/var&amp;gt; versus &amp;lt;var&amp;gt;AmDaemon&amp;lt;/var&amp;gt; for different daemon types:&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Type&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;AmDaemon&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;AmIndependent&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;$COMBG&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;False&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;False&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Independent daemon&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;False&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;True&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Other daemon&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;True&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;False&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Web, etc.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;False&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;False&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===$ProcOpn===&lt;br /&gt;
&amp;lt;var&amp;gt;[[$ProcOpn|$ProcOpn]]&amp;lt;/var&amp;gt; now supports the opening of a procedure with an all-numeric name, and including a leading zero, such as:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;%result = $procOpn(&#039;0123&#039;, &#039;MYFILE&#039;)&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Support for such procedure names was initially introduced at V7.7, and this feature of &amp;lt;var&amp;gt;$ProcOpn&amp;lt;/var&amp;gt; is enabled in V7.7 with the application of zap 77z054.&lt;br /&gt;
&lt;br /&gt;
===Allow parentheses to surround a boolean enumeration object===&lt;br /&gt;
The following sample code:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;   begin                                       &lt;br /&gt;
   variables are undefined                  &lt;br /&gt;
   %isValid is boolean initial (True)       &lt;br /&gt;
   if (%isValid) then                  &lt;br /&gt;
      print &#039;in IF&#039;                            &lt;br /&gt;
   end if                                   &lt;br /&gt;
   end   &amp;lt;/p&amp;gt;      &lt;br /&gt;
&lt;br /&gt;
will now compile and run successfully, since this syntax: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;if (%isValid) then &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
is logically equivalent to this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;if %isValid then &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Prior to V7.8 the presence of parentheses surrounding the boolean enumeration object would have caused a compilation error. This change is enabled in V7.7 with the application of zap 77z370.&lt;br /&gt;
&lt;br /&gt;
===Support for copying Object class objects===&lt;br /&gt;
The Object class now supports the copy and deepCopy methods. For example, an Object object can be copied as follows:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;   begin               &lt;br /&gt;
   %x is object object &lt;br /&gt;
   %y is object object &lt;br /&gt;
   %y = new            &lt;br /&gt;
   %x = %y:copy        &lt;br /&gt;
   end &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This change is enabled in v7.7 with the application of zap 77z076, and within V7.6 with the application of zap 76z412.&lt;br /&gt;
&lt;br /&gt;
===Assignment of enumeration values to method variables===&lt;br /&gt;
Enumerations values can now be assigned to method variables whose result is an enumeration. So, for example, the following code:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;   begin                                               &lt;br /&gt;
   enumeration colour                                  &lt;br /&gt;
      public                                           &lt;br /&gt;
         value red                                     &lt;br /&gt;
         value white                                   &lt;br /&gt;
         value blue                                    &lt;br /&gt;
      end public                                       &lt;br /&gt;
   end enumeration                                     &lt;br /&gt;
   %func    is function getColour is enumeration colour&lt;br /&gt;
   local function getColour is enumeration colour      &lt;br /&gt;
      return blue                                      &lt;br /&gt;
   end function                                        &lt;br /&gt;
   %func    = getColour                                &lt;br /&gt;
   %func    = (colour):red                             &lt;br /&gt;
   printText {~=%(Local):(%func)}                      &lt;br /&gt;
   end  &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
will produce this result:&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt; %(Local):(%func)=red &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
whereas previously this line:   &lt;br /&gt;
&lt;br /&gt;
  &amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt; %func    = (colour):red &amp;lt;/p&amp;gt;   &lt;br /&gt;
&lt;br /&gt;
would have been rejected with this message:&lt;br /&gt;
&lt;br /&gt;
   &amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;MSIR.0993: Assignment invalid: mismatch between method and method variable &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This change is enabled in V7.7 with the application of zap 77z128.&lt;br /&gt;
&lt;br /&gt;
===Optional output method parameters===&lt;br /&gt;
Prior to this release output parameters could not be optional or have default values. In this release output parameters can be specified as &amp;lt;var&amp;gt;Optional&amp;lt;/var&amp;gt;, and a default value can be specified with &amp;lt;var&amp;gt;Default&amp;lt;/var&amp;gt;. One related change is that if a &amp;lt;var&amp;gt;Len&amp;lt;/var&amp;gt; value is specified with &amp;lt;var&amp;gt;Optional&amp;lt;/var&amp;gt; or &amp;lt;var&amp;gt;Default&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;Output&amp;lt;/var&amp;gt;, it indicates the length of the hidden target for the output parameter if none was passed. For all other &amp;lt;var&amp;gt;Output&amp;lt;/var&amp;gt; parameters, &amp;lt;var&amp;gt;Len&amp;lt;/var&amp;gt; is meaningless, just as it was before Model 204 V7.8. The following is an example of the use of an optional output parameter:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;function getRemote( -&lt;br /&gt;
   %target is string len 32, %errorReason is string len 80 optional output -&lt;br /&gt;
) is float&lt;br /&gt;
  ...&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
In this example, if &amp;lt;code&amp;gt;%errorReason&amp;lt;/code&amp;gt; is not specified in a call and then set to a value longer than 80 bytes it wil be truncated to 80 bytes. However, if a string of a different length is passed, the length of that string determines truncation behavior.&lt;br /&gt;
&lt;br /&gt;
==External Call Facility enhancements==&lt;br /&gt;
===Managing ECF tables more efficiently===&lt;br /&gt;
The are two new features to help manage ECF tables more efficiently, avoid conditions where the table can fill, and prevent the definition of further entities.&lt;br /&gt;
&lt;br /&gt;
The first feature is the new &amp;lt;var&amp;gt;DISPLAY ECF&amp;lt;/var&amp;gt; command, which displays the contents of ECF tables and also the current status of users accessing ECF modules. See more details of the &amp;lt;var&amp;gt;[[#DISPLAY ECF|DISPLAY ECF]]&amp;lt;/var&amp;gt; command below.&lt;br /&gt;
&lt;br /&gt;
The second feature is a new &amp;lt;var&amp;gt;EXTERNAL REMOVE&amp;lt;/var&amp;gt; statement with the following syntax:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;EXTERNAL REMOVE &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;modulename&amp;lt;/span&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This statement causes the entry for the named module to be removed from the module table. The table entry is then placed on a free chain of entries and can be reused by issuing the &amp;lt;var&amp;gt;EXTERNAL MODULE&amp;lt;/var&amp;gt; statement. This allows the module table to be managed with redundant entries removed, without having to recycle the ONLINE.&lt;br /&gt;
&lt;br /&gt;
An &amp;lt;var&amp;gt;EXTERNAL REMOVE&amp;lt;/var&amp;gt; statement will return &amp;lt;code&amp;gt;$status/$statusd&amp;lt;/code&amp;gt; values of &amp;lt;code&amp;gt;0/0&amp;lt;/code&amp;gt;, and most other status values that can be returned by the &amp;lt;var&amp;gt;EXTERNAL REMOVE&amp;lt;/var&amp;gt; statement are already documented in the ECF return codes table. If an &amp;lt;var&amp;gt;EXTERNAL REMOVE&amp;lt;/var&amp;gt; is attempted against a module that is currently being called (in use), then &amp;lt;code&amp;gt;$status/$statusd&amp;lt;/code&amp;gt; will return the values &amp;lt;code&amp;gt;20/1&amp;lt;/code&amp;gt; (module unavailable).&lt;br /&gt;
&lt;br /&gt;
==System enhancements==&lt;br /&gt;
&lt;br /&gt;
===New wait types for daemon/master waits===&lt;br /&gt;
&lt;br /&gt;
Two new wait types, viewable on the &amp;lt;var&amp;gt;[[MONITOR_command|MONITOR]] USERS&amp;lt;/var&amp;gt; command output, have been implemented as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;57&amp;lt;/code&amp;gt; - Means a daemon thread waiting for its master thread  &amp;lt;br /&amp;gt;     &lt;br /&gt;
&amp;lt;code&amp;gt;58&amp;lt;/code&amp;gt; - Means a master thread waiting for one of its daemon threads&lt;br /&gt;
&lt;br /&gt;
This change is enabled in V7.7 with the application of zap 77z410.&lt;br /&gt;
&lt;br /&gt;
===Snap formatting changes===&lt;br /&gt;
Date/time stamps in the page headers of snaps will now be shown in normal format, rather than in julian format as in previous versions. So in the following example, a particular snap header under v7.7 or previous versions would show as: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;SNAPID    1   19226.060155  M204.0022: Bug .. nnnnn               PAGE     1 &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
whereas the same snap header under v7.8 would show as: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;SNAPID    1  2019/08/14 06:01:06   M204.0022: Bug .. nnnnn        PAGE     1 &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Also, due to improvements in handling trailing blanks in snap output, a snap generated under v7.8 should be marginally smaller than the same snap generated under previous versions, assuming the same SNAPCTL settings.&lt;br /&gt;
&lt;br /&gt;
===Call stack trace for problem diagnosis===&lt;br /&gt;
A  call stack trace is now provided to help diagnose and resolve common errors. To enable the stack trace, do either of the following: &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Set the &amp;lt;var&amp;gt;[[SIRFACT parameter|SIRFACT]] X&#039;01&#039;&amp;lt;/var&amp;gt; bit.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Set the &amp;lt;var&amp;gt;[[DEBUGUL parameter|DEBUGL]]&amp;lt;/var&amp;gt; parameter. Note that the &amp;lt;var&amp;gt;DEBUGUL&amp;lt;/var&amp;gt; approach will introduce extra QTBL overhead. &amp;lt;p&amp;gt;(&amp;lt;var&amp;gt;DEBUGUL&amp;lt;/var&amp;gt; provides a similar facility with an include trace of procedures leading to the error, but this might not be potentially as useful as the call trace.)&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt; &lt;br /&gt;
&lt;br /&gt;
The call stack trace can assist in diagnosing run-time errors that might occur, as illustrated by the following &amp;quot;Variable too small for result&amp;quot; and &amp;quot;MBSCAN exceeded&amp;quot; examples.&lt;br /&gt;
&lt;br /&gt;
====Variable too small for result====&lt;br /&gt;
When the stack trace is enabled, a &amp;quot;variable too small&amp;quot; error results in the following message:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;M204.2966: Error at line n, procedure &#039;&#039;procname&#039;&#039; in file &#039;&#039;procfile&#039;&#039;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
which identifies the line within a procedure where the error is occurring, in addition to the usual message:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;M204.0552: Variable too small for result&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Any subsequent M204.2966 messages indicate the point in the code from where the code in error was called. For example, a stack of three subroutine calls leading to a &amp;quot;variable too small&amp;quot; error might result in the following messaging:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;   M204.0552: Variable too small for result                             &lt;br /&gt;
   M204.2966: Error at line 9, procedure MYPROC.LEVEL4 in file MYPROC   &lt;br /&gt;
   M204.2966: Called from line 5, procedure MYPROC.LEVEL3 in file MYPROC&lt;br /&gt;
   M204.2966: Called from line 5, procedure MYPROC.LEVEL2 in file MYPROC&lt;br /&gt;
   M204.2966: Called from line 5, procedure MYPROC.LEVEL1 in file MYPROC &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This information should help in diagnosing the problem. &lt;br /&gt;
&lt;br /&gt;
If the error occurs within a command level program rather than a procedure, then the M204.2966 message is replaced by an M204.2967 message, and a similar error condition to the above with a preceding call stack might be audited as follows:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;   M204.0552: Variable too small for result              &lt;br /&gt;
   M204.2967: Error at line 14 of command level program  &lt;br /&gt;
   M204.2967: Called from line 5 of command level program&lt;br /&gt;
   M204.2967: Called from line 3 of command level program &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If neither &amp;lt;var&amp;gt;SIRFACT X&#039;01&#039;&amp;lt;/var&amp;gt; nor &amp;lt;var&amp;gt;DEBUGUL&amp;lt;/var&amp;gt; is set, then the &amp;quot;variable too small&amp;quot; error produces the following messages:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;   M204.0552: Variable too small for result &lt;br /&gt;
   M204.2968: Error: no debug info &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====MBSCAN exceeded====&lt;br /&gt;
Similarly to the handling of the &amp;quot;variable too small for result&amp;quot; error, the call stack can also be used to diagnose errors where the value of &amp;lt;var&amp;gt;[[MBSCAN parameter|MBSCAN]]&amp;lt;/var&amp;gt; is exceeded as a result of a direct search of Table B records. &lt;br /&gt;
&amp;lt;p&amp;gt;Again, under V7.8, with either the &amp;lt;var&amp;gt;SIRFACT X&#039;01&#039;&amp;lt;/var&amp;gt; bit set or &amp;lt;var&amp;gt;DEBUGUL&amp;lt;/var&amp;gt; set, if a long request occurs as a result of exceeding &amp;lt;var&amp;gt;MBSCAN&amp;lt;/var&amp;gt;, then initially the following message is produced, as before:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;M204.0569: File &#039;&#039;filename&#039;&#039;, Find: Table B records to be searched = &#039;&#039;nnnn&#039;&#039;&amp;lt;/p&amp;gt;&lt;br /&gt;
followed by a DYRWT prompt message. If the user replies &#039;N&#039; to the prompt, or if the request is run in an environment (such as a batch job) where the default response is &#039;N&#039;, the following message is produced after the M204.0569 message:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;Cancelling request: M204.2969: MBSCAN (&#039;&#039;mm&#039;&#039;) exceeded, records to be searched = &#039;&#039;nnnn&#039;&#039;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
where &#039;&#039;mm&#039;&#039; is the current setting of &amp;lt;var&amp;gt;MBSCAN&amp;lt;/var&amp;gt;. The M204.2969 message is followed by M204.2966 messages displaying the call stack trace. Thus, if the following code is run from procedure MYPROC.MBSCAN against the demo database, with an &amp;lt;var&amp;gt;MBSCAN&amp;lt;/var&amp;gt; setting of 10:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;   b                           &lt;br /&gt;
   call sub1                   &lt;br /&gt;
   sub1: subroutine            &lt;br /&gt;
   fd1:                        &lt;br /&gt;
      in clients fd city = ONTARIO&lt;br /&gt;
              end find         &lt;br /&gt;
      fr fd1                      &lt;br /&gt;
         pai                      &lt;br /&gt;
         print                    &lt;br /&gt;
      end for                     &lt;br /&gt;
   end subroutine              &lt;br /&gt;
   end &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
then the following messages are produced, assuming any prompts are responded to with an &#039;N&#039;:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;   M204.0569: File CLIENTS, Find: Table B records to be searched = 3415&lt;br /&gt;
   Cancelling request: M204.2969: MBSCAN (10) exceeded, records to be searched = 3415  &lt;br /&gt;
   M204.2966: Error at line 6, procedure MYPROC.MBSCAN in file MYPROC&lt;br /&gt;
   M204.2966: Called from line 3, procedure MYPROC.MBSCAN in file MYPROC  &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===appendJournalData===&lt;br /&gt;
The &amp;lt;var&amp;gt;[[AppendJournalData_(Stringlist_function)|AppendJournalData]]&amp;lt;/var&amp;gt; function is now more tolerant of an outstanding BUMP request. Previously, if &amp;lt;var&amp;gt;AppendJournalData&amp;lt;/var&amp;gt; was called to inadvertently retrieve a large amount of journal data, typically when called implicitly from within SirScan, then any outstanding BUMP request wouldn&#039;t be honored until all of the data had been retrieved, at which point the BUMP request would be completed, and all data would be lost.&lt;br /&gt;
&lt;br /&gt;
Now, the &amp;lt;var&amp;gt;AppendJournalData&amp;lt;/var&amp;gt; process checks for outstanding BUMP requests before each track I/O is executed, thus avoiding excessive I/Os against the journal and long waits for the BUMP of such a process to complete.&lt;br /&gt;
&lt;br /&gt;
==AUDIT204 enhancements==&lt;br /&gt;
===FORMAT command===&lt;br /&gt;
TIMEHH is a new parameter used with the FORMAT command of the [[Tracking_system_activity_(CCAJRNL,_CCAAUDIT,_CCAJLOG)#AUDIT204_utility|AUDIT204]] utility.  It indicates that timestamps, printed at the beginning of each line of output, should include hundredths of a second. Requires no other arguments.&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;b&amp;gt;NOTE:&amp;lt;/b&amp;gt; This parameter and the 78 version (or later) of AUDIT204 may be used against a 77 (or later) CCAJRNL.&amp;lt;/p&amp;gt;&lt;br /&gt;
For example:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;//CCAIN DD *&lt;br /&gt;
FORMAT YEARFORM 4&lt;br /&gt;
TIMEHH&lt;br /&gt;
TYPE ER MS LI&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Recovery enhancements==&lt;br /&gt;
===Media Recovery in a multi-user environment===&lt;br /&gt;
It is now possible to perform media recovery by issuing the &amp;lt;var&amp;gt;REGENERATE&amp;lt;/var&amp;gt; command to roll forward selected files in a multi-user environment, with the media recovery being carried out by different users with system manager privileges. The new USING option allows for the specification of a ddname for the input journal stream to be used by the &amp;lt;var&amp;gt;REGENERATE&amp;lt;/var&amp;gt; command. Previously media recovery was restricted to single user batch jobs, using the CCAGEN ddname for the input journal. For more details, see the &amp;lt;var&amp;gt;[[#REGENERATE|REGENERATE]]&amp;lt;/var&amp;gt; command below.&lt;br /&gt;
&lt;br /&gt;
==Security enhancements==&lt;br /&gt;
===CA-Top Secret can disallow CCASTAT logins===&lt;br /&gt;
The [[CA-Top_Secret_interface|CA-Top Secret]] interface now recognizes the &amp;lt;code&amp;gt;DEFACID=&amp;lt;/code&amp;gt;, setting and does not allow CCASTAT logins in the online if &amp;lt;code&amp;gt;DEFACID&amp;lt;/code&amp;gt; is set to null. (There is no attempt to log on M204USR.) Therefore, to disallow CCASTAT logons, set DEFACID=, in [[CA-Top_Secret_interface#Preparing_a_TOPSPARM_parameter_module_with_TOPSGEN|TOPSPARM]]. CCASTAT will be opened because it contains file and group passwords, but it will not be used for logons if CCASTAT logons are not allowed.&lt;br /&gt;
&lt;br /&gt;
===CUSTOM=11 and mixed cased input===&lt;br /&gt;
The &amp;lt;var&amp;gt;[[CUSTOM_parameter|CUSTOM]]&amp;lt;/var&amp;gt; parameter CUSTOM=11 setting no longer requires that a *LOWER command be issued prior to a LOGCTL command (to add or change a  password) to preserve mixed case input. Prior to this release, with CUSTOM=11 in place, *LOWER had to be issued before a LOGCTL command, otherwise any mixed case password strings would automatically be translated into uppercase. This change is enabled in V7.7 with the application of zap 77z108.&lt;br /&gt;
&lt;br /&gt;
===DEFUSER can specify a jobname not authorized to access M204===&lt;br /&gt;
When specifying DEFUSER=JOBNAME and VALIDAT=LOGON in the RACFGEN parms for an ONLINE, if the specified jobname ( the owning id for the ONLINE job ) isn&#039;t authorized to use Model 204 via RACF, any LOGIN commands specifying no userid will now succeed ( previously such a LOGON would have failed ). This enables users to submit jobs with USE $JOB, whereby the string USER=jobname  will be added to the submitted JCL, and this in turn is useful if the specified jobname has dataset access privileges to datasets required by the submitted jobs, even if the jobname itself isn&#039;t authorized to use M204.&lt;br /&gt;
&lt;br /&gt;
==Janus product enhancements==&lt;br /&gt;
&lt;br /&gt;
===Web Sockets===&lt;br /&gt;
Web Sockets are now supported in Janus Web Server.&lt;br /&gt;
&lt;br /&gt;
The Web Socket protocol provides various advantages over the HTTP protocol:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Web Sockets allow full-duplex communication.&amp;lt;/li&amp;gt; &lt;br /&gt;
&amp;lt;li&amp;gt;Efficient framing of payload data uses minimal overhead.&amp;lt;/li&amp;gt;  &lt;br /&gt;
&amp;lt;li&amp;gt;The Web Socket protocol is end-user extensible.&amp;lt;/li&amp;gt;  &lt;br /&gt;
&amp;lt;li&amp;gt;Most importantly, Web Sockets can be deployed completely within an existing HTTP/HTTPS framework.&amp;lt;/li&amp;gt; &lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To implement Web Sockets, you must enable the Janus Web port for Web Socket upgrades with the new &lt;br /&gt;
WEBSOCKET parameter. The WEBSOCKET option can be specified on either the port definition or the &lt;br /&gt;
JANUS WEB rule for the URL. &lt;br /&gt;
Likewise, an individual Janus Web rule can either allow or disallow Web Socket connections with the &lt;br /&gt;
WEBSOCKET and NOWEBSOCKET parameters, respectively. &lt;br /&gt;
&lt;br /&gt;
For details on implementing Web Sockets, see the [[WebSocket_(Socket_function)|WebSocket]] wiki page.&lt;br /&gt;
&lt;br /&gt;
===Janus Web Server access rule===&lt;br /&gt;
The automatic &amp;lt;var&amp;gt;[[JANUS WEB ALLOW]]&amp;lt;/var&amp;gt; rule, which allowed any user to access the port without requiring a login, is changed &amp;lt;i&amp;gt;for non-SSL ports&amp;lt;/i&amp;gt; to the following:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;JANUS WEB &amp;lt;i&amp;gt;portname&amp;lt;/i&amp;gt; DISALLOW *&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
This rule requires a system administrator to explicitly define &amp;lt;var&amp;gt;ALLOW&amp;lt;/var&amp;gt; rules to enable users to access non-SSL ports.&lt;br /&gt;
The rule applies unless overridden by user-added rules. &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;blockquote class=&amp;quot;note&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;b&amp;gt;Note:&amp;lt;/b&amp;gt; To revert from this change in the JANUS DEFINE default and make the default &lt;br /&gt;
 non-SSL &amp;lt;var&amp;gt;ALLOW&amp;lt;/var&amp;gt; rule as it was in version 7.5 and earlier (&amp;lt;code&amp;gt;ALLOW *&amp;lt;/code&amp;gt;), turn on the 1 bit of the &amp;lt;var&amp;gt;[[WEBDFLT parameter|WEBDFLT]]&amp;lt;/var&amp;gt; parameter: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;RESET WEBDFLT=1&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Increase in pending accepts for Janus BPX ports===&lt;br /&gt;
The default number of pending accepts for Janus BPX server ports has been increased from 3 to 12, thus reducing the likelihood that a pending accept may fail with the message&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;MSIR.0019 Connection request rejected for port (port), MAXCON exceeded&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The actual number of pending accepts to be supported on the port can be set with the new parameter MAXPEND, set on the &amp;lt;var&amp;gt;[[JANUS_DEFINE|JANUS DEFINE]]&amp;lt;/var&amp;gt; command, where MAXPEND can vary from 3 up to a maximum value of 32. The change to the default value is enabled in V7.7 with the application of zap 77z269.&lt;br /&gt;
&lt;br /&gt;
===TCP listen backlog increased===&lt;br /&gt;
&lt;br /&gt;
The [[Program_Communication_facilities#LISTEN_call|TCP listen]] backlog has been increased from 16 to 1024 under z/OS.&lt;br /&gt;
&lt;br /&gt;
This update tells the TCP stack to queue up to 1024 of such requests up before dropping them, thus reducing, or in most cases eliminating, the likelihood of a connection request drop, other than in exceptional circumstances, such as a denial of service attack. This change is enabled in V7.7 with the application of zap 77z340.&lt;br /&gt;
&lt;br /&gt;
===Defer the freeing of XMLSCREEN input XML===&lt;br /&gt;
&lt;br /&gt;
The freeing of [[XMLSCREEN_and_NOXMLSCREEN_(JANUS_DEFINE_parameters)|XMLSCREEN]] input XML is now deferred until the next Read Screen or session termination. This means that if an application error is detected, the input XML can be retrieved with [[$Web_Input_Content|$Web_Input_Content]] and then logged for problem analysis. &lt;br /&gt;
&lt;br /&gt;
Prior to this release the XML received from the client is freed immediately after being used to set the input data for a Read Screen, rendering it unavailable for problem determination.&lt;br /&gt;
&lt;br /&gt;
This change is enabled in V7.7 with the application of zap 77z368.&lt;br /&gt;
&lt;br /&gt;
===XMLSCREEN and Janus Web Legacy blank stripping===&lt;br /&gt;
&lt;br /&gt;
xmlScreens and Janus Web Legacy screens now adhere to the same standard as standard screen processing in terms of stripping leading blanks from input fields defined as [[Full-screen_feature#DEBLANK_or_NODEBLANK_option|DEBLANK]] (either explicitly or implicitly).&lt;br /&gt;
&lt;br /&gt;
This change is enabled in V7.7 with the application of zap 77z400.&lt;br /&gt;
&lt;br /&gt;
===SSL input buffer size===&lt;br /&gt;
&lt;br /&gt;
The default value of [[SSLIBSIZE_(JANUS_DEFINE_parameter)|SSLIBSIZE]] has been increased to 16384 + 128, or 16512. This size should ensure correct communication with all TLS spec compliant applications. It is the maximum size allowed unless you use [[CUSTOM_parameter#Using_CUSTOM.3D.2818.29|CUSTOM=18]].    &lt;br /&gt;
&lt;br /&gt;
This change is enabled in V7.7 with the application of zap 77z415.&lt;br /&gt;
&lt;br /&gt;
===Increasing LDAP buffers===&lt;br /&gt;
&lt;br /&gt;
The number of LDAP buffers allocated at startup can now be changed by setting the NLDAPBUF parameter in CCAIN. See below for details on [[#NLDAPBUF|NLDAPBUF]].&lt;br /&gt;
&lt;br /&gt;
===Increase URL length returned with $web_form_action===&lt;br /&gt;
With this release the maximum Janus Web Server incoming URL that can be handled by &amp;lt;var&amp;gt;$web_form_action&amp;lt;/var&amp;gt; is increased from 512 bytes to 1024 bytes. This change is enabled in V7.7 with the application of zap 77z424.&lt;br /&gt;
&lt;br /&gt;
===Maximum RBSIZE setting increased===&lt;br /&gt;
The maximum value for RBSIZE, set on the &amp;lt;var&amp;gt;[[JANUS DEFINE|JANUS DEFINE]]&amp;lt;/var&amp;gt; command, is now increased to 16777215 (previously the maximum was 65534). RBSIZE specifies the RPC or Request Buffer size.  On a Web port, the Janus request buffer holds browser request information such as header data, cookies, and form data. On other port types, it holds RPC input and output parameters. This change is enabled in V7.7 with the application of zap 77z427.&lt;br /&gt;
&lt;br /&gt;
==Debugger enhancements==&lt;br /&gt;
These enhancements apply to the Janus and TN3270 debuggers. &lt;br /&gt;
&lt;br /&gt;
===Access to exposed variables===&lt;br /&gt;
The debuggers can now view or watch the values of variables exposed to local routines/methods. Previously, any attempts to access an exposed variable would have displayed &amp;quot;%varname has no value&amp;quot; in the debugger session. This feature is enabled in V7.7 with the application of zap 77z363.&lt;br /&gt;
&lt;br /&gt;
===Subroutine or method display===&lt;br /&gt;
When execution pauses for a break point or runtime error, the subroutine or method being executed is indicated in the status area.  In addition, the source code line information available by right-clicking on a source line now also indicates the subroutine or method.&lt;br /&gt;
&lt;br /&gt;
==Performance enhancements==&lt;br /&gt;
&lt;br /&gt;
===MP/204 offload improvements===&lt;br /&gt;
Application code issuing the following SOUL statements will now now be fully offloadable:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;File Records In/On&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Remember&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt; &lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Position&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Sort Values&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;                                             &lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Reset Header/Trailer&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Find and Print Count&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Find All Values&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;For Each Value&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
The above improvements are enabled in V7.7 with the application of zaps 77z419 and 77z420.&lt;br /&gt;
&lt;br /&gt;
===X3270OUT exit offloadable===&lt;br /&gt;
When running MP/204 (AMPSUBS&amp;gt;0) and using the [[Coding_SNA_Communications_Server_conversion_exit_routines#X3270OUT_.28convert_output_from_3270_format.29|X3270OUT]] exit to convert a 3270 output data stream to the appropriate device protocol, the exit can now run in parallel mode to improve performance. This change is enabled in V7.7 with the application of zap 77z313.&lt;br /&gt;
&lt;br /&gt;
The X3270OUT exit must be written to be re-entrant.&lt;br /&gt;
&lt;br /&gt;
==New and changed commands==&lt;br /&gt;
===DISPLAY ECF===&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;DISPLAY ECF {{ M | N | U } like ?} &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This new command displays details from ECF tables, or the current status of users accessing ECF modules.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;syntax&amp;quot;&amp;gt;D ECF M&amp;lt;/span&amp;gt; displays the contents of the module table. For example:&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;    D ECF M &lt;br /&gt;
    Module   Loadlib  Address:Length     Loaded@      Lastused@   #Calls  Flags &lt;br /&gt;
    QATUM13C PROGLIB 2FB91FB8:00000028 19023:121506 19023:121506 00000001 &lt;br /&gt;
    QATUM13B PROGLIB 2FE65000:00009C18 19023:121506 19023:121506 00000001 &lt;br /&gt;
    QATUM13A PROGLIB 2FE6EC18:00001CD8 19023:121506 19023:121506 00000001  &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
(flags may be D=deleted; S=shared; H=halted; I=Idle)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;syntax&amp;quot;&amp;gt;D ECF N&amp;lt;/span&amp;gt; displays contents of the name table. For example: &amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;    D ECF N&lt;br /&gt;
    Module   Logical-call-name &lt;br /&gt;
    QATUM13C MOD_QATUM13C &lt;br /&gt;
    QATUM13B MOD_QATUM13B &lt;br /&gt;
    QATUM13A MOD_QATUM13A &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;syntax&amp;quot;&amp;gt;D ECF U&amp;lt;/span&amp;gt; displays details of users currently accessing ECF modules. This is also the default option, and so &amp;lt;span class=&amp;quot;syntax&amp;quot;&amp;gt;D ECF&amp;lt;/span&amp;gt; will display the same output as &amp;lt;span class=&amp;quot;syntax&amp;quot;&amp;gt;D ECF U&amp;lt;/span&amp;gt;. For example:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;    D ECF U                           &lt;br /&gt;
    User# Userid     Module   Parmlen &lt;br /&gt;
    00002 ADMIN      --none--         &lt;br /&gt;
    00003 ADMIN      COBSAMP1 00000002&lt;br /&gt;
    00004 ADMIN      COBSAMP1 00000002 &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;syntax&amp;quot;&amp;gt;D ECF &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;function&amp;lt;/var&amp;gt; LIKE &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;?&amp;lt;/var&amp;gt; &amp;lt;/span&amp;gt; (where &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;?&amp;lt;/var&amp;gt; is a valid pattern) displays details for entities that match the specified pattern. The function is either M (modules), N (names), or U (users), and it defaults to U. So for example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;D ECF U L A&amp;lt;/p&amp;gt;&lt;br /&gt;
or&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;D ECF U L A*&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
displays details of ECF users whose names begin with A.&lt;br /&gt;
&lt;br /&gt;
===REGENERATE===&lt;br /&gt;
The &amp;lt;var&amp;gt;REGENERATE&amp;lt;/var&amp;gt; command can now be run in a multi-user environment by multiple users with system manager privileges. A new option USING is provided to specify the ddname of the input journal, so that the full syntax is now as follows:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;  REGENERATE [USING ddname] FILE filename [FROM dumpname | IGNORE]&lt;br /&gt;
  [TO {LAST UPDATE [BEFORE yy.ddd hh:mm:ss.th] | LAST CHECKPOINT [BEFORE yy.dd hh:mm:ss.th] &lt;br /&gt;
  | UPDATE number OF yy.ddd hh:mm:ss.th | CHECKPOINT yy.ddd hh:mm:ss.th} ]&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The default for the using ddname is CCAGEN, but any ddname may be used to allocate an input journal and used. For example:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;  ALLOCATE REGEN1 WITH SCOPE=SYSTEM DSN=PROD1.GDGJ OLD SEQUENTIAL GEN=+2&lt;br /&gt;
  REGENERATE USING REGEN1 FILE TEST&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It is the user&#039;s responsibility to ensure that the file being regenerated is not in use, and so prior to usage, &amp;lt;var&amp;gt;BUMP FILE&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;STOP FILE&amp;lt;/var&amp;gt; should be used to isolate usage against the file. If the file is in use, the REGEN will fail with these messages:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;  M204.1430: Failed to open file TEST&lt;br /&gt;
  M204.1436: Stopped processing file TEST  &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
$STATUS will now be set for &amp;lt;var&amp;gt;REGENERATE&amp;lt;/var&amp;gt; with the following values:&lt;br /&gt;
&amp;lt;blockquote&amp;gt;    &lt;br /&gt;
    0 - Success &amp;lt;br/&amp;gt;&lt;br /&gt;
    1 - No files were processed &amp;lt;br/&amp;gt;&lt;br /&gt;
    2 - At least one file stopped processing &amp;lt;br/&amp;gt;&lt;br /&gt;
    4 - A serious error occurred, REGEN failed &lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Similarly, &amp;lt;var&amp;gt;SETGRC&amp;lt;/var&amp;gt; may be used to get the return code and error message.&lt;br /&gt;
&lt;br /&gt;
==New and changed parameters==&lt;br /&gt;
&lt;br /&gt;
===ECMODS===&lt;br /&gt;
The new minimum value for ECMODS, the allowable number of ECF modules, is 1. Prior to V7.8 the minimum value was 0. This change is enabled in V7.7 with the application of zap 77z306.&lt;br /&gt;
&lt;br /&gt;
===ECNAMES===&lt;br /&gt;
The new minimum value for ECNAMES, the allowable number of ECF module names, is 1. Prior to V7.8 the minimum value was 0. This change is enabled in V7.7 with the application of zap 77z306.&lt;br /&gt;
&lt;br /&gt;
===ECPSIZE===&lt;br /&gt;
The new minimum value for ECPSIZE, the initial storage allocation for ECF parameters, is 1024. Prior to V7.8 the minimum value was 0. This change is enabled in V7.7 with the application of zap 77z306.&lt;br /&gt;
&lt;br /&gt;
===ENQTIME===&lt;br /&gt;
Millisecond duration of automatic record locking retry wait.&lt;br /&gt;
&lt;br /&gt;
Prior to this change, if record locking conflicts occur frequently in a busy online, any user with a non-zero value for &amp;lt;var&amp;gt;[[ENQRETRY parameter|ENQRETRY]]&amp;lt;/var&amp;gt; will wait at least 3 seconds before the conflict is dealt with. This can degrade overall system performance.      &lt;br /&gt;
                                                         &lt;br /&gt;
The &amp;lt;var&amp;gt;[[ENQTIME parameter|ENQTIME]]&amp;lt;/var&amp;gt; parameter specifies the number of milliseconds waited for each record locking retry wait. ENQTIME can be between 1 and 60000, corresponding to a minimum of 1 millisecond and a maximum of 1 minute. The default value of ENQTIME is 3000 (3 seconds).            &lt;br /&gt;
                                                         &lt;br /&gt;
For example, with ENQTIME = 100 and ENQRETRY = 7, after a record locking conflict occurs the thread will retry 7 times with wait intervals of .1 seconds, and so within at most .7 seconds either the lock becomes available or the conflict triggers an On unit or cancels the request.     &lt;br /&gt;
                                                         &lt;br /&gt;
The ENQTIME parameter may also be reset with $ResetN. &lt;br /&gt;
&lt;br /&gt;
This new parameter is enabled in V7.7 with the application of zap 77z299.&lt;br /&gt;
&lt;br /&gt;
===EVALOPT===&lt;br /&gt;
The new &amp;lt;var&amp;gt;EVALOPT&amp;lt;/var&amp;gt; parameter controls the cancellation of a request on truncation of string data. The default value is 0, and currently there is just one setting, 1, which means &amp;quot;cancel a request if truncation of string data occurs.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
For example, with the default of 0 in place, the following code &amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;    %x is string len 1   &lt;br /&gt;
    %y is string len 2   &lt;br /&gt;
    %y = &#039;ab&#039;            &lt;br /&gt;
    %x = %y              &lt;br /&gt;
    printtext {~} = {%x} &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
would cause silent truncation, and give the result&lt;br /&gt;
    &amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;%x = a &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If &amp;lt;var&amp;gt;EVALOPT&amp;lt;/var&amp;gt; is set to 1, then the above code produces the following message:&lt;br /&gt;
    &amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;M204.0552: Variable too small for result &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and the request is cancelled.&lt;br /&gt;
&lt;br /&gt;
===LFSCB===&lt;br /&gt;
LFSCB, the length of the full screen buffer, now has a new minimum value of 8 ( the previous minimum was 0 ). This change is enabled in v7.7 with the application of zap 77z042, and within V7.6 with the application of zap 76z393.&lt;br /&gt;
&lt;br /&gt;
===MAXPRE, MAXBOUT, MAXSUBT===&lt;br /&gt;
&amp;lt;p&amp;gt;Introduced in zap 77z257.&amp;lt;/p&amp;gt;&lt;br /&gt;
The new &amp;lt;var&amp;gt;MAXPRE&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;MAXBOUT&amp;lt;/var&amp;gt;, and &amp;lt;var&amp;gt;MAXSUBT&amp;lt;/var&amp;gt; parameters can be used to cancel a runaway transaction and prevent it from filling the checkpoint data set. &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;MAXPRE&amp;lt;/var&amp;gt;:  Maximum number of pre-images per transaction.  &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;MAXBOUT&amp;lt;/var&amp;gt;: Maximum number of backout pages per transaction. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;MAXSUBT&amp;lt;/var&amp;gt;: Maximum number of subtransaction checkpoints that a transaction can span.&amp;lt;/li&amp;gt;&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;Each new parameter defaults to unlimited. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;If a parameter value is set, a transaction is cancelled if that value is exceeded, and the following message is displayed:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;M204.0524: Maximum number (&amp;lt;i&amp;gt;num&amp;lt;/i&amp;gt;) of &amp;lt;i&amp;gt;parameter&amp;lt;/i&amp;gt; exceeded.&amp;lt;/p&amp;gt;&lt;br /&gt;
where &amp;lt;i&amp;gt;num&amp;lt;/i&amp;gt; is the value set for &amp;lt;i&amp;gt;parameter&amp;lt;/i&amp;gt; (&amp;lt;var&amp;gt;MAXPRE&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;MAXBOUT&amp;lt;/var&amp;gt;, or &amp;lt;var&amp;gt;MAXSUBT&amp;lt;/var&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
===NLDAPBUF===&lt;br /&gt;
This new parameter allows the number of LDAP buffers allocated during startup to be set in CCAIN. The default value is 2, and the settable value can range from 0 to 65535.&lt;br /&gt;
&lt;br /&gt;
===PUPDTH (new minimum value)===&lt;br /&gt;
If a user sets the &amp;lt;var&amp;gt;[[PUPDTH parameter|PUPDTH]]&amp;lt;/var&amp;gt; parameter to 0, it will now automatically be increased to 1, its minimum value.&lt;br /&gt;
&lt;br /&gt;
===SERV4G===&lt;br /&gt;
This parameter allows testing of server tables that span a 4-gigabyte boundary. For example, if &amp;lt;var&amp;gt;SERV4G&amp;lt;/var&amp;gt; is &amp;lt;code&amp;gt;X&#039;FFFFF000&#039;&amp;lt;/code&amp;gt;, each ATB server will begin at &amp;lt;code&amp;gt;XX_FFFFF000&amp;lt;/code&amp;gt;. If SERV4G is &amp;lt;code&amp;gt;X&#039;FFFF0000&#039;&amp;lt;/code&amp;gt;, each ATB server will begin at &amp;lt;code&amp;gt;XX_FFFF0000&amp;lt;/code&amp;gt;. &amp;lt;code&amp;gt;XX&amp;lt;/code&amp;gt; is determined by the storage available on the system. The parameter is set in CCAIN.&lt;br /&gt;
&lt;br /&gt;
The contents of the ATB server are specified by using the &amp;lt;var&amp;gt;[[SERVGA parameter|SERVGA]]&amp;lt;/var&amp;gt; parameter.&lt;br /&gt;
&lt;br /&gt;
For example, if you want VTBL to span the 4G boundary, you can use these settings: &amp;lt;code&amp;gt;SERV4G=X&#039;FFFFF000&#039;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;SERVGA=X&#039;00040000&#039;&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;LVTBL=200 (6400 bytes, X&#039;1900&#039;)&amp;lt;/code&amp;gt;. This will force each server&#039;s VTBL to begin at &amp;lt;code&amp;gt;XX_FFFFF000&amp;lt;/code&amp;gt; and end at &amp;lt;code&amp;gt;XX+1_00000900&amp;lt;/code&amp;gt;.&lt;br /&gt;
===SIRTERM===&lt;br /&gt;
The &amp;lt;var&amp;gt;[[SIRTERM parameter|SIRTERM]]&amp;lt;/var&amp;gt; (Sirius terminal options) parameter settings have changed. &lt;br /&gt;
The changes to &amp;lt;var&amp;gt;SIRTERM&amp;lt;/var&amp;gt; allow a user to preclude a reset to a Model that is not supported by the terminal emulator in use.&lt;br /&gt;
&lt;br /&gt;
The X&#039;01&#039; setting (MODEL 6 support) is no longer used. &lt;br /&gt;
&lt;br /&gt;
The X&#039;02&#039; setting (Write Structured Field Query Support) now supports MODEL 6 terminals by default. &lt;br /&gt;
&lt;br /&gt;
The new X&#039;08&#039; setting  always issues a Write Structured Field Query for Terminal Model Resets for terminals connected to Model 204 through VTAM  or TELNET. This precludes Terminal Model RESETs to Models that are not supported by the terminal emulator in use.&lt;br /&gt;
&lt;br /&gt;
===WEBDFLT===&lt;br /&gt;
At V7.7, the default access rule for non-SSL ports was changed from ALLOW * to DISALLOW *, meaning that unless any ALLOW rules were in place resulting in a login/password prompt, the port couldn&#039;t be accessed. The new &amp;lt;var&amp;gt;[[WEBDFLT_parameter|WEBDFLT]]&amp;lt;/var&amp;gt; parameter may be set to 1 for reversion to the old default of ALLOW *. This new parameter is enabled in V7.7 with the application of zap 77z090. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;var&amp;gt;RESET WEBDFLT&amp;lt;/var&amp;gt; requires system administrator privileges. It is recommended to reset the 1 bit of &amp;lt;var&amp;gt;WEBDFLT&amp;lt;/var&amp;gt; to zero after issuing a series of &amp;lt;var&amp;gt;JANUS DEFINE&amp;lt;/var&amp;gt; commands which need WEBDFLT=1, as in the CCAIN input stream.&lt;br /&gt;
&lt;br /&gt;
==New and changed statistics==&lt;br /&gt;
===MPR, MBO, MCP, and RCV===&lt;br /&gt;
Introduced in zap 77z257.&lt;br /&gt;
&amp;lt;p&amp;gt;These statistics provide high water mark transaction information. (Since-last values will not be available until V78 GA.)&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;They are useful in conjunction with the &amp;lt;var&amp;gt;MAXPRE&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;MAXBOUT&amp;lt;/var&amp;gt;, and &amp;lt;var&amp;gt;MAXSUBT&amp;lt;/var&amp;gt; parameters. &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
User/system statistics:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;MPR: High water mark of transaction pre-images. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;MBO: High water mark of transaction backout pages. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;MCP: High water mark of transaction chkpoint spans. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
System statistics: &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;RCV: Number of blocks needed for subtransaction recovery &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt; &lt;br /&gt;
&amp;lt;p class=&amp;quot;note&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Notes:&amp;lt;/b&amp;gt; M204.0843 now displays the RCV statistic for subtransaction checkpoints.&lt;br /&gt;
The size of recovery checkpoint must be greater than the sum of the last RCV value plus the number of records in [[System_and_media_recovery#RESTART_recovery_considerations_for_sub-transaction_checkpoints|RESTART and RESTARTS]].&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
===DKWTS and DKWTMICS===&lt;br /&gt;
Introduced in zap 77z7289.&lt;br /&gt;
&amp;lt;p&amp;gt;The new system statistics DKWTS (DisK WaiTs) and DKWTMICS (DisK WaiT MICroSeconds) collect data to provide rough disk I/O service time numbers.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
DKWTS shows the number of disk I/O waits. DKWTMICS shows the total wait time for those waits in microseconds. Dividing the difference in DKWTMICS by the difference in DKWTS over an interval provides the average disk I/O wait time in microseconds.              &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;note&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Notes:&amp;lt;/b&amp;gt; &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The wait time does include internal Model 204 scheduler delays, so on a CPU bound Model 204 system, the service times calculated from DKWTS and DKWTMICS are likely to be an overestimate of actual service times.&amp;lt;/li&amp;gt;  &lt;br /&gt;
                                                                    &lt;br /&gt;
&amp;lt;li&amp;gt;DKWTS and DKWTMICS are not available in SirMon; use [[MONITOR_command|MONITOR]] SYSTEM STATISTICS to view these statistics.&amp;lt;/li&amp;gt;&amp;lt;/ul&amp;gt;  &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Compatibility issues==&lt;br /&gt;
===&amp;lt;b id=&amp;quot;listNewInit&amp;quot;&amp;gt;&amp;lt;/b&amp;gt;$ListNew cannot be used in Initial clause===&lt;br /&gt;
It is now a compilation error if &amp;lt;var&amp;gt;$ListNew&amp;lt;/var&amp;gt; is attempted to be used in the &amp;lt;var&amp;gt;Initial&amp;lt;/var&amp;gt; clause of a &lt;br /&gt;
[[Using_variables_and_values_in_computation#Declare_statements_for_.25variables|declaration statement]].&lt;br /&gt;
&amp;lt;p&amp;gt;This change is propagated by zap maintenance to versions 7.5 (zap 75Z487), 7.6 (zap 76Z514), and 7.7 (zap 77z281) of Model 204.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote class=&amp;quot;note&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Note:&amp;lt;/b&amp;gt; Strictly speaking, this would not be considered a compilation error, because previously although &amp;lt;code&amp;gt;..&amp;amp;nbsp;Initial($ListNew)&amp;lt;/code&amp;gt; did not produce a compilation error, in almost all circumstances it would produce a snap if the initialized %variable were used with some other &amp;lt;var&amp;gt;$List&amp;lt;i&amp;gt;xxx&amp;lt;/i&amp;gt;&amp;lt;/var&amp;gt; invocation.&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Restricting the use of the CUSTOM=38 setting===&lt;br /&gt;
The [[CUSTOM parameter|CUSTOM=38]] parameter setting, introduced at V7.5, inadvertently provided System Manager privileges to all users via the RESET command. This CUSTOM setting is now restricted to the RESETting of the LAUDIT parameter.&lt;br /&gt;
&lt;br /&gt;
===Disabling of Closure support===&lt;br /&gt;
Due to a number of bugs related to Closure support, introduced at V7.7, this feature, which can best be described as exposed methods assigned to method variables, has been disabled in this release. This change was also made to V7.7 with application of zap 77z119.&lt;br /&gt;
&lt;br /&gt;
===Password delimiter enforced===&lt;br /&gt;
When using &amp;lt;var&amp;gt;IFSTRTN&amp;lt;/var&amp;gt; to log on to a Model 204 online from an IFAM2 application, both the logonid and password must be followed by a semicolon, which is the delimiter. For example:      &lt;br /&gt;
                                      &lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;CALL IFSTRTN(RC,&#039;logonid;password;&#039;...)&amp;lt;/p&amp;gt;&lt;br /&gt;
                 &lt;br /&gt;
If a semicolon does not follow the password string, the following message will now be issued:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;M204.2964: Password missing or too long &amp;lt;/p&amp;gt;                 &lt;br /&gt;
                                                         &lt;br /&gt;
Previously, a semicolon following the password was not required and the first blank served as a password delimiter.  However, as of V7.7, embedded blanks are valid password characters and a semicolon is now required to delimit the password.&lt;br /&gt;
&lt;br /&gt;
This change is enabled in V7.7 with the application of zap 77z231.&lt;br /&gt;
&lt;br /&gt;
===PAGESZ parameter validated===&lt;br /&gt;
Previously it was possible to set the PAGESZ parameter to any value, although Model 204 internally supports one page size of 6184, and any deviation from this value would have led to problems during file creation. The value of this parameter is now controlled, such that setting it to any value other than 6184 will generate an M204.1149 message with the parameter being reset to 6184.&lt;br /&gt;
&lt;br /&gt;
===ECPRIV and the IDCAMS facility===&lt;br /&gt;
At V7.7 a security loophole was closed, whereby all ECF modules were run under external-authorizer profile of the calling user. Previously any ECF tasks were run under the owning job&#039;s external-authorizer profile, and in order for certain sites to retain that ability, a new setting of ECPRIV, value 4, was introduced to retain the ability to run ECF tasks using the job&#039;s security profile. &lt;br /&gt;
&lt;br /&gt;
The ECPRIV 4 setting potentially introduced a security loophole when calling the IDCAMS interface, based upon what the IDCAMS utility is able to do at a system level. Consequently as of this release, the ECPRIV 4 setting will be ignored when calling the IDCAMS facility via ECF, and such IDCAMS processes will always use the calling user&#039;s security profile. Any existing jobs that use ECF to call the IDCAMS utility with the ECFPRIV 4 bit set should be checked to ensure that the calling user&#039;s security profile still satisfies the job&#039;s requirements.&lt;br /&gt;
&lt;br /&gt;
===TCPOPTS is view-only===&lt;br /&gt;
In previous versions the &amp;lt;var&amp;gt;TCPOPTS&amp;lt;/var&amp;gt; parameter, which identifies the type of IP addressing in use (v4 or v6), was resetable, although it was always documented as a view-only parameter. The parameter is now handled as a view-only parameter, and any attempts to reset the parameter will result in the following message:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;gt;   M204.1123: Parameter TCPOPTS not reset&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===ZHPF command can only be issued by a system manager===&lt;br /&gt;
In previous versions it was possible to issue the ZHPF command without being logged on. From this release onwards, a user would have to be logged on with system manager privileges to be able to issue this command.&lt;br /&gt;
&lt;br /&gt;
Additionally, the command output will now only  display results for currently open files.&lt;br /&gt;
&lt;br /&gt;
This change is enabled in v7.7 with the application of zap 77z264.&lt;br /&gt;
&lt;br /&gt;
===Terminal MODEL reset failure===&lt;br /&gt;
If a reset of the terminal MODEL parameter fails due to an undersized output page buffer, then in addition to the existing messages that inform the user of this failure:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;gt;    M204.1875 UNABLE TO RESET MODEL TO %C &lt;br /&gt;
    M204.1123: Parameter MODEL not reset&amp;lt;/p&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
the following message will now be issued:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;gt;    M204.1008: LOUTPB must be increased to at least &amp;lt;number&amp;gt; &amp;lt;/p&amp;gt;&lt;br /&gt;
                                                         &lt;br /&gt;
where &amp;lt;number&amp;gt; is the minimum value of LOUTPB necessary to support the terminal model.&lt;br /&gt;
&lt;br /&gt;
This change is enabled in V7.7 with the application of zap 77z309.&lt;br /&gt;
&lt;br /&gt;
==Notes for system manager and installer==&lt;br /&gt;
===CRAM SVC installation is deprecated===&lt;br /&gt;
The CRAM SVC installation has been deprecated as of version 7.5. &amp;lt;br /&amp;gt;Installation of CRAM-XDM is described as part of the [[Model 204 installation]].&lt;br /&gt;
===Authorization and maintenance zaps===&lt;br /&gt;
When you download Rocket M204 product object files, all relevant authorization keys and all current maintenance zaps are pre-applied to the object files as part of the download process.&lt;br /&gt;
&lt;br /&gt;
==New and changed messages==&lt;br /&gt;
&lt;br /&gt;
See [[New and updated messages in Model 204 version 7.8|New and updated messages in Model 204 version 7.8]] for details.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category: Release notes]]&lt;/div&gt;</summary>
		<author><name>ELowell</name></author>
	</entry>
	<entry>
		<id>https://m204wiki.rocketsoftware.com/index.php?title=New_and_updated_messages_in_Model_204_version_7.8&amp;diff=117740</id>
		<title>New and updated messages in Model 204 version 7.8</title>
		<link rel="alternate" type="text/html" href="https://m204wiki.rocketsoftware.com/index.php?title=New_and_updated_messages_in_Model_204_version_7.8&amp;diff=117740"/>
		<updated>2019-12-14T00:20:12Z</updated>

		<summary type="html">&lt;p&gt;ELowell: /* M204.2971  Unable to reset Model: reason */  deleted&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt; &lt;br /&gt;
[[Release notes for Model 204 version 7.8|Back to release notes]]&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;div class=&amp;quot;noautonum&amp;quot;&amp;gt;__TOC__&amp;lt;/div&amp;gt;&lt;br /&gt;
This topic lists messages that were added or changed for Model 204 version 7.8.&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;&amp;lt;b&amp;gt;******THIS IS A DRAFT DOCUMENT.******&amp;lt;/b&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
==M204 messages==&lt;br /&gt;
===&amp;lt;b id=&amp;quot;M204.0141:&amp;quot;&amp;gt;&amp;lt;/b&amp;gt;M204.0141: Bug .. duplicate file name in checkpoint record===&lt;br /&gt;
&amp;lt;P&amp;gt;&lt;br /&gt;
A duplicate file name was encountered while attempting to add a deferred update data set to the file directory during recovery. This indicates a potential bug in the Model 204 software. &amp;lt;/P&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;System manager response:&amp;lt;/b&amp;gt; Contact [[Contacting Rocket Software Technical Support|Technical Support]] with the following documentation: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Audit trail from the previous run &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Journal from the previous run &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Operator response:&amp;lt;/b&amp;gt; Notify the system manager. &amp;lt;/p&amp;gt;&lt;br /&gt;
{{Template:M204.0141 footer}}&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;b id=&amp;quot;M204.0143:&amp;quot;&amp;gt;&amp;lt;/b&amp;gt;M204.0143: No files changed after last checkpoint​,​ RESTART bypassed===&lt;br /&gt;
&amp;lt;P&amp;gt;This message indicates that no updates were detected while scanning the checkpoint data set beyond the last checkpoint or the specified checkpoint. &amp;lt;/P&amp;gt;&lt;br /&gt;
{{Template:M204.0143 footer}}&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;b id=&amp;quot;M204.0165:&amp;quot;&amp;gt;&amp;lt;/b&amp;gt;M204.0165: Missing an update unit from ICL (InComplete List)===&lt;br /&gt;
&amp;lt;P&amp;gt;&lt;br /&gt;
While scanning the CCARF data set, Model&amp;amp;nbsp;204 has detected the end of an update unit for which no corresponding start of update unit was found. Possible explanations for this error are: &amp;lt;/P&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;A utility program was used to copy the original journal to data set being used as CCARF, and a portion of the original data set was not copied. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;A copy was not done. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;System manager response:&amp;lt;/b&amp;gt; If the original journal was a multi-volume data set and was copied to another data set for input to this run, verify that all volumes were in fact copied, and rerun the job. If CCARF was the original data set, contact [[Contacting Rocket Software Technical Support|Technical Support]]. Have the following documentation available: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Audit trail of the original run &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Snap &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;UTILJ of the CCARF data set or a copy of this data set on tape &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;UTILC of the restart data set or a copy of this data set on tape &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
{{Template:M204.0165 footer}}&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;b id=&amp;quot;M204.0352:&amp;quot;&amp;gt;&amp;lt;/b&amp;gt;M204.0352: IODEV​=​nn​,​ Ok uuuuuuuuuu aaaaaaaaaa llllll yy.ddd mmm dd hh.mm.ss ccc nnnnnnnn===&lt;br /&gt;
&lt;br /&gt;
The layout of this message has been reformatted to accommodate five digit user numbers.&lt;br /&gt;
&lt;br /&gt;
{{Template:M204.0352 footer}}&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;b id=&amp;quot;M204.0479:&amp;quot;&amp;gt;&amp;lt;/b&amp;gt;M204.0479: process group not found: &amp;lt;i&amp;gt;processgroupname&amp;lt;/i&amp;gt;===&lt;br /&gt;
 &lt;br /&gt;
A &amp;lt;var&amp;gt;[[Statement syntax#TRANSFER|TRANSFER]]&amp;lt;/var&amp;gt; statement was evaluated, resulting in an attempt to perform a VTAM trusted logon in another Online (the target Online).  The &amp;lt;var&amp;gt;PARTNER&amp;lt;/var&amp;gt; processgroup, identified in the &amp;lt;var&amp;gt;[[DEFINE PROCESS command: Transfer Control partner|DEFINE PROCESS]]&amp;lt;/var&amp;gt; command in the transferring Online, was not found in the target Online.  As a result, the TRANSFER fails and the user remains in the transferring online.&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;b&amp;gt;System manager response:&amp;lt;/b&amp;gt; The &amp;lt;code&amp;gt;PARTNER=&amp;lt;/code&amp;gt; token in the &amp;lt;var&amp;gt;DEFINE PROCESS&amp;lt;/var&amp;gt; command of the transferring Online has an incorrect value for &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;processgroupName&amp;lt;/var&amp;gt;. Check the spelling to ensure that it is the correct name of the intended processgroup in the target Online.&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;b&amp;gt;Return codes:&amp;lt;/b&amp;gt; I 0 0 AUDITMS&lt;br /&gt;
----&lt;br /&gt;
 &lt;br /&gt;
===&amp;lt;b id=&amp;quot;M204.0480:&amp;quot;&amp;gt;&amp;lt;/b&amp;gt;M204.0480: Invalid backpage request: backPage===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
A backpage command of the form &amp;lt;var&amp;gt;P -&amp;lt;i&amp;gt;n&amp;lt;/i&amp;gt;&amp;lt;/var&amp;gt; or &amp;lt;var&amp;gt;P +&amp;lt;i&amp;gt;n&amp;lt;/i&amp;gt;&amp;lt;/var&amp;gt; was issued, but &amp;lt;var&amp;gt;[[NBKPG parameter|NBKPG]]&amp;lt;/var&amp;gt; is 0, or the value of &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;n&amp;lt;/var&amp;gt; is invalid. The command is echoed in hex, so you can see exactly what was entered. For example, if &amp;lt;code&amp;gt;P -99&amp;lt;/code&amp;gt; was issued but &amp;lt;var&amp;gt;NBKPG&amp;lt;/var&amp;gt; is 50, then the following message would be issued:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;M204.0480: Invalid backpage request: P -99(X&#039;D74060F9F9&#039;)&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Response:&amp;lt;/b&amp;gt; Correct the backpage command, or set &amp;lt;var&amp;gt;NBKPG&amp;lt;/var&amp;gt; greater than 0.&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
{{Template:M204.0480 footer}}&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;b id=&amp;quot;M204.0481:&amp;quot;&amp;gt;&amp;lt;/b&amp;gt;M204.0481: Procedure procName in subsysName could not be made resident; increase RESPAGE or RESSIZE ===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The named procedure in the named subsystem could not be made resident in resident request storage. &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Response:&amp;lt;/b&amp;gt; Increase the size of resident request storage with a &amp;lt;var&amp;gt;[[RESSIZE parameter|RESSIZE]]&amp;lt;/var&amp;gt; or &amp;lt;var&amp;gt;[[RESPAGE parameter|RESPAGE]]&amp;lt;/var&amp;gt; parameter in CCAIN. &amp;lt;var&amp;gt;RESSIZE&amp;lt;/var&amp;gt; (below-the-bar storage) can be dynamically reset, but &amp;lt;var&amp;gt;RESPAGE&amp;lt;/var&amp;gt; (above-the-bar storage) cannot.&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
{{Template:M204.0481 footer}}&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;b id=&amp;quot;M204.0541:Procedure&amp;quot;&amp;gt;&amp;lt;/b&amp;gt;M204.0541:Procedure is in use: procedure===&lt;br /&gt;
&amp;lt;P&amp;gt;The procedure named in the message is currently in use by another user. The command entered cannot be processed until the procedure is no longer in use. &amp;lt;/P&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;b&amp;gt;Response:&amp;lt;/b&amp;gt; Retry the command when the procedure is no longer in use. &amp;lt;/p&amp;gt;&lt;br /&gt;
{{Template:M204.0541 footer}}&lt;br /&gt;
 &lt;br /&gt;
===&amp;lt;b id=&amp;quot;M204.0569:&amp;quot;&amp;gt;&amp;lt;/b&amp;gt;M204.0569: File filename?,? Find: Table B records to be searched ?=? number===&lt;br /&gt;
The message test now includes the filename, to help track down the cause of the direct search. This change has been enabled within v7.7 with the application of zap 77z032, and within V7.6 with the application of zap 76z386.&lt;br /&gt;
{{Template:M204.0569 footer}}&lt;br /&gt;
 &lt;br /&gt;
===&amp;lt;b id=&amp;quot;M204.1070:&amp;quot;&amp;gt;&amp;lt;/b&amp;gt;M204.1070: ALLOCATE ddName failed - reason===&lt;br /&gt;
This message has been changed to add the ddname of the failing dataset to the message text. &lt;br /&gt;
{{Template:M204.1070 footer}}&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;b id=&amp;quot;M204.1500:&amp;quot;&amp;gt;&amp;lt;/b&amp;gt;M204.1500: &amp;lt;i&amp;gt;token&amp;lt;/i&amp;gt; ===&lt;br /&gt;
&amp;lt;p&amp;gt;Message M204.1500: &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;token&amp;lt;/var&amp;gt; has a new form relevant to the [https://m204wiki.rocketsoftware.com/index.php/CA-ACF2_MVS_interface CA-ACF2 MVS], [https://m204wiki.rocketsoftware.com/index.php/CA-ACF2_VM_interface CA-ACF2 VM], [https://m204wiki.rocketsoftware.com/index.php/Security_Server_(formerly_RACF)_interface Security Server (formerly RACF)], and [https://m204wiki.rocketsoftware.com/index.php/CA-Top_Secret_interface CA-Top Secret] Model 204 security interfaces.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;p&amp;gt;When the default user fails to log in, the security interface is operational but CCASTAT logons are not allowed. The following error message is displayed:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;M204.1500: CCASTAT logons not allowed&amp;lt;/p&amp;gt;&lt;br /&gt;
{{Template:M204.1500 footer}}&lt;br /&gt;
&amp;lt;!-- skeleton as it was in pdf/message number message text /--&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;b id=&amp;quot;M204.1899&amp;quot;&amp;gt;&amp;lt;/b&amp;gt;M204.1899 Transfer statement from sourceVtamName to targetVtamName complete​,​ User userId disconnected===&lt;br /&gt;
The message, issued when a VTAM Transfer statement completes, now contains the source and target VTAM names for the transfer process. &lt;br /&gt;
&lt;br /&gt;
The change in message text is enabled within V7.7 with the application of zap 77z310.&lt;br /&gt;
{{Template:M204.1899 footer}}&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;b id=&amp;quot;M204.1900&amp;quot;&amp;gt;&amp;lt;/b&amp;gt;M204.1900 User userId transferred to targetVtamName from sourceVtamName===&lt;br /&gt;
This message, issued on the target ONLINE when a user has transferred to that ONLINE, now displays the source and target VTAM names involved in the VTAM Transfer.&lt;br /&gt;
&lt;br /&gt;
The change in message text is enabled within V7.7 with the application of zap 77z310.&lt;br /&gt;
{{Template:M204.1900 footer}}&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;b id=&amp;quot;M204.2020&amp;quot;&amp;gt;&amp;lt;/b&amp;gt;M204.2020 File fileName; condition?,? OPEN command rejected===&lt;br /&gt;
The first change to this message is that the filename of the affected file is now displayed at the beginning of the message text.&lt;br /&gt;
 &lt;br /&gt;
The second change is that a second error type affecting file opens is now support. The original error type of &amp;quot;Unsupported device for Model 204 database %F&amp;quot; was reported for all condition,s even where the device type wasn&#039;t the underlying issue. Whilst this error type has been retained for conditions where it is valid, a new error type of &amp;quot;DDNAME not found&amp;quot; is now available for the message. Thus, in a situation where one thread is attempting to allocate a ddname, and another thread in parallel is trying to open a file with the same ddname, the following message variant may be produced&lt;br /&gt;
 &lt;br /&gt;
M204.2020: File filename; DDNAME not found, OPEN command rejected&lt;br /&gt;
 &lt;br /&gt;
{{Template:M204.2020 footer}}&lt;br /&gt;
 &lt;br /&gt;
===&amp;lt;b id=&amp;quot;M204.2700&amp;quot;&amp;gt;&amp;lt;/b&amp;gt;M204.2700 CHECKPOINT command ignored: sub-transaction checkpoint in progress===&lt;br /&gt;
&amp;lt;P&amp;gt;&lt;br /&gt;
A &amp;lt;code&amp;gt;[[CHECKPOINT_command|CHECKPOINT]] (TRAN | SUBTRAN | ABORT)&amp;lt;/code&amp;gt; command was issued while the system was taking a sub-transaction checkpoint. The command is ignored. If this message was issued in response to a &amp;lt;code&amp;gt;CHECKPOINT ABORT&amp;lt;/code&amp;gt; command, the&lt;br /&gt;
sub-transaction in progress has passed that phase of its processing during which it can be aborted.&lt;br /&gt;
&amp;lt;/P&amp;gt;&lt;br /&gt;
{{Template:M204.2700 footer}}&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;b id=&amp;quot;M204.2964&amp;quot;&amp;gt;&amp;lt;/b&amp;gt;M204.2964  Password missing or too long===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
A password string within an IFSTRTN call has not been delimited with a semicolon.&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Response:&amp;lt;/b&amp;gt;&lt;br /&gt;
Ensure that the password string is delimited by a semicolon, as in the following example&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;gt;CALL IFSTRTN(RC,&#039;logonid;password;&#039;...)&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;b&amp;gt;Version introduced:&amp;lt;/b&amp;gt;&lt;br /&gt;
7.8&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Return codes:&amp;lt;/b&amp;gt; E 00 04 AUDITMS NOCOUNT&lt;br /&gt;
 &lt;br /&gt;
===&amp;lt;b id=&amp;quot;M204.2965&amp;quot;&amp;gt;&amp;lt;/b&amp;gt;M204.2965  Unable to cleanly close log file(s)===&lt;br /&gt;
&amp;lt;p&amp;gt;Introduced in zap 77z243.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;This message causes a snap/dump if the log file (such as a journal, jlog, or checkpoint) cannot be cleanly quiesced when bringing down an Online. The problem with the log file is rare but caused a hang further along in processing. This message causes a snap/dump much closer to the time of error, making it easier to diagnose the problem.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;b&amp;gt;Response:&amp;lt;/b&amp;gt; Use the snap/dump generated by the message to diagnose the cause of the error.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Return codes:&amp;lt;/b&amp;gt; E 88 88 DUMP SNAP AUDITAD NOTERM OPR&lt;br /&gt;
----&lt;br /&gt;
 &lt;br /&gt;
===&amp;lt;b id=&amp;quot;M204.2966&amp;quot;&amp;gt;&amp;lt;/b&amp;gt;M204.2966  &amp;lt;i&amp;gt;what&amp;lt;/i&amp;gt; line &amp;lt;i&amp;gt;number?&amp;lt;/i&amp;gt;,? procedure &amp;lt;i&amp;gt;proc&amp;lt;/i&amp;gt; in file &amp;lt;i&amp;gt;file&amp;lt;/i&amp;gt;===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
This message provides diagnostic information following various types of error messages. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The first M204.2966 message after an error has &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;what&amp;lt;/var&amp;gt; set to &amp;lt;code&amp;gt;Error at&amp;lt;/code&amp;gt;. Subsequent M204.2966 messages (if any) have &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;what&amp;lt;/var&amp;gt; set to &amp;lt;code&amp;gt;Called from&amp;lt;/code&amp;gt;. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
&amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;number&amp;lt;/var&amp;gt;, &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;proc&amp;lt;/var&amp;gt;, and &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;file&amp;lt;/var&amp;gt; indicate the line number, procedure, and file where the error occurred or from where the previous M204.2966 entry was called. Essentially, this provides a call stack trace to aid in diagnosing problems. No more than 20 levels of calls are shown for an error. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Response:&amp;lt;/b&amp;gt; Use the M204.2966 messages after an error to try to diagnose the cause of the error.&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
{{Template:M204.2966 footer}}&lt;br /&gt;
----&lt;br /&gt;
===&amp;lt;b id=&amp;quot;M204.2967&amp;quot;&amp;gt;&amp;lt;/b&amp;gt;M204.2967  &amp;lt;i&amp;gt;what&amp;lt;/i&amp;gt; line &amp;lt;i&amp;gt;number&amp;lt;/i&amp;gt; of command level program===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
This message provides diagnostic information after various types of error messages. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The first M204.2967 message after an error has &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;what&amp;lt;/var&amp;gt; set to &amp;lt;code&amp;gt;Error at&amp;lt;/code&amp;gt; and subsequent M204.2967 messages (if any) have &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;what&amp;lt;/var&amp;gt; set to &amp;lt;code&amp;gt;Called from&amp;lt;/code&amp;gt;. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
&amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;number&amp;lt;/var&amp;gt; indicates the line number for a command line program (counting from the &amp;lt;var&amp;gt;Begin&amp;lt;/var&amp;gt;) where the error occurred, or where the previous [[M204.2966]] entry was called from. Essentially, this provides a call stack trace to aid in diagnosing problems. No more than 20 levels of calls are shown for an error. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Response:&amp;lt;/b&amp;gt; Use the M204.2967 (and M204.2966, if any) after an error to try to diagnose the cause of the error.&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
{{Template:M204.2967 footer}}&lt;br /&gt;
----&lt;br /&gt;
===&amp;lt;b id=&amp;quot;M204.2968&amp;quot;&amp;gt;&amp;lt;/b&amp;gt;M204.2968  &amp;lt;i&amp;gt;what&amp;lt;/i&amp;gt;: no debug info===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
An error message (immediately preceding M204.2968) was issued, but insufficient compile-time information was collected to provide the diagnostic information provided in the [[M204.2966]] and [[M204.2967]] messages.&lt;br /&gt;
To get that additional information to help diagnose the problem, set the [[SIRFACT parameter|SIRFCAT X&#039;01&#039;]] bit if authorized for [[SirFact]], or set the [[DEBUGUL parameter]] to a non-zero value. The latter requires no product authorization, but it does increase QTBL requirements. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Response:&amp;lt;/b&amp;gt; If you are unable to diagnose the problem, consider setting one of the parameters described above to aid in problem diagnosis.&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
{{Template:M204.2968 footer}}&lt;br /&gt;
----&lt;br /&gt;
===&amp;lt;b id=&amp;quot;M204.2969&amp;quot;&amp;gt;&amp;lt;/b&amp;gt;M204.2969  MBSCAN (&amp;lt;i&amp;gt;mbscan&amp;lt;/i&amp;gt;) exceeded?,? records to be searched ?=? &amp;lt;i&amp;gt;number&amp;lt;/i&amp;gt;===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
A Table B scan would exceed the setting of &amp;lt;var&amp;gt;[[MBSCAN parameter|MBSCAN]]&amp;lt;/var&amp;gt;, so the request is cancelled. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Response:&amp;lt;/b&amp;gt; Correct the &amp;lt;var&amp;gt;Find&amp;lt;/var&amp;gt; statement at the line indicated by the following [[M204.2966]] message (hopefully available), or increase &amp;lt;var&amp;gt;MBSCAN&amp;lt;/var&amp;gt; to tolerate the number of scanned records, if reasonable.&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
{{Template:M204.2969 footer}}&lt;br /&gt;
----&lt;br /&gt;
===&amp;lt;b id=&amp;quot;M204.2970&amp;quot;&amp;gt;&amp;lt;/b&amp;gt;M204.2970  Maximum call stack limit (&amp;lt;i&amp;gt;limit&amp;lt;/i&amp;gt;) reached===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The number of messages describing the call stack reached the maximum allowed for such messages (currently 20). This message is largely informational; it is more useful to focus on the preceding [[M204.2966]] messages. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Response:&amp;lt;/b&amp;gt; Examine the preceding M204.2966 messages.&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
{{Template:M204.2970 footer}}&lt;br /&gt;
==MSIR messages==&lt;br /&gt;
===&amp;lt;b id=&amp;quot;MSIR.0942&amp;quot;&amp;gt;&amp;lt;/b&amp;gt;MSIR.0942  Debugger token0 port defaulted to token2===&lt;br /&gt;
This message has been changed from an error message to an informational message&lt;br /&gt;
{{Template:MSIR.0942 footer}}&lt;/div&gt;</summary>
		<author><name>ELowell</name></author>
	</entry>
	<entry>
		<id>https://m204wiki.rocketsoftware.com/index.php?title=Release_notes_for_Model_204_version_7.8&amp;diff=117739</id>
		<title>Release notes for Model 204 version 7.8</title>
		<link rel="alternate" type="text/html" href="https://m204wiki.rocketsoftware.com/index.php?title=Release_notes_for_Model_204_version_7.8&amp;diff=117739"/>
		<updated>2019-12-14T00:06:43Z</updated>

		<summary type="html">&lt;p&gt;ELowell: /* SERV4G */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;&amp;lt;b&amp;gt;******THIS IS A DRAFT DOCUMENT.******&amp;lt;/b&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
These release notes list the enhancements and other changes contained in Model 204 version 7.8, &amp;lt;b&amp;gt;&amp;lt;i&amp;gt;which is still in development&amp;lt;/i&amp;gt;&amp;lt;/b&amp;gt;. Until the commercial release of the software, Rocket reserves the right to add to, remove, or change anything described herein. &lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
These release notes contain installation and features information for the Rocket Model 204 version 7.8 release.&lt;br /&gt;
Before beginning your installation, please read through this information about product installation and changes.&lt;br /&gt;
&lt;br /&gt;
==New in this release==&lt;br /&gt;
The table below cites some highlights of Model&amp;amp;nbsp;204 version 7.8. For a full list of features, refer to the Table of Contents. &lt;br /&gt;
&amp;lt;p&amp;gt;See also the [[#Compatibility Issues|Compatibility]] section for possible issues.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;tr class=&amp;quot;head&amp;quot;&amp;gt;&amp;lt;th&amp;gt;Category&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Feature&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;SOUL&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The new [[#AmIndependent method|AmIndependent]] method returns TRUE for daemons spawned by RunIndependently.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The Object class now supports the [[#Support for copying Object class objects|copy and deepCopy methods]].&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Janus Web&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[[#Web Sockets|Janus Web Sockets]] are now supported.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td nowrap&amp;gt;Networking&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Note:&amp;lt;/b&amp;gt; The two-phase commit and commit exits features are licensed and purchased separately from Model 204.&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Two-phase commit. A Model 204 online can now be configured to use two-phase commit (2PC). The Janus internal socket API is used for the calls to the coordinator. JANUS commands are used for all 2PC configuration. A new JANUS port type has been added, 2PC.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Commit exits are now supported. The commit exit runs within the APSY, which is defined by the &amp;lt;var&amp;gt;COMMITX&amp;lt;/var&amp;gt; parameter and uses normal APSY processing.  &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;ECF tables&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The new &amp;lt;var&amp;gt;DISPLAY ECF&amp;lt;/var&amp;gt; command and &amp;lt;var&amp;gt;EXTERNAL REMOVE&amp;lt;/var&amp;gt; statement enable more efficient management of [[#Managing ECF tables more efficiently|ECF tables]].&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Performance&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[[#MP/204 offload improvements|MP/204 offload improvements]] -- application code for these SOUL statements is now fully offloadable: &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;File Records In/On&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Remember&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Position&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Sort Values&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Reset Header/Trailer&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Find and Print Count&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Find All Values&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;For Each Value&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Security&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;CA-Top Secret can [[#CA-Top Secret can disallow CCASTAT logins|disallow CCASTAT logins]].&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[[#DEFUSER can specify a jobname not authorized to access M204|DEFUSER]] can specify a jobname not authorized to access M204.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td nowrap&amp;gt;System enhancements&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The &amp;lt;var&amp;gt;MONITOR USERS&amp;lt;/var&amp;gt; command output displays [[#New wait types for daemon/master waits|two new wait types]].&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td nowrap&amp;gt;AUDIT204 enhancements&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The new TIMEHH parameter on the &amp;lt;var&amp;gt;[[#FORMAT command|FORMAT]]&amp;lt;/var&amp;gt; command of the AUDIT204 utility provides greater time stamp precision.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td nowrap&amp;gt;New commands&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;[[#DISPLAY ECF|DISPLAY ECF]]&amp;lt;/var&amp;gt; displays details from ECF tables, or the current status of users accessing ECF modules.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td nowrap&amp;gt;New parameters&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;[[#ENQTIME|ENQTIME]]&amp;lt;/var&amp;gt; specifies the number of milliseconds waited for each record locking retry wait.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;[[#EVALOPT|EVALOPT]]&amp;lt;/var&amp;gt; controls the cancellation of a request on truncation of string data.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;[[#MAXPRE, MAXBOUT, MAXSUBT|MAXPRE, MAXBOUT, and MAXSUBT]]&amp;lt;/var&amp;gt; can be used to cancel a runaway transaction and prevent it from filling the checkpoint data set.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;[[#NLDAPBUF|NLDAPBUF]]&amp;lt;/var&amp;gt; allows the number of LDAP buffers allocated during startup to be set in CCAIN.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;[[#SERV4G|SERV4G]]&amp;lt;/var&amp;gt; allows testing of server tables that span a 4-gigabyte boundary.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;[[#WEBDFLT|WEBDFLT]]&amp;lt;/var&amp;gt; changes the default JANUS WEB ALLOW rule back to ALLOW.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td nowrap&amp;gt;Janus and TN3270 debuggers&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The debuggers can now view or watch the values of [[#Access to exposed variables|variables exposed to local routines/methods]].&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;When execution pauses, the debuggers now [[#Subroutine or method display|display the subroutine or method]] being executed.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td nowrap&amp;gt;User/system statistics&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;[[#MPR, MBO, MCP, and RCV|MPR, MBO, MCP, and RCV]]&amp;lt;/var&amp;gt; provide high water mark transaction information in conjunction with the &amp;lt;var&amp;gt;MAXPRE&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;MAXBOUT&amp;lt;/var&amp;gt;, and &amp;lt;var&amp;gt;MAXSUBT&amp;lt;/var&amp;gt; parameters. &lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[[#DKWTS and DKWTMICS|New system statistics]] DKWTS (DisK WaiTs) and DKWTMICS (DisK WaiT MICroSeconds) collect data to provide rough disk I/O service time numbers.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Operating system and hardware requirements==&lt;br /&gt;
&lt;br /&gt;
===Operating system requirements===&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;IBM z/OS versions supported:&amp;lt;/b&amp;gt; &lt;br /&gt;
  &amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;All IBM supported releases up to and including z/OS 2.3. &amp;lt;br /&amp;gt;(For z/OS 2.2, see [[IBM z/OS 2.2 PTF requirement]].)&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;p&amp;gt;Version 1.07 is sufficient for all functionality except for the following features:&amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;ul&amp;gt;&lt;br /&gt;
    &amp;lt;li&amp;gt;zHPF support requires version [[IBM z/OS 2.1 compatibility issue|2.1]].&amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;li&amp;gt;Large (1 MB) page support requires version 1.9.&amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;li&amp;gt;Extended address volumes (EAV) requires version 1.12.&amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;/ul&amp;gt;&lt;br /&gt;
  &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
On z/OS, Model 204 release 7.8 operates as an APF authorized load module, as required by many 7.8 features. &amp;lt;br /&amp;gt;&lt;br /&gt;
To run Model 204 unauthorized, [[Contacting Rocket Software Technical Support|contact Technical Support]].&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;IBM z/VM versions supported:&amp;lt;/b&amp;gt; &lt;br /&gt;
  &amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;All IBM supported releases up to and including z/VM 6.4.&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;IBM z/VSE versions supported:&amp;lt;/b&amp;gt;&lt;br /&gt;
  &amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;All IBM supported releases up to and including z/VSE 6.1.&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Hardware requirements===&lt;br /&gt;
 &lt;br /&gt;
In general, Model 204 version 7.8 requires the IBM z/890 or above processor.&lt;br /&gt;
&amp;lt;p&amp;gt;However, the IBM z10 or above processor is required for the following features:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;large (1 MB) page support&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;IBM&#039;s High Performance FICON (zHPF) support&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Connect&amp;lt;sup&amp;gt;&amp;amp;#9733;&amp;lt;/sup&amp;gt; compatibility with Model 204===&lt;br /&gt;
&lt;br /&gt;
Connect&amp;lt;span class=&amp;quot;superstar&amp;quot;&amp;gt;&amp;amp;#9733;&amp;lt;/span&amp;gt; version 7.5 or 7.7 is compatible with Model 204 version 7.8.&lt;br /&gt;
&lt;br /&gt;
For more information on Connect&amp;lt;span class=&amp;quot;superstar&amp;quot;&amp;gt;&amp;amp;#9733;&amp;lt;/span&amp;gt; installation, see the [[:Category:Connect*|Connect&amp;lt;span class=&amp;quot;superstar&amp;quot;&amp;gt;&amp;amp;#9733;&amp;lt;/span&amp;gt; wiki pages]].&lt;br /&gt;
&lt;br /&gt;
==SOUL (User Language) enhancements==&lt;br /&gt;
===AmIndependent method===&lt;br /&gt;
The &amp;lt;var&amp;gt;AmIndependent&amp;lt;/var&amp;gt; method returns TRUE for daemons spawned by &amp;lt;var&amp;gt;[[RunIndependently_(Daemon_subroutine)|RunIndependently]]&amp;lt;/var&amp;gt;. (The action of &amp;lt;var&amp;gt;[[AmDaemon_(Daemon_property)|AmDaemon]]&amp;lt;/var&amp;gt; remains unchanged.)&lt;br /&gt;
&lt;br /&gt;
The following table shows the values returned by &amp;lt;var&amp;gt;AmIndependent&amp;lt;/var&amp;gt; versus &amp;lt;var&amp;gt;AmDaemon&amp;lt;/var&amp;gt; for different daemon types:&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Type&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;AmDaemon&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;AmIndependent&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;$COMBG&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;False&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;False&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Independent daemon&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;False&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;True&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Other daemon&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;True&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;False&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Web, etc.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;False&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;False&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===$ProcOpn===&lt;br /&gt;
&amp;lt;var&amp;gt;[[$ProcOpn|$ProcOpn]]&amp;lt;/var&amp;gt; now supports the opening of a procedure with an all-numeric name, and including a leading zero, such as:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;%result = $procOpn(&#039;0123&#039;, &#039;MYFILE&#039;)&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Support for such procedure names was initially introduced at V7.7, and this feature of &amp;lt;var&amp;gt;$ProcOpn&amp;lt;/var&amp;gt; is enabled in V7.7 with the application of zap 77z054.&lt;br /&gt;
&lt;br /&gt;
===Allow parentheses to surround a boolean enumeration object===&lt;br /&gt;
The following sample code:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;   begin                                       &lt;br /&gt;
   variables are undefined                  &lt;br /&gt;
   %isValid is boolean initial (True)       &lt;br /&gt;
   if (%isValid) then                  &lt;br /&gt;
      print &#039;in IF&#039;                            &lt;br /&gt;
   end if                                   &lt;br /&gt;
   end   &amp;lt;/p&amp;gt;      &lt;br /&gt;
&lt;br /&gt;
will now compile and run successfully, since this syntax: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;if (%isValid) then &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
is logically equivalent to this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;if %isValid then &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Prior to V7.8 the presence of parentheses surrounding the boolean enumeration object would have caused a compilation error. This change is enabled in V7.7 with the application of zap 77z370.&lt;br /&gt;
&lt;br /&gt;
===Support for copying Object class objects===&lt;br /&gt;
The Object class now supports the copy and deepCopy methods. For example, an Object object can be copied as follows:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;   begin               &lt;br /&gt;
   %x is object object &lt;br /&gt;
   %y is object object &lt;br /&gt;
   %y = new            &lt;br /&gt;
   %x = %y:copy        &lt;br /&gt;
   end &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This change is enabled in v7.7 with the application of zap 77z076, and within V7.6 with the application of zap 76z412.&lt;br /&gt;
&lt;br /&gt;
===Assignment of enumeration values to method variables===&lt;br /&gt;
Enumerations values can now be assigned to method variables whose result is an enumeration. So, for example, the following code:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;   begin                                               &lt;br /&gt;
   enumeration colour                                  &lt;br /&gt;
      public                                           &lt;br /&gt;
         value red                                     &lt;br /&gt;
         value white                                   &lt;br /&gt;
         value blue                                    &lt;br /&gt;
      end public                                       &lt;br /&gt;
   end enumeration                                     &lt;br /&gt;
   %func    is function getColour is enumeration colour&lt;br /&gt;
   local function getColour is enumeration colour      &lt;br /&gt;
      return blue                                      &lt;br /&gt;
   end function                                        &lt;br /&gt;
   %func    = getColour                                &lt;br /&gt;
   %func    = (colour):red                             &lt;br /&gt;
   printText {~=%(Local):(%func)}                      &lt;br /&gt;
   end  &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
will produce this result:&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt; %(Local):(%func)=red &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
whereas previously this line:   &lt;br /&gt;
&lt;br /&gt;
  &amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt; %func    = (colour):red &amp;lt;/p&amp;gt;   &lt;br /&gt;
&lt;br /&gt;
would have been rejected with this message:&lt;br /&gt;
&lt;br /&gt;
   &amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;MSIR.0993: Assignment invalid: mismatch between method and method variable &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This change is enabled in V7.7 with the application of zap 77z128.&lt;br /&gt;
&lt;br /&gt;
===Optional output method parameters===&lt;br /&gt;
Prior to this release output parameters could not be optional or have default values. In this release output parameters can be specified as &amp;lt;var&amp;gt;Optional&amp;lt;/var&amp;gt;, and a default value can be specified with &amp;lt;var&amp;gt;Default&amp;lt;/var&amp;gt;. One related change is that if a &amp;lt;var&amp;gt;Len&amp;lt;/var&amp;gt; value is specified with &amp;lt;var&amp;gt;Optional&amp;lt;/var&amp;gt; or &amp;lt;var&amp;gt;Default&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;Output&amp;lt;/var&amp;gt;, it indicates the length of the hidden target for the output parameter if none was passed. For all other &amp;lt;var&amp;gt;Output&amp;lt;/var&amp;gt; parameters, &amp;lt;var&amp;gt;Len&amp;lt;/var&amp;gt; is meaningless, just as it was before Model 204 V7.8. The following is an example of the use of an optional output parameter:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;function getRemote( -&lt;br /&gt;
   %target is string len 32, %errorReason is string len 80 optional output -&lt;br /&gt;
) is float&lt;br /&gt;
  ...&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
In this example, if &amp;lt;code&amp;gt;%errorReason&amp;lt;/code&amp;gt; is not specified in a call and then set to a value longer than 80 bytes it wil be truncated to 80 bytes. However, if a string of a different length is passed, the length of that string determines truncation behavior.&lt;br /&gt;
&lt;br /&gt;
==External Call Facility enhancements==&lt;br /&gt;
===Managing ECF tables more efficiently===&lt;br /&gt;
The are two new features to help manage ECF tables more efficiently, avoid conditions where the table can fill, and prevent the definition of further entities.&lt;br /&gt;
&lt;br /&gt;
The first feature is the new &amp;lt;var&amp;gt;DISPLAY ECF&amp;lt;/var&amp;gt; command, which displays the contents of ECF tables and also the current status of users accessing ECF modules. See more details of the &amp;lt;var&amp;gt;[[#DISPLAY ECF|DISPLAY ECF]]&amp;lt;/var&amp;gt; command below.&lt;br /&gt;
&lt;br /&gt;
The second feature is a new &amp;lt;var&amp;gt;EXTERNAL REMOVE&amp;lt;/var&amp;gt; statement with the following syntax:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;EXTERNAL REMOVE &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;modulename&amp;lt;/span&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This statement causes the entry for the named module to be removed from the module table. The table entry is then placed on a free chain of entries and can be reused by issuing the &amp;lt;var&amp;gt;EXTERNAL MODULE&amp;lt;/var&amp;gt; statement. This allows the module table to be managed with redundant entries removed, without having to recycle the ONLINE.&lt;br /&gt;
&lt;br /&gt;
An &amp;lt;var&amp;gt;EXTERNAL REMOVE&amp;lt;/var&amp;gt; statement will return &amp;lt;code&amp;gt;$status/$statusd&amp;lt;/code&amp;gt; values of &amp;lt;code&amp;gt;0/0&amp;lt;/code&amp;gt;, and most other status values that can be returned by the &amp;lt;var&amp;gt;EXTERNAL REMOVE&amp;lt;/var&amp;gt; statement are already documented in the ECF return codes table. If an &amp;lt;var&amp;gt;EXTERNAL REMOVE&amp;lt;/var&amp;gt; is attempted against a module that is currently being called (in use), then &amp;lt;code&amp;gt;$status/$statusd&amp;lt;/code&amp;gt; will return the values &amp;lt;code&amp;gt;20/1&amp;lt;/code&amp;gt; (module unavailable).&lt;br /&gt;
&lt;br /&gt;
==System enhancements==&lt;br /&gt;
&lt;br /&gt;
===New wait types for daemon/master waits===&lt;br /&gt;
&lt;br /&gt;
Two new wait types, viewable on the &amp;lt;var&amp;gt;[[MONITOR_command|MONITOR]] USERS&amp;lt;/var&amp;gt; command output, have been implemented as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;57&amp;lt;/code&amp;gt; - Means a daemon thread waiting for its master thread  &amp;lt;br /&amp;gt;     &lt;br /&gt;
&amp;lt;code&amp;gt;58&amp;lt;/code&amp;gt; - Means a master thread waiting for one of its daemon threads&lt;br /&gt;
&lt;br /&gt;
This change is enabled in V7.7 with the application of zap 77z410.&lt;br /&gt;
&lt;br /&gt;
===Snap formatting changes===&lt;br /&gt;
Date/time stamps in the page headers of snaps will now be shown in normal format, rather than in julian format as in previous versions. So in the following example, a particular snap header under v7.7 or previous versions would show as: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;SNAPID    1   19226.060155  M204.0022: Bug .. nnnnn               PAGE     1 &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
whereas the same snap header under v7.8 would show as: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;SNAPID    1  2019/08/14 06:01:06   M204.0022: Bug .. nnnnn        PAGE     1 &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Also, due to improvements in handling trailing blanks in snap output, a snap generated under v7.8 should be marginally smaller than the same snap generated under previous versions, assuming the same SNAPCTL settings.&lt;br /&gt;
&lt;br /&gt;
===Call stack trace for problem diagnosis===&lt;br /&gt;
A  call stack trace is now provided to help diagnose and resolve common errors. To enable the stack trace, do either of the following: &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Set the &amp;lt;var&amp;gt;[[SIRFACT parameter|SIRFACT]] X&#039;01&#039;&amp;lt;/var&amp;gt; bit.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Set the &amp;lt;var&amp;gt;[[DEBUGUL parameter|DEBUGL]]&amp;lt;/var&amp;gt; parameter. Note that the &amp;lt;var&amp;gt;DEBUGUL&amp;lt;/var&amp;gt; approach will introduce extra QTBL overhead. &amp;lt;p&amp;gt;(&amp;lt;var&amp;gt;DEBUGUL&amp;lt;/var&amp;gt; provides a similar facility with an include trace of procedures leading to the error, but this might not be potentially as useful as the call trace.)&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt; &lt;br /&gt;
&lt;br /&gt;
The call stack trace can assist in diagnosing run-time errors that might occur, as illustrated by the following &amp;quot;Variable too small for result&amp;quot; and &amp;quot;MBSCAN exceeded&amp;quot; examples.&lt;br /&gt;
&lt;br /&gt;
====Variable too small for result====&lt;br /&gt;
When the stack trace is enabled, a &amp;quot;variable too small&amp;quot; error results in the following message:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;M204.2966: Error at line n, procedure &#039;&#039;procname&#039;&#039; in file &#039;&#039;procfile&#039;&#039;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
which identifies the line within a procedure where the error is occurring, in addition to the usual message:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;M204.0552: Variable too small for result&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Any subsequent M204.2966 messages indicate the point in the code from where the code in error was called. For example, a stack of three subroutine calls leading to a &amp;quot;variable too small&amp;quot; error might result in the following messaging:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;   M204.0552: Variable too small for result                             &lt;br /&gt;
   M204.2966: Error at line 9, procedure MYPROC.LEVEL4 in file MYPROC   &lt;br /&gt;
   M204.2966: Called from line 5, procedure MYPROC.LEVEL3 in file MYPROC&lt;br /&gt;
   M204.2966: Called from line 5, procedure MYPROC.LEVEL2 in file MYPROC&lt;br /&gt;
   M204.2966: Called from line 5, procedure MYPROC.LEVEL1 in file MYPROC &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This information should help in diagnosing the problem. &lt;br /&gt;
&lt;br /&gt;
If the error occurs within a command level program rather than a procedure, then the M204.2966 message is replaced by an M204.2967 message, and a similar error condition to the above with a preceding call stack might be audited as follows:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;   M204.0552: Variable too small for result              &lt;br /&gt;
   M204.2967: Error at line 14 of command level program  &lt;br /&gt;
   M204.2967: Called from line 5 of command level program&lt;br /&gt;
   M204.2967: Called from line 3 of command level program &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If neither &amp;lt;var&amp;gt;SIRFACT X&#039;01&#039;&amp;lt;/var&amp;gt; nor &amp;lt;var&amp;gt;DEBUGUL&amp;lt;/var&amp;gt; is set, then the &amp;quot;variable too small&amp;quot; error produces the following messages:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;   M204.0552: Variable too small for result &lt;br /&gt;
   M204.2968: Error: no debug info &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====MBSCAN exceeded====&lt;br /&gt;
Similarly to the handling of the &amp;quot;variable too small for result&amp;quot; error, the call stack can also be used to diagnose errors where the value of &amp;lt;var&amp;gt;[[MBSCAN parameter|MBSCAN]]&amp;lt;/var&amp;gt; is exceeded as a result of a direct search of Table B records. &lt;br /&gt;
&amp;lt;p&amp;gt;Again, under V7.8, with either the &amp;lt;var&amp;gt;SIRFACT X&#039;01&#039;&amp;lt;/var&amp;gt; bit set or &amp;lt;var&amp;gt;DEBUGUL&amp;lt;/var&amp;gt; set, if a long request occurs as a result of exceeding &amp;lt;var&amp;gt;MBSCAN&amp;lt;/var&amp;gt;, then initially the following message is produced, as before:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;M204.0569: File &#039;&#039;filename&#039;&#039;, Find: Table B records to be searched = &#039;&#039;nnnn&#039;&#039;&amp;lt;/p&amp;gt;&lt;br /&gt;
followed by a DYRWT prompt message. If the user replies &#039;N&#039; to the prompt, or if the request is run in an environment (such as a batch job) where the default response is &#039;N&#039;, the following message is produced after the M204.0569 message:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;Cancelling request: M204.2969: MBSCAN (&#039;&#039;mm&#039;&#039;) exceeded, records to be searched = &#039;&#039;nnnn&#039;&#039;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
where &#039;&#039;mm&#039;&#039; is the current setting of &amp;lt;var&amp;gt;MBSCAN&amp;lt;/var&amp;gt;. The M204.2969 message is followed by M204.2966 messages displaying the call stack trace. Thus, if the following code is run from procedure MYPROC.MBSCAN against the demo database, with an &amp;lt;var&amp;gt;MBSCAN&amp;lt;/var&amp;gt; setting of 10:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;   b                           &lt;br /&gt;
   call sub1                   &lt;br /&gt;
   sub1: subroutine            &lt;br /&gt;
   fd1:                        &lt;br /&gt;
      in clients fd city = ONTARIO&lt;br /&gt;
              end find         &lt;br /&gt;
      fr fd1                      &lt;br /&gt;
         pai                      &lt;br /&gt;
         print                    &lt;br /&gt;
      end for                     &lt;br /&gt;
   end subroutine              &lt;br /&gt;
   end &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
then the following messages are produced, assuming any prompts are responded to with an &#039;N&#039;:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;   M204.0569: File CLIENTS, Find: Table B records to be searched = 3415&lt;br /&gt;
   Cancelling request: M204.2969: MBSCAN (10) exceeded, records to be searched = 3415  &lt;br /&gt;
   M204.2966: Error at line 6, procedure MYPROC.MBSCAN in file MYPROC&lt;br /&gt;
   M204.2966: Called from line 3, procedure MYPROC.MBSCAN in file MYPROC  &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===appendJournalData===&lt;br /&gt;
The &amp;lt;var&amp;gt;[[AppendJournalData_(Stringlist_function)|AppendJournalData]]&amp;lt;/var&amp;gt; function is now more tolerant of an outstanding BUMP request. Previously, if &amp;lt;var&amp;gt;AppendJournalData&amp;lt;/var&amp;gt; was called to inadvertently retrieve a large amount of journal data, typically when called implicitly from within SirScan, then any outstanding BUMP request wouldn&#039;t be honored until all of the data had been retrieved, at which point the BUMP request would be completed, and all data would be lost.&lt;br /&gt;
&lt;br /&gt;
Now, the &amp;lt;var&amp;gt;AppendJournalData&amp;lt;/var&amp;gt; process checks for outstanding BUMP requests before each track I/O is executed, thus avoiding excessive I/Os against the journal and long waits for the BUMP of such a process to complete.&lt;br /&gt;
&lt;br /&gt;
==AUDIT204 enhancements==&lt;br /&gt;
===FORMAT command===&lt;br /&gt;
TIMEHH is a new parameter used with the FORMAT command of the [[Tracking_system_activity_(CCAJRNL,_CCAAUDIT,_CCAJLOG)#AUDIT204_utility|AUDIT204]] utility.  It indicates that timestamps, printed at the beginning of each line of output, should include hundredths of a second. Requires no other arguments.&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;b&amp;gt;NOTE:&amp;lt;/b&amp;gt; This parameter and the 78 version (or later) of AUDIT204 may be used against a 77 (or later) CCAJRNL.&amp;lt;/p&amp;gt;&lt;br /&gt;
For example:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;//CCAIN DD *&lt;br /&gt;
FORMAT YEARFORM 4&lt;br /&gt;
TIMEHH&lt;br /&gt;
TYPE ER MS LI&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Recovery enhancements==&lt;br /&gt;
===Media Recovery in a multi-user environment===&lt;br /&gt;
It is now possible to perform media recovery by issuing the &amp;lt;var&amp;gt;REGENERATE&amp;lt;/var&amp;gt; command to roll forward selected files in a multi-user environment, with the media recovery being carried out by different users with system manager privileges. The new USING option allows for the specification of a ddname for the input journal stream to be used by the &amp;lt;var&amp;gt;REGENERATE&amp;lt;/var&amp;gt; command. Previously media recovery was restricted to single user batch jobs, using the CCAGEN ddname for the input journal. For more details, see the &amp;lt;var&amp;gt;[[#REGENERATE|REGENERATE]]&amp;lt;/var&amp;gt; command below.&lt;br /&gt;
&lt;br /&gt;
==Security enhancements==&lt;br /&gt;
===CA-Top Secret can disallow CCASTAT logins===&lt;br /&gt;
The [[CA-Top_Secret_interface|CA-Top Secret]] interface now recognizes the &amp;lt;code&amp;gt;DEFACID=&amp;lt;/code&amp;gt;, setting and does not allow CCASTAT logins in the online if &amp;lt;code&amp;gt;DEFACID&amp;lt;/code&amp;gt; is set to null. (There is no attempt to log on M204USR.) Therefore, to disallow CCASTAT logons, set DEFACID=, in [[CA-Top_Secret_interface#Preparing_a_TOPSPARM_parameter_module_with_TOPSGEN|TOPSPARM]]. CCASTAT will be opened because it contains file and group passwords, but it will not be used for logons if CCASTAT logons are not allowed.&lt;br /&gt;
&lt;br /&gt;
===CUSTOM=11 and mixed cased input===&lt;br /&gt;
The &amp;lt;var&amp;gt;[[CUSTOM_parameter|CUSTOM]]&amp;lt;/var&amp;gt; parameter CUSTOM=11 setting no longer requires that a *LOWER command be issued prior to a LOGCTL command (to add or change a  password) to preserve mixed case input. Prior to this release, with CUSTOM=11 in place, *LOWER had to be issued before a LOGCTL command, otherwise any mixed case password strings would automatically be translated into uppercase. This change is enabled in V7.7 with the application of zap 77z108.&lt;br /&gt;
&lt;br /&gt;
===DEFUSER can specify a jobname not authorized to access M204===&lt;br /&gt;
When specifying DEFUSER=JOBNAME and VALIDAT=LOGON in the RACFGEN parms for an ONLINE, if the specified jobname ( the owning id for the ONLINE job ) isn&#039;t authorized to use Model 204 via RACF, any LOGIN commands specifying no userid will now succeed ( previously such a LOGON would have failed ). This enables users to submit jobs with USE $JOB, whereby the string USER=jobname  will be added to the submitted JCL, and this in turn is useful if the specified jobname has dataset access privileges to datasets required by the submitted jobs, even if the jobname itself isn&#039;t authorized to use M204.&lt;br /&gt;
&lt;br /&gt;
==Janus product enhancements==&lt;br /&gt;
&lt;br /&gt;
===Web Sockets===&lt;br /&gt;
Web Sockets are now supported in Janus Web Server.&lt;br /&gt;
&lt;br /&gt;
The Web Socket protocol provides various advantages over the HTTP protocol:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Web Sockets allow full-duplex communication.&amp;lt;/li&amp;gt; &lt;br /&gt;
&amp;lt;li&amp;gt;Efficient framing of payload data uses minimal overhead.&amp;lt;/li&amp;gt;  &lt;br /&gt;
&amp;lt;li&amp;gt;The Web Socket protocol is end-user extensible.&amp;lt;/li&amp;gt;  &lt;br /&gt;
&amp;lt;li&amp;gt;Most importantly, Web Sockets can be deployed completely within an existing HTTP/HTTPS framework.&amp;lt;/li&amp;gt; &lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To implement Web Sockets, you must enable the Janus Web port for Web Socket upgrades with the new &lt;br /&gt;
WEBSOCKET parameter. The WEBSOCKET option can be specified on either the port definition or the &lt;br /&gt;
JANUS WEB rule for the URL. &lt;br /&gt;
Likewise, an individual Janus Web rule can either allow or disallow Web Socket connections with the &lt;br /&gt;
WEBSOCKET and NOWEBSOCKET parameters, respectively. &lt;br /&gt;
&lt;br /&gt;
For details on implementing Web Sockets, see the [[WebSocket_(Socket_function)|WebSocket]] wiki page.&lt;br /&gt;
&lt;br /&gt;
===Janus Web Server access rule===&lt;br /&gt;
The automatic &amp;lt;var&amp;gt;[[JANUS WEB ALLOW]]&amp;lt;/var&amp;gt; rule, which allowed any user to access the port without requiring a login, is changed &amp;lt;i&amp;gt;for non-SSL ports&amp;lt;/i&amp;gt; to the following:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;JANUS WEB &amp;lt;i&amp;gt;portname&amp;lt;/i&amp;gt; DISALLOW *&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
This rule requires a system administrator to explicitly define &amp;lt;var&amp;gt;ALLOW&amp;lt;/var&amp;gt; rules to enable users to access non-SSL ports.&lt;br /&gt;
The rule applies unless overridden by user-added rules. &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;blockquote class=&amp;quot;note&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;b&amp;gt;Note:&amp;lt;/b&amp;gt; To revert from this change in the JANUS DEFINE default and make the default &lt;br /&gt;
 non-SSL &amp;lt;var&amp;gt;ALLOW&amp;lt;/var&amp;gt; rule as it was in version 7.5 and earlier (&amp;lt;code&amp;gt;ALLOW *&amp;lt;/code&amp;gt;), turn on the 1 bit of the &amp;lt;var&amp;gt;[[WEBDFLT parameter|WEBDFLT]]&amp;lt;/var&amp;gt; parameter: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;RESET WEBDFLT=1&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Increase in pending accepts for Janus BPX ports===&lt;br /&gt;
The default number of pending accepts for Janus BPX server ports has been increased from 3 to 12, thus reducing the likelihood that a pending accept may fail with the message&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;MSIR.0019 Connection request rejected for port (port), MAXCON exceeded&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The actual number of pending accepts to be supported on the port can be set with the new parameter MAXPEND, set on the &amp;lt;var&amp;gt;[[JANUS_DEFINE|JANUS DEFINE]]&amp;lt;/var&amp;gt; command, where MAXPEND can vary from 3 up to a maximum value of 32. The change to the default value is enabled in V7.7 with the application of zap 77z269.&lt;br /&gt;
&lt;br /&gt;
===TCP listen backlog increased===&lt;br /&gt;
&lt;br /&gt;
The [[Program_Communication_facilities#LISTEN_call|TCP listen]] backlog has been increased from 16 to 1024 under z/OS.&lt;br /&gt;
&lt;br /&gt;
This update tells the TCP stack to queue up to 1024 of such requests up before dropping them, thus reducing, or in most cases eliminating, the likelihood of a connection request drop, other than in exceptional circumstances, such as a denial of service attack. This change is enabled in V7.7 with the application of zap 77z340.&lt;br /&gt;
&lt;br /&gt;
===Defer the freeing of XMLSCREEN input XML===&lt;br /&gt;
&lt;br /&gt;
The freeing of [[XMLSCREEN_and_NOXMLSCREEN_(JANUS_DEFINE_parameters)|XMLSCREEN]] input XML is now deferred until the next Read Screen or session termination. This means that if an application error is detected, the input XML can be retrieved with [[$Web_Input_Content|$Web_Input_Content]] and then logged for problem analysis. &lt;br /&gt;
&lt;br /&gt;
Prior to this release the XML received from the client is freed immediately after being used to set the input data for a Read Screen, rendering it unavailable for problem determination.&lt;br /&gt;
&lt;br /&gt;
This change is enabled in V7.7 with the application of zap 77z368.&lt;br /&gt;
&lt;br /&gt;
===XMLSCREEN and Janus Web Legacy blank stripping===&lt;br /&gt;
&lt;br /&gt;
xmlScreens and Janus Web Legacy screens now adhere to the same standard as standard screen processing in terms of stripping leading blanks from input fields defined as [[Full-screen_feature#DEBLANK_or_NODEBLANK_option|DEBLANK]] (either explicitly or implicitly).&lt;br /&gt;
&lt;br /&gt;
This change is enabled in V7.7 with the application of zap 77z400.&lt;br /&gt;
&lt;br /&gt;
===SSL input buffer size===&lt;br /&gt;
&lt;br /&gt;
The default value of [[SSLIBSIZE_(JANUS_DEFINE_parameter)|SSLIBSIZE]] has been increased to 16384 + 128, or 16512. This size should ensure correct communication with all TLS spec compliant applications. It is the maximum size allowed unless you use [[CUSTOM_parameter#Using_CUSTOM.3D.2818.29|CUSTOM=18]].    &lt;br /&gt;
&lt;br /&gt;
This change is enabled in V7.7 with the application of zap 77z415.&lt;br /&gt;
&lt;br /&gt;
===Increasing LDAP buffers===&lt;br /&gt;
&lt;br /&gt;
The number of LDAP buffers allocated at startup can now be changed by setting the NLDAPBUF parameter in CCAIN. See below for details on [[#NLDAPBUF|NLDAPBUF]].&lt;br /&gt;
&lt;br /&gt;
===Increase URL length returned with $web_form_action===&lt;br /&gt;
With this release the maximum Janus Web Server incoming URL that can be handled by &amp;lt;var&amp;gt;$web_form_action&amp;lt;/var&amp;gt; is increased from 512 bytes to 1024 bytes. This change is enabled in V7.7 with the application of zap 77z424.&lt;br /&gt;
&lt;br /&gt;
===Maximum RBSIZE setting increased===&lt;br /&gt;
The maximum value for RBSIZE, set on the &amp;lt;var&amp;gt;[[JANUS DEFINE|JANUS DEFINE]]&amp;lt;/var&amp;gt; command, is now increased to 16777215 (previously the maximum was 65534). RBSIZE specifies the RPC or Request Buffer size.  On a Web port, the Janus request buffer holds browser request information such as header data, cookies, and form data. On other port types, it holds RPC input and output parameters. This change is enabled in V7.7 with the application of zap 77z427.&lt;br /&gt;
&lt;br /&gt;
==Debugger enhancements==&lt;br /&gt;
These enhancements apply to the Janus and TN3270 debuggers. &lt;br /&gt;
&lt;br /&gt;
===Access to exposed variables===&lt;br /&gt;
The debuggers can now view or watch the values of variables exposed to local routines/methods. Previously, any attempts to access an exposed variable would have displayed &amp;quot;%varname has no value&amp;quot; in the debugger session. This feature is enabled in V7.7 with the application of zap 77z363.&lt;br /&gt;
&lt;br /&gt;
===Subroutine or method display===&lt;br /&gt;
When execution pauses for a break point or runtime error, the subroutine or method being executed is indicated in the status area.  In addition, the source code line information available by right-clicking on a source line now also indicates the subroutine or method.&lt;br /&gt;
&lt;br /&gt;
==Performance enhancements==&lt;br /&gt;
&lt;br /&gt;
===MP/204 offload improvements===&lt;br /&gt;
Application code issuing the following SOUL statements will now now be fully offloadable:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;File Records In/On&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Remember&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt; &lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Position&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Sort Values&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;                                             &lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Reset Header/Trailer&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Find and Print Count&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Find All Values&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;For Each Value&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
The above improvements are enabled in V7.7 with the application of zaps 77z419 and 77z420.&lt;br /&gt;
&lt;br /&gt;
===X3270OUT exit offloadable===&lt;br /&gt;
When running MP/204 (AMPSUBS&amp;gt;0) and using the [[Coding_SNA_Communications_Server_conversion_exit_routines#X3270OUT_.28convert_output_from_3270_format.29|X3270OUT]] exit to convert a 3270 output data stream to the appropriate device protocol, the exit can now run in parallel mode to improve performance. This change is enabled in V7.7 with the application of zap 77z313.&lt;br /&gt;
&lt;br /&gt;
The X3270OUT exit must be written to be re-entrant.&lt;br /&gt;
&lt;br /&gt;
==New and changed commands==&lt;br /&gt;
===DISPLAY ECF===&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;DISPLAY ECF {{ M | N | U } like ?} &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This new command displays details from ECF tables, or the current status of users accessing ECF modules.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;syntax&amp;quot;&amp;gt;D ECF M&amp;lt;/span&amp;gt; displays the contents of the module table. For example:&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;    D ECF M &lt;br /&gt;
    Module   Loadlib  Address:Length     Loaded@      Lastused@   #Calls  Flags &lt;br /&gt;
    QATUM13C PROGLIB 2FB91FB8:00000028 19023:121506 19023:121506 00000001 &lt;br /&gt;
    QATUM13B PROGLIB 2FE65000:00009C18 19023:121506 19023:121506 00000001 &lt;br /&gt;
    QATUM13A PROGLIB 2FE6EC18:00001CD8 19023:121506 19023:121506 00000001  &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
(flags may be D=deleted; S=shared; H=halted; I=Idle)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;syntax&amp;quot;&amp;gt;D ECF N&amp;lt;/span&amp;gt; displays contents of the name table. For example: &amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;    D ECF N&lt;br /&gt;
    Module   Logical-call-name &lt;br /&gt;
    QATUM13C MOD_QATUM13C &lt;br /&gt;
    QATUM13B MOD_QATUM13B &lt;br /&gt;
    QATUM13A MOD_QATUM13A &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;syntax&amp;quot;&amp;gt;D ECF U&amp;lt;/span&amp;gt; displays details of users currently accessing ECF modules. This is also the default option, and so &amp;lt;span class=&amp;quot;syntax&amp;quot;&amp;gt;D ECF&amp;lt;/span&amp;gt; will display the same output as &amp;lt;span class=&amp;quot;syntax&amp;quot;&amp;gt;D ECF U&amp;lt;/span&amp;gt;. For example:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;    D ECF U                           &lt;br /&gt;
    User# Userid     Module   Parmlen &lt;br /&gt;
    00002 ADMIN      --none--         &lt;br /&gt;
    00003 ADMIN      COBSAMP1 00000002&lt;br /&gt;
    00004 ADMIN      COBSAMP1 00000002 &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;syntax&amp;quot;&amp;gt;D ECF &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;function&amp;lt;/var&amp;gt; LIKE &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;?&amp;lt;/var&amp;gt; &amp;lt;/span&amp;gt; (where &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;?&amp;lt;/var&amp;gt; is a valid pattern) displays details for entities that match the specified pattern. The function is either M (modules), N (names), or U (users), and it defaults to U. So for example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;D ECF U L A&amp;lt;/p&amp;gt;&lt;br /&gt;
or&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;D ECF U L A*&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
displays details of ECF users whose names begin with A.&lt;br /&gt;
&lt;br /&gt;
===REGENERATE===&lt;br /&gt;
The &amp;lt;var&amp;gt;REGENERATE&amp;lt;/var&amp;gt; command can now be run in a multi-user environment by multiple users with system manager privileges. A new option USING is provided to specify the ddname of the input journal, so that the full syntax is now as follows:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;  REGENERATE [USING ddname] FILE filename [FROM dumpname | IGNORE]&lt;br /&gt;
  [TO {LAST UPDATE [BEFORE yy.ddd hh:mm:ss.th] | LAST CHECKPOINT [BEFORE yy.dd hh:mm:ss.th] &lt;br /&gt;
  | UPDATE number OF yy.ddd hh:mm:ss.th | CHECKPOINT yy.ddd hh:mm:ss.th} ]&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The default for the using ddname is CCAGEN, but any ddname may be used to allocate an input journal and used. For example:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;  ALLOCATE REGEN1 WITH SCOPE=SYSTEM DSN=PROD1.GDGJ OLD SEQUENTIAL GEN=+2&lt;br /&gt;
  REGENERATE USING REGEN1 FILE TEST&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It is the user&#039;s responsibility to ensure that the file being regenerated is not in use, and so prior to usage, &amp;lt;var&amp;gt;BUMP FILE&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;STOP FILE&amp;lt;/var&amp;gt; should be used to isolate usage against the file. If the file is in use, the REGEN will fail with these messages:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;  M204.1430: Failed to open file TEST&lt;br /&gt;
  M204.1436: Stopped processing file TEST  &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
$STATUS will now be set for &amp;lt;var&amp;gt;REGENERATE&amp;lt;/var&amp;gt; with the following values:&lt;br /&gt;
&amp;lt;blockquote&amp;gt;    &lt;br /&gt;
    0 - Success &amp;lt;br/&amp;gt;&lt;br /&gt;
    1 - No files were processed &amp;lt;br/&amp;gt;&lt;br /&gt;
    2 - At least one file stopped processing &amp;lt;br/&amp;gt;&lt;br /&gt;
    4 - A serious error occurred, REGEN failed &lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Similarly, &amp;lt;var&amp;gt;SETGRC&amp;lt;/var&amp;gt; may be used to get the return code and error message.&lt;br /&gt;
&lt;br /&gt;
==New and changed parameters==&lt;br /&gt;
&lt;br /&gt;
===ECMODS===&lt;br /&gt;
The new minimum value for ECMODS, the allowable number of ECF modules, is 1. Prior to V7.8 the minimum value was 0. This change is enabled in V7.7 with the application of zap 77z306.&lt;br /&gt;
&lt;br /&gt;
===ECNAMES===&lt;br /&gt;
The new minimum value for ECNAMES, the allowable number of ECF module names, is 1. Prior to V7.8 the minimum value was 0. This change is enabled in V7.7 with the application of zap 77z306.&lt;br /&gt;
&lt;br /&gt;
===ECPSIZE===&lt;br /&gt;
The new minimum value for ECPSIZE, the initial storage allocation for ECF parameters, is 1024. Prior to V7.8 the minimum value was 0. This change is enabled in V7.7 with the application of zap 77z306.&lt;br /&gt;
&lt;br /&gt;
===ENQTIME===&lt;br /&gt;
Millisecond duration of automatic record locking retry wait.&lt;br /&gt;
&lt;br /&gt;
Prior to this change, if record locking conflicts occur frequently in a busy online, any user with a non-zero value for &amp;lt;var&amp;gt;[[ENQRETRY parameter|ENQRETRY]]&amp;lt;/var&amp;gt; will wait at least 3 seconds before the conflict is dealt with. This can degrade overall system performance.      &lt;br /&gt;
                                                         &lt;br /&gt;
The &amp;lt;var&amp;gt;[[ENQTIME parameter|ENQTIME]]&amp;lt;/var&amp;gt; parameter specifies the number of milliseconds waited for each record locking retry wait. ENQTIME can be between 1 and 60000, corresponding to a minimum of 1 millisecond and a maximum of 1 minute. The default value of ENQTIME is 3000 (3 seconds).            &lt;br /&gt;
                                                         &lt;br /&gt;
For example, with ENQTIME = 100 and ENQRETRY = 7, after a record locking conflict occurs the thread will retry 7 times with wait intervals of .1 seconds, and so within at most .7 seconds either the lock becomes available or the conflict triggers an On unit or cancels the request.     &lt;br /&gt;
                                                         &lt;br /&gt;
The ENQTIME parameter may also be reset with $ResetN. &lt;br /&gt;
&lt;br /&gt;
This new parameter is enabled in V7.7 with the application of zap 77z299.&lt;br /&gt;
&lt;br /&gt;
===EVALOPT===&lt;br /&gt;
The new &amp;lt;var&amp;gt;EVALOPT&amp;lt;/var&amp;gt; parameter controls the cancellation of a request on truncation of string data. The default value is 0, and currently there is just one setting, 1, which means &amp;quot;cancel a request if truncation of string data occurs.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
For example, with the default of 0 in place, the following code &amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;    %x is string len 1   &lt;br /&gt;
    %y is string len 2   &lt;br /&gt;
    %y = &#039;ab&#039;            &lt;br /&gt;
    %x = %y              &lt;br /&gt;
    printtext {~} = {%x} &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
would cause silent truncation, and give the result&lt;br /&gt;
    &amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;%x = a &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If &amp;lt;var&amp;gt;EVALOPT&amp;lt;/var&amp;gt; is set to 1, then the above code produces the following message:&lt;br /&gt;
    &amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;M204.0552: Variable too small for result &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and the request is cancelled.&lt;br /&gt;
&lt;br /&gt;
===LFSCB===&lt;br /&gt;
LFSCB, the length of the full screen buffer, now has a new minimum value of 8 ( the previous minimum was 0 ). This change is enabled in v7.7 with the application of zap 77z042, and within V7.6 with the application of zap 76z393.&lt;br /&gt;
&lt;br /&gt;
===MAXPRE, MAXBOUT, MAXSUBT===&lt;br /&gt;
&amp;lt;p&amp;gt;Introduced in zap 77z257.&amp;lt;/p&amp;gt;&lt;br /&gt;
The new &amp;lt;var&amp;gt;MAXPRE&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;MAXBOUT&amp;lt;/var&amp;gt;, and &amp;lt;var&amp;gt;MAXSUBT&amp;lt;/var&amp;gt; parameters can be used to cancel a runaway transaction and prevent it from filling the checkpoint data set. &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;MAXPRE&amp;lt;/var&amp;gt;:  Maximum number of pre-images per transaction.  &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;MAXBOUT&amp;lt;/var&amp;gt;: Maximum number of backout pages per transaction. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;MAXSUBT&amp;lt;/var&amp;gt;: Maximum number of subtransaction checkpoints that a transaction can span.&amp;lt;/li&amp;gt;&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;Each new parameter defaults to unlimited. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;If a parameter value is set, a transaction is cancelled if that value is exceeded, and the following message is displayed:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;M204.0524: Maximum number (&amp;lt;i&amp;gt;num&amp;lt;/i&amp;gt;) of &amp;lt;i&amp;gt;parameter&amp;lt;/i&amp;gt; exceeded.&amp;lt;/p&amp;gt;&lt;br /&gt;
where &amp;lt;i&amp;gt;num&amp;lt;/i&amp;gt; is the value set for &amp;lt;i&amp;gt;parameter&amp;lt;/i&amp;gt; (&amp;lt;var&amp;gt;MAXPRE&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;MAXBOUT&amp;lt;/var&amp;gt;, or &amp;lt;var&amp;gt;MAXSUBT&amp;lt;/var&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
===NLDAPBUF===&lt;br /&gt;
This new parameter allows the number of LDAP buffers allocated during startup to be set in CCAIN. The default value is 2, and the settable value can range from 0 to 65535.&lt;br /&gt;
&lt;br /&gt;
===PUPDTH (new minimum value)===&lt;br /&gt;
If a user sets the &amp;lt;var&amp;gt;[[PUPDTH parameter|PUPDTH]]&amp;lt;/var&amp;gt; parameter to 0, it will now automatically be increased to 1, its minimum value.&lt;br /&gt;
&lt;br /&gt;
===SERV4G===&lt;br /&gt;
This parameter allows testing of server tables that span a 4-gigabyte boundary. For example, if &amp;lt;var&amp;gt;SERV4G&amp;lt;/var&amp;gt; is &amp;lt;code&amp;gt;X&#039;FFFFF000&#039;&amp;lt;/code&amp;gt;, each ATB server will begin at &amp;lt;code&amp;gt;XX_FFFFF000&amp;lt;/code&amp;gt;. If SERV4G is &amp;lt;code&amp;gt;X&#039;FFFF0000&#039;&amp;lt;/code&amp;gt;, each ATB server will begin at &amp;lt;code&amp;gt;XX_FFFF0000&amp;lt;/code&amp;gt;. &amp;lt;code&amp;gt;XX&amp;lt;/code&amp;gt; is determined by the storage available on the system. The parameter is set in CCAIN.&lt;br /&gt;
&lt;br /&gt;
The contents of the ATB server are specified by using the &amp;lt;var&amp;gt;[[SERVGA parameter|SERVGA]]&amp;lt;/var&amp;gt; parameter.&lt;br /&gt;
&lt;br /&gt;
For example, if you want VTBL to span the 4G boundary, you can use these settings: &amp;lt;code&amp;gt;SERV4G=X&#039;FFFFF000&#039;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;SERVGA=X&#039;00040000&#039;&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;LVTBL=200 (6400 bytes, X&#039;1900&#039;)&amp;lt;/code&amp;gt;. This will force each server&#039;s VTBL to begin at &amp;lt;code&amp;gt;XX_FFFFF000&amp;lt;/code&amp;gt; and end at &amp;lt;code&amp;gt;XX+1_00000900&amp;lt;/code&amp;gt;.&lt;br /&gt;
===SIRTERM===&lt;br /&gt;
The &amp;lt;var&amp;gt;[[SIRTERM parameter|SIRTERM]]&amp;lt;/var&amp;gt; (Sirius terminal options) parameter settings have changed. &lt;br /&gt;
The changes to &amp;lt;var&amp;gt;SIRTERM&amp;lt;/var&amp;gt; allow a user to preclude a reset to a Model that is not supported by the terminal emulator in use.&lt;br /&gt;
&lt;br /&gt;
The X&#039;01&#039; setting (MODEL 6 support) is no longer used. &lt;br /&gt;
&lt;br /&gt;
The X&#039;02&#039; setting (Write Structured Field Query Support) now supports MODEL 6 terminals by default. &lt;br /&gt;
X&#039;02&#039; also now issues a Write Structured Field Query for the TELNET interface as well as for VTAM. &lt;br /&gt;
&lt;br /&gt;
The new X&#039;08&#039; setting  always issues a Write Structured Field Query for Terminal Model Resets for terminals connected to Model 204 through VTAM  or TELNET. This precludes Terminal Model RESETs to Models that are not supported by the terminal emulator in use.&lt;br /&gt;
&lt;br /&gt;
===WEBDFLT===&lt;br /&gt;
At V7.7, the default access rule for non-SSL ports was changed from ALLOW * to DISALLOW *, meaning that unless any ALLOW rules were in place resulting in a login/password prompt, the port couldn&#039;t be accessed. The new &amp;lt;var&amp;gt;[[WEBDFLT_parameter|WEBDFLT]]&amp;lt;/var&amp;gt; parameter may be set to 1 for reversion to the old default of ALLOW *. This new parameter is enabled in V7.7 with the application of zap 77z090. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;var&amp;gt;RESET WEBDFLT&amp;lt;/var&amp;gt; requires system administrator privileges. It is recommended to reset the 1 bit of &amp;lt;var&amp;gt;WEBDFLT&amp;lt;/var&amp;gt; to zero after issuing a series of &amp;lt;var&amp;gt;JANUS DEFINE&amp;lt;/var&amp;gt; commands which need WEBDFLT=1, as in the CCAIN input stream.&lt;br /&gt;
&lt;br /&gt;
==New and changed statistics==&lt;br /&gt;
===MPR, MBO, MCP, and RCV===&lt;br /&gt;
Introduced in zap 77z257.&lt;br /&gt;
&amp;lt;p&amp;gt;These statistics provide high water mark transaction information. (Since-last values will not be available until V78 GA.)&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;They are useful in conjunction with the &amp;lt;var&amp;gt;MAXPRE&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;MAXBOUT&amp;lt;/var&amp;gt;, and &amp;lt;var&amp;gt;MAXSUBT&amp;lt;/var&amp;gt; parameters. &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
User/system statistics:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;MPR: High water mark of transaction pre-images. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;MBO: High water mark of transaction backout pages. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;MCP: High water mark of transaction chkpoint spans. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
System statistics: &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;RCV: Number of blocks needed for subtransaction recovery &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt; &lt;br /&gt;
&amp;lt;p class=&amp;quot;note&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Notes:&amp;lt;/b&amp;gt; M204.0843 now displays the RCV statistic for subtransaction checkpoints.&lt;br /&gt;
The size of recovery checkpoint must be greater than the sum of the last RCV value plus the number of records in [[System_and_media_recovery#RESTART_recovery_considerations_for_sub-transaction_checkpoints|RESTART and RESTARTS]].&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
===DKWTS and DKWTMICS===&lt;br /&gt;
Introduced in zap 77z7289.&lt;br /&gt;
&amp;lt;p&amp;gt;The new system statistics DKWTS (DisK WaiTs) and DKWTMICS (DisK WaiT MICroSeconds) collect data to provide rough disk I/O service time numbers.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
DKWTS shows the number of disk I/O waits. DKWTMICS shows the total wait time for those waits in microseconds. Dividing the difference in DKWTMICS by the difference in DKWTS over an interval provides the average disk I/O wait time in microseconds.              &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;note&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Notes:&amp;lt;/b&amp;gt; &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The wait time does include internal Model 204 scheduler delays, so on a CPU bound Model 204 system, the service times calculated from DKWTS and DKWTMICS are likely to be an overestimate of actual service times.&amp;lt;/li&amp;gt;  &lt;br /&gt;
                                                                    &lt;br /&gt;
&amp;lt;li&amp;gt;DKWTS and DKWTMICS are not available in SirMon; use [[MONITOR_command|MONITOR]] SYSTEM STATISTICS to view these statistics.&amp;lt;/li&amp;gt;&amp;lt;/ul&amp;gt;  &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Compatibility issues==&lt;br /&gt;
===&amp;lt;b id=&amp;quot;listNewInit&amp;quot;&amp;gt;&amp;lt;/b&amp;gt;$ListNew cannot be used in Initial clause===&lt;br /&gt;
It is now a compilation error if &amp;lt;var&amp;gt;$ListNew&amp;lt;/var&amp;gt; is attempted to be used in the &amp;lt;var&amp;gt;Initial&amp;lt;/var&amp;gt; clause of a &lt;br /&gt;
[[Using_variables_and_values_in_computation#Declare_statements_for_.25variables|declaration statement]].&lt;br /&gt;
&amp;lt;p&amp;gt;This change is propagated by zap maintenance to versions 7.5 (zap 75Z487), 7.6 (zap 76Z514), and 7.7 (zap 77z281) of Model 204.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote class=&amp;quot;note&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Note:&amp;lt;/b&amp;gt; Strictly speaking, this would not be considered a compilation error, because previously although &amp;lt;code&amp;gt;..&amp;amp;nbsp;Initial($ListNew)&amp;lt;/code&amp;gt; did not produce a compilation error, in almost all circumstances it would produce a snap if the initialized %variable were used with some other &amp;lt;var&amp;gt;$List&amp;lt;i&amp;gt;xxx&amp;lt;/i&amp;gt;&amp;lt;/var&amp;gt; invocation.&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Restricting the use of the CUSTOM=38 setting===&lt;br /&gt;
The [[CUSTOM parameter|CUSTOM=38]] parameter setting, introduced at V7.5, inadvertently provided System Manager privileges to all users via the RESET command. This CUSTOM setting is now restricted to the RESETting of the LAUDIT parameter.&lt;br /&gt;
&lt;br /&gt;
===Disabling of Closure support===&lt;br /&gt;
Due to a number of bugs related to Closure support, introduced at V7.7, this feature, which can best be described as exposed methods assigned to method variables, has been disabled in this release. This change was also made to V7.7 with application of zap 77z119.&lt;br /&gt;
&lt;br /&gt;
===Password delimiter enforced===&lt;br /&gt;
When using &amp;lt;var&amp;gt;IFSTRTN&amp;lt;/var&amp;gt; to log on to a Model 204 online from an IFAM2 application, both the logonid and password must be followed by a semicolon, which is the delimiter. For example:      &lt;br /&gt;
                                      &lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;CALL IFSTRTN(RC,&#039;logonid;password;&#039;...)&amp;lt;/p&amp;gt;&lt;br /&gt;
                 &lt;br /&gt;
If a semicolon does not follow the password string, the following message will now be issued:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;M204.2964: Password missing or too long &amp;lt;/p&amp;gt;                 &lt;br /&gt;
                                                         &lt;br /&gt;
Previously, a semicolon following the password was not required and the first blank served as a password delimiter.  However, as of V7.7, embedded blanks are valid password characters and a semicolon is now required to delimit the password.&lt;br /&gt;
&lt;br /&gt;
This change is enabled in V7.7 with the application of zap 77z231.&lt;br /&gt;
&lt;br /&gt;
===PAGESZ parameter validated===&lt;br /&gt;
Previously it was possible to set the PAGESZ parameter to any value, although Model 204 internally supports one page size of 6184, and any deviation from this value would have led to problems during file creation. The value of this parameter is now controlled, such that setting it to any value other than 6184 will generate an M204.1149 message with the parameter being reset to 6184.&lt;br /&gt;
&lt;br /&gt;
===ECPRIV and the IDCAMS facility===&lt;br /&gt;
At V7.7 a security loophole was closed, whereby all ECF modules were run under external-authorizer profile of the calling user. Previously any ECF tasks were run under the owning job&#039;s external-authorizer profile, and in order for certain sites to retain that ability, a new setting of ECPRIV, value 4, was introduced to retain the ability to run ECF tasks using the job&#039;s security profile. &lt;br /&gt;
&lt;br /&gt;
The ECPRIV 4 setting potentially introduced a security loophole when calling the IDCAMS interface, based upon what the IDCAMS utility is able to do at a system level. Consequently as of this release, the ECPRIV 4 setting will be ignored when calling the IDCAMS facility via ECF, and such IDCAMS processes will always use the calling user&#039;s security profile. Any existing jobs that use ECF to call the IDCAMS utility with the ECFPRIV 4 bit set should be checked to ensure that the calling user&#039;s security profile still satisfies the job&#039;s requirements.&lt;br /&gt;
&lt;br /&gt;
===TCPOPTS is view-only===&lt;br /&gt;
In previous versions the &amp;lt;var&amp;gt;TCPOPTS&amp;lt;/var&amp;gt; parameter, which identifies the type of IP addressing in use (v4 or v6), was resetable, although it was always documented as a view-only parameter. The parameter is now handled as a view-only parameter, and any attempts to reset the parameter will result in the following message:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;gt;   M204.1123: Parameter TCPOPTS not reset&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===ZHPF command can only be issued by a system manager===&lt;br /&gt;
In previous versions it was possible to issue the ZHPF command without being logged on. From this release onwards, a user would have to be logged on with system manager privileges to be able to issue this command.&lt;br /&gt;
&lt;br /&gt;
Additionally, the command output will now only  display results for currently open files.&lt;br /&gt;
&lt;br /&gt;
This change is enabled in v7.7 with the application of zap 77z264.&lt;br /&gt;
&lt;br /&gt;
===Terminal MODEL reset failure===&lt;br /&gt;
If a reset of the terminal MODEL parameter fails due to an undersized output page buffer, then in addition to the existing messages that inform the user of this failure:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;gt;    M204.1875 UNABLE TO RESET MODEL TO %C &lt;br /&gt;
    M204.1123: Parameter MODEL not reset&amp;lt;/p&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
the following message will now be issued:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;gt;    M204.1008: LOUTPB must be increased to at least &amp;lt;number&amp;gt; &amp;lt;/p&amp;gt;&lt;br /&gt;
                                                         &lt;br /&gt;
where &amp;lt;number&amp;gt; is the minimum value of LOUTPB necessary to support the terminal model.&lt;br /&gt;
&lt;br /&gt;
This change is enabled in V7.7 with the application of zap 77z309.&lt;br /&gt;
&lt;br /&gt;
==Notes for system manager and installer==&lt;br /&gt;
===CRAM SVC installation is deprecated===&lt;br /&gt;
The CRAM SVC installation has been deprecated as of version 7.5. &amp;lt;br /&amp;gt;Installation of CRAM-XDM is described as part of the [[Model 204 installation]].&lt;br /&gt;
===Authorization and maintenance zaps===&lt;br /&gt;
When you download Rocket M204 product object files, all relevant authorization keys and all current maintenance zaps are pre-applied to the object files as part of the download process.&lt;br /&gt;
&lt;br /&gt;
==New and changed messages==&lt;br /&gt;
&lt;br /&gt;
See [[New and updated messages in Model 204 version 7.8|New and updated messages in Model 204 version 7.8]] for details.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category: Release notes]]&lt;/div&gt;</summary>
		<author><name>ELowell</name></author>
	</entry>
	<entry>
		<id>https://m204wiki.rocketsoftware.com/index.php?title=New_and_updated_messages_in_Model_204_version_7.8&amp;diff=117738</id>
		<title>New and updated messages in Model 204 version 7.8</title>
		<link rel="alternate" type="text/html" href="https://m204wiki.rocketsoftware.com/index.php?title=New_and_updated_messages_in_Model_204_version_7.8&amp;diff=117738"/>
		<updated>2019-12-12T20:40:41Z</updated>

		<summary type="html">&lt;p&gt;ELowell: /* M204.2970  Maximum call stack limit (limit) reached */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt; &lt;br /&gt;
[[Release notes for Model 204 version 7.8|Back to release notes]]&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;div class=&amp;quot;noautonum&amp;quot;&amp;gt;__TOC__&amp;lt;/div&amp;gt;&lt;br /&gt;
This topic lists messages that were added or changed for Model 204 version 7.8.&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;&amp;lt;b&amp;gt;******THIS IS A DRAFT DOCUMENT.******&amp;lt;/b&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
==M204 messages==&lt;br /&gt;
===&amp;lt;b id=&amp;quot;M204.0141:&amp;quot;&amp;gt;&amp;lt;/b&amp;gt;M204.0141: Bug .. duplicate file name in checkpoint record===&lt;br /&gt;
&amp;lt;P&amp;gt;&lt;br /&gt;
A duplicate file name was encountered while attempting to add a deferred update data set to the file directory during recovery. This indicates a potential bug in the Model 204 software. &amp;lt;/P&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;System manager response:&amp;lt;/b&amp;gt; Contact [[Contacting Rocket Software Technical Support|Technical Support]] with the following documentation: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Audit trail from the previous run &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Journal from the previous run &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Operator response:&amp;lt;/b&amp;gt; Notify the system manager. &amp;lt;/p&amp;gt;&lt;br /&gt;
{{Template:M204.0141 footer}}&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;b id=&amp;quot;M204.0143:&amp;quot;&amp;gt;&amp;lt;/b&amp;gt;M204.0143: No files changed after last checkpoint​,​ RESTART bypassed===&lt;br /&gt;
&amp;lt;P&amp;gt;This message indicates that no updates were detected while scanning the checkpoint data set beyond the last checkpoint or the specified checkpoint. &amp;lt;/P&amp;gt;&lt;br /&gt;
{{Template:M204.0143 footer}}&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;b id=&amp;quot;M204.0165:&amp;quot;&amp;gt;&amp;lt;/b&amp;gt;M204.0165: Missing an update unit from ICL (InComplete List)===&lt;br /&gt;
&amp;lt;P&amp;gt;&lt;br /&gt;
While scanning the CCARF data set, Model&amp;amp;nbsp;204 has detected the end of an update unit for which no corresponding start of update unit was found. Possible explanations for this error are: &amp;lt;/P&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;A utility program was used to copy the original journal to data set being used as CCARF, and a portion of the original data set was not copied. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;A copy was not done. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;System manager response:&amp;lt;/b&amp;gt; If the original journal was a multi-volume data set and was copied to another data set for input to this run, verify that all volumes were in fact copied, and rerun the job. If CCARF was the original data set, contact [[Contacting Rocket Software Technical Support|Technical Support]]. Have the following documentation available: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Audit trail of the original run &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Snap &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;UTILJ of the CCARF data set or a copy of this data set on tape &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;UTILC of the restart data set or a copy of this data set on tape &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
{{Template:M204.0165 footer}}&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;b id=&amp;quot;M204.0352:&amp;quot;&amp;gt;&amp;lt;/b&amp;gt;M204.0352: IODEV​=​nn​,​ Ok uuuuuuuuuu aaaaaaaaaa llllll yy.ddd mmm dd hh.mm.ss ccc nnnnnnnn===&lt;br /&gt;
&lt;br /&gt;
The layout of this message has been reformatted to accommodate five digit user numbers.&lt;br /&gt;
&lt;br /&gt;
{{Template:M204.0352 footer}}&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;b id=&amp;quot;M204.0479:&amp;quot;&amp;gt;&amp;lt;/b&amp;gt;M204.0479: process group not found: &amp;lt;i&amp;gt;processgroupname&amp;lt;/i&amp;gt;===&lt;br /&gt;
 &lt;br /&gt;
A &amp;lt;var&amp;gt;[[Statement syntax#TRANSFER|TRANSFER]]&amp;lt;/var&amp;gt; statement was evaluated, resulting in an attempt to perform a VTAM trusted logon in another Online (the target Online).  The &amp;lt;var&amp;gt;PARTNER&amp;lt;/var&amp;gt; processgroup, identified in the &amp;lt;var&amp;gt;[[DEFINE PROCESS command: Transfer Control partner|DEFINE PROCESS]]&amp;lt;/var&amp;gt; command in the transferring Online, was not found in the target Online.  As a result, the TRANSFER fails and the user remains in the transferring online.&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;b&amp;gt;System manager response:&amp;lt;/b&amp;gt; The &amp;lt;code&amp;gt;PARTNER=&amp;lt;/code&amp;gt; token in the &amp;lt;var&amp;gt;DEFINE PROCESS&amp;lt;/var&amp;gt; command of the transferring Online has an incorrect value for &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;processgroupName&amp;lt;/var&amp;gt;. Check the spelling to ensure that it is the correct name of the intended processgroup in the target Online.&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;b&amp;gt;Return codes:&amp;lt;/b&amp;gt; I 0 0 AUDITMS&lt;br /&gt;
----&lt;br /&gt;
 &lt;br /&gt;
===&amp;lt;b id=&amp;quot;M204.0480:&amp;quot;&amp;gt;&amp;lt;/b&amp;gt;M204.0480: Invalid backpage request: backPage===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
A backpage command of the form &amp;lt;var&amp;gt;P -&amp;lt;i&amp;gt;n&amp;lt;/i&amp;gt;&amp;lt;/var&amp;gt; or &amp;lt;var&amp;gt;P +&amp;lt;i&amp;gt;n&amp;lt;/i&amp;gt;&amp;lt;/var&amp;gt; was issued, but &amp;lt;var&amp;gt;[[NBKPG parameter|NBKPG]]&amp;lt;/var&amp;gt; is 0, or the value of &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;n&amp;lt;/var&amp;gt; is invalid. The command is echoed in hex, so you can see exactly what was entered. For example, if &amp;lt;code&amp;gt;P -99&amp;lt;/code&amp;gt; was issued but &amp;lt;var&amp;gt;NBKPG&amp;lt;/var&amp;gt; is 50, then the following message would be issued:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;M204.0480: Invalid backpage request: P -99(X&#039;D74060F9F9&#039;)&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Response:&amp;lt;/b&amp;gt; Correct the backpage command, or set &amp;lt;var&amp;gt;NBKPG&amp;lt;/var&amp;gt; greater than 0.&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
{{Template:M204.0480 footer}}&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;b id=&amp;quot;M204.0481:&amp;quot;&amp;gt;&amp;lt;/b&amp;gt;M204.0481: Procedure procName in subsysName could not be made resident; increase RESPAGE or RESSIZE ===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The named procedure in the named subsystem could not be made resident in resident request storage. &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Response:&amp;lt;/b&amp;gt; Increase the size of resident request storage with a &amp;lt;var&amp;gt;[[RESSIZE parameter|RESSIZE]]&amp;lt;/var&amp;gt; or &amp;lt;var&amp;gt;[[RESPAGE parameter|RESPAGE]]&amp;lt;/var&amp;gt; parameter in CCAIN. &amp;lt;var&amp;gt;RESSIZE&amp;lt;/var&amp;gt; (below-the-bar storage) can be dynamically reset, but &amp;lt;var&amp;gt;RESPAGE&amp;lt;/var&amp;gt; (above-the-bar storage) cannot.&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
{{Template:M204.0481 footer}}&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;b id=&amp;quot;M204.0541:Procedure&amp;quot;&amp;gt;&amp;lt;/b&amp;gt;M204.0541:Procedure is in use: procedure===&lt;br /&gt;
&amp;lt;P&amp;gt;The procedure named in the message is currently in use by another user. The command entered cannot be processed until the procedure is no longer in use. &amp;lt;/P&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;b&amp;gt;Response:&amp;lt;/b&amp;gt; Retry the command when the procedure is no longer in use. &amp;lt;/p&amp;gt;&lt;br /&gt;
{{Template:M204.0541 footer}}&lt;br /&gt;
 &lt;br /&gt;
===&amp;lt;b id=&amp;quot;M204.0569:&amp;quot;&amp;gt;&amp;lt;/b&amp;gt;M204.0569: File filename?,? Find: Table B records to be searched ?=? number===&lt;br /&gt;
The message test now includes the filename, to help track down the cause of the direct search. This change has been enabled within v7.7 with the application of zap 77z032, and within V7.6 with the application of zap 76z386.&lt;br /&gt;
{{Template:M204.0569 footer}}&lt;br /&gt;
 &lt;br /&gt;
===&amp;lt;b id=&amp;quot;M204.1070:&amp;quot;&amp;gt;&amp;lt;/b&amp;gt;M204.1070: ALLOCATE ddName failed - reason===&lt;br /&gt;
This message has been changed to add the ddname of the failing dataset to the message text. &lt;br /&gt;
{{Template:M204.1070 footer}}&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;b id=&amp;quot;M204.1500:&amp;quot;&amp;gt;&amp;lt;/b&amp;gt;M204.1500: &amp;lt;i&amp;gt;token&amp;lt;/i&amp;gt; ===&lt;br /&gt;
&amp;lt;p&amp;gt;Message M204.1500: &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;token&amp;lt;/var&amp;gt; has a new form relevant to the [https://m204wiki.rocketsoftware.com/index.php/CA-ACF2_MVS_interface CA-ACF2 MVS], [https://m204wiki.rocketsoftware.com/index.php/CA-ACF2_VM_interface CA-ACF2 VM], [https://m204wiki.rocketsoftware.com/index.php/Security_Server_(formerly_RACF)_interface Security Server (formerly RACF)], and [https://m204wiki.rocketsoftware.com/index.php/CA-Top_Secret_interface CA-Top Secret] Model 204 security interfaces.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;p&amp;gt;When the default user fails to log in, the security interface is operational but CCASTAT logons are not allowed. The following error message is displayed:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;M204.1500: CCASTAT logons not allowed&amp;lt;/p&amp;gt;&lt;br /&gt;
{{Template:M204.1500 footer}}&lt;br /&gt;
&amp;lt;!-- skeleton as it was in pdf/message number message text /--&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;b id=&amp;quot;M204.1899&amp;quot;&amp;gt;&amp;lt;/b&amp;gt;M204.1899 Transfer statement from sourceVtamName to targetVtamName complete​,​ User userId disconnected===&lt;br /&gt;
The message, issued when a VTAM Transfer statement completes, now contains the source and target VTAM names for the transfer process. &lt;br /&gt;
&lt;br /&gt;
The change in message text is enabled within V7.7 with the application of zap 77z310.&lt;br /&gt;
{{Template:M204.1899 footer}}&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;b id=&amp;quot;M204.1900&amp;quot;&amp;gt;&amp;lt;/b&amp;gt;M204.1900 User userId transferred to targetVtamName from sourceVtamName===&lt;br /&gt;
This message, issued on the target ONLINE when a user has transferred to that ONLINE, now displays the source and target VTAM names involved in the VTAM Transfer.&lt;br /&gt;
&lt;br /&gt;
The change in message text is enabled within V7.7 with the application of zap 77z310.&lt;br /&gt;
{{Template:M204.1900 footer}}&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;b id=&amp;quot;M204.2020&amp;quot;&amp;gt;&amp;lt;/b&amp;gt;M204.2020 File fileName; condition?,? OPEN command rejected===&lt;br /&gt;
The first change to this message is that the filename of the affected file is now displayed at the beginning of the message text.&lt;br /&gt;
 &lt;br /&gt;
The second change is that a second error type affecting file opens is now support. The original error type of &amp;quot;Unsupported device for Model 204 database %F&amp;quot; was reported for all condition,s even where the device type wasn&#039;t the underlying issue. Whilst this error type has been retained for conditions where it is valid, a new error type of &amp;quot;DDNAME not found&amp;quot; is now available for the message. Thus, in a situation where one thread is attempting to allocate a ddname, and another thread in parallel is trying to open a file with the same ddname, the following message variant may be produced&lt;br /&gt;
 &lt;br /&gt;
M204.2020: File filename; DDNAME not found, OPEN command rejected&lt;br /&gt;
 &lt;br /&gt;
{{Template:M204.2020 footer}}&lt;br /&gt;
 &lt;br /&gt;
===&amp;lt;b id=&amp;quot;M204.2700&amp;quot;&amp;gt;&amp;lt;/b&amp;gt;M204.2700 CHECKPOINT command ignored: sub-transaction checkpoint in progress===&lt;br /&gt;
&amp;lt;P&amp;gt;&lt;br /&gt;
A &amp;lt;code&amp;gt;[[CHECKPOINT_command|CHECKPOINT]] (TRAN | SUBTRAN | ABORT)&amp;lt;/code&amp;gt; command was issued while the system was taking a sub-transaction checkpoint. The command is ignored. If this message was issued in response to a &amp;lt;code&amp;gt;CHECKPOINT ABORT&amp;lt;/code&amp;gt; command, the&lt;br /&gt;
sub-transaction in progress has passed that phase of its processing during which it can be aborted.&lt;br /&gt;
&amp;lt;/P&amp;gt;&lt;br /&gt;
{{Template:M204.2700 footer}}&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;b id=&amp;quot;M204.2964&amp;quot;&amp;gt;&amp;lt;/b&amp;gt;M204.2964  Password missing or too long===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
A password string within an IFSTRTN call has not been delimited with a semicolon.&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Response:&amp;lt;/b&amp;gt;&lt;br /&gt;
Ensure that the password string is delimited by a semicolon, as in the following example&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;gt;CALL IFSTRTN(RC,&#039;logonid;password;&#039;...)&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;b&amp;gt;Version introduced:&amp;lt;/b&amp;gt;&lt;br /&gt;
7.8&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Return codes:&amp;lt;/b&amp;gt; E 00 04 AUDITMS NOCOUNT&lt;br /&gt;
 &lt;br /&gt;
===&amp;lt;b id=&amp;quot;M204.2965&amp;quot;&amp;gt;&amp;lt;/b&amp;gt;M204.2965  Unable to cleanly close log file(s)===&lt;br /&gt;
&amp;lt;p&amp;gt;Introduced in zap 77z243.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;This message causes a snap/dump if the log file (such as a journal, jlog, or checkpoint) cannot be cleanly quiesced when bringing down an Online. The problem with the log file is rare but caused a hang further along in processing. This message causes a snap/dump much closer to the time of error, making it easier to diagnose the problem.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;b&amp;gt;Response:&amp;lt;/b&amp;gt; Use the snap/dump generated by the message to diagnose the cause of the error.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Return codes:&amp;lt;/b&amp;gt; E 88 88 DUMP SNAP AUDITAD NOTERM OPR&lt;br /&gt;
----&lt;br /&gt;
 &lt;br /&gt;
===&amp;lt;b id=&amp;quot;M204.2966&amp;quot;&amp;gt;&amp;lt;/b&amp;gt;M204.2966  &amp;lt;i&amp;gt;what&amp;lt;/i&amp;gt; line &amp;lt;i&amp;gt;number?&amp;lt;/i&amp;gt;,? procedure &amp;lt;i&amp;gt;proc&amp;lt;/i&amp;gt; in file &amp;lt;i&amp;gt;file&amp;lt;/i&amp;gt;===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
This message provides diagnostic information following various types of error messages. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The first M204.2966 message after an error has &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;what&amp;lt;/var&amp;gt; set to &amp;lt;code&amp;gt;Error at&amp;lt;/code&amp;gt;. Subsequent M204.2966 messages (if any) have &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;what&amp;lt;/var&amp;gt; set to &amp;lt;code&amp;gt;Called from&amp;lt;/code&amp;gt;. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
&amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;number&amp;lt;/var&amp;gt;, &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;proc&amp;lt;/var&amp;gt;, and &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;file&amp;lt;/var&amp;gt; indicate the line number, procedure, and file where the error occurred or from where the previous M204.2966 entry was called. Essentially, this provides a call stack trace to aid in diagnosing problems. No more than 20 levels of calls are shown for an error. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Response:&amp;lt;/b&amp;gt; Use the M204.2966 messages after an error to try to diagnose the cause of the error.&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
{{Template:M204.2966 footer}}&lt;br /&gt;
----&lt;br /&gt;
===&amp;lt;b id=&amp;quot;M204.2967&amp;quot;&amp;gt;&amp;lt;/b&amp;gt;M204.2967  &amp;lt;i&amp;gt;what&amp;lt;/i&amp;gt; line &amp;lt;i&amp;gt;number&amp;lt;/i&amp;gt; of command level program===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
This message provides diagnostic information after various types of error messages. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The first M204.2967 message after an error has &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;what&amp;lt;/var&amp;gt; set to &amp;lt;code&amp;gt;Error at&amp;lt;/code&amp;gt; and subsequent M204.2967 messages (if any) have &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;what&amp;lt;/var&amp;gt; set to &amp;lt;code&amp;gt;Called from&amp;lt;/code&amp;gt;. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
&amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;number&amp;lt;/var&amp;gt; indicates the line number for a command line program (counting from the &amp;lt;var&amp;gt;Begin&amp;lt;/var&amp;gt;) where the error occurred, or where the previous [[M204.2966]] entry was called from. Essentially, this provides a call stack trace to aid in diagnosing problems. No more than 20 levels of calls are shown for an error. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Response:&amp;lt;/b&amp;gt; Use the M204.2967 (and M204.2966, if any) after an error to try to diagnose the cause of the error.&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
{{Template:M204.2967 footer}}&lt;br /&gt;
----&lt;br /&gt;
===&amp;lt;b id=&amp;quot;M204.2968&amp;quot;&amp;gt;&amp;lt;/b&amp;gt;M204.2968  &amp;lt;i&amp;gt;what&amp;lt;/i&amp;gt;: no debug info===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
An error message (immediately preceding M204.2968) was issued, but insufficient compile-time information was collected to provide the diagnostic information provided in the [[M204.2966]] and [[M204.2967]] messages.&lt;br /&gt;
To get that additional information to help diagnose the problem, set the [[SIRFACT parameter|SIRFCAT X&#039;01&#039;]] bit if authorized for [[SirFact]], or set the [[DEBUGUL parameter]] to a non-zero value. The latter requires no product authorization, but it does increase QTBL requirements. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Response:&amp;lt;/b&amp;gt; If you are unable to diagnose the problem, consider setting one of the parameters described above to aid in problem diagnosis.&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
{{Template:M204.2968 footer}}&lt;br /&gt;
----&lt;br /&gt;
===&amp;lt;b id=&amp;quot;M204.2969&amp;quot;&amp;gt;&amp;lt;/b&amp;gt;M204.2969  MBSCAN (&amp;lt;i&amp;gt;mbscan&amp;lt;/i&amp;gt;) exceeded?,? records to be searched ?=? &amp;lt;i&amp;gt;number&amp;lt;/i&amp;gt;===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
A Table B scan would exceed the setting of &amp;lt;var&amp;gt;[[MBSCAN parameter|MBSCAN]]&amp;lt;/var&amp;gt;, so the request is cancelled. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Response:&amp;lt;/b&amp;gt; Correct the &amp;lt;var&amp;gt;Find&amp;lt;/var&amp;gt; statement at the line indicated by the following [[M204.2966]] message (hopefully available), or increase &amp;lt;var&amp;gt;MBSCAN&amp;lt;/var&amp;gt; to tolerate the number of scanned records, if reasonable.&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
{{Template:M204.2969 footer}}&lt;br /&gt;
----&lt;br /&gt;
===&amp;lt;b id=&amp;quot;M204.2970&amp;quot;&amp;gt;&amp;lt;/b&amp;gt;M204.2970  Maximum call stack limit (&amp;lt;i&amp;gt;limit&amp;lt;/i&amp;gt;) reached===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The number of messages describing the call stack reached the maximum allowed for such messages (currently 20). This message is largely informational; it is more useful to focus on the preceding [[M204.2966]] messages. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Response:&amp;lt;/b&amp;gt; Examine the preceding M204.2966 messages.&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
{{Template:M204.2970 footer}}&lt;br /&gt;
===&amp;lt;b id=&amp;quot;M204.2971&amp;quot;&amp;gt;&amp;lt;/b&amp;gt;M204.2971  Unable to reset Model: &amp;lt;i&amp;gt;reason&amp;lt;/i&amp;gt;===&lt;br /&gt;
&amp;lt;p&amp;gt;This message appears when the terminal Model is unable to be reset due to the specified reason. For example, &amp;lt;var&amp;gt;SIRTERM &#039;08&#039;&amp;lt;/var&amp;gt; attempts a Write Structure Field Query for VTAM full screen. If the user attempts a reset to a Model that is not supported by the terminal emulator in use, the WSFQ fails. The following message is displayed:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;Unable to reset Model: Write Structured Field not supported&amp;lt;/p&amp;gt;&lt;br /&gt;
and the reset fails.&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Response:&amp;lt;/b&amp;gt; Correct the problem indicated by the reason, and retry the command. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Message attributes:&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;table class=&amp;quot;thJustBold&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;RETCODEO=0&amp;lt;/th&amp;gt;&amp;lt;td&amp;gt;Sets online return code&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;RETCODEB=4&amp;lt;/th&amp;gt;&amp;lt;td&amp;gt;Sets batch (single user) return code&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;CLASS=E&amp;lt;/th&amp;gt;&amp;lt;td&amp;gt;Error class; the message can be suppressed with the X&#039;04&#039; bit setting of the &amp;lt;var&amp;gt;[[MSGCTL parameter|MSGCTL]]&amp;lt;/var&amp;gt; parameter&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;AUDITER&amp;lt;/th&amp;gt;&amp;lt;td&amp;gt;Writes the message with line type ER to the audit trail&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;NOCOUNT&amp;lt;/th&amp;gt;&amp;lt;td&amp;gt;Does not increment the error count (&amp;lt;var&amp;gt;[[ERCNT parameter|ERCNT]]&amp;lt;/var&amp;gt;) parameter&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
[[List of Model 204 messages#M204.2971|Back to list of messages]]&lt;br /&gt;
&amp;lt;includeonly&amp;gt;[[Category:M204.nnnn messages]]&amp;lt;/includeonly&amp;gt;&lt;br /&gt;
&amp;lt;includeonly&amp;gt;[[Category:M204.2800 - M204.2999]]&amp;lt;/includeonly&amp;gt;&lt;br /&gt;
{{Template:M204.2971 footer}}&lt;br /&gt;
&lt;br /&gt;
==MSIR messages==&lt;br /&gt;
===&amp;lt;b id=&amp;quot;MSIR.0942&amp;quot;&amp;gt;&amp;lt;/b&amp;gt;MSIR.0942  Debugger token0 port defaulted to token2===&lt;br /&gt;
This message has been changed from an error message to an informational message&lt;br /&gt;
{{Template:MSIR.0942 footer}}&lt;/div&gt;</summary>
		<author><name>ELowell</name></author>
	</entry>
	<entry>
		<id>https://m204wiki.rocketsoftware.com/index.php?title=Release_notes_for_Model_204_version_7.8&amp;diff=117737</id>
		<title>Release notes for Model 204 version 7.8</title>
		<link rel="alternate" type="text/html" href="https://m204wiki.rocketsoftware.com/index.php?title=Release_notes_for_Model_204_version_7.8&amp;diff=117737"/>
		<updated>2019-12-12T18:17:17Z</updated>

		<summary type="html">&lt;p&gt;ELowell: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;&amp;lt;b&amp;gt;******THIS IS A DRAFT DOCUMENT.******&amp;lt;/b&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
These release notes list the enhancements and other changes contained in Model 204 version 7.8, &amp;lt;b&amp;gt;&amp;lt;i&amp;gt;which is still in development&amp;lt;/i&amp;gt;&amp;lt;/b&amp;gt;. Until the commercial release of the software, Rocket reserves the right to add to, remove, or change anything described herein. &lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
These release notes contain installation and features information for the Rocket Model 204 version 7.8 release.&lt;br /&gt;
Before beginning your installation, please read through this information about product installation and changes.&lt;br /&gt;
&lt;br /&gt;
==New in this release==&lt;br /&gt;
The table below cites some highlights of Model&amp;amp;nbsp;204 version 7.8. For a full list of features, refer to the Table of Contents. &lt;br /&gt;
&amp;lt;p&amp;gt;See also the [[#Compatibility Issues|Compatibility]] section for possible issues.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;tr class=&amp;quot;head&amp;quot;&amp;gt;&amp;lt;th&amp;gt;Category&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Feature&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;SOUL&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The new [[#AmIndependent method|AmIndependent]] method returns TRUE for daemons spawned by RunIndependently.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The Object class now supports the [[#Support for copying Object class objects|copy and deepCopy methods]].&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Janus Web&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[[#Web Sockets|Janus Web Sockets]] are now supported.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td nowrap&amp;gt;Networking&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Note:&amp;lt;/b&amp;gt; The two-phase commit and commit exits features are licensed and purchased separately from Model 204.&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Two-phase commit. A Model 204 online can now be configured to use two-phase commit (2PC). The Janus internal socket API is used for the calls to the coordinator. JANUS commands are used for all 2PC configuration. A new JANUS port type has been added, 2PC.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Commit exits are now supported. The commit exit runs within the APSY, which is defined by the &amp;lt;var&amp;gt;COMMITX&amp;lt;/var&amp;gt; parameter and uses normal APSY processing.  &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;ECF tables&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The new &amp;lt;var&amp;gt;DISPLAY ECF&amp;lt;/var&amp;gt; command and &amp;lt;var&amp;gt;EXTERNAL REMOVE&amp;lt;/var&amp;gt; statement enable more efficient management of [[#Managing ECF tables more efficiently|ECF tables]].&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Performance&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[[#MP/204 offload improvements|MP/204 offload improvements]] -- application code for these SOUL statements is now fully offloadable: &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;File Records In/On&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Remember&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Position&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Sort Values&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Reset Header/Trailer&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Find and Print Count&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Find All Values&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;For Each Value&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Security&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;CA-Top Secret can [[#CA-Top Secret can disallow CCASTAT logins|disallow CCASTAT logins]].&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[[#DEFUSER can specify a jobname not authorized to access M204|DEFUSER]] can specify a jobname not authorized to access M204.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td nowrap&amp;gt;System enhancements&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The &amp;lt;var&amp;gt;MONITOR USERS&amp;lt;/var&amp;gt; command output displays [[#New wait types for daemon/master waits|two new wait types]].&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td nowrap&amp;gt;AUDIT204 enhancements&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The new TIMEHH parameter on the &amp;lt;var&amp;gt;[[#FORMAT command|FORMAT]]&amp;lt;/var&amp;gt; command of the AUDIT204 utility provides greater time stamp precision.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td nowrap&amp;gt;New commands&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;[[#DISPLAY ECF|DISPLAY ECF]]&amp;lt;/var&amp;gt; displays details from ECF tables, or the current status of users accessing ECF modules.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td nowrap&amp;gt;New parameters&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;[[#ENQTIME|ENQTIME]]&amp;lt;/var&amp;gt; specifies the number of milliseconds waited for each record locking retry wait.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;[[#EVALOPT|EVALOPT]]&amp;lt;/var&amp;gt; controls the cancellation of a request on truncation of string data.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;[[#MAXPRE, MAXBOUT, MAXSUBT|MAXPRE, MAXBOUT, and MAXSUBT]]&amp;lt;/var&amp;gt; can be used to cancel a runaway transaction and prevent it from filling the checkpoint data set.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;[[#NLDAPBUF|NLDAPBUF]]&amp;lt;/var&amp;gt; allows the number of LDAP buffers allocated during startup to be set in CCAIN.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;[[#SERV4G|SERV4G]]&amp;lt;/var&amp;gt; allows testing of server tables that span a 4-gigabyte boundary.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;[[#WEBDFLT|WEBDFLT]]&amp;lt;/var&amp;gt; changes the default JANUS WEB ALLOW rule back to ALLOW.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td nowrap&amp;gt;Janus and TN3270 debuggers&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The debuggers can now view or watch the values of [[#Access to exposed variables|variables exposed to local routines/methods]].&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;When execution pauses, the debuggers now [[#Subroutine or method display|display the subroutine or method]] being executed.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td nowrap&amp;gt;User/system statistics&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;[[#MPR, MBO, MCP, and RCV|MPR, MBO, MCP, and RCV]]&amp;lt;/var&amp;gt; provide high water mark transaction information in conjunction with the &amp;lt;var&amp;gt;MAXPRE&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;MAXBOUT&amp;lt;/var&amp;gt;, and &amp;lt;var&amp;gt;MAXSUBT&amp;lt;/var&amp;gt; parameters. &lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[[#DKWTS and DKWTMICS|New system statistics]] DKWTS (DisK WaiTs) and DKWTMICS (DisK WaiT MICroSeconds) collect data to provide rough disk I/O service time numbers.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Operating system and hardware requirements==&lt;br /&gt;
&lt;br /&gt;
===Operating system requirements===&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;IBM z/OS versions supported:&amp;lt;/b&amp;gt; &lt;br /&gt;
  &amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;All IBM supported releases up to and including z/OS 2.3. &amp;lt;br /&amp;gt;(For z/OS 2.2, see [[IBM z/OS 2.2 PTF requirement]].)&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;p&amp;gt;Version 1.07 is sufficient for all functionality except for the following features:&amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;ul&amp;gt;&lt;br /&gt;
    &amp;lt;li&amp;gt;zHPF support requires version [[IBM z/OS 2.1 compatibility issue|2.1]].&amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;li&amp;gt;Large (1 MB) page support requires version 1.9.&amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;li&amp;gt;Extended address volumes (EAV) requires version 1.12.&amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;/ul&amp;gt;&lt;br /&gt;
  &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
On z/OS, Model 204 release 7.8 operates as an APF authorized load module, as required by many 7.8 features. &amp;lt;br /&amp;gt;&lt;br /&gt;
To run Model 204 unauthorized, [[Contacting Rocket Software Technical Support|contact Technical Support]].&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;IBM z/VM versions supported:&amp;lt;/b&amp;gt; &lt;br /&gt;
  &amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;All IBM supported releases up to and including z/VM 6.4.&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;IBM z/VSE versions supported:&amp;lt;/b&amp;gt;&lt;br /&gt;
  &amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;All IBM supported releases up to and including z/VSE 6.1.&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Hardware requirements===&lt;br /&gt;
 &lt;br /&gt;
In general, Model 204 version 7.8 requires the IBM z/890 or above processor.&lt;br /&gt;
&amp;lt;p&amp;gt;However, the IBM z10 or above processor is required for the following features:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;large (1 MB) page support&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;IBM&#039;s High Performance FICON (zHPF) support&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Connect&amp;lt;sup&amp;gt;&amp;amp;#9733;&amp;lt;/sup&amp;gt; compatibility with Model 204===&lt;br /&gt;
&lt;br /&gt;
Connect&amp;lt;span class=&amp;quot;superstar&amp;quot;&amp;gt;&amp;amp;#9733;&amp;lt;/span&amp;gt; version 7.5 or 7.7 is compatible with Model 204 version 7.8.&lt;br /&gt;
&lt;br /&gt;
For more information on Connect&amp;lt;span class=&amp;quot;superstar&amp;quot;&amp;gt;&amp;amp;#9733;&amp;lt;/span&amp;gt; installation, see the [[:Category:Connect*|Connect&amp;lt;span class=&amp;quot;superstar&amp;quot;&amp;gt;&amp;amp;#9733;&amp;lt;/span&amp;gt; wiki pages]].&lt;br /&gt;
&lt;br /&gt;
==SOUL (User Language) enhancements==&lt;br /&gt;
===AmIndependent method===&lt;br /&gt;
The &amp;lt;var&amp;gt;AmIndependent&amp;lt;/var&amp;gt; method returns TRUE for daemons spawned by &amp;lt;var&amp;gt;[[RunIndependently_(Daemon_subroutine)|RunIndependently]]&amp;lt;/var&amp;gt;. (The action of &amp;lt;var&amp;gt;[[AmDaemon_(Daemon_property)|AmDaemon]]&amp;lt;/var&amp;gt; remains unchanged.)&lt;br /&gt;
&lt;br /&gt;
The following table shows the values returned by &amp;lt;var&amp;gt;AmIndependent&amp;lt;/var&amp;gt; versus &amp;lt;var&amp;gt;AmDaemon&amp;lt;/var&amp;gt; for different daemon types:&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Type&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;AmDaemon&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;AmIndependent&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;$COMBG&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;False&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;False&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Independent daemon&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;False&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;True&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Other daemon&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;True&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;False&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Web, etc.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;False&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;False&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===$ProcOpn===&lt;br /&gt;
&amp;lt;var&amp;gt;[[$ProcOpn|$ProcOpn]]&amp;lt;/var&amp;gt; now supports the opening of a procedure with an all-numeric name, and including a leading zero, such as:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;%result = $procOpn(&#039;0123&#039;, &#039;MYFILE&#039;)&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Support for such procedure names was initially introduced at V7.7, and this feature of &amp;lt;var&amp;gt;$ProcOpn&amp;lt;/var&amp;gt; is enabled in V7.7 with the application of zap 77z054.&lt;br /&gt;
&lt;br /&gt;
===Allow parentheses to surround a boolean enumeration object===&lt;br /&gt;
The following sample code:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;   begin                                       &lt;br /&gt;
   variables are undefined                  &lt;br /&gt;
   %isValid is boolean initial (True)       &lt;br /&gt;
   if (%isValid) then                  &lt;br /&gt;
      print &#039;in IF&#039;                            &lt;br /&gt;
   end if                                   &lt;br /&gt;
   end   &amp;lt;/p&amp;gt;      &lt;br /&gt;
&lt;br /&gt;
will now compile and run successfully, since this syntax: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;if (%isValid) then &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
is logically equivalent to this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;if %isValid then &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Prior to V7.8 the presence of parentheses surrounding the boolean enumeration object would have caused a compilation error. This change is enabled in V7.7 with the application of zap 77z370.&lt;br /&gt;
&lt;br /&gt;
===Support for copying Object class objects===&lt;br /&gt;
The Object class now supports the copy and deepCopy methods. For example, an Object object can be copied as follows:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;   begin               &lt;br /&gt;
   %x is object object &lt;br /&gt;
   %y is object object &lt;br /&gt;
   %y = new            &lt;br /&gt;
   %x = %y:copy        &lt;br /&gt;
   end &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This change is enabled in v7.7 with the application of zap 77z076, and within V7.6 with the application of zap 76z412.&lt;br /&gt;
&lt;br /&gt;
===Assignment of enumeration values to method variables===&lt;br /&gt;
Enumerations values can now be assigned to method variables whose result is an enumeration. So, for example, the following code:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;   begin                                               &lt;br /&gt;
   enumeration colour                                  &lt;br /&gt;
      public                                           &lt;br /&gt;
         value red                                     &lt;br /&gt;
         value white                                   &lt;br /&gt;
         value blue                                    &lt;br /&gt;
      end public                                       &lt;br /&gt;
   end enumeration                                     &lt;br /&gt;
   %func    is function getColour is enumeration colour&lt;br /&gt;
   local function getColour is enumeration colour      &lt;br /&gt;
      return blue                                      &lt;br /&gt;
   end function                                        &lt;br /&gt;
   %func    = getColour                                &lt;br /&gt;
   %func    = (colour):red                             &lt;br /&gt;
   printText {~=%(Local):(%func)}                      &lt;br /&gt;
   end  &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
will produce this result:&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt; %(Local):(%func)=red &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
whereas previously this line:   &lt;br /&gt;
&lt;br /&gt;
  &amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt; %func    = (colour):red &amp;lt;/p&amp;gt;   &lt;br /&gt;
&lt;br /&gt;
would have been rejected with this message:&lt;br /&gt;
&lt;br /&gt;
   &amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;MSIR.0993: Assignment invalid: mismatch between method and method variable &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This change is enabled in V7.7 with the application of zap 77z128.&lt;br /&gt;
&lt;br /&gt;
===Optional output method parameters===&lt;br /&gt;
Prior to this release output parameters could not be optional or have default values. In this release output parameters can be specified as &amp;lt;var&amp;gt;Optional&amp;lt;/var&amp;gt;, and a default value can be specified with &amp;lt;var&amp;gt;Default&amp;lt;/var&amp;gt;. One related change is that if a &amp;lt;var&amp;gt;Len&amp;lt;/var&amp;gt; value is specified with &amp;lt;var&amp;gt;Optional&amp;lt;/var&amp;gt; or &amp;lt;var&amp;gt;Default&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;Output&amp;lt;/var&amp;gt;, it indicates the length of the hidden target for the output parameter if none was passed. For all other &amp;lt;var&amp;gt;Output&amp;lt;/var&amp;gt; parameters, &amp;lt;var&amp;gt;Len&amp;lt;/var&amp;gt; is meaningless, just as it was before Model 204 V7.8. The following is an example of the use of an optional output parameter:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;function getRemote( -&lt;br /&gt;
   %target is string len 32, %errorReason is string len 80 optional output -&lt;br /&gt;
) is float&lt;br /&gt;
  ...&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
In this example, if &amp;lt;code&amp;gt;%errorReason&amp;lt;/code&amp;gt; is not specified in a call and then set to a value longer than 80 bytes it wil be truncated to 80 bytes. However, if a string of a different length is passed, the length of that string determines truncation behavior.&lt;br /&gt;
&lt;br /&gt;
==External Call Facility enhancements==&lt;br /&gt;
===Managing ECF tables more efficiently===&lt;br /&gt;
The are two new features to help manage ECF tables more efficiently, avoid conditions where the table can fill, and prevent the definition of further entities.&lt;br /&gt;
&lt;br /&gt;
The first feature is the new &amp;lt;var&amp;gt;DISPLAY ECF&amp;lt;/var&amp;gt; command, which displays the contents of ECF tables and also the current status of users accessing ECF modules. See more details of the &amp;lt;var&amp;gt;[[#DISPLAY ECF|DISPLAY ECF]]&amp;lt;/var&amp;gt; command below.&lt;br /&gt;
&lt;br /&gt;
The second feature is a new &amp;lt;var&amp;gt;EXTERNAL REMOVE&amp;lt;/var&amp;gt; statement with the following syntax:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;EXTERNAL REMOVE &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;modulename&amp;lt;/span&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This statement causes the entry for the named module to be removed from the module table. The table entry is then placed on a free chain of entries and can be reused by issuing the &amp;lt;var&amp;gt;EXTERNAL MODULE&amp;lt;/var&amp;gt; statement. This allows the module table to be managed with redundant entries removed, without having to recycle the ONLINE.&lt;br /&gt;
&lt;br /&gt;
An &amp;lt;var&amp;gt;EXTERNAL REMOVE&amp;lt;/var&amp;gt; statement will return &amp;lt;code&amp;gt;$status/$statusd&amp;lt;/code&amp;gt; values of &amp;lt;code&amp;gt;0/0&amp;lt;/code&amp;gt;, and most other status values that can be returned by the &amp;lt;var&amp;gt;EXTERNAL REMOVE&amp;lt;/var&amp;gt; statement are already documented in the ECF return codes table. If an &amp;lt;var&amp;gt;EXTERNAL REMOVE&amp;lt;/var&amp;gt; is attempted against a module that is currently being called (in use), then &amp;lt;code&amp;gt;$status/$statusd&amp;lt;/code&amp;gt; will return the values &amp;lt;code&amp;gt;20/1&amp;lt;/code&amp;gt; (module unavailable).&lt;br /&gt;
&lt;br /&gt;
==System enhancements==&lt;br /&gt;
&lt;br /&gt;
===New wait types for daemon/master waits===&lt;br /&gt;
&lt;br /&gt;
Two new wait types, viewable on the &amp;lt;var&amp;gt;[[MONITOR_command|MONITOR]] USERS&amp;lt;/var&amp;gt; command output, have been implemented as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;57&amp;lt;/code&amp;gt; - Means a daemon thread waiting for its master thread  &amp;lt;br /&amp;gt;     &lt;br /&gt;
&amp;lt;code&amp;gt;58&amp;lt;/code&amp;gt; - Means a master thread waiting for one of its daemon threads&lt;br /&gt;
&lt;br /&gt;
This change is enabled in V7.7 with the application of zap 77z410.&lt;br /&gt;
&lt;br /&gt;
===Snap formatting changes===&lt;br /&gt;
Date/time stamps in the page headers of snaps will now be shown in normal format, rather than in julian format as in previous versions. So in the following example, a particular snap header under v7.7 or previous versions would show as: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;SNAPID    1   19226.060155  M204.0022: Bug .. nnnnn               PAGE     1 &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
whereas the same snap header under v7.8 would show as: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;SNAPID    1  2019/08/14 06:01:06   M204.0022: Bug .. nnnnn        PAGE     1 &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Also, due to improvements in handling trailing blanks in snap output, a snap generated under v7.8 should be marginally smaller than the same snap generated under previous versions, assuming the same SNAPCTL settings.&lt;br /&gt;
&lt;br /&gt;
===Call stack trace for problem diagnosis===&lt;br /&gt;
A  call stack trace is now provided to help diagnose and resolve common errors. To enable the stack trace, do either of the following: &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Set the &amp;lt;var&amp;gt;[[SIRFACT parameter|SIRFACT]] X&#039;01&#039;&amp;lt;/var&amp;gt; bit.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Set the &amp;lt;var&amp;gt;[[DEBUGUL parameter|DEBUGL]]&amp;lt;/var&amp;gt; parameter. Note that the &amp;lt;var&amp;gt;DEBUGUL&amp;lt;/var&amp;gt; approach will introduce extra QTBL overhead. &amp;lt;p&amp;gt;(&amp;lt;var&amp;gt;DEBUGUL&amp;lt;/var&amp;gt; provides a similar facility with an include trace of procedures leading to the error, but this might not be potentially as useful as the call trace.)&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt; &lt;br /&gt;
&lt;br /&gt;
The call stack trace can assist in diagnosing run-time errors that might occur, as illustrated by the following &amp;quot;Variable too small for result&amp;quot; and &amp;quot;MBSCAN exceeded&amp;quot; examples.&lt;br /&gt;
&lt;br /&gt;
====Variable too small for result====&lt;br /&gt;
When the stack trace is enabled, a &amp;quot;variable too small&amp;quot; error results in the following message:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;M204.2966: Error at line n, procedure &#039;&#039;procname&#039;&#039; in file &#039;&#039;procfile&#039;&#039;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
which identifies the line within a procedure where the error is occurring, in addition to the usual message:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;M204.0552: Variable too small for result&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Any subsequent M204.2966 messages indicate the point in the code from where the code in error was called. For example, a stack of three subroutine calls leading to a &amp;quot;variable too small&amp;quot; error might result in the following messaging:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;   M204.0552: Variable too small for result                             &lt;br /&gt;
   M204.2966: Error at line 9, procedure MYPROC.LEVEL4 in file MYPROC   &lt;br /&gt;
   M204.2966: Called from line 5, procedure MYPROC.LEVEL3 in file MYPROC&lt;br /&gt;
   M204.2966: Called from line 5, procedure MYPROC.LEVEL2 in file MYPROC&lt;br /&gt;
   M204.2966: Called from line 5, procedure MYPROC.LEVEL1 in file MYPROC &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This information should help in diagnosing the problem. &lt;br /&gt;
&lt;br /&gt;
If the error occurs within a command level program rather than a procedure, then the M204.2966 message is replaced by an M204.2967 message, and a similar error condition to the above with a preceding call stack might be audited as follows:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;   M204.0552: Variable too small for result              &lt;br /&gt;
   M204.2967: Error at line 14 of command level program  &lt;br /&gt;
   M204.2967: Called from line 5 of command level program&lt;br /&gt;
   M204.2967: Called from line 3 of command level program &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If neither &amp;lt;var&amp;gt;SIRFACT X&#039;01&#039;&amp;lt;/var&amp;gt; nor &amp;lt;var&amp;gt;DEBUGUL&amp;lt;/var&amp;gt; is set, then the &amp;quot;variable too small&amp;quot; error produces the following messages:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;   M204.0552: Variable too small for result &lt;br /&gt;
   M204.2968: Error: no debug info &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====MBSCAN exceeded====&lt;br /&gt;
Similarly to the handling of the &amp;quot;variable too small for result&amp;quot; error, the call stack can also be used to diagnose errors where the value of &amp;lt;var&amp;gt;[[MBSCAN parameter|MBSCAN]]&amp;lt;/var&amp;gt; is exceeded as a result of a direct search of Table B records. &lt;br /&gt;
&amp;lt;p&amp;gt;Again, under V7.8, with either the &amp;lt;var&amp;gt;SIRFACT X&#039;01&#039;&amp;lt;/var&amp;gt; bit set or &amp;lt;var&amp;gt;DEBUGUL&amp;lt;/var&amp;gt; set, if a long request occurs as a result of exceeding &amp;lt;var&amp;gt;MBSCAN&amp;lt;/var&amp;gt;, then initially the following message is produced, as before:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;M204.0569: File &#039;&#039;filename&#039;&#039;, Find: Table B records to be searched = &#039;&#039;nnnn&#039;&#039;&amp;lt;/p&amp;gt;&lt;br /&gt;
followed by a DYRWT prompt message. If the user replies &#039;N&#039; to the prompt, or if the request is run in an environment (such as a batch job) where the default response is &#039;N&#039;, the following message is produced after the M204.0569 message:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;Cancelling request: M204.2969: MBSCAN (&#039;&#039;mm&#039;&#039;) exceeded, records to be searched = &#039;&#039;nnnn&#039;&#039;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
where &#039;&#039;mm&#039;&#039; is the current setting of &amp;lt;var&amp;gt;MBSCAN&amp;lt;/var&amp;gt;. The M204.2969 message is followed by M204.2966 messages displaying the call stack trace. Thus, if the following code is run from procedure MYPROC.MBSCAN against the demo database, with an &amp;lt;var&amp;gt;MBSCAN&amp;lt;/var&amp;gt; setting of 10:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;   b                           &lt;br /&gt;
   call sub1                   &lt;br /&gt;
   sub1: subroutine            &lt;br /&gt;
   fd1:                        &lt;br /&gt;
      in clients fd city = ONTARIO&lt;br /&gt;
              end find         &lt;br /&gt;
      fr fd1                      &lt;br /&gt;
         pai                      &lt;br /&gt;
         print                    &lt;br /&gt;
      end for                     &lt;br /&gt;
   end subroutine              &lt;br /&gt;
   end &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
then the following messages are produced, assuming any prompts are responded to with an &#039;N&#039;:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;   M204.0569: File CLIENTS, Find: Table B records to be searched = 3415&lt;br /&gt;
   Cancelling request: M204.2969: MBSCAN (10) exceeded, records to be searched = 3415  &lt;br /&gt;
   M204.2966: Error at line 6, procedure MYPROC.MBSCAN in file MYPROC&lt;br /&gt;
   M204.2966: Called from line 3, procedure MYPROC.MBSCAN in file MYPROC  &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===appendJournalData===&lt;br /&gt;
The &amp;lt;var&amp;gt;[[AppendJournalData_(Stringlist_function)|AppendJournalData]]&amp;lt;/var&amp;gt; function is now more tolerant of an outstanding BUMP request. Previously, if &amp;lt;var&amp;gt;AppendJournalData&amp;lt;/var&amp;gt; was called to inadvertently retrieve a large amount of journal data, typically when called implicitly from within SirScan, then any outstanding BUMP request wouldn&#039;t be honored until all of the data had been retrieved, at which point the BUMP request would be completed, and all data would be lost.&lt;br /&gt;
&lt;br /&gt;
Now, the &amp;lt;var&amp;gt;AppendJournalData&amp;lt;/var&amp;gt; process checks for outstanding BUMP requests before each track I/O is executed, thus avoiding excessive I/Os against the journal and long waits for the BUMP of such a process to complete.&lt;br /&gt;
&lt;br /&gt;
==AUDIT204 enhancements==&lt;br /&gt;
===FORMAT command===&lt;br /&gt;
TIMEHH is a new parameter used with the FORMAT command of the [[Tracking_system_activity_(CCAJRNL,_CCAAUDIT,_CCAJLOG)#AUDIT204_utility|AUDIT204]] utility.  It indicates that timestamps, printed at the beginning of each line of output, should include hundredths of a second. Requires no other arguments.&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;b&amp;gt;NOTE:&amp;lt;/b&amp;gt; This parameter and the 78 version (or later) of AUDIT204 may be used against a 77 (or later) CCAJRNL.&amp;lt;/p&amp;gt;&lt;br /&gt;
For example:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;//CCAIN DD *&lt;br /&gt;
FORMAT YEARFORM 4&lt;br /&gt;
TIMEHH&lt;br /&gt;
TYPE ER MS LI&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Recovery enhancements==&lt;br /&gt;
===Media Recovery in a multi-user environment===&lt;br /&gt;
It is now possible to perform media recovery by issuing the &amp;lt;var&amp;gt;REGENERATE&amp;lt;/var&amp;gt; command to roll forward selected files in a multi-user environment, with the media recovery being carried out by different users with system manager privileges. The new USING option allows for the specification of a ddname for the input journal stream to be used by the &amp;lt;var&amp;gt;REGENERATE&amp;lt;/var&amp;gt; command. Previously media recovery was restricted to single user batch jobs, using the CCAGEN ddname for the input journal. For more details, see the &amp;lt;var&amp;gt;[[#REGENERATE|REGENERATE]]&amp;lt;/var&amp;gt; command below.&lt;br /&gt;
&lt;br /&gt;
==Security enhancements==&lt;br /&gt;
===CA-Top Secret can disallow CCASTAT logins===&lt;br /&gt;
The [[CA-Top_Secret_interface|CA-Top Secret]] interface now recognizes the &amp;lt;code&amp;gt;DEFACID=&amp;lt;/code&amp;gt;, setting and does not allow CCASTAT logins in the online if &amp;lt;code&amp;gt;DEFACID&amp;lt;/code&amp;gt; is set to null. (There is no attempt to log on M204USR.) Therefore, to disallow CCASTAT logons, set DEFACID=, in [[CA-Top_Secret_interface#Preparing_a_TOPSPARM_parameter_module_with_TOPSGEN|TOPSPARM]]. CCASTAT will be opened because it contains file and group passwords, but it will not be used for logons if CCASTAT logons are not allowed.&lt;br /&gt;
&lt;br /&gt;
===CUSTOM=11 and mixed cased input===&lt;br /&gt;
The &amp;lt;var&amp;gt;[[CUSTOM_parameter|CUSTOM]]&amp;lt;/var&amp;gt; parameter CUSTOM=11 setting no longer requires that a *LOWER command be issued prior to a LOGCTL command (to add or change a  password) to preserve mixed case input. Prior to this release, with CUSTOM=11 in place, *LOWER had to be issued before a LOGCTL command, otherwise any mixed case password strings would automatically be translated into uppercase. This change is enabled in V7.7 with the application of zap 77z108.&lt;br /&gt;
&lt;br /&gt;
===DEFUSER can specify a jobname not authorized to access M204===&lt;br /&gt;
When specifying DEFUSER=JOBNAME and VALIDAT=LOGON in the RACFGEN parms for an ONLINE, if the specified jobname ( the owning id for the ONLINE job ) isn&#039;t authorized to use Model 204 via RACF, any LOGIN commands specifying no userid will now succeed ( previously such a LOGON would have failed ). This enables users to submit jobs with USE $JOB, whereby the string USER=jobname  will be added to the submitted JCL, and this in turn is useful if the specified jobname has dataset access privileges to datasets required by the submitted jobs, even if the jobname itself isn&#039;t authorized to use M204.&lt;br /&gt;
&lt;br /&gt;
==Janus product enhancements==&lt;br /&gt;
&lt;br /&gt;
===Web Sockets===&lt;br /&gt;
Web Sockets are now supported in Janus Web Server.&lt;br /&gt;
&lt;br /&gt;
The Web Socket protocol provides various advantages over the HTTP protocol:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Web Sockets allow full-duplex communication.&amp;lt;/li&amp;gt; &lt;br /&gt;
&amp;lt;li&amp;gt;Efficient framing of payload data uses minimal overhead.&amp;lt;/li&amp;gt;  &lt;br /&gt;
&amp;lt;li&amp;gt;The Web Socket protocol is end-user extensible.&amp;lt;/li&amp;gt;  &lt;br /&gt;
&amp;lt;li&amp;gt;Most importantly, Web Sockets can be deployed completely within an existing HTTP/HTTPS framework.&amp;lt;/li&amp;gt; &lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To implement Web Sockets, you must enable the Janus Web port for Web Socket upgrades with the new &lt;br /&gt;
WEBSOCKET parameter. The WEBSOCKET option can be specified on either the port definition or the &lt;br /&gt;
JANUS WEB rule for the URL. &lt;br /&gt;
Likewise, an individual Janus Web rule can either allow or disallow Web Socket connections with the &lt;br /&gt;
WEBSOCKET and NOWEBSOCKET parameters, respectively. &lt;br /&gt;
&lt;br /&gt;
For details on implementing Web Sockets, see the [[WebSocket_(Socket_function)|WebSocket]] wiki page.&lt;br /&gt;
&lt;br /&gt;
===Janus Web Server access rule===&lt;br /&gt;
The automatic &amp;lt;var&amp;gt;[[JANUS WEB ALLOW]]&amp;lt;/var&amp;gt; rule, which allowed any user to access the port without requiring a login, is changed &amp;lt;i&amp;gt;for non-SSL ports&amp;lt;/i&amp;gt; to the following:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;JANUS WEB &amp;lt;i&amp;gt;portname&amp;lt;/i&amp;gt; DISALLOW *&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
This rule requires a system administrator to explicitly define &amp;lt;var&amp;gt;ALLOW&amp;lt;/var&amp;gt; rules to enable users to access non-SSL ports.&lt;br /&gt;
The rule applies unless overridden by user-added rules. &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;blockquote class=&amp;quot;note&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;b&amp;gt;Note:&amp;lt;/b&amp;gt; To revert from this change in the JANUS DEFINE default and make the default &lt;br /&gt;
 non-SSL &amp;lt;var&amp;gt;ALLOW&amp;lt;/var&amp;gt; rule as it was in version 7.5 and earlier (&amp;lt;code&amp;gt;ALLOW *&amp;lt;/code&amp;gt;), turn on the 1 bit of the &amp;lt;var&amp;gt;[[WEBDFLT parameter|WEBDFLT]]&amp;lt;/var&amp;gt; parameter: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;RESET WEBDFLT=1&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Increase in pending accepts for Janus BPX ports===&lt;br /&gt;
The default number of pending accepts for Janus BPX server ports has been increased from 3 to 12, thus reducing the likelihood that a pending accept may fail with the message&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;MSIR.0019 Connection request rejected for port (port), MAXCON exceeded&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The actual number of pending accepts to be supported on the port can be set with the new parameter MAXPEND, set on the &amp;lt;var&amp;gt;[[JANUS_DEFINE|JANUS DEFINE]]&amp;lt;/var&amp;gt; command, where MAXPEND can vary from 3 up to a maximum value of 32. The change to the default value is enabled in V7.7 with the application of zap 77z269.&lt;br /&gt;
&lt;br /&gt;
===TCP listen backlog increased===&lt;br /&gt;
&lt;br /&gt;
The [[Program_Communication_facilities#LISTEN_call|TCP listen]] backlog has been increased from 16 to 1024 under z/OS.&lt;br /&gt;
&lt;br /&gt;
This update tells the TCP stack to queue up to 1024 of such requests up before dropping them, thus reducing, or in most cases eliminating, the likelihood of a connection request drop, other than in exceptional circumstances, such as a denial of service attack. This change is enabled in V7.7 with the application of zap 77z340.&lt;br /&gt;
&lt;br /&gt;
===Defer the freeing of XMLSCREEN input XML===&lt;br /&gt;
&lt;br /&gt;
The freeing of [[XMLSCREEN_and_NOXMLSCREEN_(JANUS_DEFINE_parameters)|XMLSCREEN]] input XML is now deferred until the next Read Screen or session termination. This means that if an application error is detected, the input XML can be retrieved with [[$Web_Input_Content|$Web_Input_Content]] and then logged for problem analysis. &lt;br /&gt;
&lt;br /&gt;
Prior to this release the XML received from the client is freed immediately after being used to set the input data for a Read Screen, rendering it unavailable for problem determination.&lt;br /&gt;
&lt;br /&gt;
This change is enabled in V7.7 with the application of zap 77z368.&lt;br /&gt;
&lt;br /&gt;
===XMLSCREEN and Janus Web Legacy blank stripping===&lt;br /&gt;
&lt;br /&gt;
xmlScreens and Janus Web Legacy screens now adhere to the same standard as standard screen processing in terms of stripping leading blanks from input fields defined as [[Full-screen_feature#DEBLANK_or_NODEBLANK_option|DEBLANK]] (either explicitly or implicitly).&lt;br /&gt;
&lt;br /&gt;
This change is enabled in V7.7 with the application of zap 77z400.&lt;br /&gt;
&lt;br /&gt;
===SSL input buffer size===&lt;br /&gt;
&lt;br /&gt;
The default value of [[SSLIBSIZE_(JANUS_DEFINE_parameter)|SSLIBSIZE]] has been increased to 16384 + 128, or 16512. This size should ensure correct communication with all TLS spec compliant applications. It is the maximum size allowed unless you use [[CUSTOM_parameter#Using_CUSTOM.3D.2818.29|CUSTOM=18]].    &lt;br /&gt;
&lt;br /&gt;
This change is enabled in V7.7 with the application of zap 77z415.&lt;br /&gt;
&lt;br /&gt;
===Increasing LDAP buffers===&lt;br /&gt;
&lt;br /&gt;
The number of LDAP buffers allocated at startup can now be changed by setting the NLDAPBUF parameter in CCAIN. See below for details on [[#NLDAPBUF|NLDAPBUF]].&lt;br /&gt;
&lt;br /&gt;
===Increase URL length returned with $web_form_action===&lt;br /&gt;
With this release the maximum Janus Web Server incoming URL that can be handled by &amp;lt;var&amp;gt;$web_form_action&amp;lt;/var&amp;gt; is increased from 512 bytes to 1024 bytes. This change is enabled in V7.7 with the application of zap 77z424.&lt;br /&gt;
&lt;br /&gt;
===Maximum RBSIZE setting increased===&lt;br /&gt;
The maximum value for RBSIZE, set on the &amp;lt;var&amp;gt;[[JANUS DEFINE|JANUS DEFINE]]&amp;lt;/var&amp;gt; command, is now increased to 16777215 (previously the maximum was 65534). RBSIZE specifies the RPC or Request Buffer size.  On a Web port, the Janus request buffer holds browser request information such as header data, cookies, and form data. On other port types, it holds RPC input and output parameters. This change is enabled in V7.7 with the application of zap 77z427.&lt;br /&gt;
&lt;br /&gt;
==Debugger enhancements==&lt;br /&gt;
These enhancements apply to the Janus and TN3270 debuggers. &lt;br /&gt;
&lt;br /&gt;
===Access to exposed variables===&lt;br /&gt;
The debuggers can now view or watch the values of variables exposed to local routines/methods. Previously, any attempts to access an exposed variable would have displayed &amp;quot;%varname has no value&amp;quot; in the debugger session. This feature is enabled in V7.7 with the application of zap 77z363.&lt;br /&gt;
&lt;br /&gt;
===Subroutine or method display===&lt;br /&gt;
When execution pauses for a break point or runtime error, the subroutine or method being executed is indicated in the status area.  In addition, the source code line information available by right-clicking on a source line now also indicates the subroutine or method.&lt;br /&gt;
&lt;br /&gt;
==Performance enhancements==&lt;br /&gt;
&lt;br /&gt;
===MP/204 offload improvements===&lt;br /&gt;
Application code issuing the following SOUL statements will now now be fully offloadable:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;File Records In/On&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Remember&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt; &lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Position&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Sort Values&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;                                             &lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Reset Header/Trailer&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Find and Print Count&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Find All Values&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;For Each Value&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
The above improvements are enabled in V7.7 with the application of zaps 77z419 and 77z420.&lt;br /&gt;
&lt;br /&gt;
===X3270OUT exit offloadable===&lt;br /&gt;
When running MP/204 (AMPSUBS&amp;gt;0) and using the [[Coding_SNA_Communications_Server_conversion_exit_routines#X3270OUT_.28convert_output_from_3270_format.29|X3270OUT]] exit to convert a 3270 output data stream to the appropriate device protocol, the exit can now run in parallel mode to improve performance. This change is enabled in V7.7 with the application of zap 77z313.&lt;br /&gt;
&lt;br /&gt;
The X3270OUT exit must be written to be re-entrant.&lt;br /&gt;
&lt;br /&gt;
==New and changed commands==&lt;br /&gt;
===DISPLAY ECF===&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;DISPLAY ECF {{ M | N | U } like ?} &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This new command displays details from ECF tables, or the current status of users accessing ECF modules.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;syntax&amp;quot;&amp;gt;D ECF M&amp;lt;/span&amp;gt; displays the contents of the module table. For example:&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;    D ECF M &lt;br /&gt;
    Module   Loadlib  Address:Length     Loaded@      Lastused@   #Calls  Flags &lt;br /&gt;
    QATUM13C PROGLIB 2FB91FB8:00000028 19023:121506 19023:121506 00000001 &lt;br /&gt;
    QATUM13B PROGLIB 2FE65000:00009C18 19023:121506 19023:121506 00000001 &lt;br /&gt;
    QATUM13A PROGLIB 2FE6EC18:00001CD8 19023:121506 19023:121506 00000001  &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
(flags may be D=deleted; S=shared; H=halted; I=Idle)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;syntax&amp;quot;&amp;gt;D ECF N&amp;lt;/span&amp;gt; displays contents of the name table. For example: &amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;    D ECF N&lt;br /&gt;
    Module   Logical-call-name &lt;br /&gt;
    QATUM13C MOD_QATUM13C &lt;br /&gt;
    QATUM13B MOD_QATUM13B &lt;br /&gt;
    QATUM13A MOD_QATUM13A &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;syntax&amp;quot;&amp;gt;D ECF U&amp;lt;/span&amp;gt; displays details of users currently accessing ECF modules. This is also the default option, and so &amp;lt;span class=&amp;quot;syntax&amp;quot;&amp;gt;D ECF&amp;lt;/span&amp;gt; will display the same output as &amp;lt;span class=&amp;quot;syntax&amp;quot;&amp;gt;D ECF U&amp;lt;/span&amp;gt;. For example:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;    D ECF U                           &lt;br /&gt;
    User# Userid     Module   Parmlen &lt;br /&gt;
    00002 ADMIN      --none--         &lt;br /&gt;
    00003 ADMIN      COBSAMP1 00000002&lt;br /&gt;
    00004 ADMIN      COBSAMP1 00000002 &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;syntax&amp;quot;&amp;gt;D ECF &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;function&amp;lt;/var&amp;gt; LIKE &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;?&amp;lt;/var&amp;gt; &amp;lt;/span&amp;gt; (where &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;?&amp;lt;/var&amp;gt; is a valid pattern) displays details for entities that match the specified pattern. The function is either M (modules), N (names), or U (users), and it defaults to U. So for example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;D ECF U L A&amp;lt;/p&amp;gt;&lt;br /&gt;
or&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;D ECF U L A*&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
displays details of ECF users whose names begin with A.&lt;br /&gt;
&lt;br /&gt;
===REGENERATE===&lt;br /&gt;
The &amp;lt;var&amp;gt;REGENERATE&amp;lt;/var&amp;gt; command can now be run in a multi-user environment by multiple users with system manager privileges. A new option USING is provided to specify the ddname of the input journal, so that the full syntax is now as follows:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;  REGENERATE [USING ddname] FILE filename [FROM dumpname | IGNORE]&lt;br /&gt;
  [TO {LAST UPDATE [BEFORE yy.ddd hh:mm:ss.th] | LAST CHECKPOINT [BEFORE yy.dd hh:mm:ss.th] &lt;br /&gt;
  | UPDATE number OF yy.ddd hh:mm:ss.th | CHECKPOINT yy.ddd hh:mm:ss.th} ]&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The default for the using ddname is CCAGEN, but any ddname may be used to allocate an input journal and used. For example:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;  ALLOCATE REGEN1 WITH SCOPE=SYSTEM DSN=PROD1.GDGJ OLD SEQUENTIAL GEN=+2&lt;br /&gt;
  REGENERATE USING REGEN1 FILE TEST&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It is the user&#039;s responsibility to ensure that the file being regenerated is not in use, and so prior to usage, &amp;lt;var&amp;gt;BUMP FILE&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;STOP FILE&amp;lt;/var&amp;gt; should be used to isolate usage against the file. If the file is in use, the REGEN will fail with these messages:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;  M204.1430: Failed to open file TEST&lt;br /&gt;
  M204.1436: Stopped processing file TEST  &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
$STATUS will now be set for &amp;lt;var&amp;gt;REGENERATE&amp;lt;/var&amp;gt; with the following values:&lt;br /&gt;
&amp;lt;blockquote&amp;gt;    &lt;br /&gt;
    0 - Success &amp;lt;br/&amp;gt;&lt;br /&gt;
    1 - No files were processed &amp;lt;br/&amp;gt;&lt;br /&gt;
    2 - At least one file stopped processing &amp;lt;br/&amp;gt;&lt;br /&gt;
    4 - A serious error occurred, REGEN failed &lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Similarly, &amp;lt;var&amp;gt;SETGRC&amp;lt;/var&amp;gt; may be used to get the return code and error message.&lt;br /&gt;
&lt;br /&gt;
==New and changed parameters==&lt;br /&gt;
&lt;br /&gt;
===ECMODS===&lt;br /&gt;
The new minimum value for ECMODS, the allowable number of ECF modules, is 1. Prior to V7.8 the minimum value was 0. This change is enabled in V7.7 with the application of zap 77z306.&lt;br /&gt;
&lt;br /&gt;
===ECNAMES===&lt;br /&gt;
The new minimum value for ECNAMES, the allowable number of ECF module names, is 1. Prior to V7.8 the minimum value was 0. This change is enabled in V7.7 with the application of zap 77z306.&lt;br /&gt;
&lt;br /&gt;
===ECPSIZE===&lt;br /&gt;
The new minimum value for ECPSIZE, the initial storage allocation for ECF parameters, is 1024. Prior to V7.8 the minimum value was 0. This change is enabled in V7.7 with the application of zap 77z306.&lt;br /&gt;
&lt;br /&gt;
===ENQTIME===&lt;br /&gt;
Millisecond duration of automatic record locking retry wait.&lt;br /&gt;
&lt;br /&gt;
Prior to this change, if record locking conflicts occur frequently in a busy online, any user with a non-zero value for &amp;lt;var&amp;gt;[[ENQRETRY parameter|ENQRETRY]]&amp;lt;/var&amp;gt; will wait at least 3 seconds before the conflict is dealt with. This can degrade overall system performance.      &lt;br /&gt;
                                                         &lt;br /&gt;
The &amp;lt;var&amp;gt;[[ENQTIME parameter|ENQTIME]]&amp;lt;/var&amp;gt; parameter specifies the number of milliseconds waited for each record locking retry wait. ENQTIME can be between 1 and 60000, corresponding to a minimum of 1 millisecond and a maximum of 1 minute. The default value of ENQTIME is 3000 (3 seconds).            &lt;br /&gt;
                                                         &lt;br /&gt;
For example, with ENQTIME = 100 and ENQRETRY = 7, after a record locking conflict occurs the thread will retry 7 times with wait intervals of .1 seconds, and so within at most .7 seconds either the lock becomes available or the conflict triggers an On unit or cancels the request.     &lt;br /&gt;
                                                         &lt;br /&gt;
The ENQTIME parameter may also be reset with $ResetN. &lt;br /&gt;
&lt;br /&gt;
This new parameter is enabled in V7.7 with the application of zap 77z299.&lt;br /&gt;
&lt;br /&gt;
===EVALOPT===&lt;br /&gt;
The new &amp;lt;var&amp;gt;EVALOPT&amp;lt;/var&amp;gt; parameter controls the cancellation of a request on truncation of string data. The default value is 0, and currently there is just one setting, 1, which means &amp;quot;cancel a request if truncation of string data occurs.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
For example, with the default of 0 in place, the following code &amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;    %x is string len 1   &lt;br /&gt;
    %y is string len 2   &lt;br /&gt;
    %y = &#039;ab&#039;            &lt;br /&gt;
    %x = %y              &lt;br /&gt;
    printtext {~} = {%x} &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
would cause silent truncation, and give the result&lt;br /&gt;
    &amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;%x = a &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If &amp;lt;var&amp;gt;EVALOPT&amp;lt;/var&amp;gt; is set to 1, then the above code produces the following message:&lt;br /&gt;
    &amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;M204.0552: Variable too small for result &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and the request is cancelled.&lt;br /&gt;
&lt;br /&gt;
===LFSCB===&lt;br /&gt;
LFSCB, the length of the full screen buffer, now has a new minimum value of 8 ( the previous minimum was 0 ). This change is enabled in v7.7 with the application of zap 77z042, and within V7.6 with the application of zap 76z393.&lt;br /&gt;
&lt;br /&gt;
===MAXPRE, MAXBOUT, MAXSUBT===&lt;br /&gt;
&amp;lt;p&amp;gt;Introduced in zap 77z257.&amp;lt;/p&amp;gt;&lt;br /&gt;
The new &amp;lt;var&amp;gt;MAXPRE&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;MAXBOUT&amp;lt;/var&amp;gt;, and &amp;lt;var&amp;gt;MAXSUBT&amp;lt;/var&amp;gt; parameters can be used to cancel a runaway transaction and prevent it from filling the checkpoint data set. &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;MAXPRE&amp;lt;/var&amp;gt;:  Maximum number of pre-images per transaction.  &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;MAXBOUT&amp;lt;/var&amp;gt;: Maximum number of backout pages per transaction. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;MAXSUBT&amp;lt;/var&amp;gt;: Maximum number of subtransaction checkpoints that a transaction can span.&amp;lt;/li&amp;gt;&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;Each new parameter defaults to unlimited. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;If a parameter value is set, a transaction is cancelled if that value is exceeded, and the following message is displayed:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;M204.0524: Maximum number (&amp;lt;i&amp;gt;num&amp;lt;/i&amp;gt;) of &amp;lt;i&amp;gt;parameter&amp;lt;/i&amp;gt; exceeded.&amp;lt;/p&amp;gt;&lt;br /&gt;
where &amp;lt;i&amp;gt;num&amp;lt;/i&amp;gt; is the value set for &amp;lt;i&amp;gt;parameter&amp;lt;/i&amp;gt; (&amp;lt;var&amp;gt;MAXPRE&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;MAXBOUT&amp;lt;/var&amp;gt;, or &amp;lt;var&amp;gt;MAXSUBT&amp;lt;/var&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
===NLDAPBUF===&lt;br /&gt;
This new parameter allows the number of LDAP buffers allocated during startup to be set in CCAIN. The default value is 2, and the settable value can range from 0 to 65535.&lt;br /&gt;
&lt;br /&gt;
===PUPDTH (new minimum value)===&lt;br /&gt;
If a user sets the &amp;lt;var&amp;gt;[[PUPDTH parameter|PUPDTH]]&amp;lt;/var&amp;gt; parameter to 0, it will now automatically be increased to 1, its minimum value.&lt;br /&gt;
&lt;br /&gt;
===SERV4G===&lt;br /&gt;
This parameter allows testing of server tables that span a 4-gigabyte boundary. For example, if &amp;lt;var&amp;gt;SERV4G&amp;lt;/var&amp;gt; is &amp;lt;code&amp;gt;X&#039;FFFFF000&#039;&amp;lt;/code&amp;gt;, each ATB server will begin at &amp;lt;code&amp;gt;XX_FFFFF000&amp;lt;/code&amp;gt;. If SERV4G is &amp;lt;code&amp;gt;X&#039;FFFF0000&#039;&amp;lt;/code&amp;gt;, each ATB server will begin at &amp;lt;code&amp;gt;XX_FFFF0000&amp;lt;/code&amp;gt;. &amp;lt;code&amp;gt;XX&amp;lt;/code&amp;gt; is determined by the storage available on the system. The parameter is set in CCAIN.&lt;br /&gt;
&lt;br /&gt;
The contents of the ATB server are specified by using the &amp;lt;var&amp;gt;[[SERVGA parameter|SERVGA]]&amp;lt;/var&amp;gt; parameter.&lt;br /&gt;
&lt;br /&gt;
For example, if you want VTBL to span the 4G boundary, you can use these settings: &amp;lt;code&amp;gt;SERV4G=X&#039;FFFFF000&#039;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;SERVGA=X&#039;00040000&#039;&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;LVTBL=200 (6400 bytes, X&#039;1900&#039;)&amp;lt;/code&amp;gt;. This will force each server&#039;s VTBL to begin at &amp;lt;code&amp;gt;XX_FFFFF000&amp;lt;/code&amp;gt; and end at &amp;lt;code&amp;gt;XX+1_00000900&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===WEBDFLT===&lt;br /&gt;
At V7.7, the default access rule for non-SSL ports was changed from ALLOW * to DISALLOW *, meaning that unless any ALLOW rules were in place resulting in a login/password prompt, the port couldn&#039;t be accessed. The new &amp;lt;var&amp;gt;[[WEBDFLT_parameter|WEBDFLT]]&amp;lt;/var&amp;gt; parameter may be set to 1 for reversion to the old default of ALLOW *. This new parameter is enabled in V7.7 with the application of zap 77z090. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;var&amp;gt;RESET WEBDFLT&amp;lt;/var&amp;gt; requires system administrator privileges. It is recommended to reset the 1 bit of &amp;lt;var&amp;gt;WEBDFLT&amp;lt;/var&amp;gt; to zero after issuing a series of &amp;lt;var&amp;gt;JANUS DEFINE&amp;lt;/var&amp;gt; commands which need WEBDFLT=1, as in the CCAIN input stream.&lt;br /&gt;
&lt;br /&gt;
==New and changed statistics==&lt;br /&gt;
===MPR, MBO, MCP, and RCV===&lt;br /&gt;
Introduced in zap 77z257.&lt;br /&gt;
&amp;lt;p&amp;gt;These statistics provide high water mark transaction information. (Since-last values will not be available until V78 GA.)&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;They are useful in conjunction with the &amp;lt;var&amp;gt;MAXPRE&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;MAXBOUT&amp;lt;/var&amp;gt;, and &amp;lt;var&amp;gt;MAXSUBT&amp;lt;/var&amp;gt; parameters. &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
User/system statistics:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;MPR: High water mark of transaction pre-images. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;MBO: High water mark of transaction backout pages. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;MCP: High water mark of transaction chkpoint spans. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
System statistics: &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;RCV: Number of blocks needed for subtransaction recovery &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt; &lt;br /&gt;
&amp;lt;p class=&amp;quot;note&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Notes:&amp;lt;/b&amp;gt; M204.0843 now displays the RCV statistic for subtransaction checkpoints.&lt;br /&gt;
The size of recovery checkpoint must be greater than the sum of the last RCV value plus the number of records in [[System_and_media_recovery#RESTART_recovery_considerations_for_sub-transaction_checkpoints|RESTART and RESTARTS]].&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
===DKWTS and DKWTMICS===&lt;br /&gt;
Introduced in zap 77z7289.&lt;br /&gt;
&amp;lt;p&amp;gt;The new system statistics DKWTS (DisK WaiTs) and DKWTMICS (DisK WaiT MICroSeconds) collect data to provide rough disk I/O service time numbers.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
DKWTS shows the number of disk I/O waits. DKWTMICS shows the total wait time for those waits in microseconds. Dividing the difference in DKWTMICS by the difference in DKWTS over an interval provides the average disk I/O wait time in microseconds.              &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;note&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Notes:&amp;lt;/b&amp;gt; &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The wait time does include internal Model 204 scheduler delays, so on a CPU bound Model 204 system, the service times calculated from DKWTS and DKWTMICS are likely to be an overestimate of actual service times.&amp;lt;/li&amp;gt;  &lt;br /&gt;
                                                                    &lt;br /&gt;
&amp;lt;li&amp;gt;DKWTS and DKWTMICS are not available in SirMon; use [[MONITOR_command|MONITOR]] SYSTEM STATISTICS to view these statistics.&amp;lt;/li&amp;gt;&amp;lt;/ul&amp;gt;  &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Compatibility issues==&lt;br /&gt;
===&amp;lt;b id=&amp;quot;listNewInit&amp;quot;&amp;gt;&amp;lt;/b&amp;gt;$ListNew cannot be used in Initial clause===&lt;br /&gt;
It is now a compilation error if &amp;lt;var&amp;gt;$ListNew&amp;lt;/var&amp;gt; is attempted to be used in the &amp;lt;var&amp;gt;Initial&amp;lt;/var&amp;gt; clause of a &lt;br /&gt;
[[Using_variables_and_values_in_computation#Declare_statements_for_.25variables|declaration statement]].&lt;br /&gt;
&amp;lt;p&amp;gt;This change is propagated by zap maintenance to versions 7.5 (zap 75Z487), 7.6 (zap 76Z514), and 7.7 (zap 77z281) of Model 204.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote class=&amp;quot;note&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Note:&amp;lt;/b&amp;gt; Strictly speaking, this would not be considered a compilation error, because previously although &amp;lt;code&amp;gt;..&amp;amp;nbsp;Initial($ListNew)&amp;lt;/code&amp;gt; did not produce a compilation error, in almost all circumstances it would produce a snap if the initialized %variable were used with some other &amp;lt;var&amp;gt;$List&amp;lt;i&amp;gt;xxx&amp;lt;/i&amp;gt;&amp;lt;/var&amp;gt; invocation.&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Restricting the use of the CUSTOM=38 setting===&lt;br /&gt;
The [[CUSTOM parameter|CUSTOM=38]] parameter setting, introduced at V7.5, inadvertently provided System Manager privileges to all users via the RESET command. This CUSTOM setting is now restricted to the RESETting of the LAUDIT parameter.&lt;br /&gt;
&lt;br /&gt;
===Disabling of Closure support===&lt;br /&gt;
Due to a number of bugs related to Closure support, introduced at V7.7, this feature, which can best be described as exposed methods assigned to method variables, has been disabled in this release. This change was also made to V7.7 with application of zap 77z119.&lt;br /&gt;
&lt;br /&gt;
===Password delimiter enforced===&lt;br /&gt;
When using &amp;lt;var&amp;gt;IFSTRTN&amp;lt;/var&amp;gt; to log on to a Model 204 online from an IFAM2 application, both the logonid and password must be followed by a semicolon, which is the delimiter. For example:      &lt;br /&gt;
                                      &lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;CALL IFSTRTN(RC,&#039;logonid;password;&#039;...)&amp;lt;/p&amp;gt;&lt;br /&gt;
                 &lt;br /&gt;
If a semicolon does not follow the password string, the following message will now be issued:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;M204.2964: Password missing or too long &amp;lt;/p&amp;gt;                 &lt;br /&gt;
                                                         &lt;br /&gt;
Previously, a semicolon following the password was not required and the first blank served as a password delimiter.  However, as of V7.7, embedded blanks are valid password characters and a semicolon is now required to delimit the password.&lt;br /&gt;
&lt;br /&gt;
This change is enabled in V7.7 with the application of zap 77z231.&lt;br /&gt;
&lt;br /&gt;
===PAGESZ parameter validated===&lt;br /&gt;
Previously it was possible to set the PAGESZ parameter to any value, although Model 204 internally supports one page size of 6184, and any deviation from this value would have led to problems during file creation. The value of this parameter is now controlled, such that setting it to any value other than 6184 will generate an M204.1149 message with the parameter being reset to 6184.&lt;br /&gt;
&lt;br /&gt;
===ECPRIV and the IDCAMS facility===&lt;br /&gt;
At V7.7 a security loophole was closed, whereby all ECF modules were run under external-authorizer profile of the calling user. Previously any ECF tasks were run under the owning job&#039;s external-authorizer profile, and in order for certain sites to retain that ability, a new setting of ECPRIV, value 4, was introduced to retain the ability to run ECF tasks using the job&#039;s security profile. &lt;br /&gt;
&lt;br /&gt;
The ECPRIV 4 setting potentially introduced a security loophole when calling the IDCAMS interface, based upon what the IDCAMS utility is able to do at a system level. Consequently as of this release, the ECPRIV 4 setting will be ignored when calling the IDCAMS facility via ECF, and such IDCAMS processes will always use the calling user&#039;s security profile. Any existing jobs that use ECF to call the IDCAMS utility with the ECFPRIV 4 bit set should be checked to ensure that the calling user&#039;s security profile still satisfies the job&#039;s requirements.&lt;br /&gt;
&lt;br /&gt;
===TCPOPTS is view-only===&lt;br /&gt;
In previous versions the &amp;lt;var&amp;gt;TCPOPTS&amp;lt;/var&amp;gt; parameter, which identifies the type of IP addressing in use (v4 or v6), was resetable, although it was always documented as a view-only parameter. The parameter is now handled as a view-only parameter, and any attempts to reset the parameter will result in the following message:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;gt;   M204.1123: Parameter TCPOPTS not reset&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===ZHPF command can only be issued by a system manager===&lt;br /&gt;
In previous versions it was possible to issue the ZHPF command without being logged on. From this release onwards, a user would have to be logged on with system manager privileges to be able to issue this command.&lt;br /&gt;
&lt;br /&gt;
Additionally, the command output will now only  display results for currently open files.&lt;br /&gt;
&lt;br /&gt;
This change is enabled in v7.7 with the application of zap 77z264.&lt;br /&gt;
&lt;br /&gt;
===Terminal MODEL reset failure===&lt;br /&gt;
If a reset of the terminal MODEL parameter fails due to an undersized output page buffer, then in addition to the existing messages that inform the user of this failure:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;gt;    M204.1875 UNABLE TO RESET MODEL TO %C &lt;br /&gt;
    M204.1123: Parameter MODEL not reset&amp;lt;/p&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
the following message will now be issued:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;gt;    M204.1008: LOUTPB must be increased to at least &amp;lt;number&amp;gt; &amp;lt;/p&amp;gt;&lt;br /&gt;
                                                         &lt;br /&gt;
where &amp;lt;number&amp;gt; is the minimum value of LOUTPB necessary to support the terminal model.&lt;br /&gt;
&lt;br /&gt;
This change is enabled in V7.7 with the application of zap 77z309.&lt;br /&gt;
&lt;br /&gt;
==Notes for system manager and installer==&lt;br /&gt;
===CRAM SVC installation is deprecated===&lt;br /&gt;
The CRAM SVC installation has been deprecated as of version 7.5. &amp;lt;br /&amp;gt;Installation of CRAM-XDM is described as part of the [[Model 204 installation]].&lt;br /&gt;
===Authorization and maintenance zaps===&lt;br /&gt;
When you download Rocket M204 product object files, all relevant authorization keys and all current maintenance zaps are pre-applied to the object files as part of the download process.&lt;br /&gt;
&lt;br /&gt;
==New and changed messages==&lt;br /&gt;
&lt;br /&gt;
See [[New and updated messages in Model 204 version 7.8|New and updated messages in Model 204 version 7.8]] for details.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category: Release notes]]&lt;/div&gt;</summary>
		<author><name>ELowell</name></author>
	</entry>
	<entry>
		<id>https://m204wiki.rocketsoftware.com/index.php?title=New_and_updated_messages_in_Model_204_version_7.8&amp;diff=117736</id>
		<title>New and updated messages in Model 204 version 7.8</title>
		<link rel="alternate" type="text/html" href="https://m204wiki.rocketsoftware.com/index.php?title=New_and_updated_messages_in_Model_204_version_7.8&amp;diff=117736"/>
		<updated>2019-12-12T18:07:50Z</updated>

		<summary type="html">&lt;p&gt;ELowell: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt; &lt;br /&gt;
[[Release notes for Model 204 version 7.8|Back to release notes]]&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;div class=&amp;quot;noautonum&amp;quot;&amp;gt;__TOC__&amp;lt;/div&amp;gt;&lt;br /&gt;
This topic lists messages that were added or changed for Model 204 version 7.8.&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;&amp;lt;b&amp;gt;******THIS IS A DRAFT DOCUMENT.******&amp;lt;/b&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
==M204 messages==&lt;br /&gt;
===&amp;lt;b id=&amp;quot;M204.0141:&amp;quot;&amp;gt;&amp;lt;/b&amp;gt;M204.0141: Bug .. duplicate file name in checkpoint record===&lt;br /&gt;
&amp;lt;P&amp;gt;&lt;br /&gt;
A duplicate file name was encountered while attempting to add a deferred update data set to the file directory during recovery. This indicates a potential bug in the Model 204 software. &amp;lt;/P&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;System manager response:&amp;lt;/b&amp;gt; Contact [[Contacting Rocket Software Technical Support|Technical Support]] with the following documentation: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Audit trail from the previous run &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Journal from the previous run &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Operator response:&amp;lt;/b&amp;gt; Notify the system manager. &amp;lt;/p&amp;gt;&lt;br /&gt;
{{Template:M204.0141 footer}}&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;b id=&amp;quot;M204.0143:&amp;quot;&amp;gt;&amp;lt;/b&amp;gt;M204.0143: No files changed after last checkpoint​,​ RESTART bypassed===&lt;br /&gt;
&amp;lt;P&amp;gt;This message indicates that no updates were detected while scanning the checkpoint data set beyond the last checkpoint or the specified checkpoint. &amp;lt;/P&amp;gt;&lt;br /&gt;
{{Template:M204.0143 footer}}&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;b id=&amp;quot;M204.0165:&amp;quot;&amp;gt;&amp;lt;/b&amp;gt;M204.0165: Missing an update unit from ICL (InComplete List)===&lt;br /&gt;
&amp;lt;P&amp;gt;&lt;br /&gt;
While scanning the CCARF data set, Model&amp;amp;nbsp;204 has detected the end of an update unit for which no corresponding start of update unit was found. Possible explanations for this error are: &amp;lt;/P&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;A utility program was used to copy the original journal to data set being used as CCARF, and a portion of the original data set was not copied. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;A copy was not done. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;System manager response:&amp;lt;/b&amp;gt; If the original journal was a multi-volume data set and was copied to another data set for input to this run, verify that all volumes were in fact copied, and rerun the job. If CCARF was the original data set, contact [[Contacting Rocket Software Technical Support|Technical Support]]. Have the following documentation available: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Audit trail of the original run &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Snap &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;UTILJ of the CCARF data set or a copy of this data set on tape &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;UTILC of the restart data set or a copy of this data set on tape &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
{{Template:M204.0165 footer}}&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;b id=&amp;quot;M204.0352:&amp;quot;&amp;gt;&amp;lt;/b&amp;gt;M204.0352: IODEV​=​nn​,​ Ok uuuuuuuuuu aaaaaaaaaa llllll yy.ddd mmm dd hh.mm.ss ccc nnnnnnnn===&lt;br /&gt;
&lt;br /&gt;
The layout of this message has been reformatted to accommodate five digit user numbers.&lt;br /&gt;
&lt;br /&gt;
{{Template:M204.0352 footer}}&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;b id=&amp;quot;M204.0479:&amp;quot;&amp;gt;&amp;lt;/b&amp;gt;M204.0479: process group not found: &amp;lt;i&amp;gt;processgroupname&amp;lt;/i&amp;gt;===&lt;br /&gt;
 &lt;br /&gt;
A &amp;lt;var&amp;gt;[[Statement syntax#TRANSFER|TRANSFER]]&amp;lt;/var&amp;gt; statement was evaluated, resulting in an attempt to perform a VTAM trusted logon in another Online (the target Online).  The &amp;lt;var&amp;gt;PARTNER&amp;lt;/var&amp;gt; processgroup, identified in the &amp;lt;var&amp;gt;[[DEFINE PROCESS command: Transfer Control partner|DEFINE PROCESS]]&amp;lt;/var&amp;gt; command in the transferring Online, was not found in the target Online.  As a result, the TRANSFER fails and the user remains in the transferring online.&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;b&amp;gt;System manager response:&amp;lt;/b&amp;gt; The &amp;lt;code&amp;gt;PARTNER=&amp;lt;/code&amp;gt; token in the &amp;lt;var&amp;gt;DEFINE PROCESS&amp;lt;/var&amp;gt; command of the transferring Online has an incorrect value for &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;processgroupName&amp;lt;/var&amp;gt;. Check the spelling to ensure that it is the correct name of the intended processgroup in the target Online.&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;b&amp;gt;Return codes:&amp;lt;/b&amp;gt; I 0 0 AUDITMS&lt;br /&gt;
----&lt;br /&gt;
 &lt;br /&gt;
===&amp;lt;b id=&amp;quot;M204.0480:&amp;quot;&amp;gt;&amp;lt;/b&amp;gt;M204.0480: Invalid backpage request: backPage===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
A backpage command of the form &amp;lt;var&amp;gt;P -&amp;lt;i&amp;gt;n&amp;lt;/i&amp;gt;&amp;lt;/var&amp;gt; or &amp;lt;var&amp;gt;P +&amp;lt;i&amp;gt;n&amp;lt;/i&amp;gt;&amp;lt;/var&amp;gt; was issued, but &amp;lt;var&amp;gt;[[NBKPG parameter|NBKPG]]&amp;lt;/var&amp;gt; is 0, or the value of &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;n&amp;lt;/var&amp;gt; is invalid. The command is echoed in hex, so you can see exactly what was entered. For example, if &amp;lt;code&amp;gt;P -99&amp;lt;/code&amp;gt; was issued but &amp;lt;var&amp;gt;NBKPG&amp;lt;/var&amp;gt; is 50, then the following message would be issued:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;M204.0480: Invalid backpage request: P -99(X&#039;D74060F9F9&#039;)&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Response:&amp;lt;/b&amp;gt; Correct the backpage command, or set &amp;lt;var&amp;gt;NBKPG&amp;lt;/var&amp;gt; greater than 0.&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
{{Template:M204.0480 footer}}&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;b id=&amp;quot;M204.0481:&amp;quot;&amp;gt;&amp;lt;/b&amp;gt;M204.0481: Procedure procName in subsysName could not be made resident; increase RESPAGE or RESSIZE ===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The named procedure in the named subsystem could not be made resident in resident request storage. &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Response:&amp;lt;/b&amp;gt; Increase the size of resident request storage with a &amp;lt;var&amp;gt;[[RESSIZE parameter|RESSIZE]]&amp;lt;/var&amp;gt; or &amp;lt;var&amp;gt;[[RESPAGE parameter|RESPAGE]]&amp;lt;/var&amp;gt; parameter in CCAIN. &amp;lt;var&amp;gt;RESSIZE&amp;lt;/var&amp;gt; (below-the-bar storage) can be dynamically reset, but &amp;lt;var&amp;gt;RESPAGE&amp;lt;/var&amp;gt; (above-the-bar storage) cannot.&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
{{Template:M204.0481 footer}}&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;b id=&amp;quot;M204.0541:Procedure&amp;quot;&amp;gt;&amp;lt;/b&amp;gt;M204.0541:Procedure is in use: procedure===&lt;br /&gt;
&amp;lt;P&amp;gt;The procedure named in the message is currently in use by another user. The command entered cannot be processed until the procedure is no longer in use. &amp;lt;/P&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;b&amp;gt;Response:&amp;lt;/b&amp;gt; Retry the command when the procedure is no longer in use. &amp;lt;/p&amp;gt;&lt;br /&gt;
{{Template:M204.0541 footer}}&lt;br /&gt;
 &lt;br /&gt;
===&amp;lt;b id=&amp;quot;M204.0569:&amp;quot;&amp;gt;&amp;lt;/b&amp;gt;M204.0569: File filename?,? Find: Table B records to be searched ?=? number===&lt;br /&gt;
The message test now includes the filename, to help track down the cause of the direct search. This change has been enabled within v7.7 with the application of zap 77z032, and within V7.6 with the application of zap 76z386.&lt;br /&gt;
{{Template:M204.0569 footer}}&lt;br /&gt;
 &lt;br /&gt;
===&amp;lt;b id=&amp;quot;M204.1070:&amp;quot;&amp;gt;&amp;lt;/b&amp;gt;M204.1070: ALLOCATE ddName failed - reason===&lt;br /&gt;
This message has been changed to add the ddname of the failing dataset to the message text. &lt;br /&gt;
{{Template:M204.1070 footer}}&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;b id=&amp;quot;M204.1500:&amp;quot;&amp;gt;&amp;lt;/b&amp;gt;M204.1500: &amp;lt;i&amp;gt;token&amp;lt;/i&amp;gt; ===&lt;br /&gt;
&amp;lt;p&amp;gt;Message M204.1500: &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;token&amp;lt;/var&amp;gt; has a new form relevant to the [https://m204wiki.rocketsoftware.com/index.php/CA-ACF2_MVS_interface CA-ACF2 MVS], [https://m204wiki.rocketsoftware.com/index.php/CA-ACF2_VM_interface CA-ACF2 VM], [https://m204wiki.rocketsoftware.com/index.php/Security_Server_(formerly_RACF)_interface Security Server (formerly RACF)], and [https://m204wiki.rocketsoftware.com/index.php/CA-Top_Secret_interface CA-Top Secret] Model 204 security interfaces.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;p&amp;gt;When the default user fails to log in, the security interface is operational but CCASTAT logons are not allowed. The following error message is displayed:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;M204.1500: CCASTAT logons not allowed&amp;lt;/p&amp;gt;&lt;br /&gt;
{{Template:M204.1500 footer}}&lt;br /&gt;
&amp;lt;!-- skeleton as it was in pdf/message number message text /--&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;b id=&amp;quot;M204.1899&amp;quot;&amp;gt;&amp;lt;/b&amp;gt;M204.1899 Transfer statement from sourceVtamName to targetVtamName complete​,​ User userId disconnected===&lt;br /&gt;
The message, issued when a VTAM Transfer statement completes, now contains the source and target VTAM names for the transfer process. &lt;br /&gt;
&lt;br /&gt;
The change in message text is enabled within V7.7 with the application of zap 77z310.&lt;br /&gt;
{{Template:M204.1899 footer}}&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;b id=&amp;quot;M204.1900&amp;quot;&amp;gt;&amp;lt;/b&amp;gt;M204.1900 User userId transferred to targetVtamName from sourceVtamName===&lt;br /&gt;
This message, issued on the target ONLINE when a user has transferred to that ONLINE, now displays the source and target VTAM names involved in the VTAM Transfer.&lt;br /&gt;
&lt;br /&gt;
The change in message text is enabled within V7.7 with the application of zap 77z310.&lt;br /&gt;
{{Template:M204.1900 footer}}&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;b id=&amp;quot;M204.2020&amp;quot;&amp;gt;&amp;lt;/b&amp;gt;M204.2020 File fileName; condition?,? OPEN command rejected===&lt;br /&gt;
The first change to this message is that the filename of the affected file is now displayed at the beginning of the message text.&lt;br /&gt;
 &lt;br /&gt;
The second change is that a second error type affecting file opens is now support. The original error type of &amp;quot;Unsupported device for Model 204 database %F&amp;quot; was reported for all condition,s even where the device type wasn&#039;t the underlying issue. Whilst this error type has been retained for conditions where it is valid, a new error type of &amp;quot;DDNAME not found&amp;quot; is now available for the message. Thus, in a situation where one thread is attempting to allocate a ddname, and another thread in parallel is trying to open a file with the same ddname, the following message variant may be produced&lt;br /&gt;
 &lt;br /&gt;
M204.2020: File filename; DDNAME not found, OPEN command rejected&lt;br /&gt;
 &lt;br /&gt;
{{Template:M204.2020 footer}}&lt;br /&gt;
 &lt;br /&gt;
===&amp;lt;b id=&amp;quot;M204.2700&amp;quot;&amp;gt;&amp;lt;/b&amp;gt;M204.2700 CHECKPOINT command ignored: sub-transaction checkpoint in progress===&lt;br /&gt;
&amp;lt;P&amp;gt;&lt;br /&gt;
A &amp;lt;code&amp;gt;[[CHECKPOINT_command|CHECKPOINT]] (TRAN | SUBTRAN | ABORT)&amp;lt;/code&amp;gt; command was issued while the system was taking a sub-transaction checkpoint. The command is ignored. If this message was issued in response to a &amp;lt;code&amp;gt;CHECKPOINT ABORT&amp;lt;/code&amp;gt; command, the&lt;br /&gt;
sub-transaction in progress has passed that phase of its processing during which it can be aborted.&lt;br /&gt;
&amp;lt;/P&amp;gt;&lt;br /&gt;
{{Template:M204.2700 footer}}&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;b id=&amp;quot;M204.2964&amp;quot;&amp;gt;&amp;lt;/b&amp;gt;M204.2964  Password missing or too long===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
A password string within an IFSTRTN call has not been delimited with a semicolon.&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Response:&amp;lt;/b&amp;gt;&lt;br /&gt;
Ensure that the password string is delimited by a semicolon, as in the following example&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;gt;CALL IFSTRTN(RC,&#039;logonid;password;&#039;...)&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;b&amp;gt;Version introduced:&amp;lt;/b&amp;gt;&lt;br /&gt;
7.8&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Return codes:&amp;lt;/b&amp;gt; E 00 04 AUDITMS NOCOUNT&lt;br /&gt;
 &lt;br /&gt;
===&amp;lt;b id=&amp;quot;M204.2965&amp;quot;&amp;gt;&amp;lt;/b&amp;gt;M204.2965  Unable to cleanly close log file(s)===&lt;br /&gt;
&amp;lt;p&amp;gt;Introduced in zap 77z243.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;This message causes a snap/dump if the log file (such as a journal, jlog, or checkpoint) cannot be cleanly quiesced when bringing down an Online. The problem with the log file is rare but caused a hang further along in processing. This message causes a snap/dump much closer to the time of error, making it easier to diagnose the problem.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;b&amp;gt;Response:&amp;lt;/b&amp;gt; Use the snap/dump generated by the message to diagnose the cause of the error.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Return codes:&amp;lt;/b&amp;gt; E 88 88 DUMP SNAP AUDITAD NOTERM OPR&lt;br /&gt;
----&lt;br /&gt;
 &lt;br /&gt;
===&amp;lt;b id=&amp;quot;M204.2966&amp;quot;&amp;gt;&amp;lt;/b&amp;gt;M204.2966  &amp;lt;i&amp;gt;what&amp;lt;/i&amp;gt; line &amp;lt;i&amp;gt;number?&amp;lt;/i&amp;gt;,? procedure &amp;lt;i&amp;gt;proc&amp;lt;/i&amp;gt; in file &amp;lt;i&amp;gt;file&amp;lt;/i&amp;gt;===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
This message provides diagnostic information following various types of error messages. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The first M204.2966 message after an error has &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;what&amp;lt;/var&amp;gt; set to &amp;lt;code&amp;gt;Error at&amp;lt;/code&amp;gt;. Subsequent M204.2966 messages (if any) have &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;what&amp;lt;/var&amp;gt; set to &amp;lt;code&amp;gt;Called from&amp;lt;/code&amp;gt;. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
&amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;number&amp;lt;/var&amp;gt;, &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;proc&amp;lt;/var&amp;gt;, and &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;file&amp;lt;/var&amp;gt; indicate the line number, procedure, and file where the error occurred or from where the previous M204.2966 entry was called. Essentially, this provides a call stack trace to aid in diagnosing problems. No more than 20 levels of calls are shown for an error. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Response:&amp;lt;/b&amp;gt; Use the M204.2966 messages after an error to try to diagnose the cause of the error.&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
{{Template:M204.2966 footer}}&lt;br /&gt;
----&lt;br /&gt;
===&amp;lt;b id=&amp;quot;M204.2967&amp;quot;&amp;gt;&amp;lt;/b&amp;gt;M204.2967  &amp;lt;i&amp;gt;what&amp;lt;/i&amp;gt; line &amp;lt;i&amp;gt;number&amp;lt;/i&amp;gt; of command level program===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
This message provides diagnostic information after various types of error messages. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The first M204.2967 message after an error has &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;what&amp;lt;/var&amp;gt; set to &amp;lt;code&amp;gt;Error at&amp;lt;/code&amp;gt; and subsequent M204.2967 messages (if any) have &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;what&amp;lt;/var&amp;gt; set to &amp;lt;code&amp;gt;Called from&amp;lt;/code&amp;gt;. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
&amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;number&amp;lt;/var&amp;gt; indicates the line number for a command line program (counting from the &amp;lt;var&amp;gt;Begin&amp;lt;/var&amp;gt;) where the error occurred, or where the previous [[M204.2966]] entry was called from. Essentially, this provides a call stack trace to aid in diagnosing problems. No more than 20 levels of calls are shown for an error. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Response:&amp;lt;/b&amp;gt; Use the M204.2967 (and M204.2966, if any) after an error to try to diagnose the cause of the error.&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
{{Template:M204.2967 footer}}&lt;br /&gt;
----&lt;br /&gt;
===&amp;lt;b id=&amp;quot;M204.2968&amp;quot;&amp;gt;&amp;lt;/b&amp;gt;M204.2968  &amp;lt;i&amp;gt;what&amp;lt;/i&amp;gt;: no debug info===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
An error message (immediately preceding M204.2968) was issued, but insufficient compile-time information was collected to provide the diagnostic information provided in the [[M204.2966]] and [[M204.2967]] messages.&lt;br /&gt;
To get that additional information to help diagnose the problem, set the [[SIRFACT parameter|SIRFCAT X&#039;01&#039;]] bit if authorized for [[SirFact]], or set the [[DEBUGUL parameter]] to a non-zero value. The latter requires no product authorization, but it does increase QTBL requirements. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Response:&amp;lt;/b&amp;gt; If you are unable to diagnose the problem, consider setting one of the parameters described above to aid in problem diagnosis.&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
{{Template:M204.2968 footer}}&lt;br /&gt;
----&lt;br /&gt;
===&amp;lt;b id=&amp;quot;M204.2969&amp;quot;&amp;gt;&amp;lt;/b&amp;gt;M204.2969  MBSCAN (&amp;lt;i&amp;gt;mbscan&amp;lt;/i&amp;gt;) exceeded?,? records to be searched ?=? &amp;lt;i&amp;gt;number&amp;lt;/i&amp;gt;===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
A Table B scan would exceed the setting of &amp;lt;var&amp;gt;[[MBSCAN parameter|MBSCAN]]&amp;lt;/var&amp;gt;, so the request is cancelled. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Response:&amp;lt;/b&amp;gt; Correct the &amp;lt;var&amp;gt;Find&amp;lt;/var&amp;gt; statement at the line indicated by the following [[M204.2966]] message (hopefully available), or increase &amp;lt;var&amp;gt;MBSCAN&amp;lt;/var&amp;gt; to tolerate the number of scanned records, if reasonable.&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
{{Template:M204.2969 footer}}&lt;br /&gt;
----&lt;br /&gt;
===&amp;lt;b id=&amp;quot;M204.2970&amp;quot;&amp;gt;&amp;lt;/b&amp;gt;M204.2970  Maximum call stack limit (&amp;lt;i&amp;gt;limit&amp;lt;/i&amp;gt;) reached===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The number of messages describing the call stack reached the maximum allowed for such messages (currently 20). This message is largely informational; it is more useful to focus on the preceding [[M204.2966]] messages. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Response:&amp;lt;/b&amp;gt; Examine the preceding M204.2966 messages.&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
{{Template:M204.2970 footer}}&lt;br /&gt;
==MSIR messages==&lt;br /&gt;
===&amp;lt;b id=&amp;quot;MSIR.0942&amp;quot;&amp;gt;&amp;lt;/b&amp;gt;MSIR.0942  Debugger token0 port defaulted to token2===&lt;br /&gt;
This message has been changed from an error message to an informational message&lt;br /&gt;
{{Template:MSIR.0942 footer}}&lt;/div&gt;</summary>
		<author><name>ELowell</name></author>
	</entry>
	<entry>
		<id>https://m204wiki.rocketsoftware.com/index.php?title=Release_notes_for_Model_204_version_7.8&amp;diff=117735</id>
		<title>Release notes for Model 204 version 7.8</title>
		<link rel="alternate" type="text/html" href="https://m204wiki.rocketsoftware.com/index.php?title=Release_notes_for_Model_204_version_7.8&amp;diff=117735"/>
		<updated>2019-12-11T22:46:05Z</updated>

		<summary type="html">&lt;p&gt;ELowell: /* New in this release */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
These release notes list the enhancements and other changes contained in Model 204 version 7.8. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;&amp;lt;b&amp;gt;******THIS IS A DRAFT DOCUMENT.******&amp;lt;/b&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
These release notes list the enhancements and other changes contained in Model 204 version 7.8, &amp;lt;b&amp;gt;&amp;lt;i&amp;gt;which is still in development&amp;lt;/i&amp;gt;&amp;lt;/b&amp;gt;. Until the commercial release of the software, Rocket reserves the right to add to, remove, or change anything described herein. &lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
These release notes contain installation and features information for the Rocket Model 204 version 7.8 release.&lt;br /&gt;
Before beginning your installation, please read through this information about product installation and changes.&lt;br /&gt;
&lt;br /&gt;
==New in this release==&lt;br /&gt;
The table below cites some highlights of Model&amp;amp;nbsp;204 version 7.8. For a full list of features, refer to the Table of Contents. &lt;br /&gt;
&amp;lt;p&amp;gt;See also the [[#Compatibility Issues|Compatibility]] section for possible issues.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;tr class=&amp;quot;head&amp;quot;&amp;gt;&amp;lt;th&amp;gt;Category&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Feature&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;SOUL&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The new [[#AmIndependent method|AmIndependent]] method returns TRUE for daemons spawned by RunIndependently.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The Object class now supports the [[#Support for copying Object class objects|copy and deepCopy methods]].&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Janus Web&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[[#Web Sockets|Janus Web Sockets]] are now supported.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td nowrap&amp;gt;Networking&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Note:&amp;lt;/b&amp;gt; The two-phase commit and commit exits features are licensed and purchased separately from Model 204.&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Two-phase commit. A Model 204 online can now be configured to use two-phase commit (2PC). The Janus internal socket API is used for the calls to the coordinator. JANUS commands are used for all 2PC configuration. A new JANUS port type has been added, 2PC.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Commit exits are now supported. The commit exit runs within the APSY, which is defined by the &amp;lt;var&amp;gt;COMMITX&amp;lt;/var&amp;gt; parameter and uses normal APSY processing.  &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;ECF tables&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The new &amp;lt;var&amp;gt;DISPLAY ECF&amp;lt;/var&amp;gt; command and &amp;lt;var&amp;gt;EXTERNAL REMOVE&amp;lt;/var&amp;gt; statement enable more efficient management of [[#Managing ECF tables more efficiently|ECF tables]].&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Performance&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[[#MP/204 offload improvements|MP/204 offload improvements]] -- application code for these SOUL statements is now fully offloadable: &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;File Records In/On&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Remember&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Position&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Sort Values&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Reset Header/Trailer&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Find and Print Count&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Find All Values&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;For Each Value&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Security&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;CA-Top Secret can [[#CA-Top Secret can disallow CCASTAT logins|disallow CCASTAT logins]].&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[[#DEFUSER can specify a jobname not authorized to access M204|DEFUSER]] can specify a jobname not authorized to access M204.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td nowrap&amp;gt;System enhancements&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The &amp;lt;var&amp;gt;MONITOR USERS&amp;lt;/var&amp;gt; command output displays [[#New wait types for daemon/master waits|two new wait types]].&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td nowrap&amp;gt;AUDIT204 enhancements&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The new TIMEHH parameter on the &amp;lt;var&amp;gt;[[#FORMAT command|FORMAT]]&amp;lt;/var&amp;gt; command of the AUDIT204 utility provides greater time stamp precision.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td nowrap&amp;gt;New commands&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;[[#DISPLAY ECF|DISPLAY ECF]]&amp;lt;/var&amp;gt; displays details from ECF tables, or the current status of users accessing ECF modules.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td nowrap&amp;gt;New parameters&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;[[#ENQTIME|ENQTIME]]&amp;lt;/var&amp;gt; specifies the number of milliseconds waited for each record locking retry wait.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;[[#EVALOPT|EVALOPT]]&amp;lt;/var&amp;gt; controls the cancellation of a request on truncation of string data.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;[[#MAXPRE, MAXBOUT, MAXSUBT|MAXPRE, MAXBOUT, and MAXSUBT]]&amp;lt;/var&amp;gt; can be used to cancel a runaway transaction and prevent it from filling the checkpoint data set.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;[[#NLDAPBUF|NLDAPBUF]]&amp;lt;/var&amp;gt; allows the number of LDAP buffers allocated during startup to be set in CCAIN.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;[[#SERV4G|SERV4G]]&amp;lt;/var&amp;gt; allows testing of server tables that span a 4-gigabyte boundary.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;[[#WEBDFLT|WEBDFLT]]&amp;lt;/var&amp;gt; changes the default JANUS WEB ALLOW rule back to ALLOW.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td nowrap&amp;gt;Janus and TN3270 debuggers&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The debuggers can now view or watch the values of [[#Access to exposed variables|variables exposed to local routines/methods]].&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;When execution pauses, the debuggers now [[#Subroutine or method display|display the subroutine or method]] being executed.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td nowrap&amp;gt;User/system statistics&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;[[#MPR, MBO, MCP, and RCV|MPR, MBO, MCP, and RCV]]&amp;lt;/var&amp;gt; provide high water mark transaction information in conjunction with the &amp;lt;var&amp;gt;MAXPRE&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;MAXBOUT&amp;lt;/var&amp;gt;, and &amp;lt;var&amp;gt;MAXSUBT&amp;lt;/var&amp;gt; parameters. &lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[[#DKWTS and DKWTMICS|New system statistics]] DKWTS (DisK WaiTs) and DKWTMICS (DisK WaiT MICroSeconds) collect data to provide rough disk I/O service time numbers.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Operating system and hardware requirements==&lt;br /&gt;
&lt;br /&gt;
===Operating system requirements===&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;IBM z/OS versions supported:&amp;lt;/b&amp;gt; &lt;br /&gt;
  &amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;All IBM supported releases up to and including z/OS 2.3. &amp;lt;br /&amp;gt;(For z/OS 2.2, see [[IBM z/OS 2.2 PTF requirement]].)&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;p&amp;gt;Version 1.07 is sufficient for all functionality except for the following features:&amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;ul&amp;gt;&lt;br /&gt;
    &amp;lt;li&amp;gt;zHPF support requires version [[IBM z/OS 2.1 compatibility issue|2.1]].&amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;li&amp;gt;Large (1 MB) page support requires version 1.9.&amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;li&amp;gt;Extended address volumes (EAV) requires version 1.12.&amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;/ul&amp;gt;&lt;br /&gt;
  &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
On z/OS, Model 204 release 7.8 operates as an APF authorized load module, as required by many 7.8 features. &amp;lt;br /&amp;gt;&lt;br /&gt;
To run Model 204 unauthorized, [[Contacting Rocket Software Technical Support|contact Technical Support]].&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;IBM z/VM versions supported:&amp;lt;/b&amp;gt; &lt;br /&gt;
  &amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;All IBM supported releases up to and including z/VM 6.4.&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;IBM z/VSE versions supported:&amp;lt;/b&amp;gt;&lt;br /&gt;
  &amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;All IBM supported releases up to and including z/VSE 6.1.&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Hardware requirements===&lt;br /&gt;
 &lt;br /&gt;
In general, Model 204 version 7.8 requires the IBM z/890 or above processor.&lt;br /&gt;
&amp;lt;p&amp;gt;However, the IBM z10 or above processor is required for the following features:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;large (1 MB) page support&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;IBM&#039;s High Performance FICON (zHPF) support&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Connect&amp;lt;sup&amp;gt;&amp;amp;#9733;&amp;lt;/sup&amp;gt; compatibility with Model 204===&lt;br /&gt;
&lt;br /&gt;
Connect&amp;lt;span class=&amp;quot;superstar&amp;quot;&amp;gt;&amp;amp;#9733;&amp;lt;/span&amp;gt; version 7.5 or 7.7 is compatible with Model 204 version 7.8.&lt;br /&gt;
&lt;br /&gt;
For more information on Connect&amp;lt;span class=&amp;quot;superstar&amp;quot;&amp;gt;&amp;amp;#9733;&amp;lt;/span&amp;gt; installation, see the [[:Category:Connect*|Connect&amp;lt;span class=&amp;quot;superstar&amp;quot;&amp;gt;&amp;amp;#9733;&amp;lt;/span&amp;gt; wiki pages]].&lt;br /&gt;
&lt;br /&gt;
==SOUL (User Language) enhancements==&lt;br /&gt;
===AmIndependent method===&lt;br /&gt;
The &amp;lt;var&amp;gt;AmIndependent&amp;lt;/var&amp;gt; method returns TRUE for daemons spawned by &amp;lt;var&amp;gt;[[RunIndependently_(Daemon_subroutine)|RunIndependently]]&amp;lt;/var&amp;gt;. (The action of &amp;lt;var&amp;gt;[[AmDaemon_(Daemon_property)|AmDaemon]]&amp;lt;/var&amp;gt; remains unchanged.)&lt;br /&gt;
&lt;br /&gt;
The following table shows the values returned by &amp;lt;var&amp;gt;AmIndependent&amp;lt;/var&amp;gt; versus &amp;lt;var&amp;gt;AmDaemon&amp;lt;/var&amp;gt; for different daemon types:&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Type&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;AmDaemon&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;AmIndependent&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;$COMBG&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;False&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;False&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Independent daemon&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;False&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;True&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Other daemon&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;True&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;False&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Web, etc.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;False&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;False&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===$ProcOpn===&lt;br /&gt;
&amp;lt;var&amp;gt;[[$ProcOpn|$ProcOpn]]&amp;lt;/var&amp;gt; now supports the opening of a procedure with an all-numeric name, and including a leading zero, such as:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;%result = $procOpn(&#039;0123&#039;, &#039;MYFILE&#039;)&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Support for such procedure names was initially introduced at V7.7, and this feature of &amp;lt;var&amp;gt;$ProcOpn&amp;lt;/var&amp;gt; is also enabled in V7.7 with the application of zap 77z054.&lt;br /&gt;
&lt;br /&gt;
===Allow parentheses to surround a boolean enumeration object===&lt;br /&gt;
The following sample code:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;   begin                                       &lt;br /&gt;
   variables are undefined                  &lt;br /&gt;
   %isValid is boolean initial (True)       &lt;br /&gt;
   if (%isValid) then                  &lt;br /&gt;
      print &#039;in IF&#039;                            &lt;br /&gt;
   end if                                   &lt;br /&gt;
   end   &amp;lt;/p&amp;gt;      &lt;br /&gt;
&lt;br /&gt;
will now compile and run successfully, since this syntax: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;if (%isValid) then &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
is logically equivalent to this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;if %isValid then &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Prior to V7.8 the presence of parentheses surrounding the boolean enumeration object would have caused a compilation error. This change is enabled in V7.7 with the application of zap 77z370.&lt;br /&gt;
&lt;br /&gt;
===Support for copying Object class objects===&lt;br /&gt;
The Object class now supports the copy and deepCopy methods. For example, an Object object can be copied as follows:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;   begin               &lt;br /&gt;
   %x is object object &lt;br /&gt;
   %y is object object &lt;br /&gt;
   %y = new            &lt;br /&gt;
   %x = %y:copy        &lt;br /&gt;
   end &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This change is enabled in v7.7 with the application of zap 77z076, and within V7.6 with the application of zap 76z412.&lt;br /&gt;
&lt;br /&gt;
===Assignment of enumeration values to method variables===&lt;br /&gt;
Enumerations values can now be assigned to method variables whose result is an enumeration. So, for example, the following code:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;   begin                                               &lt;br /&gt;
   enumeration colour                                  &lt;br /&gt;
      public                                           &lt;br /&gt;
         value red                                     &lt;br /&gt;
         value white                                   &lt;br /&gt;
         value blue                                    &lt;br /&gt;
      end public                                       &lt;br /&gt;
   end enumeration                                     &lt;br /&gt;
   %func    is function getColour is enumeration colour&lt;br /&gt;
   local function getColour is enumeration colour      &lt;br /&gt;
      return blue                                      &lt;br /&gt;
   end function                                        &lt;br /&gt;
   %func    = getColour                                &lt;br /&gt;
   %func    = (colour):red                             &lt;br /&gt;
   printText {~=%(Local):(%func)}                      &lt;br /&gt;
   end  &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
will produce this result:&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt; %(Local):(%func)=red &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
whereas previously this line:   &lt;br /&gt;
&lt;br /&gt;
  &amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt; %func    = (colour):red &amp;lt;/p&amp;gt;   &lt;br /&gt;
&lt;br /&gt;
would have been rejected with this message:&lt;br /&gt;
&lt;br /&gt;
   &amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;MSIR.0993: Assignment invalid: mismatch between method and method variable &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This change is enabled in V7.7 with the application of zap 77z128.&lt;br /&gt;
&lt;br /&gt;
===Optional output method parameters===&lt;br /&gt;
Prior to this release output parameters could not be optional or have default values. In this release output parameters can be specified as &amp;lt;var&amp;gt;Optional&amp;lt;/var&amp;gt;, and a default value can be specified with &amp;lt;var&amp;gt;Default&amp;lt;/var&amp;gt;. One related change is that if a &amp;lt;var&amp;gt;Len&amp;lt;/var&amp;gt; value is specified with &amp;lt;var&amp;gt;Optional&amp;lt;/var&amp;gt; or &amp;lt;var&amp;gt;Default&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;Output&amp;lt;/var&amp;gt;, it indicates the length of the hidden target for the output parameter if none was passed. For all other &amp;lt;var&amp;gt;Output&amp;lt;/var&amp;gt; parameters, &amp;lt;var&amp;gt;Len&amp;lt;/var&amp;gt; is meaningless, just as it was before Model 204 V7.8. The following is an example of the use of an optional output parameter:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;function getRemote( -&lt;br /&gt;
   %target is string len 32, %errorReason is string len 80 optional output -&lt;br /&gt;
) is float&lt;br /&gt;
  ...&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
In this example, if &amp;lt;code&amp;gt;%errorReason&amp;lt;/code&amp;gt; is not specified in a call and then set to a value longer than 80 bytes it wil be truncated to 80 bytes. However, if a string of a different length is passed, the length of that string determines truncation behavior.&lt;br /&gt;
&lt;br /&gt;
==External Call Facility enhancements==&lt;br /&gt;
===Managing ECF tables more efficiently===&lt;br /&gt;
The are two new features to help manage ECF tables more efficiently, avoid conditions where the table can fill, and prevent the definition of further entities.&lt;br /&gt;
&lt;br /&gt;
The first feature is the new &amp;lt;var&amp;gt;DISPLAY ECF&amp;lt;/var&amp;gt; command, which displays the contents of ECF tables and also the current status of users accessing ECF modules. See more details of the &amp;lt;var&amp;gt;[[#DISPLAY ECF|DISPLAY ECF]]&amp;lt;/var&amp;gt; command below.&lt;br /&gt;
&lt;br /&gt;
The second feature is a new &amp;lt;var&amp;gt;EXTERNAL REMOVE&amp;lt;/var&amp;gt; statement with the following syntax:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;EXTERNAL REMOVE &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;modulename&amp;lt;/span&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This statement causes the entry for the named module to be removed from the module table. The table entry is then placed on a free chain of entries and can be reused by issuing the &amp;lt;var&amp;gt;EXTERNAL MODULE&amp;lt;/var&amp;gt; statement. This allows the module table to be managed with redundant entries removed, without having to recycle the ONLINE.&lt;br /&gt;
&lt;br /&gt;
An &amp;lt;var&amp;gt;EXTERNAL REMOVE&amp;lt;/var&amp;gt; statement will return &amp;lt;code&amp;gt;$status/$statusd&amp;lt;/code&amp;gt; values of &amp;lt;code&amp;gt;0/0&amp;lt;/code&amp;gt;, and most other status values that can be returned by the &amp;lt;var&amp;gt;EXTERNAL REMOVE&amp;lt;/var&amp;gt; statement are already documented in the ECF return codes table. If an &amp;lt;var&amp;gt;EXTERNAL REMOVE&amp;lt;/var&amp;gt; is attempted against a module that is currently being called (in use), then &amp;lt;code&amp;gt;$status/$statusd&amp;lt;/code&amp;gt; will return the values &amp;lt;code&amp;gt;20/1&amp;lt;/code&amp;gt; (module unavailable).&lt;br /&gt;
&lt;br /&gt;
==System enhancements==&lt;br /&gt;
&lt;br /&gt;
===New wait types for daemon/master waits===&lt;br /&gt;
&lt;br /&gt;
Two new wait types, viewable on the &amp;lt;var&amp;gt;[[MONITOR_command|MONITOR]] USERS&amp;lt;/var&amp;gt; command output, have been implemented as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;57&amp;lt;/code&amp;gt; - Means a daemon thread waiting for its master thread  &amp;lt;br /&amp;gt;     &lt;br /&gt;
&amp;lt;code&amp;gt;58&amp;lt;/code&amp;gt; - Means a master thread waiting for one of its daemon threads&lt;br /&gt;
&lt;br /&gt;
This change is enabled in V7.7 with the application of zap 77z410.&lt;br /&gt;
&lt;br /&gt;
===Snap formatting changes===&lt;br /&gt;
Date/time stamps in the page headers of snaps will now be shown in normal format, rather than in julian format as in previous versions. So in the following example, a particular snap header under v7.7 or previous versions would show as: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;SNAPID    1   19226.060155  M204.0022: Bug .. nnnnn               PAGE     1 &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
whereas the same snap header under v7.8 would show as: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;SNAPID    1  2019/08/14 06:01:06   M204.0022: Bug .. nnnnn        PAGE     1 &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Also, due to improvements in handling trailing blanks in snap output, a snap generated under v7.8 should be marginally smaller than the same snap generated under previous versions, assuming the same SNAPCTL settings.&lt;br /&gt;
&lt;br /&gt;
===Call stack trace for problem diagnosis===&lt;br /&gt;
A  call stack trace is now provided to help diagnose and resolve common errors. To enable the stack trace, do either of the following: &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Set the &amp;lt;var&amp;gt;[[SIRFACT parameter|SIRFACT]] X&#039;01&#039;&amp;lt;/var&amp;gt; bit.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Set the &amp;lt;var&amp;gt;[[DEBUGUL parameter|DEBUGL]]&amp;lt;/var&amp;gt; parameter. Note that the &amp;lt;var&amp;gt;DEBUGUL&amp;lt;/var&amp;gt; approach will introduce extra QTBL overhead. &amp;lt;p&amp;gt;(&amp;lt;var&amp;gt;DEBUGUL&amp;lt;/var&amp;gt; provides a similar facility with an include trace of procedures leading to the error, but this might not be potentially as useful as the call trace.)&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt; &lt;br /&gt;
&lt;br /&gt;
The call stack trace can assist in diagnosing run-time errors that might occur, as illustrated by the following &amp;quot;Variable too small for result&amp;quot; and &amp;quot;MBSCAN exceeded&amp;quot; examples.&lt;br /&gt;
&lt;br /&gt;
====Variable too small for result====&lt;br /&gt;
When the stack trace is enabled, a &amp;quot;variable too small&amp;quot; error results in the following message:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;M204.2966: Error at line n, procedure &#039;&#039;procname&#039;&#039; in file &#039;&#039;procfile&#039;&#039;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
which identifies the line within a procedure where the error is occurring, in addition to the usual message:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;M204.0552: Variable too small for result&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Any subsequent M204.2966 messages indicate the point in the code from where the code in error was called. For example, a stack of three subroutine calls leading to a &amp;quot;variable too small&amp;quot; error might result in the following messaging:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;   M204.0552: Variable too small for result                             &lt;br /&gt;
   M204.2966: Error at line 9, procedure MYPROC.LEVEL4 in file MYPROC   &lt;br /&gt;
   M204.2966: Called from line 5, procedure MYPROC.LEVEL3 in file MYPROC&lt;br /&gt;
   M204.2966: Called from line 5, procedure MYPROC.LEVEL2 in file MYPROC&lt;br /&gt;
   M204.2966: Called from line 5, procedure MYPROC.LEVEL1 in file MYPROC &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This information should help in diagnosing the problem. &lt;br /&gt;
&lt;br /&gt;
If the error occurs within a command level program rather than a procedure, then the M204.2966 message is replaced by an M204.2967 message, and a similar error condition to the above with a preceding call stack might be audited as follows:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;   M204.0552: Variable too small for result              &lt;br /&gt;
   M204.2967: Error at line 14 of command level program  &lt;br /&gt;
   M204.2967: Called from line 5 of command level program&lt;br /&gt;
   M204.2967: Called from line 3 of command level program &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If neither &amp;lt;var&amp;gt;SIRFACT X&#039;01&#039;&amp;lt;/var&amp;gt; nor &amp;lt;var&amp;gt;DEBUGUL&amp;lt;/var&amp;gt; is set, then the &amp;quot;variable too small&amp;quot; error produces the following messages:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;   M204.0552: Variable too small for result &lt;br /&gt;
   M204.2968: Error: no debug info &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====MBSCAN exceeded====&lt;br /&gt;
Similarly to the handling of the &amp;quot;variable too small for result&amp;quot; error, the call stack can also be used to diagnose errors where the value of &amp;lt;var&amp;gt;[[MBSCAN parameter|MBSCAN]]&amp;lt;/var&amp;gt; is exceeded as a result of a direct search of Table B records. &lt;br /&gt;
&amp;lt;p&amp;gt;Again, under V7.8, with either the &amp;lt;var&amp;gt;SIRFACT X&#039;01&#039;&amp;lt;/var&amp;gt; bit set or &amp;lt;var&amp;gt;DEBUGUL&amp;lt;/var&amp;gt; set, if a long request occurs as a result of exceeding &amp;lt;var&amp;gt;MBSCAN&amp;lt;/var&amp;gt;, then initially the following message is produced, as before:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;M204.0569: File &#039;&#039;filename&#039;&#039;, Find: Table B records to be searched = &#039;&#039;nnnn&#039;&#039;&amp;lt;/p&amp;gt;&lt;br /&gt;
followed by a DYRWT prompt message. If the user replies &#039;N&#039; to the prompt, or if the request is run in an environment (such as a batch job) where the default response is &#039;N&#039;, the following message is produced after the M204.0569 message:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;Cancelling request: M204.2969: MBSCAN (&#039;&#039;mm&#039;&#039;) exceeded, records to be searched = &#039;&#039;nnnn&#039;&#039;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
where &#039;&#039;mm&#039;&#039; is the current setting of &amp;lt;var&amp;gt;MBSCAN&amp;lt;/var&amp;gt;. The M204.2969 message is followed by M204.2966 messages displaying the call stack trace. Thus, if the following code is run from procedure MYPROC.MBSCAN against the demo database, with an &amp;lt;var&amp;gt;MBSCAN&amp;lt;/var&amp;gt; setting of 10:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;   b                           &lt;br /&gt;
   call sub1                   &lt;br /&gt;
   sub1: subroutine            &lt;br /&gt;
   fd1:                        &lt;br /&gt;
      in clients fd city = ONTARIO&lt;br /&gt;
              end find         &lt;br /&gt;
      fr fd1                      &lt;br /&gt;
         pai                      &lt;br /&gt;
         print                    &lt;br /&gt;
      end for                     &lt;br /&gt;
   end subroutine              &lt;br /&gt;
   end &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
then the following messages are produced, assuming any prompts are responded to with an &#039;N&#039;:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;   M204.0569: File CLIENTS, Find: Table B records to be searched = 3415&lt;br /&gt;
   Cancelling request: M204.2969: MBSCAN (10) exceeded, records to be searched = 3415  &lt;br /&gt;
   M204.2966: Error at line 6, procedure MYPROC.MBSCAN in file MYPROC&lt;br /&gt;
   M204.2966: Called from line 3, procedure MYPROC.MBSCAN in file MYPROC  &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===appendJournalData===&lt;br /&gt;
The &amp;lt;var&amp;gt;[[AppendJournalData_(Stringlist_function)|AppendJournalData]]&amp;lt;/var&amp;gt; function is now more tolerant of an outstanding BUMP request. Previously, if &amp;lt;var&amp;gt;AppendJournalData&amp;lt;/var&amp;gt; was called to inadvertently retrieve a large amount of journal data, typically when called implicitly from within SirScan, then any outstanding BUMP request wouldn&#039;t be honored until all of the data had been retrieved, at which point the BUMP request would be completed, and all data would be lost.&lt;br /&gt;
&lt;br /&gt;
Now, the &amp;lt;var&amp;gt;AppendJournalData&amp;lt;/var&amp;gt; process checks for outstanding BUMP requests before each track I/O is executed, thus avoiding excessive I/Os against the journal and long waits for the BUMP of such a process to complete.&lt;br /&gt;
&lt;br /&gt;
==AUDIT204 enhancements==&lt;br /&gt;
===FORMAT command===&lt;br /&gt;
TIMEHH is a new parameter used with the FORMAT command of the [[Tracking_system_activity_(CCAJRNL,_CCAAUDIT,_CCAJLOG)#AUDIT204_utility|AUDIT204]] utility.  It indicates that timestamps, printed at the beginning of each line of output, should include hundredths of a second. Requires no other arguments.&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;b&amp;gt;NOTE:&amp;lt;/b&amp;gt; This parameter and the 78 version (or later) of AUDIT204 may be used against a 77 (or later) CCAJRNL.&amp;lt;/p&amp;gt;&lt;br /&gt;
For example:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;//CCAIN DD *&lt;br /&gt;
FORMAT YEARFORM 4&lt;br /&gt;
TIMEHH&lt;br /&gt;
TYPE ER MS LI&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Recovery enhancements==&lt;br /&gt;
===Media Recovery in a multi-user environment===&lt;br /&gt;
It is now possible to perform media recovery by issuing the &amp;lt;var&amp;gt;REGENERATE&amp;lt;/var&amp;gt; command to roll forward selected files in a multi-user environment, with the media recovery being carried out by different users with system manager privileges. The new USING option allows for the specification of a ddname for the input journal stream to be used by the &amp;lt;var&amp;gt;REGENERATE&amp;lt;/var&amp;gt; command. Previously media recovery was restricted to single user batch jobs, using the CCAGEN ddname for the input journal. For more details, see the &amp;lt;var&amp;gt;[[#REGENERATE|REGENERATE]]&amp;lt;/var&amp;gt; command below.&lt;br /&gt;
&lt;br /&gt;
==Security enhancements==&lt;br /&gt;
===CA-Top Secret can disallow CCASTAT logins===&lt;br /&gt;
The [[CA-Top_Secret_interface|CA-Top Secret]] interface now recognizes the &amp;lt;code&amp;gt;DEFACID=&amp;lt;/code&amp;gt;, setting and does not allow CCASTAT logins in the online if &amp;lt;code&amp;gt;DEFACID&amp;lt;/code&amp;gt; is set to null. (There is no attempt to log on M204USR.) Therefore, to disallow CCASTAT logons, set DEFACID=, in [[CA-Top_Secret_interface#Preparing_a_TOPSPARM_parameter_module_with_TOPSGEN|TOPSPARM]]. CCASTAT will be opened because it contains file and group passwords, but it will not be used for logons if CCASTAT logons are not allowed.&lt;br /&gt;
&lt;br /&gt;
===CUSTOM=11 and mixed cased input===&lt;br /&gt;
The &amp;lt;var&amp;gt;[[CUSTOM_parameter|CUSTOM]]&amp;lt;/var&amp;gt; parameter CUSTOM=11 setting no longer requires that a *LOWER command be issued prior to a LOGCTL command (to add or change a  password) to preserve mixed case input. Prior to this release, with CUSTOM=11 in place, *LOWER had to be issued before a LOGCTL command, otherwise any mixed case password strings would automatically be translated into uppercase. This change is enabled in V7.7 with the application of zap 77z108.&lt;br /&gt;
&lt;br /&gt;
===DEFUSER can specify a jobname not authorized to access M204===&lt;br /&gt;
When specifying DEFUSER=JOBNAME and VALIDAT=LOGON in the RACFGEN parms for an ONLINE, if the specified jobname ( the owning id for the ONLINE job ) isn&#039;t authorized to use Model 204 via RACF, any LOGIN commands specifying no userid will now succeed ( previously such a LOGON would have failed ). This enables users to submit jobs with USE $JOB, whereby the string USER=jobname  will be added to the submitted JCL, and this in turn is useful if the specified jobname has dataset access privileges to datasets required by the submitted jobs, even if the jobname itself isn&#039;t authorized to use M204.&lt;br /&gt;
&lt;br /&gt;
==Janus product enhancements==&lt;br /&gt;
&lt;br /&gt;
===Web Sockets===&lt;br /&gt;
Web Sockets are now supported in Janus Web Server.&lt;br /&gt;
&lt;br /&gt;
The Web Socket protocol provides various advantages over the HTTP protocol:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Web Sockets allow full-duplex communication.&amp;lt;/li&amp;gt; &lt;br /&gt;
&amp;lt;li&amp;gt;Efficient framing of payload data uses minimal overhead.&amp;lt;/li&amp;gt;  &lt;br /&gt;
&amp;lt;li&amp;gt;The Web Socket protocol is end-user extensible.&amp;lt;/li&amp;gt;  &lt;br /&gt;
&amp;lt;li&amp;gt;Most importantly, Web Sockets can be deployed completely within an existing HTTP/HTTPS framework.&amp;lt;/li&amp;gt; &lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To implement Web Sockets, you must enable the Janus Web port for Web Socket upgrades with the new &lt;br /&gt;
WEBSOCKET parameter. The WEBSOCKET option can be specified on either the port definition or the &lt;br /&gt;
JANUS WEB rule for the URL. &lt;br /&gt;
Likewise, an individual Janus Web rule can either allow or disallow Web Socket connections with the &lt;br /&gt;
WEBSOCKET and NOWEBSOCKET parameters, respectively. &lt;br /&gt;
&lt;br /&gt;
For details on implementing Web Sockets, see the [[WebSocket_(Socket_function)|WebSocket]] wiki page.&lt;br /&gt;
&lt;br /&gt;
===Janus Web Server access rule===&lt;br /&gt;
The automatic &amp;lt;var&amp;gt;[[JANUS WEB ALLOW]]&amp;lt;/var&amp;gt; rule, which allowed any user to access the port without requiring a login, is changed &amp;lt;i&amp;gt;for non-SSL ports&amp;lt;/i&amp;gt; to the following:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;JANUS WEB &amp;lt;i&amp;gt;portname&amp;lt;/i&amp;gt; DISALLOW *&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
This rule requires a system administrator to explicitly define &amp;lt;var&amp;gt;ALLOW&amp;lt;/var&amp;gt; rules to enable users to access non-SSL ports.&lt;br /&gt;
The rule applies unless overridden by user-added rules. &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;blockquote class=&amp;quot;note&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;b&amp;gt;Note:&amp;lt;/b&amp;gt; To revert from this change in the JANUS DEFINE default and make the default &lt;br /&gt;
 non-SSL &amp;lt;var&amp;gt;ALLOW&amp;lt;/var&amp;gt; rule as it was in version 7.5 and earlier (&amp;lt;code&amp;gt;ALLOW *&amp;lt;/code&amp;gt;), turn on the 1 bit of the &amp;lt;var&amp;gt;[[WEBDFLT parameter|WEBDFLT]]&amp;lt;/var&amp;gt; parameter: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;RESET WEBDFLT=1&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Increase in pending accepts for Janus BPX ports===&lt;br /&gt;
The default number of pending accepts for Janus BPX server ports has been increased from 3 to 12, thus reducing the likelihood that a pending accept may fail with the message&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;MSIR.0019 Connection request rejected for port (port), MAXCON exceeded&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The actual number of pending accepts to be supported on the port can be set with the new parameter MAXPEND, set on the &amp;lt;var&amp;gt;[[JANUS_DEFINE|JANUS DEFINE]]&amp;lt;/var&amp;gt; command, where MAXPEND can vary from 3 up to a maximum value of 32. The change to the default value was enabled in V7.7 with the application of zap 77z269.&lt;br /&gt;
&lt;br /&gt;
===TCP listen backlog increased===&lt;br /&gt;
&lt;br /&gt;
The [[Program_Communication_facilities#LISTEN_call|TCP listen]] backlog has been increased from 16 to 1024 under z/OS.&lt;br /&gt;
&lt;br /&gt;
This update tells the TCP stack to queue up to 1024 of such requests up before dropping them, thus reducing, or in most cases eliminating, the likelihood of a connection request drop, other than in exceptional circumstances, such as a denial of service attack. This change was enabled in V7.7 with the application of zap 77z340.&lt;br /&gt;
&lt;br /&gt;
===Defer the freeing of XMLSCREEN input XML===&lt;br /&gt;
&lt;br /&gt;
The freeing of [[XMLSCREEN_and_NOXMLSCREEN_(JANUS_DEFINE_parameters)|XMLSCREEN]] input XML is now deferred until the next Read Screen or session termination. This means that if an application error is detected, the input XML can be retrieved with [[$Web_Input_Content|$Web_Input_Content]] and then logged for problem analysis. &lt;br /&gt;
&lt;br /&gt;
Prior to this release the XML received from the client is freed immediately after being used to set the input data for a Read Screen, rendering it unavailable for problem determination.&lt;br /&gt;
&lt;br /&gt;
This change is enabled in V7.7 with the application of zap 77z368.&lt;br /&gt;
&lt;br /&gt;
===XMLSCREEN and Janus Web Legacy blank stripping===&lt;br /&gt;
&lt;br /&gt;
xmlScreens and Janus Web Legacy screens now adhere to the same standard as standard screen processing in terms of stripping leading blanks from input fields defined as [[Full-screen_feature#DEBLANK_or_NODEBLANK_option|DEBLANK]] (either explicitly or implicitly).&lt;br /&gt;
&lt;br /&gt;
This change is enabled in V7.7 with the application of zap 77z400.&lt;br /&gt;
&lt;br /&gt;
===SSL input buffer size===&lt;br /&gt;
&lt;br /&gt;
The default value of [[SSLIBSIZE_(JANUS_DEFINE_parameter)|SSLIBSIZE]] has been increased to 16384 + 128, or 16512. This size should ensure correct communication with all TLS spec compliant applications. It is the maximum size allowed unless you use [[CUSTOM_parameter#Using_CUSTOM.3D.2818.29|CUSTOM=18]].    &lt;br /&gt;
&lt;br /&gt;
This changed is enabled in V7.7 with the application of zap 77z415.&lt;br /&gt;
&lt;br /&gt;
===Increasing LDAP buffers===&lt;br /&gt;
&lt;br /&gt;
The number of LDAP buffers allocated at startup can now be changed by setting the NLDAPBUF parameter in CCAIN. See below for details on [[#NLDAPBUF|NLDAPBUF]].&lt;br /&gt;
&lt;br /&gt;
===Increase URL length returned with $web_form_action===&lt;br /&gt;
With this release the maximum Janus Web Server incoming URL that can be handled by &amp;lt;var&amp;gt;$web_form_action&amp;lt;/var&amp;gt; is increased from 512 bytes to 1024 bytes. This change is enabled in V7.7 with the application of zap 77z424.&lt;br /&gt;
&lt;br /&gt;
===Maximum RBSIZE setting increased===&lt;br /&gt;
The maximum value for RBSIZE, set on the &amp;lt;var&amp;gt;[[JANUS DEFINE|JANUS DEFINE]]&amp;lt;/var&amp;gt; command, is now increased to 16777215 (previously the maximum was 65534). RBSIZE specifies the RPC or Request Buffer size.  On a Web port, the Janus request buffer holds browser request information such as header data, cookies, and form data. On other port types, it holds RPC input and output parameters. This change is enabled in V7.7 with the application of zap 77z427.&lt;br /&gt;
&lt;br /&gt;
==Debugger enhancements==&lt;br /&gt;
These enhancements apply to the Janus and TN3270 debuggers. &lt;br /&gt;
&lt;br /&gt;
===Access to exposed variables===&lt;br /&gt;
The debuggers can now view or watch the values of variables exposed to local routines/methods. Previously, any attempts to access an exposed variable would have displayed &amp;quot;%varname has no value&amp;quot; in the debugger session. (This feature is enabled in V7.7 with the application of zap 77z363.)&lt;br /&gt;
&lt;br /&gt;
===Subroutine or method display===&lt;br /&gt;
When execution pauses for a break point or runtime error, the subroutine or method being executed is indicated in the status area.  In addition, the source code line information available by right-clicking on a source line now also indicates the subroutine or method.&lt;br /&gt;
&lt;br /&gt;
==Performance enhancements==&lt;br /&gt;
&lt;br /&gt;
===MP/204 offload improvements===&lt;br /&gt;
Application code issuing the following SOUL statements will now now be fully offloadable:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;File Records In/On&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Remember&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt; &lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Position&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Sort Values&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;                                             &lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Reset Header/Trailer&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Find and Print Count&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Find All Values&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;For Each Value&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
the above improvements are also enabled in V7.7 with the application of zaps 77z419 and 77z420.&lt;br /&gt;
&lt;br /&gt;
===X3270OUT exit offloadable===&lt;br /&gt;
When running MP/204 (AMPSUBS&amp;gt;0) and using the [[Coding_SNA_Communications_Server_conversion_exit_routines#X3270OUT_.28convert_output_from_3270_format.29|X3270OUT]] exit to convert a 3270 output data stream to the appropriate device protocol, the exit can now run in parallel mode to improve performance. This change was enabled in V7.7 with the application of zap 77z313.&lt;br /&gt;
&lt;br /&gt;
The X3270OUT exit must be written to be re-entrant.&lt;br /&gt;
&lt;br /&gt;
==New and changed commands==&lt;br /&gt;
===DISPLAY ECF===&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;DISPLAY ECF {{ M | N | U } like ?} &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This new command displays details from ECF tables, or the current status of users accessing ECF modules.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;syntax&amp;quot;&amp;gt;D ECF M&amp;lt;/span&amp;gt; displays the contents of the module table. For example:&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;    D ECF M &lt;br /&gt;
    Module   Loadlib  Address:Length     Loaded@      Lastused@   #Calls  Flags &lt;br /&gt;
    QATUM13C PROGLIB 2FB91FB8:00000028 19023:121506 19023:121506 00000001 &lt;br /&gt;
    QATUM13B PROGLIB 2FE65000:00009C18 19023:121506 19023:121506 00000001 &lt;br /&gt;
    QATUM13A PROGLIB 2FE6EC18:00001CD8 19023:121506 19023:121506 00000001  &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
(flags may be D=deleted; S=shared; H=halted; I=Idle)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;syntax&amp;quot;&amp;gt;D ECF N&amp;lt;/span&amp;gt; displays contents of the name table. For example: &amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;    D ECF N&lt;br /&gt;
    Module   Logical-call-name &lt;br /&gt;
    QATUM13C MOD_QATUM13C &lt;br /&gt;
    QATUM13B MOD_QATUM13B &lt;br /&gt;
    QATUM13A MOD_QATUM13A &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;syntax&amp;quot;&amp;gt;D ECF U&amp;lt;/span&amp;gt; displays details of users currently accessing ECF modules. This is also the default option, and so &amp;lt;span class=&amp;quot;syntax&amp;quot;&amp;gt;D ECF&amp;lt;/span&amp;gt; will display the same output as &amp;lt;span class=&amp;quot;syntax&amp;quot;&amp;gt;D ECF U&amp;lt;/span&amp;gt;. For example:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;    D ECF U                           &lt;br /&gt;
    User# Userid     Module   Parmlen &lt;br /&gt;
    00002 ADMIN      --none--         &lt;br /&gt;
    00003 ADMIN      COBSAMP1 00000002&lt;br /&gt;
    00004 ADMIN      COBSAMP1 00000002 &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;syntax&amp;quot;&amp;gt;D ECF &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;function&amp;lt;/var&amp;gt; LIKE &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;?&amp;lt;/var&amp;gt; &amp;lt;/span&amp;gt; (where &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;?&amp;lt;/var&amp;gt; is a valid pattern) displays details for entities that match the specified pattern. The function is either M (modules), N (names), or U (users), and it defaults to U. So for example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;D ECF U L A&amp;lt;/p&amp;gt;&lt;br /&gt;
or&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;D ECF U L A*&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
displays details of ECF users whose names begin with A.&lt;br /&gt;
&lt;br /&gt;
===REGENERATE===&lt;br /&gt;
The &amp;lt;var&amp;gt;REGENERATE&amp;lt;/var&amp;gt; command can now be run in a multi-user environment by multiple users with system manager privileges. A new option USING is provided to specify the ddname of the input journal, so that the full syntax is now as follows:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;  REGENERATE [USING ddname] FILE filename [FROM dumpname | IGNORE]&lt;br /&gt;
  [TO {LAST UPDATE [BEFORE yy.ddd hh:mm:ss.th] | LAST CHECKPOINT [BEFORE yy.dd hh:mm:ss.th] &lt;br /&gt;
  | UPDATE number OF yy.ddd hh:mm:ss.th | CHECKPOINT yy.ddd hh:mm:ss.th} ]&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The default for the using ddname is CCAGEN, but any ddname may be used to allocate an input journal and used. For example:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;  ALLOCATE REGEN1 WITH SCOPE=SYSTEM DSN=PROD1.GDGJ OLD SEQUENTIAL GEN=+2&lt;br /&gt;
  REGENERATE USING REGEN1 FILE TEST&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It is the user&#039;s responsibility to ensure that the file being regenerated is not in use, and so prior to usage, &amp;lt;var&amp;gt;BUMP FILE&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;STOP FILE&amp;lt;/var&amp;gt; should be used to isolate usage against the file. If the file is in use, the REGEN will fail with these messages:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;  M204.1430: Failed to open file TEST&lt;br /&gt;
  M204.1436: Stopped processing file TEST  &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
$STATUS will now be set for &amp;lt;var&amp;gt;REGENERATE&amp;lt;/var&amp;gt; with the following values:&lt;br /&gt;
&amp;lt;blockquote&amp;gt;    &lt;br /&gt;
    0 - Success &amp;lt;br/&amp;gt;&lt;br /&gt;
    1 - No files were processed &amp;lt;br/&amp;gt;&lt;br /&gt;
    2 - At least one file stopped processing &amp;lt;br/&amp;gt;&lt;br /&gt;
    4 - A serious error occurred, REGEN failed &lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Similarly, &amp;lt;var&amp;gt;SETGRC&amp;lt;/var&amp;gt; may be used to get the return code and error message.&lt;br /&gt;
&lt;br /&gt;
==New and changed parameters==&lt;br /&gt;
&lt;br /&gt;
===ECMODS===&lt;br /&gt;
The new minimum value for ECMODS, the allowable number of ECF modules, is 1. Prior to V7.8 the minimum value was 0. This changed was enabled in V7.7 with the application of zap 77z306.&lt;br /&gt;
&lt;br /&gt;
===ECNAMES===&lt;br /&gt;
The new minimum value for ECNAMES, the allowable number of ECF module names, is 1. Prior to V7.8 the minimum value was 0. This changed was enabled in V7.7 with the application of zap 77z306.&lt;br /&gt;
&lt;br /&gt;
===ECPSIZE===&lt;br /&gt;
The new minimum value for ECPSIZE, the initial storage allocation for ECF parameters, is 1024. Prior to V7.8 the minimum value was 0. This changed was enabled in V7.7 with the application of zap 77z306.&lt;br /&gt;
&lt;br /&gt;
===ENQTIME===&lt;br /&gt;
Millisecond duration of automatic record locking retry wait.&lt;br /&gt;
&lt;br /&gt;
Prior to this change, if record locking conflicts occur frequently in a busy online, any user with a non-zero value for &amp;lt;var&amp;gt;[[ENQRETRY parameter|ENQRETRY]]&amp;lt;/var&amp;gt; will wait at least 3 seconds before the conflict is dealt with. This can degrade overall system performance.      &lt;br /&gt;
                                                         &lt;br /&gt;
The &amp;lt;var&amp;gt;[[ENQTIME parameter|ENQTIME]]&amp;lt;/var&amp;gt; parameter specifies the number of milliseconds waited for each record locking retry wait. ENQTIME can be between 1 and 60000, corresponding to a minimum of 1 millisecond and a maximum of 1 minute. The default value of ENQTIME is 3000 (3 seconds).            &lt;br /&gt;
                                                         &lt;br /&gt;
For example, with ENQTIME = 100 and ENQRETRY = 7, after a record locking conflict occurs the thread will retry 7 times with wait intervals of .1 seconds, and so within at most .7 seconds either the lock becomes available or the conflict triggers an On unit or cancels the request.     &lt;br /&gt;
                                                         &lt;br /&gt;
The ENQTIME parameter may also be reset with $ResetN. &lt;br /&gt;
&lt;br /&gt;
This new parameter was enabled in V7.7 with the application of zap 77z299.&lt;br /&gt;
&lt;br /&gt;
===EVALOPT===&lt;br /&gt;
The new &amp;lt;var&amp;gt;EVALOPT&amp;lt;/var&amp;gt; parameter controls the cancellation of a request on truncation of string data. The default value is 0, and currently there is just one setting, 1, which means &amp;quot;cancel a request if truncation of string data occurs.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
For example, with the default of 0 in place, the following code &amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;    %x is string len 1   &lt;br /&gt;
    %y is string len 2   &lt;br /&gt;
    %y = &#039;ab&#039;            &lt;br /&gt;
    %x = %y              &lt;br /&gt;
    printtext {~} = {%x} &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
would cause silent truncation, and give the result&lt;br /&gt;
    &amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;%x = a &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If &amp;lt;var&amp;gt;EVALOPT&amp;lt;/var&amp;gt; is set to 1, then the above code produces the following message:&lt;br /&gt;
    &amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;M204.0552: Variable too small for result &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and the request is cancelled.&lt;br /&gt;
&lt;br /&gt;
===LFSCB===&lt;br /&gt;
LFSCB, the length of the full screen buffer, now has a new minimum value of 8 ( the previous minimum was 0 ). This change has been enabled in v7.7 with the application of zap 77z042, and within V7.6 with the application of zap 76z393.&lt;br /&gt;
&lt;br /&gt;
===MAXPRE, MAXBOUT, MAXSUBT===&lt;br /&gt;
&amp;lt;p&amp;gt;Introduced in zap 77z257.&amp;lt;/p&amp;gt;&lt;br /&gt;
The new &amp;lt;var&amp;gt;MAXPRE&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;MAXBOUT&amp;lt;/var&amp;gt;, and &amp;lt;var&amp;gt;MAXSUBT&amp;lt;/var&amp;gt; parameters can be used to cancel a runaway transaction and prevent it from filling the checkpoint data set. &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;MAXPRE&amp;lt;/var&amp;gt;:  Maximum number of pre-images per transaction.  &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;MAXBOUT&amp;lt;/var&amp;gt;: Maximum number of backout pages per transaction. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;MAXSUBT&amp;lt;/var&amp;gt;: Maximum number of subtransaction checkpoints that a transaction can span.&amp;lt;/li&amp;gt;&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;Each new parameter defaults to unlimited. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;If a parameter value is set, a transaction is cancelled if that value is exceeded, and the following message is displayed:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;M204.0524: Maximum number (&amp;lt;i&amp;gt;num&amp;lt;/i&amp;gt;) of &amp;lt;i&amp;gt;parameter&amp;lt;/i&amp;gt; exceeded.&amp;lt;/p&amp;gt;&lt;br /&gt;
where &amp;lt;i&amp;gt;num&amp;lt;/i&amp;gt; is the value set for &amp;lt;i&amp;gt;parameter&amp;lt;/i&amp;gt; (&amp;lt;var&amp;gt;MAXPRE&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;MAXBOUT&amp;lt;/var&amp;gt;, or &amp;lt;var&amp;gt;MAXSUBT&amp;lt;/var&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
===NLDAPBUF===&lt;br /&gt;
This new parameter allows the number of LDAP buffers allocated during startup to be set in CCAIN. The default value is 2, and the settable value can range from 0 to 65535.&lt;br /&gt;
&lt;br /&gt;
===PUPDTH (new minimum value)===&lt;br /&gt;
If a user sets the &amp;lt;var&amp;gt;[[PUPDTH parameter|PUPDTH]]&amp;lt;/var&amp;gt; parameter to 0, it will now automatically be increased to 1, its minimum value.&lt;br /&gt;
&lt;br /&gt;
===SERV4G===&lt;br /&gt;
This parameter allows testing of server tables that span a 4-gigabyte boundary. For example, if &amp;lt;var&amp;gt;SERV4G&amp;lt;/var&amp;gt; is &amp;lt;code&amp;gt;X&#039;FFFFF000&#039;&amp;lt;/code&amp;gt;, each ATB server will begin at &amp;lt;code&amp;gt;XX_FFFFF000&amp;lt;/code&amp;gt;. If SERV4G is &amp;lt;code&amp;gt;X&#039;FFFF0000&#039;&amp;lt;/code&amp;gt;, each ATB server will begin at &amp;lt;code&amp;gt;XX_FFFF0000&amp;lt;/code&amp;gt;. &amp;lt;code&amp;gt;XX&amp;lt;/code&amp;gt; is determined by the storage available on the system. The parameter is set in CCAIN.&lt;br /&gt;
&lt;br /&gt;
The contents of the ATB server are specified by using the &amp;lt;var&amp;gt;[[SERVGA parameter|SERVGA]]&amp;lt;/var&amp;gt; parameter.&lt;br /&gt;
&lt;br /&gt;
For example, if you want VTBL to span the 4G boundary, you can use these settings: &amp;lt;code&amp;gt;SERV4G=X&#039;FFFFF000&#039;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;SERVGA=X&#039;00040000&#039;&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;LVTBL=200 (6400 bytes, X&#039;1900&#039;)&amp;lt;/code&amp;gt;. This will force each server&#039;s VTBL to begin at &amp;lt;code&amp;gt;XX_FFFFF000&amp;lt;/code&amp;gt; and end at &amp;lt;code&amp;gt;XX+1_00000900&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===WEBDFLT===&lt;br /&gt;
At V7.7, the default access rule for non-SSL ports was changed from ALLOW * to DISALLOW *, meaning that unless any ALLOW rules were in place resulting in a login/password prompt, the port couldn&#039;t be accessed. The new &amp;lt;var&amp;gt;[[WEBDFLT_parameter|WEBDFLT]]&amp;lt;/var&amp;gt; parameter may be set to 1 for reversion to the old default of ALLOW *. Under V7.7, this new parameter was enabled with the application of zap 77z090. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;var&amp;gt;RESET WEBDFLT&amp;lt;/var&amp;gt; requires system administrator privileges. It is recommended to reset the 1 bit of &amp;lt;var&amp;gt;WEBDFLT&amp;lt;/var&amp;gt; to zero after issuing a series of &amp;lt;var&amp;gt;JANUS DEFINE&amp;lt;/var&amp;gt; commands which need WEBDFLT=1, as in the CCAIN input stream.&lt;br /&gt;
&lt;br /&gt;
==New and changed statistics==&lt;br /&gt;
===MPR, MBO, MCP, and RCV===&lt;br /&gt;
Introduced in zap 77z257.&lt;br /&gt;
&amp;lt;p&amp;gt;These statistics provide high water mark transaction information. (Since-last values will not be available until V78 GA.)&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;They are useful in conjunction with the &amp;lt;var&amp;gt;MAXPRE&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;MAXBOUT&amp;lt;/var&amp;gt;, and &amp;lt;var&amp;gt;MAXSUBT&amp;lt;/var&amp;gt; parameters. &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
User/system statistics:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;MPR: High water mark of transaction pre-images. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;MBO: High water mark of transaction backout pages. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;MCP: High water mark of transaction chkpoint spans. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
System statistics: &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;RCV: Number of blocks needed for subtransaction recovery &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt; &lt;br /&gt;
&amp;lt;p class=&amp;quot;note&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Notes:&amp;lt;/b&amp;gt; M204.0843 now displays the RCV statistic for subtransaction checkpoints.&lt;br /&gt;
The size of recovery checkpoint must be greater than the sum of the last RCV value plus the number of records in [[System_and_media_recovery#RESTART_recovery_considerations_for_sub-transaction_checkpoints|RESTART and RESTARTS]].&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
===DKWTS and DKWTMICS===&lt;br /&gt;
Introduced in zap 77z7289.&lt;br /&gt;
&amp;lt;p&amp;gt;The new system statistics DKWTS (DisK WaiTs) and DKWTMICS (DisK WaiT MICroSeconds) collect data to provide rough disk I/O service time numbers.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
DKWTS shows the number of disk I/O waits. DKWTMICS shows the total wait time for those waits in microseconds. Dividing the difference in DKWTMICS by the difference in DKWTS over an interval provides the average disk I/O wait time in microseconds.              &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;note&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Notes:&amp;lt;/b&amp;gt; &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The wait time does include internal Model 204 scheduler delays, so on a CPU bound Model 204 system, the service times calculated from DKWTS and DKWTMICS are likely to be an overestimate of actual service times.&amp;lt;/li&amp;gt;  &lt;br /&gt;
                                                                    &lt;br /&gt;
&amp;lt;li&amp;gt;DKWTS and DKWTMICS are not available in SirMon; use [[MONITOR_command|MONITOR]] SYSTEM STATISTICS to view these statistics.&amp;lt;/li&amp;gt;&amp;lt;/ul&amp;gt;  &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Compatibility issues==&lt;br /&gt;
===&amp;lt;b id=&amp;quot;listNewInit&amp;quot;&amp;gt;&amp;lt;/b&amp;gt;$ListNew cannot be used in Initial clause===&lt;br /&gt;
It is now a compilation error if &amp;lt;var&amp;gt;$ListNew&amp;lt;/var&amp;gt; is attempted to be used in the &amp;lt;var&amp;gt;Initial&amp;lt;/var&amp;gt; clause of a &lt;br /&gt;
[[Using_variables_and_values_in_computation#Declare_statements_for_.25variables|declaration statement]].&lt;br /&gt;
&amp;lt;p&amp;gt;This change is propagated by zap maintenance to versions 7.5 (zap 75Z487), 7.6 (zap 76Z514), and 7.7 (zap 77z281) of Model 204.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote class=&amp;quot;note&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Note:&amp;lt;/b&amp;gt; Strictly speaking, this would not be considered a compilation error, because previously although &amp;lt;code&amp;gt;..&amp;amp;nbsp;Initial($ListNew)&amp;lt;/code&amp;gt; did not produce a compilation error, in almost all circumstances it would produce a snap if the initialized %variable were used with some other &amp;lt;var&amp;gt;$List&amp;lt;i&amp;gt;xxx&amp;lt;/i&amp;gt;&amp;lt;/var&amp;gt; invocation.&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Restricting the use of the CUSTOM=38 setting===&lt;br /&gt;
The [[CUSTOM parameter|CUSTOM=38]] parameter setting, introduced at V7.5, inadvertently provided System Manager privileges to all users via the RESET command. This CUSTOM setting is now restricted to the RESETting of the LAUDIT parameter.&lt;br /&gt;
&lt;br /&gt;
===Disabling of Closure support===&lt;br /&gt;
Due to a number of bugs related to Closure support, introduced at V7.7, this feature, which can best be described as exposed methods assigned to method variables, has been disabled in this release. This change was also made to V7.7 with application of zap 77z119.&lt;br /&gt;
&lt;br /&gt;
===Password delimiter enforced===&lt;br /&gt;
When using &amp;lt;var&amp;gt;IFSTRTN&amp;lt;/var&amp;gt; to log on to a Model 204 online from an IFAM2 application, both the logonid and password must be followed by a semicolon, which is the delimiter. For example:      &lt;br /&gt;
                                      &lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;CALL IFSTRTN(RC,&#039;logonid;password;&#039;...)&amp;lt;/p&amp;gt;&lt;br /&gt;
                 &lt;br /&gt;
If a semicolon does not follow the password string, the following message will now be issued:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;M204.2964: Password missing or too long &amp;lt;/p&amp;gt;                 &lt;br /&gt;
                                                         &lt;br /&gt;
Previously, a semicolon following the password was not required and the first blank served as a password delimiter.  However, as of V7.7, embedded blanks are valid password characters and a semicolon is now required to delimit the password.&lt;br /&gt;
&lt;br /&gt;
This change has also been enabled in V7.7 with the application of zap 77z231.&lt;br /&gt;
&lt;br /&gt;
===PAGESZ parameter validated===&lt;br /&gt;
Previously it was possible to set the PAGESZ parameter to any value, although Model 204 internally supports one page size of 6184, and any deviation from this value would have led to problems during file creation. The value of this parameter is now controlled, such that setting it to any value other than 6184 will generate an M204.1149 message with the parameter being reset to 6184.&lt;br /&gt;
&lt;br /&gt;
===ECPRIV and the IDCAMS facility===&lt;br /&gt;
At V7.7 a security loophole was closed, whereby all ECF modules were run under external-authorizer profile of the calling user. Previously any ECF tasks were run under the owning job&#039;s external-authorizer profile, and in order for certain sites to retain that ability, a new setting of ECPRIV, value 4, was introduced to retain the ability to run ECF tasks using the job&#039;s security profile. &lt;br /&gt;
&lt;br /&gt;
The ECPRIV 4 setting potentially introduced a security loophole when calling the IDCAMS interface, based upon what the IDCAMS utility is able to do at a system level. Consequently as of this release, the ECPRIV 4 setting will be ignored when calling the IDCAMS facility via ECF, and such IDCAMS processes will always use the calling user&#039;s security profile. Any existing jobs that use ECF to call the IDCAMS utility with the ECFPRIV 4 bit set should be checked to ensure that the calling user&#039;s security profile still satisfies the job&#039;s requirements.&lt;br /&gt;
&lt;br /&gt;
===TCPOPTS is view-only===&lt;br /&gt;
In previous versions the &amp;lt;var&amp;gt;TCPOPTS&amp;lt;/var&amp;gt; parameter, which identifies the type of IP addressing in use (v4 or v6), was resetable, although it was always documented as a view-only parameter. The parameter is now handled as a view-only parameter, and any attempts to reset the parameter will result in the following message:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;gt;   M204.1123: Parameter TCPOPTS not reset&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===ZHPF command can only be issued by a system manager===&lt;br /&gt;
In previous versions it was possible to issue the ZHPF command without being logged on. From this release onwards, a user would have to be logged on with system manager privileges to be able to issue this command.&lt;br /&gt;
&lt;br /&gt;
Additionally, the command output will now only  display results for currently open files.&lt;br /&gt;
&lt;br /&gt;
This changes has been enabled in v7.7 with the application of zap 77z264.&lt;br /&gt;
&lt;br /&gt;
===Terminal MODEL reset failure===&lt;br /&gt;
If a reset of the terminal MODEL parameter fails due to an undersized output page buffer, then in addition to the existing messages that inform the user of this failure:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;gt;    M204.1875 UNABLE TO RESET MODEL TO %C &lt;br /&gt;
    M204.1123: Parameter MODEL not reset&amp;lt;/p&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
the following message will now be issued:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;gt;    M204.1008: LOUTPB must be increased to at least &amp;lt;number&amp;gt; &amp;lt;/p&amp;gt;&lt;br /&gt;
                                                         &lt;br /&gt;
where &amp;lt;number&amp;gt; is the minimum value of LOUTPB necessary to support the terminal model.&lt;br /&gt;
&lt;br /&gt;
This change is enabled in V7.7 with the application of zap 77z309.&lt;br /&gt;
&lt;br /&gt;
==Notes for system manager and installer==&lt;br /&gt;
===CRAM SVC installation is deprecated===&lt;br /&gt;
The CRAM SVC installation has been deprecated as of version 7.5. &amp;lt;br /&amp;gt;Installation of CRAM-XDM is described as part of the [[Model 204 installation]].&lt;br /&gt;
===Authorization and maintenance zaps===&lt;br /&gt;
When you download Rocket M204 product object files, all relevant authorization keys and all current maintenance zaps are pre-applied to the object files as part of the download process.&lt;br /&gt;
&lt;br /&gt;
==New and changed messages==&lt;br /&gt;
&lt;br /&gt;
See [[New and updated messages in Model 204 version 7.8|New and updated messages in Model 204 version 7.8]] for details.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category: Release notes]]&lt;/div&gt;</summary>
		<author><name>ELowell</name></author>
	</entry>
	<entry>
		<id>https://m204wiki.rocketsoftware.com/index.php?title=Release_notes_for_Model_204_version_7.8&amp;diff=117734</id>
		<title>Release notes for Model 204 version 7.8</title>
		<link rel="alternate" type="text/html" href="https://m204wiki.rocketsoftware.com/index.php?title=Release_notes_for_Model_204_version_7.8&amp;diff=117734"/>
		<updated>2019-12-11T22:42:07Z</updated>

		<summary type="html">&lt;p&gt;ELowell: /* Debugger enhancements */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
These release notes list the enhancements and other changes contained in Model 204 version 7.8. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;&amp;lt;b&amp;gt;******THIS IS A DRAFT DOCUMENT.******&amp;lt;/b&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
These release notes list the enhancements and other changes contained in Model 204 version 7.8, &amp;lt;b&amp;gt;&amp;lt;i&amp;gt;which is still in development&amp;lt;/i&amp;gt;&amp;lt;/b&amp;gt;. Until the commercial release of the software, Rocket reserves the right to add to, remove, or change anything described herein. &lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
These release notes contain installation and features information for the Rocket Model 204 version 7.8 release.&lt;br /&gt;
Before beginning your installation, please read through this information about product installation and changes.&lt;br /&gt;
&lt;br /&gt;
==New in this release==&lt;br /&gt;
The table below cites some highlights of Model&amp;amp;nbsp;204 version 7.8. For a full list of features, refer to the Table of Contents. &lt;br /&gt;
&amp;lt;p&amp;gt;See also the [[#Compatibility Issues|Compatibility]] section for possible issues.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;tr class=&amp;quot;head&amp;quot;&amp;gt;&amp;lt;th&amp;gt;Category&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Feature&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;SOUL&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The new [[#AmIndependent method|AmIndependent]] method returns TRUE for daemons spawned by RunIndependently.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The Object class now supports the [[#Support for copying Object class objects|copy and deepCopy methods]].&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Janus Web&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[[#Web Sockets|Janus Web Sockets]] are now supported.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td nowrap&amp;gt;Networking&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Note:&amp;lt;/b&amp;gt; The two-phase commit and commit exits features are licensed and purchased separately from Model 204.&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Two-phase commit. A Model 204 online can now be configured to use two-phase commit (2PC). The Janus internal socket API is used for the calls to the coordinator. JANUS commands are used for all 2PC configuration. A new JANUS port type has been added, 2PC.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Commit exits are now supported. The commit exit runs within the APSY, which is defined by the &amp;lt;var&amp;gt;COMMITX&amp;lt;/var&amp;gt; parameter and uses normal APSY processing.  &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;ECF tables&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The new &amp;lt;var&amp;gt;DISPLAY ECF&amp;lt;/var&amp;gt; command and &amp;lt;var&amp;gt;EXTERNAL REMOVE&amp;lt;/var&amp;gt; statement enable more efficient management of [[#Managing ECF tables more efficiently|ECF tables]].&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Performance&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[[#MP/204 offload improvements|MP/204 offload improvements]] -- application code for these SOUL statements is now fully offloadable: &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;File Records In/On&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Remember&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Position&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Sort Values&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Reset Header/Trailer&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Find and Print Count&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Find All Values&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;For Each Value&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Security&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;CA-Top Secret can [[#CA-Top Secret can disallow CCASTAT logins|disallow CCASTAT logins]].&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[[#DEFUSER can specify a jobname not authorized to access M204|DEFUSER]] can specify a jobname not authorized to access M204.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td nowrap&amp;gt;System enhancements&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The &amp;lt;var&amp;gt;MONITOR USERS&amp;lt;/var&amp;gt; command output displays [[#New wait types for daemon/master waits|two new wait types]].&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td nowrap&amp;gt;AUDIT204 enhancements&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The new TIMEHH parameter on the &amp;lt;var&amp;gt;[[#FORMAT command|FORMAT]]&amp;lt;/var&amp;gt; command of the AUDIT204 utility provides greater time stamp precision.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td nowrap&amp;gt;New commands&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;[[#DISPLAY ECF|DISPLAY ECF]]&amp;lt;/var&amp;gt; displays details from ECF tables, or the current status of users accessing ECF modules.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td nowrap&amp;gt;New parameters&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;[[#ENQTIME|ENQTIME]]&amp;lt;/var&amp;gt; specifies the number of milliseconds waited for each record locking retry wait.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;[[#EVALOPT|EVALOPT]]&amp;lt;/var&amp;gt; controls the cancellation of a request on truncation of string data.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;[[#MAXPRE, MAXBOUT, MAXSUBT|MAXPRE, MAXBOUT, and MAXSUBT]]&amp;lt;/var&amp;gt; can be used to cancel a runaway transaction and prevent it from filling the checkpoint data set.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;[[#NLDAPBUF|NLDAPBUF]]&amp;lt;/var&amp;gt; allows the number of LDAP buffers allocated during startup to be set in CCAIN.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;[[#SERV4G|SERV4G]]&amp;lt;/var&amp;gt; allows testing of server tables that span a 4-gigabyte boundary.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;[[#WEBDFLT|WEBDFLT]]&amp;lt;/var&amp;gt; changes the default JANUS WEB ALLOW rule back to ALLOW.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td nowrap&amp;gt;Debuggers&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The debuggers can now view or watch the values of [[#Access to exposed variables|variables exposed to local routines/methods]].&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;At breakpoints, the debuggers now [[#Subroutine or method display|display the subroutine or method]] where execution stopped.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td nowrap&amp;gt;User/system statistics&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;[[#MPR, MBO, MCP, and RCV|MPR, MBO, MCP, and RCV]]&amp;lt;/var&amp;gt; provide high water mark transaction information in conjunction with the &amp;lt;var&amp;gt;MAXPRE&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;MAXBOUT&amp;lt;/var&amp;gt;, and &amp;lt;var&amp;gt;MAXSUBT&amp;lt;/var&amp;gt; parameters. &lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[[#DKWTS and DKWTMICS|New system statistics]] DKWTS (DisK WaiTs) and DKWTMICS (DisK WaiT MICroSeconds) collect data to provide rough disk I/O service time numbers.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Operating system and hardware requirements==&lt;br /&gt;
&lt;br /&gt;
===Operating system requirements===&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;IBM z/OS versions supported:&amp;lt;/b&amp;gt; &lt;br /&gt;
  &amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;All IBM supported releases up to and including z/OS 2.3. &amp;lt;br /&amp;gt;(For z/OS 2.2, see [[IBM z/OS 2.2 PTF requirement]].)&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;p&amp;gt;Version 1.07 is sufficient for all functionality except for the following features:&amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;ul&amp;gt;&lt;br /&gt;
    &amp;lt;li&amp;gt;zHPF support requires version [[IBM z/OS 2.1 compatibility issue|2.1]].&amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;li&amp;gt;Large (1 MB) page support requires version 1.9.&amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;li&amp;gt;Extended address volumes (EAV) requires version 1.12.&amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;/ul&amp;gt;&lt;br /&gt;
  &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
On z/OS, Model 204 release 7.8 operates as an APF authorized load module, as required by many 7.8 features. &amp;lt;br /&amp;gt;&lt;br /&gt;
To run Model 204 unauthorized, [[Contacting Rocket Software Technical Support|contact Technical Support]].&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;IBM z/VM versions supported:&amp;lt;/b&amp;gt; &lt;br /&gt;
  &amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;All IBM supported releases up to and including z/VM 6.4.&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;IBM z/VSE versions supported:&amp;lt;/b&amp;gt;&lt;br /&gt;
  &amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;All IBM supported releases up to and including z/VSE 6.1.&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Hardware requirements===&lt;br /&gt;
 &lt;br /&gt;
In general, Model 204 version 7.8 requires the IBM z/890 or above processor.&lt;br /&gt;
&amp;lt;p&amp;gt;However, the IBM z10 or above processor is required for the following features:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;large (1 MB) page support&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;IBM&#039;s High Performance FICON (zHPF) support&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Connect&amp;lt;sup&amp;gt;&amp;amp;#9733;&amp;lt;/sup&amp;gt; compatibility with Model 204===&lt;br /&gt;
&lt;br /&gt;
Connect&amp;lt;span class=&amp;quot;superstar&amp;quot;&amp;gt;&amp;amp;#9733;&amp;lt;/span&amp;gt; version 7.5 or 7.7 is compatible with Model 204 version 7.8.&lt;br /&gt;
&lt;br /&gt;
For more information on Connect&amp;lt;span class=&amp;quot;superstar&amp;quot;&amp;gt;&amp;amp;#9733;&amp;lt;/span&amp;gt; installation, see the [[:Category:Connect*|Connect&amp;lt;span class=&amp;quot;superstar&amp;quot;&amp;gt;&amp;amp;#9733;&amp;lt;/span&amp;gt; wiki pages]].&lt;br /&gt;
&lt;br /&gt;
==SOUL (User Language) enhancements==&lt;br /&gt;
===AmIndependent method===&lt;br /&gt;
The &amp;lt;var&amp;gt;AmIndependent&amp;lt;/var&amp;gt; method returns TRUE for daemons spawned by &amp;lt;var&amp;gt;[[RunIndependently_(Daemon_subroutine)|RunIndependently]]&amp;lt;/var&amp;gt;. (The action of &amp;lt;var&amp;gt;[[AmDaemon_(Daemon_property)|AmDaemon]]&amp;lt;/var&amp;gt; remains unchanged.)&lt;br /&gt;
&lt;br /&gt;
The following table shows the values returned by &amp;lt;var&amp;gt;AmIndependent&amp;lt;/var&amp;gt; versus &amp;lt;var&amp;gt;AmDaemon&amp;lt;/var&amp;gt; for different daemon types:&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Type&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;AmDaemon&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;AmIndependent&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;$COMBG&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;False&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;False&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Independent daemon&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;False&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;True&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Other daemon&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;True&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;False&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Web, etc.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;False&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;False&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===$ProcOpn===&lt;br /&gt;
&amp;lt;var&amp;gt;[[$ProcOpn|$ProcOpn]]&amp;lt;/var&amp;gt; now supports the opening of a procedure with an all-numeric name, and including a leading zero, such as:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;%result = $procOpn(&#039;0123&#039;, &#039;MYFILE&#039;)&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Support for such procedure names was initially introduced at V7.7, and this feature of &amp;lt;var&amp;gt;$ProcOpn&amp;lt;/var&amp;gt; is also enabled in V7.7 with the application of zap 77z054.&lt;br /&gt;
&lt;br /&gt;
===Allow parentheses to surround a boolean enumeration object===&lt;br /&gt;
The following sample code:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;   begin                                       &lt;br /&gt;
   variables are undefined                  &lt;br /&gt;
   %isValid is boolean initial (True)       &lt;br /&gt;
   if (%isValid) then                  &lt;br /&gt;
      print &#039;in IF&#039;                            &lt;br /&gt;
   end if                                   &lt;br /&gt;
   end   &amp;lt;/p&amp;gt;      &lt;br /&gt;
&lt;br /&gt;
will now compile and run successfully, since this syntax: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;if (%isValid) then &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
is logically equivalent to this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;if %isValid then &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Prior to V7.8 the presence of parentheses surrounding the boolean enumeration object would have caused a compilation error. This change is enabled in V7.7 with the application of zap 77z370.&lt;br /&gt;
&lt;br /&gt;
===Support for copying Object class objects===&lt;br /&gt;
The Object class now supports the copy and deepCopy methods. For example, an Object object can be copied as follows:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;   begin               &lt;br /&gt;
   %x is object object &lt;br /&gt;
   %y is object object &lt;br /&gt;
   %y = new            &lt;br /&gt;
   %x = %y:copy        &lt;br /&gt;
   end &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This change is enabled in v7.7 with the application of zap 77z076, and within V7.6 with the application of zap 76z412.&lt;br /&gt;
&lt;br /&gt;
===Assignment of enumeration values to method variables===&lt;br /&gt;
Enumerations values can now be assigned to method variables whose result is an enumeration. So, for example, the following code:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;   begin                                               &lt;br /&gt;
   enumeration colour                                  &lt;br /&gt;
      public                                           &lt;br /&gt;
         value red                                     &lt;br /&gt;
         value white                                   &lt;br /&gt;
         value blue                                    &lt;br /&gt;
      end public                                       &lt;br /&gt;
   end enumeration                                     &lt;br /&gt;
   %func    is function getColour is enumeration colour&lt;br /&gt;
   local function getColour is enumeration colour      &lt;br /&gt;
      return blue                                      &lt;br /&gt;
   end function                                        &lt;br /&gt;
   %func    = getColour                                &lt;br /&gt;
   %func    = (colour):red                             &lt;br /&gt;
   printText {~=%(Local):(%func)}                      &lt;br /&gt;
   end  &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
will produce this result:&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt; %(Local):(%func)=red &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
whereas previously this line:   &lt;br /&gt;
&lt;br /&gt;
  &amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt; %func    = (colour):red &amp;lt;/p&amp;gt;   &lt;br /&gt;
&lt;br /&gt;
would have been rejected with this message:&lt;br /&gt;
&lt;br /&gt;
   &amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;MSIR.0993: Assignment invalid: mismatch between method and method variable &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This change is enabled in V7.7 with the application of zap 77z128.&lt;br /&gt;
&lt;br /&gt;
===Optional output method parameters===&lt;br /&gt;
Prior to this release output parameters could not be optional or have default values. In this release output parameters can be specified as &amp;lt;var&amp;gt;Optional&amp;lt;/var&amp;gt;, and a default value can be specified with &amp;lt;var&amp;gt;Default&amp;lt;/var&amp;gt;. One related change is that if a &amp;lt;var&amp;gt;Len&amp;lt;/var&amp;gt; value is specified with &amp;lt;var&amp;gt;Optional&amp;lt;/var&amp;gt; or &amp;lt;var&amp;gt;Default&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;Output&amp;lt;/var&amp;gt;, it indicates the length of the hidden target for the output parameter if none was passed. For all other &amp;lt;var&amp;gt;Output&amp;lt;/var&amp;gt; parameters, &amp;lt;var&amp;gt;Len&amp;lt;/var&amp;gt; is meaningless, just as it was before Model 204 V7.8. The following is an example of the use of an optional output parameter:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;function getRemote( -&lt;br /&gt;
   %target is string len 32, %errorReason is string len 80 optional output -&lt;br /&gt;
) is float&lt;br /&gt;
  ...&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
In this example, if &amp;lt;code&amp;gt;%errorReason&amp;lt;/code&amp;gt; is not specified in a call and then set to a value longer than 80 bytes it wil be truncated to 80 bytes. However, if a string of a different length is passed, the length of that string determines truncation behavior.&lt;br /&gt;
&lt;br /&gt;
==External Call Facility enhancements==&lt;br /&gt;
===Managing ECF tables more efficiently===&lt;br /&gt;
The are two new features to help manage ECF tables more efficiently, avoid conditions where the table can fill, and prevent the definition of further entities.&lt;br /&gt;
&lt;br /&gt;
The first feature is the new &amp;lt;var&amp;gt;DISPLAY ECF&amp;lt;/var&amp;gt; command, which displays the contents of ECF tables and also the current status of users accessing ECF modules. See more details of the &amp;lt;var&amp;gt;[[#DISPLAY ECF|DISPLAY ECF]]&amp;lt;/var&amp;gt; command below.&lt;br /&gt;
&lt;br /&gt;
The second feature is a new &amp;lt;var&amp;gt;EXTERNAL REMOVE&amp;lt;/var&amp;gt; statement with the following syntax:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;EXTERNAL REMOVE &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;modulename&amp;lt;/span&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This statement causes the entry for the named module to be removed from the module table. The table entry is then placed on a free chain of entries and can be reused by issuing the &amp;lt;var&amp;gt;EXTERNAL MODULE&amp;lt;/var&amp;gt; statement. This allows the module table to be managed with redundant entries removed, without having to recycle the ONLINE.&lt;br /&gt;
&lt;br /&gt;
An &amp;lt;var&amp;gt;EXTERNAL REMOVE&amp;lt;/var&amp;gt; statement will return &amp;lt;code&amp;gt;$status/$statusd&amp;lt;/code&amp;gt; values of &amp;lt;code&amp;gt;0/0&amp;lt;/code&amp;gt;, and most other status values that can be returned by the &amp;lt;var&amp;gt;EXTERNAL REMOVE&amp;lt;/var&amp;gt; statement are already documented in the ECF return codes table. If an &amp;lt;var&amp;gt;EXTERNAL REMOVE&amp;lt;/var&amp;gt; is attempted against a module that is currently being called (in use), then &amp;lt;code&amp;gt;$status/$statusd&amp;lt;/code&amp;gt; will return the values &amp;lt;code&amp;gt;20/1&amp;lt;/code&amp;gt; (module unavailable).&lt;br /&gt;
&lt;br /&gt;
==System enhancements==&lt;br /&gt;
&lt;br /&gt;
===New wait types for daemon/master waits===&lt;br /&gt;
&lt;br /&gt;
Two new wait types, viewable on the &amp;lt;var&amp;gt;[[MONITOR_command|MONITOR]] USERS&amp;lt;/var&amp;gt; command output, have been implemented as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;57&amp;lt;/code&amp;gt; - Means a daemon thread waiting for its master thread  &amp;lt;br /&amp;gt;     &lt;br /&gt;
&amp;lt;code&amp;gt;58&amp;lt;/code&amp;gt; - Means a master thread waiting for one of its daemon threads&lt;br /&gt;
&lt;br /&gt;
This change is enabled in V7.7 with the application of zap 77z410.&lt;br /&gt;
&lt;br /&gt;
===Snap formatting changes===&lt;br /&gt;
Date/time stamps in the page headers of snaps will now be shown in normal format, rather than in julian format as in previous versions. So in the following example, a particular snap header under v7.7 or previous versions would show as: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;SNAPID    1   19226.060155  M204.0022: Bug .. nnnnn               PAGE     1 &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
whereas the same snap header under v7.8 would show as: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;SNAPID    1  2019/08/14 06:01:06   M204.0022: Bug .. nnnnn        PAGE     1 &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Also, due to improvements in handling trailing blanks in snap output, a snap generated under v7.8 should be marginally smaller than the same snap generated under previous versions, assuming the same SNAPCTL settings.&lt;br /&gt;
&lt;br /&gt;
===Call stack trace for problem diagnosis===&lt;br /&gt;
A  call stack trace is now provided to help diagnose and resolve common errors. To enable the stack trace, do either of the following: &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Set the &amp;lt;var&amp;gt;[[SIRFACT parameter|SIRFACT]] X&#039;01&#039;&amp;lt;/var&amp;gt; bit.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Set the &amp;lt;var&amp;gt;[[DEBUGUL parameter|DEBUGL]]&amp;lt;/var&amp;gt; parameter. Note that the &amp;lt;var&amp;gt;DEBUGUL&amp;lt;/var&amp;gt; approach will introduce extra QTBL overhead. &amp;lt;p&amp;gt;(&amp;lt;var&amp;gt;DEBUGUL&amp;lt;/var&amp;gt; provides a similar facility with an include trace of procedures leading to the error, but this might not be potentially as useful as the call trace.)&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt; &lt;br /&gt;
&lt;br /&gt;
The call stack trace can assist in diagnosing run-time errors that might occur, as illustrated by the following &amp;quot;Variable too small for result&amp;quot; and &amp;quot;MBSCAN exceeded&amp;quot; examples.&lt;br /&gt;
&lt;br /&gt;
====Variable too small for result====&lt;br /&gt;
When the stack trace is enabled, a &amp;quot;variable too small&amp;quot; error results in the following message:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;M204.2966: Error at line n, procedure &#039;&#039;procname&#039;&#039; in file &#039;&#039;procfile&#039;&#039;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
which identifies the line within a procedure where the error is occurring, in addition to the usual message:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;M204.0552: Variable too small for result&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Any subsequent M204.2966 messages indicate the point in the code from where the code in error was called. For example, a stack of three subroutine calls leading to a &amp;quot;variable too small&amp;quot; error might result in the following messaging:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;   M204.0552: Variable too small for result                             &lt;br /&gt;
   M204.2966: Error at line 9, procedure MYPROC.LEVEL4 in file MYPROC   &lt;br /&gt;
   M204.2966: Called from line 5, procedure MYPROC.LEVEL3 in file MYPROC&lt;br /&gt;
   M204.2966: Called from line 5, procedure MYPROC.LEVEL2 in file MYPROC&lt;br /&gt;
   M204.2966: Called from line 5, procedure MYPROC.LEVEL1 in file MYPROC &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This information should help in diagnosing the problem. &lt;br /&gt;
&lt;br /&gt;
If the error occurs within a command level program rather than a procedure, then the M204.2966 message is replaced by an M204.2967 message, and a similar error condition to the above with a preceding call stack might be audited as follows:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;   M204.0552: Variable too small for result              &lt;br /&gt;
   M204.2967: Error at line 14 of command level program  &lt;br /&gt;
   M204.2967: Called from line 5 of command level program&lt;br /&gt;
   M204.2967: Called from line 3 of command level program &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If neither &amp;lt;var&amp;gt;SIRFACT X&#039;01&#039;&amp;lt;/var&amp;gt; nor &amp;lt;var&amp;gt;DEBUGUL&amp;lt;/var&amp;gt; is set, then the &amp;quot;variable too small&amp;quot; error produces the following messages:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;   M204.0552: Variable too small for result &lt;br /&gt;
   M204.2968: Error: no debug info &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====MBSCAN exceeded====&lt;br /&gt;
Similarly to the handling of the &amp;quot;variable too small for result&amp;quot; error, the call stack can also be used to diagnose errors where the value of &amp;lt;var&amp;gt;[[MBSCAN parameter|MBSCAN]]&amp;lt;/var&amp;gt; is exceeded as a result of a direct search of Table B records. &lt;br /&gt;
&amp;lt;p&amp;gt;Again, under V7.8, with either the &amp;lt;var&amp;gt;SIRFACT X&#039;01&#039;&amp;lt;/var&amp;gt; bit set or &amp;lt;var&amp;gt;DEBUGUL&amp;lt;/var&amp;gt; set, if a long request occurs as a result of exceeding &amp;lt;var&amp;gt;MBSCAN&amp;lt;/var&amp;gt;, then initially the following message is produced, as before:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;M204.0569: File &#039;&#039;filename&#039;&#039;, Find: Table B records to be searched = &#039;&#039;nnnn&#039;&#039;&amp;lt;/p&amp;gt;&lt;br /&gt;
followed by a DYRWT prompt message. If the user replies &#039;N&#039; to the prompt, or if the request is run in an environment (such as a batch job) where the default response is &#039;N&#039;, the following message is produced after the M204.0569 message:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;Cancelling request: M204.2969: MBSCAN (&#039;&#039;mm&#039;&#039;) exceeded, records to be searched = &#039;&#039;nnnn&#039;&#039;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
where &#039;&#039;mm&#039;&#039; is the current setting of &amp;lt;var&amp;gt;MBSCAN&amp;lt;/var&amp;gt;. The M204.2969 message is followed by M204.2966 messages displaying the call stack trace. Thus, if the following code is run from procedure MYPROC.MBSCAN against the demo database, with an &amp;lt;var&amp;gt;MBSCAN&amp;lt;/var&amp;gt; setting of 10:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;   b                           &lt;br /&gt;
   call sub1                   &lt;br /&gt;
   sub1: subroutine            &lt;br /&gt;
   fd1:                        &lt;br /&gt;
      in clients fd city = ONTARIO&lt;br /&gt;
              end find         &lt;br /&gt;
      fr fd1                      &lt;br /&gt;
         pai                      &lt;br /&gt;
         print                    &lt;br /&gt;
      end for                     &lt;br /&gt;
   end subroutine              &lt;br /&gt;
   end &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
then the following messages are produced, assuming any prompts are responded to with an &#039;N&#039;:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;   M204.0569: File CLIENTS, Find: Table B records to be searched = 3415&lt;br /&gt;
   Cancelling request: M204.2969: MBSCAN (10) exceeded, records to be searched = 3415  &lt;br /&gt;
   M204.2966: Error at line 6, procedure MYPROC.MBSCAN in file MYPROC&lt;br /&gt;
   M204.2966: Called from line 3, procedure MYPROC.MBSCAN in file MYPROC  &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===appendJournalData===&lt;br /&gt;
The &amp;lt;var&amp;gt;[[AppendJournalData_(Stringlist_function)|AppendJournalData]]&amp;lt;/var&amp;gt; function is now more tolerant of an outstanding BUMP request. Previously, if &amp;lt;var&amp;gt;AppendJournalData&amp;lt;/var&amp;gt; was called to inadvertently retrieve a large amount of journal data, typically when called implicitly from within SirScan, then any outstanding BUMP request wouldn&#039;t be honored until all of the data had been retrieved, at which point the BUMP request would be completed, and all data would be lost.&lt;br /&gt;
&lt;br /&gt;
Now, the &amp;lt;var&amp;gt;AppendJournalData&amp;lt;/var&amp;gt; process checks for outstanding BUMP requests before each track I/O is executed, thus avoiding excessive I/Os against the journal and long waits for the BUMP of such a process to complete.&lt;br /&gt;
&lt;br /&gt;
==AUDIT204 enhancements==&lt;br /&gt;
===FORMAT command===&lt;br /&gt;
TIMEHH is a new parameter used with the FORMAT command of the [[Tracking_system_activity_(CCAJRNL,_CCAAUDIT,_CCAJLOG)#AUDIT204_utility|AUDIT204]] utility.  It indicates that timestamps, printed at the beginning of each line of output, should include hundredths of a second. Requires no other arguments.&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;b&amp;gt;NOTE:&amp;lt;/b&amp;gt; This parameter and the 78 version (or later) of AUDIT204 may be used against a 77 (or later) CCAJRNL.&amp;lt;/p&amp;gt;&lt;br /&gt;
For example:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;//CCAIN DD *&lt;br /&gt;
FORMAT YEARFORM 4&lt;br /&gt;
TIMEHH&lt;br /&gt;
TYPE ER MS LI&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Recovery enhancements==&lt;br /&gt;
===Media Recovery in a multi-user environment===&lt;br /&gt;
It is now possible to perform media recovery by issuing the &amp;lt;var&amp;gt;REGENERATE&amp;lt;/var&amp;gt; command to roll forward selected files in a multi-user environment, with the media recovery being carried out by different users with system manager privileges. The new USING option allows for the specification of a ddname for the input journal stream to be used by the &amp;lt;var&amp;gt;REGENERATE&amp;lt;/var&amp;gt; command. Previously media recovery was restricted to single user batch jobs, using the CCAGEN ddname for the input journal. For more details, see the &amp;lt;var&amp;gt;[[#REGENERATE|REGENERATE]]&amp;lt;/var&amp;gt; command below.&lt;br /&gt;
&lt;br /&gt;
==Security enhancements==&lt;br /&gt;
===CA-Top Secret can disallow CCASTAT logins===&lt;br /&gt;
The [[CA-Top_Secret_interface|CA-Top Secret]] interface now recognizes the &amp;lt;code&amp;gt;DEFACID=&amp;lt;/code&amp;gt;, setting and does not allow CCASTAT logins in the online if &amp;lt;code&amp;gt;DEFACID&amp;lt;/code&amp;gt; is set to null. (There is no attempt to log on M204USR.) Therefore, to disallow CCASTAT logons, set DEFACID=, in [[CA-Top_Secret_interface#Preparing_a_TOPSPARM_parameter_module_with_TOPSGEN|TOPSPARM]]. CCASTAT will be opened because it contains file and group passwords, but it will not be used for logons if CCASTAT logons are not allowed.&lt;br /&gt;
&lt;br /&gt;
===CUSTOM=11 and mixed cased input===&lt;br /&gt;
The &amp;lt;var&amp;gt;[[CUSTOM_parameter|CUSTOM]]&amp;lt;/var&amp;gt; parameter CUSTOM=11 setting no longer requires that a *LOWER command be issued prior to a LOGCTL command (to add or change a  password) to preserve mixed case input. Prior to this release, with CUSTOM=11 in place, *LOWER had to be issued before a LOGCTL command, otherwise any mixed case password strings would automatically be translated into uppercase. This change is enabled in V7.7 with the application of zap 77z108.&lt;br /&gt;
&lt;br /&gt;
===DEFUSER can specify a jobname not authorized to access M204===&lt;br /&gt;
When specifying DEFUSER=JOBNAME and VALIDAT=LOGON in the RACFGEN parms for an ONLINE, if the specified jobname ( the owning id for the ONLINE job ) isn&#039;t authorized to use Model 204 via RACF, any LOGIN commands specifying no userid will now succeed ( previously such a LOGON would have failed ). This enables users to submit jobs with USE $JOB, whereby the string USER=jobname  will be added to the submitted JCL, and this in turn is useful if the specified jobname has dataset access privileges to datasets required by the submitted jobs, even if the jobname itself isn&#039;t authorized to use M204.&lt;br /&gt;
&lt;br /&gt;
==Janus product enhancements==&lt;br /&gt;
&lt;br /&gt;
===Web Sockets===&lt;br /&gt;
Web Sockets are now supported in Janus Web Server.&lt;br /&gt;
&lt;br /&gt;
The Web Socket protocol provides various advantages over the HTTP protocol:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Web Sockets allow full-duplex communication.&amp;lt;/li&amp;gt; &lt;br /&gt;
&amp;lt;li&amp;gt;Efficient framing of payload data uses minimal overhead.&amp;lt;/li&amp;gt;  &lt;br /&gt;
&amp;lt;li&amp;gt;The Web Socket protocol is end-user extensible.&amp;lt;/li&amp;gt;  &lt;br /&gt;
&amp;lt;li&amp;gt;Most importantly, Web Sockets can be deployed completely within an existing HTTP/HTTPS framework.&amp;lt;/li&amp;gt; &lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To implement Web Sockets, you must enable the Janus Web port for Web Socket upgrades with the new &lt;br /&gt;
WEBSOCKET parameter. The WEBSOCKET option can be specified on either the port definition or the &lt;br /&gt;
JANUS WEB rule for the URL. &lt;br /&gt;
Likewise, an individual Janus Web rule can either allow or disallow Web Socket connections with the &lt;br /&gt;
WEBSOCKET and NOWEBSOCKET parameters, respectively. &lt;br /&gt;
&lt;br /&gt;
For details on implementing Web Sockets, see the [[WebSocket_(Socket_function)|WebSocket]] wiki page.&lt;br /&gt;
&lt;br /&gt;
===Janus Web Server access rule===&lt;br /&gt;
The automatic &amp;lt;var&amp;gt;[[JANUS WEB ALLOW]]&amp;lt;/var&amp;gt; rule, which allowed any user to access the port without requiring a login, is changed &amp;lt;i&amp;gt;for non-SSL ports&amp;lt;/i&amp;gt; to the following:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;JANUS WEB &amp;lt;i&amp;gt;portname&amp;lt;/i&amp;gt; DISALLOW *&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
This rule requires a system administrator to explicitly define &amp;lt;var&amp;gt;ALLOW&amp;lt;/var&amp;gt; rules to enable users to access non-SSL ports.&lt;br /&gt;
The rule applies unless overridden by user-added rules. &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;blockquote class=&amp;quot;note&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;b&amp;gt;Note:&amp;lt;/b&amp;gt; To revert from this change in the JANUS DEFINE default and make the default &lt;br /&gt;
 non-SSL &amp;lt;var&amp;gt;ALLOW&amp;lt;/var&amp;gt; rule as it was in version 7.5 and earlier (&amp;lt;code&amp;gt;ALLOW *&amp;lt;/code&amp;gt;), turn on the 1 bit of the &amp;lt;var&amp;gt;[[WEBDFLT parameter|WEBDFLT]]&amp;lt;/var&amp;gt; parameter: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;RESET WEBDFLT=1&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Increase in pending accepts for Janus BPX ports===&lt;br /&gt;
The default number of pending accepts for Janus BPX server ports has been increased from 3 to 12, thus reducing the likelihood that a pending accept may fail with the message&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;MSIR.0019 Connection request rejected for port (port), MAXCON exceeded&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The actual number of pending accepts to be supported on the port can be set with the new parameter MAXPEND, set on the &amp;lt;var&amp;gt;[[JANUS_DEFINE|JANUS DEFINE]]&amp;lt;/var&amp;gt; command, where MAXPEND can vary from 3 up to a maximum value of 32. The change to the default value was enabled in V7.7 with the application of zap 77z269.&lt;br /&gt;
&lt;br /&gt;
===TCP listen backlog increased===&lt;br /&gt;
&lt;br /&gt;
The [[Program_Communication_facilities#LISTEN_call|TCP listen]] backlog has been increased from 16 to 1024 under z/OS.&lt;br /&gt;
&lt;br /&gt;
This update tells the TCP stack to queue up to 1024 of such requests up before dropping them, thus reducing, or in most cases eliminating, the likelihood of a connection request drop, other than in exceptional circumstances, such as a denial of service attack. This change was enabled in V7.7 with the application of zap 77z340.&lt;br /&gt;
&lt;br /&gt;
===Defer the freeing of XMLSCREEN input XML===&lt;br /&gt;
&lt;br /&gt;
The freeing of [[XMLSCREEN_and_NOXMLSCREEN_(JANUS_DEFINE_parameters)|XMLSCREEN]] input XML is now deferred until the next Read Screen or session termination. This means that if an application error is detected, the input XML can be retrieved with [[$Web_Input_Content|$Web_Input_Content]] and then logged for problem analysis. &lt;br /&gt;
&lt;br /&gt;
Prior to this release the XML received from the client is freed immediately after being used to set the input data for a Read Screen, rendering it unavailable for problem determination.&lt;br /&gt;
&lt;br /&gt;
This change is enabled in V7.7 with the application of zap 77z368.&lt;br /&gt;
&lt;br /&gt;
===XMLSCREEN and Janus Web Legacy blank stripping===&lt;br /&gt;
&lt;br /&gt;
xmlScreens and Janus Web Legacy screens now adhere to the same standard as standard screen processing in terms of stripping leading blanks from input fields defined as [[Full-screen_feature#DEBLANK_or_NODEBLANK_option|DEBLANK]] (either explicitly or implicitly).&lt;br /&gt;
&lt;br /&gt;
This change is enabled in V7.7 with the application of zap 77z400.&lt;br /&gt;
&lt;br /&gt;
===SSL input buffer size===&lt;br /&gt;
&lt;br /&gt;
The default value of [[SSLIBSIZE_(JANUS_DEFINE_parameter)|SSLIBSIZE]] has been increased to 16384 + 128, or 16512. This size should ensure correct communication with all TLS spec compliant applications. It is the maximum size allowed unless you use [[CUSTOM_parameter#Using_CUSTOM.3D.2818.29|CUSTOM=18]].    &lt;br /&gt;
&lt;br /&gt;
This changed is enabled in V7.7 with the application of zap 77z415.&lt;br /&gt;
&lt;br /&gt;
===Increasing LDAP buffers===&lt;br /&gt;
&lt;br /&gt;
The number of LDAP buffers allocated at startup can now be changed by setting the NLDAPBUF parameter in CCAIN. See below for details on [[#NLDAPBUF|NLDAPBUF]].&lt;br /&gt;
&lt;br /&gt;
===Increase URL length returned with $web_form_action===&lt;br /&gt;
With this release the maximum Janus Web Server incoming URL that can be handled by &amp;lt;var&amp;gt;$web_form_action&amp;lt;/var&amp;gt; is increased from 512 bytes to 1024 bytes. This change is enabled in V7.7 with the application of zap 77z424.&lt;br /&gt;
&lt;br /&gt;
===Maximum RBSIZE setting increased===&lt;br /&gt;
The maximum value for RBSIZE, set on the &amp;lt;var&amp;gt;[[JANUS DEFINE|JANUS DEFINE]]&amp;lt;/var&amp;gt; command, is now increased to 16777215 (previously the maximum was 65534). RBSIZE specifies the RPC or Request Buffer size.  On a Web port, the Janus request buffer holds browser request information such as header data, cookies, and form data. On other port types, it holds RPC input and output parameters. This change is enabled in V7.7 with the application of zap 77z427.&lt;br /&gt;
&lt;br /&gt;
==Debugger enhancements==&lt;br /&gt;
These enhancements apply to the Janus and TN3270 debuggers. &lt;br /&gt;
&lt;br /&gt;
===Access to exposed variables===&lt;br /&gt;
The debuggers can now view or watch the values of variables exposed to local routines/methods. Previously, any attempts to access an exposed variable would have displayed &amp;quot;%varname has no value&amp;quot; in the debugger session. (This feature is enabled in V7.7 with the application of zap 77z363.)&lt;br /&gt;
&lt;br /&gt;
===Subroutine or method display===&lt;br /&gt;
When execution pauses for a break point or runtime error, the subroutine or method being executed is indicated in the status area.  In addition, the source code line information available by right-clicking on a source line now also indicates the subroutine or method.&lt;br /&gt;
&lt;br /&gt;
==Performance enhancements==&lt;br /&gt;
&lt;br /&gt;
===MP/204 offload improvements===&lt;br /&gt;
Application code issuing the following SOUL statements will now now be fully offloadable:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;File Records In/On&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Remember&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt; &lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Position&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Sort Values&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;                                             &lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Reset Header/Trailer&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Find and Print Count&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Find All Values&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;For Each Value&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
the above improvements are also enabled in V7.7 with the application of zaps 77z419 and 77z420.&lt;br /&gt;
&lt;br /&gt;
===X3270OUT exit offloadable===&lt;br /&gt;
When running MP/204 (AMPSUBS&amp;gt;0) and using the [[Coding_SNA_Communications_Server_conversion_exit_routines#X3270OUT_.28convert_output_from_3270_format.29|X3270OUT]] exit to convert a 3270 output data stream to the appropriate device protocol, the exit can now run in parallel mode to improve performance. This change was enabled in V7.7 with the application of zap 77z313.&lt;br /&gt;
&lt;br /&gt;
The X3270OUT exit must be written to be re-entrant.&lt;br /&gt;
&lt;br /&gt;
==New and changed commands==&lt;br /&gt;
===DISPLAY ECF===&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;DISPLAY ECF {{ M | N | U } like ?} &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This new command displays details from ECF tables, or the current status of users accessing ECF modules.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;syntax&amp;quot;&amp;gt;D ECF M&amp;lt;/span&amp;gt; displays the contents of the module table. For example:&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;    D ECF M &lt;br /&gt;
    Module   Loadlib  Address:Length     Loaded@      Lastused@   #Calls  Flags &lt;br /&gt;
    QATUM13C PROGLIB 2FB91FB8:00000028 19023:121506 19023:121506 00000001 &lt;br /&gt;
    QATUM13B PROGLIB 2FE65000:00009C18 19023:121506 19023:121506 00000001 &lt;br /&gt;
    QATUM13A PROGLIB 2FE6EC18:00001CD8 19023:121506 19023:121506 00000001  &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
(flags may be D=deleted; S=shared; H=halted; I=Idle)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;syntax&amp;quot;&amp;gt;D ECF N&amp;lt;/span&amp;gt; displays contents of the name table. For example: &amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;    D ECF N&lt;br /&gt;
    Module   Logical-call-name &lt;br /&gt;
    QATUM13C MOD_QATUM13C &lt;br /&gt;
    QATUM13B MOD_QATUM13B &lt;br /&gt;
    QATUM13A MOD_QATUM13A &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;syntax&amp;quot;&amp;gt;D ECF U&amp;lt;/span&amp;gt; displays details of users currently accessing ECF modules. This is also the default option, and so &amp;lt;span class=&amp;quot;syntax&amp;quot;&amp;gt;D ECF&amp;lt;/span&amp;gt; will display the same output as &amp;lt;span class=&amp;quot;syntax&amp;quot;&amp;gt;D ECF U&amp;lt;/span&amp;gt;. For example:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;    D ECF U                           &lt;br /&gt;
    User# Userid     Module   Parmlen &lt;br /&gt;
    00002 ADMIN      --none--         &lt;br /&gt;
    00003 ADMIN      COBSAMP1 00000002&lt;br /&gt;
    00004 ADMIN      COBSAMP1 00000002 &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;syntax&amp;quot;&amp;gt;D ECF &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;function&amp;lt;/var&amp;gt; LIKE &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;?&amp;lt;/var&amp;gt; &amp;lt;/span&amp;gt; (where &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;?&amp;lt;/var&amp;gt; is a valid pattern) displays details for entities that match the specified pattern. The function is either M (modules), N (names), or U (users), and it defaults to U. So for example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;D ECF U L A&amp;lt;/p&amp;gt;&lt;br /&gt;
or&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;D ECF U L A*&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
displays details of ECF users whose names begin with A.&lt;br /&gt;
&lt;br /&gt;
===REGENERATE===&lt;br /&gt;
The &amp;lt;var&amp;gt;REGENERATE&amp;lt;/var&amp;gt; command can now be run in a multi-user environment by multiple users with system manager privileges. A new option USING is provided to specify the ddname of the input journal, so that the full syntax is now as follows:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;  REGENERATE [USING ddname] FILE filename [FROM dumpname | IGNORE]&lt;br /&gt;
  [TO {LAST UPDATE [BEFORE yy.ddd hh:mm:ss.th] | LAST CHECKPOINT [BEFORE yy.dd hh:mm:ss.th] &lt;br /&gt;
  | UPDATE number OF yy.ddd hh:mm:ss.th | CHECKPOINT yy.ddd hh:mm:ss.th} ]&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The default for the using ddname is CCAGEN, but any ddname may be used to allocate an input journal and used. For example:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;  ALLOCATE REGEN1 WITH SCOPE=SYSTEM DSN=PROD1.GDGJ OLD SEQUENTIAL GEN=+2&lt;br /&gt;
  REGENERATE USING REGEN1 FILE TEST&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It is the user&#039;s responsibility to ensure that the file being regenerated is not in use, and so prior to usage, &amp;lt;var&amp;gt;BUMP FILE&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;STOP FILE&amp;lt;/var&amp;gt; should be used to isolate usage against the file. If the file is in use, the REGEN will fail with these messages:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;  M204.1430: Failed to open file TEST&lt;br /&gt;
  M204.1436: Stopped processing file TEST  &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
$STATUS will now be set for &amp;lt;var&amp;gt;REGENERATE&amp;lt;/var&amp;gt; with the following values:&lt;br /&gt;
&amp;lt;blockquote&amp;gt;    &lt;br /&gt;
    0 - Success &amp;lt;br/&amp;gt;&lt;br /&gt;
    1 - No files were processed &amp;lt;br/&amp;gt;&lt;br /&gt;
    2 - At least one file stopped processing &amp;lt;br/&amp;gt;&lt;br /&gt;
    4 - A serious error occurred, REGEN failed &lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Similarly, &amp;lt;var&amp;gt;SETGRC&amp;lt;/var&amp;gt; may be used to get the return code and error message.&lt;br /&gt;
&lt;br /&gt;
==New and changed parameters==&lt;br /&gt;
&lt;br /&gt;
===ECMODS===&lt;br /&gt;
The new minimum value for ECMODS, the allowable number of ECF modules, is 1. Prior to V7.8 the minimum value was 0. This changed was enabled in V7.7 with the application of zap 77z306.&lt;br /&gt;
&lt;br /&gt;
===ECNAMES===&lt;br /&gt;
The new minimum value for ECNAMES, the allowable number of ECF module names, is 1. Prior to V7.8 the minimum value was 0. This changed was enabled in V7.7 with the application of zap 77z306.&lt;br /&gt;
&lt;br /&gt;
===ECPSIZE===&lt;br /&gt;
The new minimum value for ECPSIZE, the initial storage allocation for ECF parameters, is 1024. Prior to V7.8 the minimum value was 0. This changed was enabled in V7.7 with the application of zap 77z306.&lt;br /&gt;
&lt;br /&gt;
===ENQTIME===&lt;br /&gt;
Millisecond duration of automatic record locking retry wait.&lt;br /&gt;
&lt;br /&gt;
Prior to this change, if record locking conflicts occur frequently in a busy online, any user with a non-zero value for &amp;lt;var&amp;gt;[[ENQRETRY parameter|ENQRETRY]]&amp;lt;/var&amp;gt; will wait at least 3 seconds before the conflict is dealt with. This can degrade overall system performance.      &lt;br /&gt;
                                                         &lt;br /&gt;
The &amp;lt;var&amp;gt;[[ENQTIME parameter|ENQTIME]]&amp;lt;/var&amp;gt; parameter specifies the number of milliseconds waited for each record locking retry wait. ENQTIME can be between 1 and 60000, corresponding to a minimum of 1 millisecond and a maximum of 1 minute. The default value of ENQTIME is 3000 (3 seconds).            &lt;br /&gt;
                                                         &lt;br /&gt;
For example, with ENQTIME = 100 and ENQRETRY = 7, after a record locking conflict occurs the thread will retry 7 times with wait intervals of .1 seconds, and so within at most .7 seconds either the lock becomes available or the conflict triggers an On unit or cancels the request.     &lt;br /&gt;
                                                         &lt;br /&gt;
The ENQTIME parameter may also be reset with $ResetN. &lt;br /&gt;
&lt;br /&gt;
This new parameter was enabled in V7.7 with the application of zap 77z299.&lt;br /&gt;
&lt;br /&gt;
===EVALOPT===&lt;br /&gt;
The new &amp;lt;var&amp;gt;EVALOPT&amp;lt;/var&amp;gt; parameter controls the cancellation of a request on truncation of string data. The default value is 0, and currently there is just one setting, 1, which means &amp;quot;cancel a request if truncation of string data occurs.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
For example, with the default of 0 in place, the following code &amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;    %x is string len 1   &lt;br /&gt;
    %y is string len 2   &lt;br /&gt;
    %y = &#039;ab&#039;            &lt;br /&gt;
    %x = %y              &lt;br /&gt;
    printtext {~} = {%x} &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
would cause silent truncation, and give the result&lt;br /&gt;
    &amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;%x = a &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If &amp;lt;var&amp;gt;EVALOPT&amp;lt;/var&amp;gt; is set to 1, then the above code produces the following message:&lt;br /&gt;
    &amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;M204.0552: Variable too small for result &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and the request is cancelled.&lt;br /&gt;
&lt;br /&gt;
===LFSCB===&lt;br /&gt;
LFSCB, the length of the full screen buffer, now has a new minimum value of 8 ( the previous minimum was 0 ). This change has been enabled in v7.7 with the application of zap 77z042, and within V7.6 with the application of zap 76z393.&lt;br /&gt;
&lt;br /&gt;
===MAXPRE, MAXBOUT, MAXSUBT===&lt;br /&gt;
&amp;lt;p&amp;gt;Introduced in zap 77z257.&amp;lt;/p&amp;gt;&lt;br /&gt;
The new &amp;lt;var&amp;gt;MAXPRE&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;MAXBOUT&amp;lt;/var&amp;gt;, and &amp;lt;var&amp;gt;MAXSUBT&amp;lt;/var&amp;gt; parameters can be used to cancel a runaway transaction and prevent it from filling the checkpoint data set. &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;MAXPRE&amp;lt;/var&amp;gt;:  Maximum number of pre-images per transaction.  &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;MAXBOUT&amp;lt;/var&amp;gt;: Maximum number of backout pages per transaction. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;MAXSUBT&amp;lt;/var&amp;gt;: Maximum number of subtransaction checkpoints that a transaction can span.&amp;lt;/li&amp;gt;&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;Each new parameter defaults to unlimited. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;If a parameter value is set, a transaction is cancelled if that value is exceeded, and the following message is displayed:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;M204.0524: Maximum number (&amp;lt;i&amp;gt;num&amp;lt;/i&amp;gt;) of &amp;lt;i&amp;gt;parameter&amp;lt;/i&amp;gt; exceeded.&amp;lt;/p&amp;gt;&lt;br /&gt;
where &amp;lt;i&amp;gt;num&amp;lt;/i&amp;gt; is the value set for &amp;lt;i&amp;gt;parameter&amp;lt;/i&amp;gt; (&amp;lt;var&amp;gt;MAXPRE&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;MAXBOUT&amp;lt;/var&amp;gt;, or &amp;lt;var&amp;gt;MAXSUBT&amp;lt;/var&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
===NLDAPBUF===&lt;br /&gt;
This new parameter allows the number of LDAP buffers allocated during startup to be set in CCAIN. The default value is 2, and the settable value can range from 0 to 65535.&lt;br /&gt;
&lt;br /&gt;
===PUPDTH (new minimum value)===&lt;br /&gt;
If a user sets the &amp;lt;var&amp;gt;[[PUPDTH parameter|PUPDTH]]&amp;lt;/var&amp;gt; parameter to 0, it will now automatically be increased to 1, its minimum value.&lt;br /&gt;
&lt;br /&gt;
===SERV4G===&lt;br /&gt;
This parameter allows testing of server tables that span a 4-gigabyte boundary. For example, if &amp;lt;var&amp;gt;SERV4G&amp;lt;/var&amp;gt; is &amp;lt;code&amp;gt;X&#039;FFFFF000&#039;&amp;lt;/code&amp;gt;, each ATB server will begin at &amp;lt;code&amp;gt;XX_FFFFF000&amp;lt;/code&amp;gt;. If SERV4G is &amp;lt;code&amp;gt;X&#039;FFFF0000&#039;&amp;lt;/code&amp;gt;, each ATB server will begin at &amp;lt;code&amp;gt;XX_FFFF0000&amp;lt;/code&amp;gt;. &amp;lt;code&amp;gt;XX&amp;lt;/code&amp;gt; is determined by the storage available on the system. The parameter is set in CCAIN.&lt;br /&gt;
&lt;br /&gt;
The contents of the ATB server are specified by using the &amp;lt;var&amp;gt;[[SERVGA parameter|SERVGA]]&amp;lt;/var&amp;gt; parameter.&lt;br /&gt;
&lt;br /&gt;
For example, if you want VTBL to span the 4G boundary, you can use these settings: &amp;lt;code&amp;gt;SERV4G=X&#039;FFFFF000&#039;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;SERVGA=X&#039;00040000&#039;&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;LVTBL=200 (6400 bytes, X&#039;1900&#039;)&amp;lt;/code&amp;gt;. This will force each server&#039;s VTBL to begin at &amp;lt;code&amp;gt;XX_FFFFF000&amp;lt;/code&amp;gt; and end at &amp;lt;code&amp;gt;XX+1_00000900&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===WEBDFLT===&lt;br /&gt;
At V7.7, the default access rule for non-SSL ports was changed from ALLOW * to DISALLOW *, meaning that unless any ALLOW rules were in place resulting in a login/password prompt, the port couldn&#039;t be accessed. The new &amp;lt;var&amp;gt;[[WEBDFLT_parameter|WEBDFLT]]&amp;lt;/var&amp;gt; parameter may be set to 1 for reversion to the old default of ALLOW *. Under V7.7, this new parameter was enabled with the application of zap 77z090. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;var&amp;gt;RESET WEBDFLT&amp;lt;/var&amp;gt; requires system administrator privileges. It is recommended to reset the 1 bit of &amp;lt;var&amp;gt;WEBDFLT&amp;lt;/var&amp;gt; to zero after issuing a series of &amp;lt;var&amp;gt;JANUS DEFINE&amp;lt;/var&amp;gt; commands which need WEBDFLT=1, as in the CCAIN input stream.&lt;br /&gt;
&lt;br /&gt;
==New and changed statistics==&lt;br /&gt;
===MPR, MBO, MCP, and RCV===&lt;br /&gt;
Introduced in zap 77z257.&lt;br /&gt;
&amp;lt;p&amp;gt;These statistics provide high water mark transaction information. (Since-last values will not be available until V78 GA.)&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;They are useful in conjunction with the &amp;lt;var&amp;gt;MAXPRE&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;MAXBOUT&amp;lt;/var&amp;gt;, and &amp;lt;var&amp;gt;MAXSUBT&amp;lt;/var&amp;gt; parameters. &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
User/system statistics:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;MPR: High water mark of transaction pre-images. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;MBO: High water mark of transaction backout pages. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;MCP: High water mark of transaction chkpoint spans. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
System statistics: &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;RCV: Number of blocks needed for subtransaction recovery &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt; &lt;br /&gt;
&amp;lt;p class=&amp;quot;note&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Notes:&amp;lt;/b&amp;gt; M204.0843 now displays the RCV statistic for subtransaction checkpoints.&lt;br /&gt;
The size of recovery checkpoint must be greater than the sum of the last RCV value plus the number of records in [[System_and_media_recovery#RESTART_recovery_considerations_for_sub-transaction_checkpoints|RESTART and RESTARTS]].&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
===DKWTS and DKWTMICS===&lt;br /&gt;
Introduced in zap 77z7289.&lt;br /&gt;
&amp;lt;p&amp;gt;The new system statistics DKWTS (DisK WaiTs) and DKWTMICS (DisK WaiT MICroSeconds) collect data to provide rough disk I/O service time numbers.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
DKWTS shows the number of disk I/O waits. DKWTMICS shows the total wait time for those waits in microseconds. Dividing the difference in DKWTMICS by the difference in DKWTS over an interval provides the average disk I/O wait time in microseconds.              &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;note&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Notes:&amp;lt;/b&amp;gt; &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The wait time does include internal Model 204 scheduler delays, so on a CPU bound Model 204 system, the service times calculated from DKWTS and DKWTMICS are likely to be an overestimate of actual service times.&amp;lt;/li&amp;gt;  &lt;br /&gt;
                                                                    &lt;br /&gt;
&amp;lt;li&amp;gt;DKWTS and DKWTMICS are not available in SirMon; use [[MONITOR_command|MONITOR]] SYSTEM STATISTICS to view these statistics.&amp;lt;/li&amp;gt;&amp;lt;/ul&amp;gt;  &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Compatibility issues==&lt;br /&gt;
===&amp;lt;b id=&amp;quot;listNewInit&amp;quot;&amp;gt;&amp;lt;/b&amp;gt;$ListNew cannot be used in Initial clause===&lt;br /&gt;
It is now a compilation error if &amp;lt;var&amp;gt;$ListNew&amp;lt;/var&amp;gt; is attempted to be used in the &amp;lt;var&amp;gt;Initial&amp;lt;/var&amp;gt; clause of a &lt;br /&gt;
[[Using_variables_and_values_in_computation#Declare_statements_for_.25variables|declaration statement]].&lt;br /&gt;
&amp;lt;p&amp;gt;This change is propagated by zap maintenance to versions 7.5 (zap 75Z487), 7.6 (zap 76Z514), and 7.7 (zap 77z281) of Model 204.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote class=&amp;quot;note&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Note:&amp;lt;/b&amp;gt; Strictly speaking, this would not be considered a compilation error, because previously although &amp;lt;code&amp;gt;..&amp;amp;nbsp;Initial($ListNew)&amp;lt;/code&amp;gt; did not produce a compilation error, in almost all circumstances it would produce a snap if the initialized %variable were used with some other &amp;lt;var&amp;gt;$List&amp;lt;i&amp;gt;xxx&amp;lt;/i&amp;gt;&amp;lt;/var&amp;gt; invocation.&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Restricting the use of the CUSTOM=38 setting===&lt;br /&gt;
The [[CUSTOM parameter|CUSTOM=38]] parameter setting, introduced at V7.5, inadvertently provided System Manager privileges to all users via the RESET command. This CUSTOM setting is now restricted to the RESETting of the LAUDIT parameter.&lt;br /&gt;
&lt;br /&gt;
===Disabling of Closure support===&lt;br /&gt;
Due to a number of bugs related to Closure support, introduced at V7.7, this feature, which can best be described as exposed methods assigned to method variables, has been disabled in this release. This change was also made to V7.7 with application of zap 77z119.&lt;br /&gt;
&lt;br /&gt;
===Password delimiter enforced===&lt;br /&gt;
When using &amp;lt;var&amp;gt;IFSTRTN&amp;lt;/var&amp;gt; to log on to a Model 204 online from an IFAM2 application, both the logonid and password must be followed by a semicolon, which is the delimiter. For example:      &lt;br /&gt;
                                      &lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;CALL IFSTRTN(RC,&#039;logonid;password;&#039;...)&amp;lt;/p&amp;gt;&lt;br /&gt;
                 &lt;br /&gt;
If a semicolon does not follow the password string, the following message will now be issued:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;M204.2964: Password missing or too long &amp;lt;/p&amp;gt;                 &lt;br /&gt;
                                                         &lt;br /&gt;
Previously, a semicolon following the password was not required and the first blank served as a password delimiter.  However, as of V7.7, embedded blanks are valid password characters and a semicolon is now required to delimit the password.&lt;br /&gt;
&lt;br /&gt;
This change has also been enabled in V7.7 with the application of zap 77z231.&lt;br /&gt;
&lt;br /&gt;
===PAGESZ parameter validated===&lt;br /&gt;
Previously it was possible to set the PAGESZ parameter to any value, although Model 204 internally supports one page size of 6184, and any deviation from this value would have led to problems during file creation. The value of this parameter is now controlled, such that setting it to any value other than 6184 will generate an M204.1149 message with the parameter being reset to 6184.&lt;br /&gt;
&lt;br /&gt;
===ECPRIV and the IDCAMS facility===&lt;br /&gt;
At V7.7 a security loophole was closed, whereby all ECF modules were run under external-authorizer profile of the calling user. Previously any ECF tasks were run under the owning job&#039;s external-authorizer profile, and in order for certain sites to retain that ability, a new setting of ECPRIV, value 4, was introduced to retain the ability to run ECF tasks using the job&#039;s security profile. &lt;br /&gt;
&lt;br /&gt;
The ECPRIV 4 setting potentially introduced a security loophole when calling the IDCAMS interface, based upon what the IDCAMS utility is able to do at a system level. Consequently as of this release, the ECPRIV 4 setting will be ignored when calling the IDCAMS facility via ECF, and such IDCAMS processes will always use the calling user&#039;s security profile. Any existing jobs that use ECF to call the IDCAMS utility with the ECFPRIV 4 bit set should be checked to ensure that the calling user&#039;s security profile still satisfies the job&#039;s requirements.&lt;br /&gt;
&lt;br /&gt;
===TCPOPTS is view-only===&lt;br /&gt;
In previous versions the &amp;lt;var&amp;gt;TCPOPTS&amp;lt;/var&amp;gt; parameter, which identifies the type of IP addressing in use (v4 or v6), was resetable, although it was always documented as a view-only parameter. The parameter is now handled as a view-only parameter, and any attempts to reset the parameter will result in the following message:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;gt;   M204.1123: Parameter TCPOPTS not reset&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===ZHPF command can only be issued by a system manager===&lt;br /&gt;
In previous versions it was possible to issue the ZHPF command without being logged on. From this release onwards, a user would have to be logged on with system manager privileges to be able to issue this command.&lt;br /&gt;
&lt;br /&gt;
Additionally, the command output will now only  display results for currently open files.&lt;br /&gt;
&lt;br /&gt;
This changes has been enabled in v7.7 with the application of zap 77z264.&lt;br /&gt;
&lt;br /&gt;
===Terminal MODEL reset failure===&lt;br /&gt;
If a reset of the terminal MODEL parameter fails due to an undersized output page buffer, then in addition to the existing messages that inform the user of this failure:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;gt;    M204.1875 UNABLE TO RESET MODEL TO %C &lt;br /&gt;
    M204.1123: Parameter MODEL not reset&amp;lt;/p&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
the following message will now be issued:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;gt;    M204.1008: LOUTPB must be increased to at least &amp;lt;number&amp;gt; &amp;lt;/p&amp;gt;&lt;br /&gt;
                                                         &lt;br /&gt;
where &amp;lt;number&amp;gt; is the minimum value of LOUTPB necessary to support the terminal model.&lt;br /&gt;
&lt;br /&gt;
This change is enabled in V7.7 with the application of zap 77z309.&lt;br /&gt;
&lt;br /&gt;
==Notes for system manager and installer==&lt;br /&gt;
===CRAM SVC installation is deprecated===&lt;br /&gt;
The CRAM SVC installation has been deprecated as of version 7.5. &amp;lt;br /&amp;gt;Installation of CRAM-XDM is described as part of the [[Model 204 installation]].&lt;br /&gt;
===Authorization and maintenance zaps===&lt;br /&gt;
When you download Rocket M204 product object files, all relevant authorization keys and all current maintenance zaps are pre-applied to the object files as part of the download process.&lt;br /&gt;
&lt;br /&gt;
==New and changed messages==&lt;br /&gt;
&lt;br /&gt;
See [[New and updated messages in Model 204 version 7.8|New and updated messages in Model 204 version 7.8]] for details.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category: Release notes]]&lt;/div&gt;</summary>
		<author><name>ELowell</name></author>
	</entry>
	<entry>
		<id>https://m204wiki.rocketsoftware.com/index.php?title=Release_notes_for_Model_204_version_7.8&amp;diff=117733</id>
		<title>Release notes for Model 204 version 7.8</title>
		<link rel="alternate" type="text/html" href="https://m204wiki.rocketsoftware.com/index.php?title=Release_notes_for_Model_204_version_7.8&amp;diff=117733"/>
		<updated>2019-12-11T22:17:51Z</updated>

		<summary type="html">&lt;p&gt;ELowell: /* New in this release */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
These release notes list the enhancements and other changes contained in Model 204 version 7.8. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;&amp;lt;b&amp;gt;******THIS IS A DRAFT DOCUMENT.******&amp;lt;/b&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
These release notes list the enhancements and other changes contained in Model 204 version 7.8, &amp;lt;b&amp;gt;&amp;lt;i&amp;gt;which is still in development&amp;lt;/i&amp;gt;&amp;lt;/b&amp;gt;. Until the commercial release of the software, Rocket reserves the right to add to, remove, or change anything described herein. &lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
These release notes contain installation and features information for the Rocket Model 204 version 7.8 release.&lt;br /&gt;
Before beginning your installation, please read through this information about product installation and changes.&lt;br /&gt;
&lt;br /&gt;
==New in this release==&lt;br /&gt;
The table below cites some highlights of Model&amp;amp;nbsp;204 version 7.8. For a full list of features, refer to the Table of Contents. &lt;br /&gt;
&amp;lt;p&amp;gt;See also the [[#Compatibility Issues|Compatibility]] section for possible issues.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;tr class=&amp;quot;head&amp;quot;&amp;gt;&amp;lt;th&amp;gt;Category&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Feature&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;SOUL&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The new [[#AmIndependent method|AmIndependent]] method returns TRUE for daemons spawned by RunIndependently.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The Object class now supports the [[#Support for copying Object class objects|copy and deepCopy methods]].&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Janus Web&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[[#Web Sockets|Janus Web Sockets]] are now supported.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td nowrap&amp;gt;Networking&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Note:&amp;lt;/b&amp;gt; The two-phase commit and commit exits features are licensed and purchased separately from Model 204.&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Two-phase commit. A Model 204 online can now be configured to use two-phase commit (2PC). The Janus internal socket API is used for the calls to the coordinator. JANUS commands are used for all 2PC configuration. A new JANUS port type has been added, 2PC.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Commit exits are now supported. The commit exit runs within the APSY, which is defined by the &amp;lt;var&amp;gt;COMMITX&amp;lt;/var&amp;gt; parameter and uses normal APSY processing.  &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;ECF tables&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The new &amp;lt;var&amp;gt;DISPLAY ECF&amp;lt;/var&amp;gt; command and &amp;lt;var&amp;gt;EXTERNAL REMOVE&amp;lt;/var&amp;gt; statement enable more efficient management of [[#Managing ECF tables more efficiently|ECF tables]].&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Performance&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[[#MP/204 offload improvements|MP/204 offload improvements]] -- application code for these SOUL statements is now fully offloadable: &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;File Records In/On&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Remember&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Position&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Sort Values&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Reset Header/Trailer&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Find and Print Count&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Find All Values&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;For Each Value&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Security&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;CA-Top Secret can [[#CA-Top Secret can disallow CCASTAT logins|disallow CCASTAT logins]].&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[[#DEFUSER can specify a jobname not authorized to access M204|DEFUSER]] can specify a jobname not authorized to access M204.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td nowrap&amp;gt;System enhancements&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The &amp;lt;var&amp;gt;MONITOR USERS&amp;lt;/var&amp;gt; command output displays [[#New wait types for daemon/master waits|two new wait types]].&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td nowrap&amp;gt;AUDIT204 enhancements&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The new TIMEHH parameter on the &amp;lt;var&amp;gt;[[#FORMAT command|FORMAT]]&amp;lt;/var&amp;gt; command of the AUDIT204 utility provides greater time stamp precision.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td nowrap&amp;gt;New commands&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;[[#DISPLAY ECF|DISPLAY ECF]]&amp;lt;/var&amp;gt; displays details from ECF tables, or the current status of users accessing ECF modules.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td nowrap&amp;gt;New parameters&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;[[#ENQTIME|ENQTIME]]&amp;lt;/var&amp;gt; specifies the number of milliseconds waited for each record locking retry wait.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;[[#EVALOPT|EVALOPT]]&amp;lt;/var&amp;gt; controls the cancellation of a request on truncation of string data.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;[[#MAXPRE, MAXBOUT, MAXSUBT|MAXPRE, MAXBOUT, and MAXSUBT]]&amp;lt;/var&amp;gt; can be used to cancel a runaway transaction and prevent it from filling the checkpoint data set.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;[[#NLDAPBUF|NLDAPBUF]]&amp;lt;/var&amp;gt; allows the number of LDAP buffers allocated during startup to be set in CCAIN.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;[[#SERV4G|SERV4G]]&amp;lt;/var&amp;gt; allows testing of server tables that span a 4-gigabyte boundary.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;[[#WEBDFLT|WEBDFLT]]&amp;lt;/var&amp;gt; changes the default JANUS WEB ALLOW rule back to ALLOW.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td nowrap&amp;gt;Debuggers&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The debuggers can now view or watch the values of [[#Access to exposed variables|variables exposed to local routines/methods]].&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;At breakpoints, the debuggers now [[#Subroutine or method display|display the subroutine or method]] where execution stopped.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td nowrap&amp;gt;User/system statistics&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;[[#MPR, MBO, MCP, and RCV|MPR, MBO, MCP, and RCV]]&amp;lt;/var&amp;gt; provide high water mark transaction information in conjunction with the &amp;lt;var&amp;gt;MAXPRE&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;MAXBOUT&amp;lt;/var&amp;gt;, and &amp;lt;var&amp;gt;MAXSUBT&amp;lt;/var&amp;gt; parameters. &lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[[#DKWTS and DKWTMICS|New system statistics]] DKWTS (DisK WaiTs) and DKWTMICS (DisK WaiT MICroSeconds) collect data to provide rough disk I/O service time numbers.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Operating system and hardware requirements==&lt;br /&gt;
&lt;br /&gt;
===Operating system requirements===&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;IBM z/OS versions supported:&amp;lt;/b&amp;gt; &lt;br /&gt;
  &amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;All IBM supported releases up to and including z/OS 2.3. &amp;lt;br /&amp;gt;(For z/OS 2.2, see [[IBM z/OS 2.2 PTF requirement]].)&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;p&amp;gt;Version 1.07 is sufficient for all functionality except for the following features:&amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;ul&amp;gt;&lt;br /&gt;
    &amp;lt;li&amp;gt;zHPF support requires version [[IBM z/OS 2.1 compatibility issue|2.1]].&amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;li&amp;gt;Large (1 MB) page support requires version 1.9.&amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;li&amp;gt;Extended address volumes (EAV) requires version 1.12.&amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;/ul&amp;gt;&lt;br /&gt;
  &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
On z/OS, Model 204 release 7.8 operates as an APF authorized load module, as required by many 7.8 features. &amp;lt;br /&amp;gt;&lt;br /&gt;
To run Model 204 unauthorized, [[Contacting Rocket Software Technical Support|contact Technical Support]].&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;IBM z/VM versions supported:&amp;lt;/b&amp;gt; &lt;br /&gt;
  &amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;All IBM supported releases up to and including z/VM 6.4.&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;IBM z/VSE versions supported:&amp;lt;/b&amp;gt;&lt;br /&gt;
  &amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;All IBM supported releases up to and including z/VSE 6.1.&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Hardware requirements===&lt;br /&gt;
 &lt;br /&gt;
In general, Model 204 version 7.8 requires the IBM z/890 or above processor.&lt;br /&gt;
&amp;lt;p&amp;gt;However, the IBM z10 or above processor is required for the following features:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;large (1 MB) page support&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;IBM&#039;s High Performance FICON (zHPF) support&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Connect&amp;lt;sup&amp;gt;&amp;amp;#9733;&amp;lt;/sup&amp;gt; compatibility with Model 204===&lt;br /&gt;
&lt;br /&gt;
Connect&amp;lt;span class=&amp;quot;superstar&amp;quot;&amp;gt;&amp;amp;#9733;&amp;lt;/span&amp;gt; version 7.5 or 7.7 is compatible with Model 204 version 7.8.&lt;br /&gt;
&lt;br /&gt;
For more information on Connect&amp;lt;span class=&amp;quot;superstar&amp;quot;&amp;gt;&amp;amp;#9733;&amp;lt;/span&amp;gt; installation, see the [[:Category:Connect*|Connect&amp;lt;span class=&amp;quot;superstar&amp;quot;&amp;gt;&amp;amp;#9733;&amp;lt;/span&amp;gt; wiki pages]].&lt;br /&gt;
&lt;br /&gt;
==SOUL (User Language) enhancements==&lt;br /&gt;
===AmIndependent method===&lt;br /&gt;
The &amp;lt;var&amp;gt;AmIndependent&amp;lt;/var&amp;gt; method returns TRUE for daemons spawned by &amp;lt;var&amp;gt;[[RunIndependently_(Daemon_subroutine)|RunIndependently]]&amp;lt;/var&amp;gt;. (The action of &amp;lt;var&amp;gt;[[AmDaemon_(Daemon_property)|AmDaemon]]&amp;lt;/var&amp;gt; remains unchanged.)&lt;br /&gt;
&lt;br /&gt;
The following table shows the values returned by &amp;lt;var&amp;gt;AmIndependent&amp;lt;/var&amp;gt; versus &amp;lt;var&amp;gt;AmDaemon&amp;lt;/var&amp;gt; for different daemon types:&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Type&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;AmDaemon&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;AmIndependent&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;$COMBG&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;False&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;False&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Independent daemon&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;False&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;True&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Other daemon&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;True&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;False&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Web, etc.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;False&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;False&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===$ProcOpn===&lt;br /&gt;
&amp;lt;var&amp;gt;[[$ProcOpn|$ProcOpn]]&amp;lt;/var&amp;gt; now supports the opening of a procedure with an all-numeric name, and including a leading zero, such as:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;%result = $procOpn(&#039;0123&#039;, &#039;MYFILE&#039;)&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Support for such procedure names was initially introduced at V7.7, and this feature of &amp;lt;var&amp;gt;$ProcOpn&amp;lt;/var&amp;gt; is also enabled in V7.7 with the application of zap 77z054.&lt;br /&gt;
&lt;br /&gt;
===Allow parentheses to surround a boolean enumeration object===&lt;br /&gt;
The following sample code:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;   begin                                       &lt;br /&gt;
   variables are undefined                  &lt;br /&gt;
   %isValid is boolean initial (True)       &lt;br /&gt;
   if (%isValid) then                  &lt;br /&gt;
      print &#039;in IF&#039;                            &lt;br /&gt;
   end if                                   &lt;br /&gt;
   end   &amp;lt;/p&amp;gt;      &lt;br /&gt;
&lt;br /&gt;
will now compile and run successfully, since this syntax: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;if (%isValid) then &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
is logically equivalent to this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;if %isValid then &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Prior to V7.8 the presence of parentheses surrounding the boolean enumeration object would have caused a compilation error. This change is enabled in V7.7 with the application of zap 77z370.&lt;br /&gt;
&lt;br /&gt;
===Support for copying Object class objects===&lt;br /&gt;
The Object class now supports the copy and deepCopy methods. For example, an Object object can be copied as follows:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;   begin               &lt;br /&gt;
   %x is object object &lt;br /&gt;
   %y is object object &lt;br /&gt;
   %y = new            &lt;br /&gt;
   %x = %y:copy        &lt;br /&gt;
   end &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This change is enabled in v7.7 with the application of zap 77z076, and within V7.6 with the application of zap 76z412.&lt;br /&gt;
&lt;br /&gt;
===Assignment of enumeration values to method variables===&lt;br /&gt;
Enumerations values can now be assigned to method variables whose result is an enumeration. So, for example, the following code:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;   begin                                               &lt;br /&gt;
   enumeration colour                                  &lt;br /&gt;
      public                                           &lt;br /&gt;
         value red                                     &lt;br /&gt;
         value white                                   &lt;br /&gt;
         value blue                                    &lt;br /&gt;
      end public                                       &lt;br /&gt;
   end enumeration                                     &lt;br /&gt;
   %func    is function getColour is enumeration colour&lt;br /&gt;
   local function getColour is enumeration colour      &lt;br /&gt;
      return blue                                      &lt;br /&gt;
   end function                                        &lt;br /&gt;
   %func    = getColour                                &lt;br /&gt;
   %func    = (colour):red                             &lt;br /&gt;
   printText {~=%(Local):(%func)}                      &lt;br /&gt;
   end  &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
will produce this result:&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt; %(Local):(%func)=red &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
whereas previously this line:   &lt;br /&gt;
&lt;br /&gt;
  &amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt; %func    = (colour):red &amp;lt;/p&amp;gt;   &lt;br /&gt;
&lt;br /&gt;
would have been rejected with this message:&lt;br /&gt;
&lt;br /&gt;
   &amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;MSIR.0993: Assignment invalid: mismatch between method and method variable &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This change is enabled in V7.7 with the application of zap 77z128.&lt;br /&gt;
&lt;br /&gt;
===Optional output method parameters===&lt;br /&gt;
Prior to this release output parameters could not be optional or have default values. In this release output parameters can be specified as &amp;lt;var&amp;gt;Optional&amp;lt;/var&amp;gt;, and a default value can be specified with &amp;lt;var&amp;gt;Default&amp;lt;/var&amp;gt;. One related change is that if a &amp;lt;var&amp;gt;Len&amp;lt;/var&amp;gt; value is specified with &amp;lt;var&amp;gt;Optional&amp;lt;/var&amp;gt; or &amp;lt;var&amp;gt;Default&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;Output&amp;lt;/var&amp;gt;, it indicates the length of the hidden target for the output parameter if none was passed. For all other &amp;lt;var&amp;gt;Output&amp;lt;/var&amp;gt; parameters, &amp;lt;var&amp;gt;Len&amp;lt;/var&amp;gt; is meaningless, just as it was before Model 204 V7.8. The following is an example of the use of an optional output parameter:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;function getRemote( -&lt;br /&gt;
   %target is string len 32, %errorReason is string len 80 optional output -&lt;br /&gt;
) is float&lt;br /&gt;
  ...&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
In this example, if &amp;lt;code&amp;gt;%errorReason&amp;lt;/code&amp;gt; is not specified in a call and then set to a value longer than 80 bytes it wil be truncated to 80 bytes. However, if a string of a different length is passed, the length of that string determines truncation behavior.&lt;br /&gt;
&lt;br /&gt;
==External Call Facility enhancements==&lt;br /&gt;
===Managing ECF tables more efficiently===&lt;br /&gt;
The are two new features to help manage ECF tables more efficiently, avoid conditions where the table can fill, and prevent the definition of further entities.&lt;br /&gt;
&lt;br /&gt;
The first feature is the new &amp;lt;var&amp;gt;DISPLAY ECF&amp;lt;/var&amp;gt; command, which displays the contents of ECF tables and also the current status of users accessing ECF modules. See more details of the &amp;lt;var&amp;gt;[[#DISPLAY ECF|DISPLAY ECF]]&amp;lt;/var&amp;gt; command below.&lt;br /&gt;
&lt;br /&gt;
The second feature is a new &amp;lt;var&amp;gt;EXTERNAL REMOVE&amp;lt;/var&amp;gt; statement with the following syntax:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;EXTERNAL REMOVE &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;modulename&amp;lt;/span&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This statement causes the entry for the named module to be removed from the module table. The table entry is then placed on a free chain of entries and can be reused by issuing the &amp;lt;var&amp;gt;EXTERNAL MODULE&amp;lt;/var&amp;gt; statement. This allows the module table to be managed with redundant entries removed, without having to recycle the ONLINE.&lt;br /&gt;
&lt;br /&gt;
An &amp;lt;var&amp;gt;EXTERNAL REMOVE&amp;lt;/var&amp;gt; statement will return &amp;lt;code&amp;gt;$status/$statusd&amp;lt;/code&amp;gt; values of &amp;lt;code&amp;gt;0/0&amp;lt;/code&amp;gt;, and most other status values that can be returned by the &amp;lt;var&amp;gt;EXTERNAL REMOVE&amp;lt;/var&amp;gt; statement are already documented in the ECF return codes table. If an &amp;lt;var&amp;gt;EXTERNAL REMOVE&amp;lt;/var&amp;gt; is attempted against a module that is currently being called (in use), then &amp;lt;code&amp;gt;$status/$statusd&amp;lt;/code&amp;gt; will return the values &amp;lt;code&amp;gt;20/1&amp;lt;/code&amp;gt; (module unavailable).&lt;br /&gt;
&lt;br /&gt;
==System enhancements==&lt;br /&gt;
&lt;br /&gt;
===New wait types for daemon/master waits===&lt;br /&gt;
&lt;br /&gt;
Two new wait types, viewable on the &amp;lt;var&amp;gt;[[MONITOR_command|MONITOR]] USERS&amp;lt;/var&amp;gt; command output, have been implemented as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;57&amp;lt;/code&amp;gt; - Means a daemon thread waiting for its master thread  &amp;lt;br /&amp;gt;     &lt;br /&gt;
&amp;lt;code&amp;gt;58&amp;lt;/code&amp;gt; - Means a master thread waiting for one of its daemon threads&lt;br /&gt;
&lt;br /&gt;
This change is enabled in V7.7 with the application of zap 77z410.&lt;br /&gt;
&lt;br /&gt;
===Snap formatting changes===&lt;br /&gt;
Date/time stamps in the page headers of snaps will now be shown in normal format, rather than in julian format as in previous versions. So in the following example, a particular snap header under v7.7 or previous versions would show as: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;SNAPID    1   19226.060155  M204.0022: Bug .. nnnnn               PAGE     1 &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
whereas the same snap header under v7.8 would show as: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;SNAPID    1  2019/08/14 06:01:06   M204.0022: Bug .. nnnnn        PAGE     1 &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Also, due to improvements in handling trailing blanks in snap output, a snap generated under v7.8 should be marginally smaller than the same snap generated under previous versions, assuming the same SNAPCTL settings.&lt;br /&gt;
&lt;br /&gt;
===Call stack trace for problem diagnosis===&lt;br /&gt;
A  call stack trace is now provided to help diagnose and resolve common errors. To enable the stack trace, do either of the following: &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Set the &amp;lt;var&amp;gt;[[SIRFACT parameter|SIRFACT]] X&#039;01&#039;&amp;lt;/var&amp;gt; bit.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Set the &amp;lt;var&amp;gt;[[DEBUGUL parameter|DEBUGL]]&amp;lt;/var&amp;gt; parameter. Note that the &amp;lt;var&amp;gt;DEBUGUL&amp;lt;/var&amp;gt; approach will introduce extra QTBL overhead. &amp;lt;p&amp;gt;(&amp;lt;var&amp;gt;DEBUGUL&amp;lt;/var&amp;gt; provides a similar facility with an include trace of procedures leading to the error, but this might not be potentially as useful as the call trace.)&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt; &lt;br /&gt;
&lt;br /&gt;
The call stack trace can assist in diagnosing run-time errors that might occur, as illustrated by the following &amp;quot;Variable too small for result&amp;quot; and &amp;quot;MBSCAN exceeded&amp;quot; examples.&lt;br /&gt;
&lt;br /&gt;
====Variable too small for result====&lt;br /&gt;
When the stack trace is enabled, a &amp;quot;variable too small&amp;quot; error results in the following message:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;M204.2966: Error at line n, procedure &#039;&#039;procname&#039;&#039; in file &#039;&#039;procfile&#039;&#039;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
which identifies the line within a procedure where the error is occurring, in addition to the usual message:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;M204.0552: Variable too small for result&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Any subsequent M204.2966 messages indicate the point in the code from where the code in error was called. For example, a stack of three subroutine calls leading to a &amp;quot;variable too small&amp;quot; error might result in the following messaging:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;   M204.0552: Variable too small for result                             &lt;br /&gt;
   M204.2966: Error at line 9, procedure MYPROC.LEVEL4 in file MYPROC   &lt;br /&gt;
   M204.2966: Called from line 5, procedure MYPROC.LEVEL3 in file MYPROC&lt;br /&gt;
   M204.2966: Called from line 5, procedure MYPROC.LEVEL2 in file MYPROC&lt;br /&gt;
   M204.2966: Called from line 5, procedure MYPROC.LEVEL1 in file MYPROC &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This information should help in diagnosing the problem. &lt;br /&gt;
&lt;br /&gt;
If the error occurs within a command level program rather than a procedure, then the M204.2966 message is replaced by an M204.2967 message, and a similar error condition to the above with a preceding call stack might be audited as follows:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;   M204.0552: Variable too small for result              &lt;br /&gt;
   M204.2967: Error at line 14 of command level program  &lt;br /&gt;
   M204.2967: Called from line 5 of command level program&lt;br /&gt;
   M204.2967: Called from line 3 of command level program &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If neither &amp;lt;var&amp;gt;SIRFACT X&#039;01&#039;&amp;lt;/var&amp;gt; nor &amp;lt;var&amp;gt;DEBUGUL&amp;lt;/var&amp;gt; is set, then the &amp;quot;variable too small&amp;quot; error produces the following messages:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;   M204.0552: Variable too small for result &lt;br /&gt;
   M204.2968: Error: no debug info &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====MBSCAN exceeded====&lt;br /&gt;
Similarly to the handling of the &amp;quot;variable too small for result&amp;quot; error, the call stack can also be used to diagnose errors where the value of &amp;lt;var&amp;gt;[[MBSCAN parameter|MBSCAN]]&amp;lt;/var&amp;gt; is exceeded as a result of a direct search of Table B records. &lt;br /&gt;
&amp;lt;p&amp;gt;Again, under V7.8, with either the &amp;lt;var&amp;gt;SIRFACT X&#039;01&#039;&amp;lt;/var&amp;gt; bit set or &amp;lt;var&amp;gt;DEBUGUL&amp;lt;/var&amp;gt; set, if a long request occurs as a result of exceeding &amp;lt;var&amp;gt;MBSCAN&amp;lt;/var&amp;gt;, then initially the following message is produced, as before:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;M204.0569: File &#039;&#039;filename&#039;&#039;, Find: Table B records to be searched = &#039;&#039;nnnn&#039;&#039;&amp;lt;/p&amp;gt;&lt;br /&gt;
followed by a DYRWT prompt message. If the user replies &#039;N&#039; to the prompt, or if the request is run in an environment (such as a batch job) where the default response is &#039;N&#039;, the following message is produced after the M204.0569 message:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;Cancelling request: M204.2969: MBSCAN (&#039;&#039;mm&#039;&#039;) exceeded, records to be searched = &#039;&#039;nnnn&#039;&#039;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
where &#039;&#039;mm&#039;&#039; is the current setting of &amp;lt;var&amp;gt;MBSCAN&amp;lt;/var&amp;gt;. The M204.2969 message is followed by M204.2966 messages displaying the call stack trace. Thus, if the following code is run from procedure MYPROC.MBSCAN against the demo database, with an &amp;lt;var&amp;gt;MBSCAN&amp;lt;/var&amp;gt; setting of 10:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;   b                           &lt;br /&gt;
   call sub1                   &lt;br /&gt;
   sub1: subroutine            &lt;br /&gt;
   fd1:                        &lt;br /&gt;
      in clients fd city = ONTARIO&lt;br /&gt;
              end find         &lt;br /&gt;
      fr fd1                      &lt;br /&gt;
         pai                      &lt;br /&gt;
         print                    &lt;br /&gt;
      end for                     &lt;br /&gt;
   end subroutine              &lt;br /&gt;
   end &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
then the following messages are produced, assuming any prompts are responded to with an &#039;N&#039;:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;   M204.0569: File CLIENTS, Find: Table B records to be searched = 3415&lt;br /&gt;
   Cancelling request: M204.2969: MBSCAN (10) exceeded, records to be searched = 3415  &lt;br /&gt;
   M204.2966: Error at line 6, procedure MYPROC.MBSCAN in file MYPROC&lt;br /&gt;
   M204.2966: Called from line 3, procedure MYPROC.MBSCAN in file MYPROC  &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===appendJournalData===&lt;br /&gt;
The &amp;lt;var&amp;gt;[[AppendJournalData_(Stringlist_function)|AppendJournalData]]&amp;lt;/var&amp;gt; function is now more tolerant of an outstanding BUMP request. Previously, if &amp;lt;var&amp;gt;AppendJournalData&amp;lt;/var&amp;gt; was called to inadvertently retrieve a large amount of journal data, typically when called implicitly from within SirScan, then any outstanding BUMP request wouldn&#039;t be honored until all of the data had been retrieved, at which point the BUMP request would be completed, and all data would be lost.&lt;br /&gt;
&lt;br /&gt;
Now, the &amp;lt;var&amp;gt;AppendJournalData&amp;lt;/var&amp;gt; process checks for outstanding BUMP requests before each track I/O is executed, thus avoiding excessive I/Os against the journal and long waits for the BUMP of such a process to complete.&lt;br /&gt;
&lt;br /&gt;
==AUDIT204 enhancements==&lt;br /&gt;
===FORMAT command===&lt;br /&gt;
TIMEHH is a new parameter used with the FORMAT command of the [[Tracking_system_activity_(CCAJRNL,_CCAAUDIT,_CCAJLOG)#AUDIT204_utility|AUDIT204]] utility.  It indicates that timestamps, printed at the beginning of each line of output, should include hundredths of a second. Requires no other arguments.&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;b&amp;gt;NOTE:&amp;lt;/b&amp;gt; This parameter and the 78 version (or later) of AUDIT204 may be used against a 77 (or later) CCAJRNL.&amp;lt;/p&amp;gt;&lt;br /&gt;
For example:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;//CCAIN DD *&lt;br /&gt;
FORMAT YEARFORM 4&lt;br /&gt;
TIMEHH&lt;br /&gt;
TYPE ER MS LI&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Recovery enhancements==&lt;br /&gt;
===Media Recovery in a multi-user environment===&lt;br /&gt;
It is now possible to perform media recovery by issuing the &amp;lt;var&amp;gt;REGENERATE&amp;lt;/var&amp;gt; command to roll forward selected files in a multi-user environment, with the media recovery being carried out by different users with system manager privileges. The new USING option allows for the specification of a ddname for the input journal stream to be used by the &amp;lt;var&amp;gt;REGENERATE&amp;lt;/var&amp;gt; command. Previously media recovery was restricted to single user batch jobs, using the CCAGEN ddname for the input journal. For more details, see the &amp;lt;var&amp;gt;[[#REGENERATE|REGENERATE]]&amp;lt;/var&amp;gt; command below.&lt;br /&gt;
&lt;br /&gt;
==Security enhancements==&lt;br /&gt;
===CA-Top Secret can disallow CCASTAT logins===&lt;br /&gt;
The [[CA-Top_Secret_interface|CA-Top Secret]] interface now recognizes the &amp;lt;code&amp;gt;DEFACID=&amp;lt;/code&amp;gt;, setting and does not allow CCASTAT logins in the online if &amp;lt;code&amp;gt;DEFACID&amp;lt;/code&amp;gt; is set to null. (There is no attempt to log on M204USR.) Therefore, to disallow CCASTAT logons, set DEFACID=, in [[CA-Top_Secret_interface#Preparing_a_TOPSPARM_parameter_module_with_TOPSGEN|TOPSPARM]]. CCASTAT will be opened because it contains file and group passwords, but it will not be used for logons if CCASTAT logons are not allowed.&lt;br /&gt;
&lt;br /&gt;
===CUSTOM=11 and mixed cased input===&lt;br /&gt;
The &amp;lt;var&amp;gt;[[CUSTOM_parameter|CUSTOM]]&amp;lt;/var&amp;gt; parameter CUSTOM=11 setting no longer requires that a *LOWER command be issued prior to a LOGCTL command (to add or change a  password) to preserve mixed case input. Prior to this release, with CUSTOM=11 in place, *LOWER had to be issued before a LOGCTL command, otherwise any mixed case password strings would automatically be translated into uppercase. This change is enabled in V7.7 with the application of zap 77z108.&lt;br /&gt;
&lt;br /&gt;
===DEFUSER can specify a jobname not authorized to access M204===&lt;br /&gt;
When specifying DEFUSER=JOBNAME and VALIDAT=LOGON in the RACFGEN parms for an ONLINE, if the specified jobname ( the owning id for the ONLINE job ) isn&#039;t authorized to use Model 204 via RACF, any LOGIN commands specifying no userid will now succeed ( previously such a LOGON would have failed ). This enables users to submit jobs with USE $JOB, whereby the string USER=jobname  will be added to the submitted JCL, and this in turn is useful if the specified jobname has dataset access privileges to datasets required by the submitted jobs, even if the jobname itself isn&#039;t authorized to use M204.&lt;br /&gt;
&lt;br /&gt;
==Janus product enhancements==&lt;br /&gt;
&lt;br /&gt;
===Web Sockets===&lt;br /&gt;
Web Sockets are now supported in Janus Web Server.&lt;br /&gt;
&lt;br /&gt;
The Web Socket protocol provides various advantages over the HTTP protocol:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Web Sockets allow full-duplex communication.&amp;lt;/li&amp;gt; &lt;br /&gt;
&amp;lt;li&amp;gt;Efficient framing of payload data uses minimal overhead.&amp;lt;/li&amp;gt;  &lt;br /&gt;
&amp;lt;li&amp;gt;The Web Socket protocol is end-user extensible.&amp;lt;/li&amp;gt;  &lt;br /&gt;
&amp;lt;li&amp;gt;Most importantly, Web Sockets can be deployed completely within an existing HTTP/HTTPS framework.&amp;lt;/li&amp;gt; &lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To implement Web Sockets, you must enable the Janus Web port for Web Socket upgrades with the new &lt;br /&gt;
WEBSOCKET parameter. The WEBSOCKET option can be specified on either the port definition or the &lt;br /&gt;
JANUS WEB rule for the URL. &lt;br /&gt;
Likewise, an individual Janus Web rule can either allow or disallow Web Socket connections with the &lt;br /&gt;
WEBSOCKET and NOWEBSOCKET parameters, respectively. &lt;br /&gt;
&lt;br /&gt;
For details on implementing Web Sockets, see the [[WebSocket_(Socket_function)|WebSocket]] wiki page.&lt;br /&gt;
&lt;br /&gt;
===Janus Web Server access rule===&lt;br /&gt;
The automatic &amp;lt;var&amp;gt;[[JANUS WEB ALLOW]]&amp;lt;/var&amp;gt; rule, which allowed any user to access the port without requiring a login, is changed &amp;lt;i&amp;gt;for non-SSL ports&amp;lt;/i&amp;gt; to the following:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;JANUS WEB &amp;lt;i&amp;gt;portname&amp;lt;/i&amp;gt; DISALLOW *&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
This rule requires a system administrator to explicitly define &amp;lt;var&amp;gt;ALLOW&amp;lt;/var&amp;gt; rules to enable users to access non-SSL ports.&lt;br /&gt;
The rule applies unless overridden by user-added rules. &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;blockquote class=&amp;quot;note&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;b&amp;gt;Note:&amp;lt;/b&amp;gt; To revert from this change in the JANUS DEFINE default and make the default &lt;br /&gt;
 non-SSL &amp;lt;var&amp;gt;ALLOW&amp;lt;/var&amp;gt; rule as it was in version 7.5 and earlier (&amp;lt;code&amp;gt;ALLOW *&amp;lt;/code&amp;gt;), turn on the 1 bit of the &amp;lt;var&amp;gt;[[WEBDFLT parameter|WEBDFLT]]&amp;lt;/var&amp;gt; parameter: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;RESET WEBDFLT=1&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Increase in pending accepts for Janus BPX ports===&lt;br /&gt;
The default number of pending accepts for Janus BPX server ports has been increased from 3 to 12, thus reducing the likelihood that a pending accept may fail with the message&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;MSIR.0019 Connection request rejected for port (port), MAXCON exceeded&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The actual number of pending accepts to be supported on the port can be set with the new parameter MAXPEND, set on the &amp;lt;var&amp;gt;[[JANUS_DEFINE|JANUS DEFINE]]&amp;lt;/var&amp;gt; command, where MAXPEND can vary from 3 up to a maximum value of 32. The change to the default value was enabled in V7.7 with the application of zap 77z269.&lt;br /&gt;
&lt;br /&gt;
===TCP listen backlog increased===&lt;br /&gt;
&lt;br /&gt;
The [[Program_Communication_facilities#LISTEN_call|TCP listen]] backlog has been increased from 16 to 1024 under z/OS.&lt;br /&gt;
&lt;br /&gt;
This update tells the TCP stack to queue up to 1024 of such requests up before dropping them, thus reducing, or in most cases eliminating, the likelihood of a connection request drop, other than in exceptional circumstances, such as a denial of service attack. This change was enabled in V7.7 with the application of zap 77z340.&lt;br /&gt;
&lt;br /&gt;
===Defer the freeing of XMLSCREEN input XML===&lt;br /&gt;
&lt;br /&gt;
The freeing of [[XMLSCREEN_and_NOXMLSCREEN_(JANUS_DEFINE_parameters)|XMLSCREEN]] input XML is now deferred until the next Read Screen or session termination. This means that if an application error is detected, the input XML can be retrieved with [[$Web_Input_Content|$Web_Input_Content]] and then logged for problem analysis. &lt;br /&gt;
&lt;br /&gt;
Prior to this release the XML received from the client is freed immediately after being used to set the input data for a Read Screen, rendering it unavailable for problem determination.&lt;br /&gt;
&lt;br /&gt;
This change is enabled in V7.7 with the application of zap 77z368.&lt;br /&gt;
&lt;br /&gt;
===XMLSCREEN and Janus Web Legacy blank stripping===&lt;br /&gt;
&lt;br /&gt;
xmlScreens and Janus Web Legacy screens now adhere to the same standard as standard screen processing in terms of stripping leading blanks from input fields defined as [[Full-screen_feature#DEBLANK_or_NODEBLANK_option|DEBLANK]] (either explicitly or implicitly).&lt;br /&gt;
&lt;br /&gt;
This change is enabled in V7.7 with the application of zap 77z400.&lt;br /&gt;
&lt;br /&gt;
===SSL input buffer size===&lt;br /&gt;
&lt;br /&gt;
The default value of [[SSLIBSIZE_(JANUS_DEFINE_parameter)|SSLIBSIZE]] has been increased to 16384 + 128, or 16512. This size should ensure correct communication with all TLS spec compliant applications. It is the maximum size allowed unless you use [[CUSTOM_parameter#Using_CUSTOM.3D.2818.29|CUSTOM=18]].    &lt;br /&gt;
&lt;br /&gt;
This changed is enabled in V7.7 with the application of zap 77z415.&lt;br /&gt;
&lt;br /&gt;
===Increasing LDAP buffers===&lt;br /&gt;
&lt;br /&gt;
The number of LDAP buffers allocated at startup can now be changed by setting the NLDAPBUF parameter in CCAIN. See below for details on [[#NLDAPBUF|NLDAPBUF]].&lt;br /&gt;
&lt;br /&gt;
===Increase URL length returned with $web_form_action===&lt;br /&gt;
With this release the maximum Janus Web Server incoming URL that can be handled by &amp;lt;var&amp;gt;$web_form_action&amp;lt;/var&amp;gt; is increased from 512 bytes to 1024 bytes. This change is enabled in V7.7 with the application of zap 77z424.&lt;br /&gt;
&lt;br /&gt;
===Maximum RBSIZE setting increased===&lt;br /&gt;
The maximum value for RBSIZE, set on the &amp;lt;var&amp;gt;[[JANUS DEFINE|JANUS DEFINE]]&amp;lt;/var&amp;gt; command, is now increased to 16777215 (previously the maximum was 65534). RBSIZE specifies the RPC or Request Buffer size.  On a Web port, the Janus request buffer holds browser request information such as header data, cookies, and form data. On other port types, it holds RPC input and output parameters. This change is enabled in V7.7 with the application of zap 77z427.&lt;br /&gt;
&lt;br /&gt;
==Debugger enhancements==&lt;br /&gt;
&lt;br /&gt;
===Access to exposed variables===&lt;br /&gt;
The debuggers can now view or watch the values of variables exposed to local routines/methods. Previously, any attempts to access an exposed variable would have displayed &amp;quot;%varname has no value&amp;quot; in the debugger session. (This feature is enabled in V7.7 with the application of zap 77z363.)&lt;br /&gt;
&lt;br /&gt;
===Subroutine or method display===&lt;br /&gt;
When execution stops, as at breakpoints, the debuggers now display in the title bar the subroutine or method where execution stopped.&lt;br /&gt;
&lt;br /&gt;
==Performance enhancements==&lt;br /&gt;
&lt;br /&gt;
===MP/204 offload improvements===&lt;br /&gt;
Application code issuing the following SOUL statements will now now be fully offloadable:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;File Records In/On&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Remember&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt; &lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Position&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Sort Values&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;                                             &lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Reset Header/Trailer&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Find and Print Count&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Find All Values&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;For Each Value&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
the above improvements are also enabled in V7.7 with the application of zaps 77z419 and 77z420.&lt;br /&gt;
&lt;br /&gt;
===X3270OUT exit offloadable===&lt;br /&gt;
When running MP/204 (AMPSUBS&amp;gt;0) and using the [[Coding_SNA_Communications_Server_conversion_exit_routines#X3270OUT_.28convert_output_from_3270_format.29|X3270OUT]] exit to convert a 3270 output data stream to the appropriate device protocol, the exit can now run in parallel mode to improve performance. This change was enabled in V7.7 with the application of zap 77z313.&lt;br /&gt;
&lt;br /&gt;
The X3270OUT exit must be written to be re-entrant.&lt;br /&gt;
&lt;br /&gt;
==New and changed commands==&lt;br /&gt;
===DISPLAY ECF===&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;DISPLAY ECF {{ M | N | U } like ?} &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This new command displays details from ECF tables, or the current status of users accessing ECF modules.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;syntax&amp;quot;&amp;gt;D ECF M&amp;lt;/span&amp;gt; displays the contents of the module table. For example:&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;    D ECF M &lt;br /&gt;
    Module   Loadlib  Address:Length     Loaded@      Lastused@   #Calls  Flags &lt;br /&gt;
    QATUM13C PROGLIB 2FB91FB8:00000028 19023:121506 19023:121506 00000001 &lt;br /&gt;
    QATUM13B PROGLIB 2FE65000:00009C18 19023:121506 19023:121506 00000001 &lt;br /&gt;
    QATUM13A PROGLIB 2FE6EC18:00001CD8 19023:121506 19023:121506 00000001  &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
(flags may be D=deleted; S=shared; H=halted; I=Idle)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;syntax&amp;quot;&amp;gt;D ECF N&amp;lt;/span&amp;gt; displays contents of the name table. For example: &amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;    D ECF N&lt;br /&gt;
    Module   Logical-call-name &lt;br /&gt;
    QATUM13C MOD_QATUM13C &lt;br /&gt;
    QATUM13B MOD_QATUM13B &lt;br /&gt;
    QATUM13A MOD_QATUM13A &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;syntax&amp;quot;&amp;gt;D ECF U&amp;lt;/span&amp;gt; displays details of users currently accessing ECF modules. This is also the default option, and so &amp;lt;span class=&amp;quot;syntax&amp;quot;&amp;gt;D ECF&amp;lt;/span&amp;gt; will display the same output as &amp;lt;span class=&amp;quot;syntax&amp;quot;&amp;gt;D ECF U&amp;lt;/span&amp;gt;. For example:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;    D ECF U                           &lt;br /&gt;
    User# Userid     Module   Parmlen &lt;br /&gt;
    00002 ADMIN      --none--         &lt;br /&gt;
    00003 ADMIN      COBSAMP1 00000002&lt;br /&gt;
    00004 ADMIN      COBSAMP1 00000002 &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;syntax&amp;quot;&amp;gt;D ECF &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;function&amp;lt;/var&amp;gt; LIKE &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;?&amp;lt;/var&amp;gt; &amp;lt;/span&amp;gt; (where &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;?&amp;lt;/var&amp;gt; is a valid pattern) displays details for entities that match the specified pattern. The function is either M (modules), N (names), or U (users), and it defaults to U. So for example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;D ECF U L A&amp;lt;/p&amp;gt;&lt;br /&gt;
or&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;D ECF U L A*&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
displays details of ECF users whose names begin with A.&lt;br /&gt;
&lt;br /&gt;
===REGENERATE===&lt;br /&gt;
The &amp;lt;var&amp;gt;REGENERATE&amp;lt;/var&amp;gt; command can now be run in a multi-user environment by multiple users with system manager privileges. A new option USING is provided to specify the ddname of the input journal, so that the full syntax is now as follows:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;  REGENERATE [USING ddname] FILE filename [FROM dumpname | IGNORE]&lt;br /&gt;
  [TO {LAST UPDATE [BEFORE yy.ddd hh:mm:ss.th] | LAST CHECKPOINT [BEFORE yy.dd hh:mm:ss.th] &lt;br /&gt;
  | UPDATE number OF yy.ddd hh:mm:ss.th | CHECKPOINT yy.ddd hh:mm:ss.th} ]&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The default for the using ddname is CCAGEN, but any ddname may be used to allocate an input journal and used. For example:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;  ALLOCATE REGEN1 WITH SCOPE=SYSTEM DSN=PROD1.GDGJ OLD SEQUENTIAL GEN=+2&lt;br /&gt;
  REGENERATE USING REGEN1 FILE TEST&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It is the user&#039;s responsibility to ensure that the file being regenerated is not in use, and so prior to usage, &amp;lt;var&amp;gt;BUMP FILE&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;STOP FILE&amp;lt;/var&amp;gt; should be used to isolate usage against the file. If the file is in use, the REGEN will fail with these messages:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;  M204.1430: Failed to open file TEST&lt;br /&gt;
  M204.1436: Stopped processing file TEST  &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
$STATUS will now be set for &amp;lt;var&amp;gt;REGENERATE&amp;lt;/var&amp;gt; with the following values:&lt;br /&gt;
&amp;lt;blockquote&amp;gt;    &lt;br /&gt;
    0 - Success &amp;lt;br/&amp;gt;&lt;br /&gt;
    1 - No files were processed &amp;lt;br/&amp;gt;&lt;br /&gt;
    2 - At least one file stopped processing &amp;lt;br/&amp;gt;&lt;br /&gt;
    4 - A serious error occurred, REGEN failed &lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Similarly, &amp;lt;var&amp;gt;SETGRC&amp;lt;/var&amp;gt; may be used to get the return code and error message.&lt;br /&gt;
&lt;br /&gt;
==New and changed parameters==&lt;br /&gt;
&lt;br /&gt;
===ECMODS===&lt;br /&gt;
The new minimum value for ECMODS, the allowable number of ECF modules, is 1. Prior to V7.8 the minimum value was 0. This changed was enabled in V7.7 with the application of zap 77z306.&lt;br /&gt;
&lt;br /&gt;
===ECNAMES===&lt;br /&gt;
The new minimum value for ECNAMES, the allowable number of ECF module names, is 1. Prior to V7.8 the minimum value was 0. This changed was enabled in V7.7 with the application of zap 77z306.&lt;br /&gt;
&lt;br /&gt;
===ECPSIZE===&lt;br /&gt;
The new minimum value for ECPSIZE, the initial storage allocation for ECF parameters, is 1024. Prior to V7.8 the minimum value was 0. This changed was enabled in V7.7 with the application of zap 77z306.&lt;br /&gt;
&lt;br /&gt;
===ENQTIME===&lt;br /&gt;
Millisecond duration of automatic record locking retry wait.&lt;br /&gt;
&lt;br /&gt;
Prior to this change, if record locking conflicts occur frequently in a busy online, any user with a non-zero value for &amp;lt;var&amp;gt;[[ENQRETRY parameter|ENQRETRY]]&amp;lt;/var&amp;gt; will wait at least 3 seconds before the conflict is dealt with. This can degrade overall system performance.      &lt;br /&gt;
                                                         &lt;br /&gt;
The &amp;lt;var&amp;gt;[[ENQTIME parameter|ENQTIME]]&amp;lt;/var&amp;gt; parameter specifies the number of milliseconds waited for each record locking retry wait. ENQTIME can be between 1 and 60000, corresponding to a minimum of 1 millisecond and a maximum of 1 minute. The default value of ENQTIME is 3000 (3 seconds).            &lt;br /&gt;
                                                         &lt;br /&gt;
For example, with ENQTIME = 100 and ENQRETRY = 7, after a record locking conflict occurs the thread will retry 7 times with wait intervals of .1 seconds, and so within at most .7 seconds either the lock becomes available or the conflict triggers an On unit or cancels the request.     &lt;br /&gt;
                                                         &lt;br /&gt;
The ENQTIME parameter may also be reset with $ResetN. &lt;br /&gt;
&lt;br /&gt;
This new parameter was enabled in V7.7 with the application of zap 77z299.&lt;br /&gt;
&lt;br /&gt;
===EVALOPT===&lt;br /&gt;
The new &amp;lt;var&amp;gt;EVALOPT&amp;lt;/var&amp;gt; parameter controls the cancellation of a request on truncation of string data. The default value is 0, and currently there is just one setting, 1, which means &amp;quot;cancel a request if truncation of string data occurs.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
For example, with the default of 0 in place, the following code &amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;    %x is string len 1   &lt;br /&gt;
    %y is string len 2   &lt;br /&gt;
    %y = &#039;ab&#039;            &lt;br /&gt;
    %x = %y              &lt;br /&gt;
    printtext {~} = {%x} &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
would cause silent truncation, and give the result&lt;br /&gt;
    &amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;%x = a &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If &amp;lt;var&amp;gt;EVALOPT&amp;lt;/var&amp;gt; is set to 1, then the above code produces the following message:&lt;br /&gt;
    &amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;M204.0552: Variable too small for result &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and the request is cancelled.&lt;br /&gt;
&lt;br /&gt;
===LFSCB===&lt;br /&gt;
LFSCB, the length of the full screen buffer, now has a new minimum value of 8 ( the previous minimum was 0 ). This change has been enabled in v7.7 with the application of zap 77z042, and within V7.6 with the application of zap 76z393.&lt;br /&gt;
&lt;br /&gt;
===MAXPRE, MAXBOUT, MAXSUBT===&lt;br /&gt;
&amp;lt;p&amp;gt;Introduced in zap 77z257.&amp;lt;/p&amp;gt;&lt;br /&gt;
The new &amp;lt;var&amp;gt;MAXPRE&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;MAXBOUT&amp;lt;/var&amp;gt;, and &amp;lt;var&amp;gt;MAXSUBT&amp;lt;/var&amp;gt; parameters can be used to cancel a runaway transaction and prevent it from filling the checkpoint data set. &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;MAXPRE&amp;lt;/var&amp;gt;:  Maximum number of pre-images per transaction.  &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;MAXBOUT&amp;lt;/var&amp;gt;: Maximum number of backout pages per transaction. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;MAXSUBT&amp;lt;/var&amp;gt;: Maximum number of subtransaction checkpoints that a transaction can span.&amp;lt;/li&amp;gt;&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;Each new parameter defaults to unlimited. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;If a parameter value is set, a transaction is cancelled if that value is exceeded, and the following message is displayed:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;M204.0524: Maximum number (&amp;lt;i&amp;gt;num&amp;lt;/i&amp;gt;) of &amp;lt;i&amp;gt;parameter&amp;lt;/i&amp;gt; exceeded.&amp;lt;/p&amp;gt;&lt;br /&gt;
where &amp;lt;i&amp;gt;num&amp;lt;/i&amp;gt; is the value set for &amp;lt;i&amp;gt;parameter&amp;lt;/i&amp;gt; (&amp;lt;var&amp;gt;MAXPRE&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;MAXBOUT&amp;lt;/var&amp;gt;, or &amp;lt;var&amp;gt;MAXSUBT&amp;lt;/var&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
===NLDAPBUF===&lt;br /&gt;
This new parameter allows the number of LDAP buffers allocated during startup to be set in CCAIN. The default value is 2, and the settable value can range from 0 to 65535.&lt;br /&gt;
&lt;br /&gt;
===PUPDTH (new minimum value)===&lt;br /&gt;
If a user sets the &amp;lt;var&amp;gt;[[PUPDTH parameter|PUPDTH]]&amp;lt;/var&amp;gt; parameter to 0, it will now automatically be increased to 1, its minimum value.&lt;br /&gt;
&lt;br /&gt;
===SERV4G===&lt;br /&gt;
This parameter allows testing of server tables that span a 4-gigabyte boundary. For example, if &amp;lt;var&amp;gt;SERV4G&amp;lt;/var&amp;gt; is &amp;lt;code&amp;gt;X&#039;FFFFF000&#039;&amp;lt;/code&amp;gt;, each ATB server will begin at &amp;lt;code&amp;gt;XX_FFFFF000&amp;lt;/code&amp;gt;. If SERV4G is &amp;lt;code&amp;gt;X&#039;FFFF0000&#039;&amp;lt;/code&amp;gt;, each ATB server will begin at &amp;lt;code&amp;gt;XX_FFFF0000&amp;lt;/code&amp;gt;. &amp;lt;code&amp;gt;XX&amp;lt;/code&amp;gt; is determined by the storage available on the system. The parameter is set in CCAIN.&lt;br /&gt;
&lt;br /&gt;
The contents of the ATB server are specified by using the &amp;lt;var&amp;gt;[[SERVGA parameter|SERVGA]]&amp;lt;/var&amp;gt; parameter.&lt;br /&gt;
&lt;br /&gt;
For example, if you want VTBL to span the 4G boundary, you can use these settings: &amp;lt;code&amp;gt;SERV4G=X&#039;FFFFF000&#039;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;SERVGA=X&#039;00040000&#039;&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;LVTBL=200 (6400 bytes, X&#039;1900&#039;)&amp;lt;/code&amp;gt;. This will force each server&#039;s VTBL to begin at &amp;lt;code&amp;gt;XX_FFFFF000&amp;lt;/code&amp;gt; and end at &amp;lt;code&amp;gt;XX+1_00000900&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===WEBDFLT===&lt;br /&gt;
At V7.7, the default access rule for non-SSL ports was changed from ALLOW * to DISALLOW *, meaning that unless any ALLOW rules were in place resulting in a login/password prompt, the port couldn&#039;t be accessed. The new &amp;lt;var&amp;gt;[[WEBDFLT_parameter|WEBDFLT]]&amp;lt;/var&amp;gt; parameter may be set to 1 for reversion to the old default of ALLOW *. Under V7.7, this new parameter was enabled with the application of zap 77z090. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;var&amp;gt;RESET WEBDFLT&amp;lt;/var&amp;gt; requires system administrator privileges. It is recommended to reset the 1 bit of &amp;lt;var&amp;gt;WEBDFLT&amp;lt;/var&amp;gt; to zero after issuing a series of &amp;lt;var&amp;gt;JANUS DEFINE&amp;lt;/var&amp;gt; commands which need WEBDFLT=1, as in the CCAIN input stream.&lt;br /&gt;
&lt;br /&gt;
==New and changed statistics==&lt;br /&gt;
===MPR, MBO, MCP, and RCV===&lt;br /&gt;
Introduced in zap 77z257.&lt;br /&gt;
&amp;lt;p&amp;gt;These statistics provide high water mark transaction information. (Since-last values will not be available until V78 GA.)&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;They are useful in conjunction with the &amp;lt;var&amp;gt;MAXPRE&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;MAXBOUT&amp;lt;/var&amp;gt;, and &amp;lt;var&amp;gt;MAXSUBT&amp;lt;/var&amp;gt; parameters. &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
User/system statistics:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;MPR: High water mark of transaction pre-images. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;MBO: High water mark of transaction backout pages. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;MCP: High water mark of transaction chkpoint spans. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
System statistics: &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;RCV: Number of blocks needed for subtransaction recovery &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt; &lt;br /&gt;
&amp;lt;p class=&amp;quot;note&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Notes:&amp;lt;/b&amp;gt; M204.0843 now displays the RCV statistic for subtransaction checkpoints.&lt;br /&gt;
The size of recovery checkpoint must be greater than the sum of the last RCV value plus the number of records in [[System_and_media_recovery#RESTART_recovery_considerations_for_sub-transaction_checkpoints|RESTART and RESTARTS]].&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
===DKWTS and DKWTMICS===&lt;br /&gt;
Introduced in zap 77z7289.&lt;br /&gt;
&amp;lt;p&amp;gt;The new system statistics DKWTS (DisK WaiTs) and DKWTMICS (DisK WaiT MICroSeconds) collect data to provide rough disk I/O service time numbers.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
DKWTS shows the number of disk I/O waits. DKWTMICS shows the total wait time for those waits in microseconds. Dividing the difference in DKWTMICS by the difference in DKWTS over an interval provides the average disk I/O wait time in microseconds.              &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;note&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Notes:&amp;lt;/b&amp;gt; &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The wait time does include internal Model 204 scheduler delays, so on a CPU bound Model 204 system, the service times calculated from DKWTS and DKWTMICS are likely to be an overestimate of actual service times.&amp;lt;/li&amp;gt;  &lt;br /&gt;
                                                                    &lt;br /&gt;
&amp;lt;li&amp;gt;DKWTS and DKWTMICS are not available in SirMon; use [[MONITOR_command|MONITOR]] SYSTEM STATISTICS to view these statistics.&amp;lt;/li&amp;gt;&amp;lt;/ul&amp;gt;  &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Compatibility issues==&lt;br /&gt;
===&amp;lt;b id=&amp;quot;listNewInit&amp;quot;&amp;gt;&amp;lt;/b&amp;gt;$ListNew cannot be used in Initial clause===&lt;br /&gt;
It is now a compilation error if &amp;lt;var&amp;gt;$ListNew&amp;lt;/var&amp;gt; is attempted to be used in the &amp;lt;var&amp;gt;Initial&amp;lt;/var&amp;gt; clause of a &lt;br /&gt;
[[Using_variables_and_values_in_computation#Declare_statements_for_.25variables|declaration statement]].&lt;br /&gt;
&amp;lt;p&amp;gt;This change is propagated by zap maintenance to versions 7.5 (zap 75Z487), 7.6 (zap 76Z514), and 7.7 (zap 77z281) of Model 204.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote class=&amp;quot;note&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Note:&amp;lt;/b&amp;gt; Strictly speaking, this would not be considered a compilation error, because previously although &amp;lt;code&amp;gt;..&amp;amp;nbsp;Initial($ListNew)&amp;lt;/code&amp;gt; did not produce a compilation error, in almost all circumstances it would produce a snap if the initialized %variable were used with some other &amp;lt;var&amp;gt;$List&amp;lt;i&amp;gt;xxx&amp;lt;/i&amp;gt;&amp;lt;/var&amp;gt; invocation.&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Restricting the use of the CUSTOM=38 setting===&lt;br /&gt;
The [[CUSTOM parameter|CUSTOM=38]] parameter setting, introduced at V7.5, inadvertently provided System Manager privileges to all users via the RESET command. This CUSTOM setting is now restricted to the RESETting of the LAUDIT parameter.&lt;br /&gt;
&lt;br /&gt;
===Disabling of Closure support===&lt;br /&gt;
Due to a number of bugs related to Closure support, introduced at V7.7, this feature, which can best be described as exposed methods assigned to method variables, has been disabled in this release. This change was also made to V7.7 with application of zap 77z119.&lt;br /&gt;
&lt;br /&gt;
===Password delimiter enforced===&lt;br /&gt;
When using &amp;lt;var&amp;gt;IFSTRTN&amp;lt;/var&amp;gt; to log on to a Model 204 online from an IFAM2 application, both the logonid and password must be followed by a semicolon, which is the delimiter. For example:      &lt;br /&gt;
                                      &lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;CALL IFSTRTN(RC,&#039;logonid;password;&#039;...)&amp;lt;/p&amp;gt;&lt;br /&gt;
                 &lt;br /&gt;
If a semicolon does not follow the password string, the following message will now be issued:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;M204.2964: Password missing or too long &amp;lt;/p&amp;gt;                 &lt;br /&gt;
                                                         &lt;br /&gt;
Previously, a semicolon following the password was not required and the first blank served as a password delimiter.  However, as of V7.7, embedded blanks are valid password characters and a semicolon is now required to delimit the password.&lt;br /&gt;
&lt;br /&gt;
This change has also been enabled in V7.7 with the application of zap 77z231.&lt;br /&gt;
&lt;br /&gt;
===PAGESZ parameter validated===&lt;br /&gt;
Previously it was possible to set the PAGESZ parameter to any value, although Model 204 internally supports one page size of 6184, and any deviation from this value would have led to problems during file creation. The value of this parameter is now controlled, such that setting it to any value other than 6184 will generate an M204.1149 message with the parameter being reset to 6184.&lt;br /&gt;
&lt;br /&gt;
===ECPRIV and the IDCAMS facility===&lt;br /&gt;
At V7.7 a security loophole was closed, whereby all ECF modules were run under external-authorizer profile of the calling user. Previously any ECF tasks were run under the owning job&#039;s external-authorizer profile, and in order for certain sites to retain that ability, a new setting of ECPRIV, value 4, was introduced to retain the ability to run ECF tasks using the job&#039;s security profile. &lt;br /&gt;
&lt;br /&gt;
The ECPRIV 4 setting potentially introduced a security loophole when calling the IDCAMS interface, based upon what the IDCAMS utility is able to do at a system level. Consequently as of this release, the ECPRIV 4 setting will be ignored when calling the IDCAMS facility via ECF, and such IDCAMS processes will always use the calling user&#039;s security profile. Any existing jobs that use ECF to call the IDCAMS utility with the ECFPRIV 4 bit set should be checked to ensure that the calling user&#039;s security profile still satisfies the job&#039;s requirements.&lt;br /&gt;
&lt;br /&gt;
===TCPOPTS is view-only===&lt;br /&gt;
In previous versions the &amp;lt;var&amp;gt;TCPOPTS&amp;lt;/var&amp;gt; parameter, which identifies the type of IP addressing in use (v4 or v6), was resetable, although it was always documented as a view-only parameter. The parameter is now handled as a view-only parameter, and any attempts to reset the parameter will result in the following message:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;gt;   M204.1123: Parameter TCPOPTS not reset&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===ZHPF command can only be issued by a system manager===&lt;br /&gt;
In previous versions it was possible to issue the ZHPF command without being logged on. From this release onwards, a user would have to be logged on with system manager privileges to be able to issue this command.&lt;br /&gt;
&lt;br /&gt;
Additionally, the command output will now only  display results for currently open files.&lt;br /&gt;
&lt;br /&gt;
This changes has been enabled in v7.7 with the application of zap 77z264.&lt;br /&gt;
&lt;br /&gt;
===Terminal MODEL reset failure===&lt;br /&gt;
If a reset of the terminal MODEL parameter fails due to an undersized output page buffer, then in addition to the existing messages that inform the user of this failure:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;gt;    M204.1875 UNABLE TO RESET MODEL TO %C &lt;br /&gt;
    M204.1123: Parameter MODEL not reset&amp;lt;/p&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
the following message will now be issued:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;gt;    M204.1008: LOUTPB must be increased to at least &amp;lt;number&amp;gt; &amp;lt;/p&amp;gt;&lt;br /&gt;
                                                         &lt;br /&gt;
where &amp;lt;number&amp;gt; is the minimum value of LOUTPB necessary to support the terminal model.&lt;br /&gt;
&lt;br /&gt;
This change is enabled in V7.7 with the application of zap 77z309.&lt;br /&gt;
&lt;br /&gt;
==Notes for system manager and installer==&lt;br /&gt;
===CRAM SVC installation is deprecated===&lt;br /&gt;
The CRAM SVC installation has been deprecated as of version 7.5. &amp;lt;br /&amp;gt;Installation of CRAM-XDM is described as part of the [[Model 204 installation]].&lt;br /&gt;
===Authorization and maintenance zaps===&lt;br /&gt;
When you download Rocket M204 product object files, all relevant authorization keys and all current maintenance zaps are pre-applied to the object files as part of the download process.&lt;br /&gt;
&lt;br /&gt;
==New and changed messages==&lt;br /&gt;
&lt;br /&gt;
See [[New and updated messages in Model 204 version 7.8|New and updated messages in Model 204 version 7.8]] for details.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category: Release notes]]&lt;/div&gt;</summary>
		<author><name>ELowell</name></author>
	</entry>
	<entry>
		<id>https://m204wiki.rocketsoftware.com/index.php?title=Release_notes_for_Model_204_version_7.8&amp;diff=117732</id>
		<title>Release notes for Model 204 version 7.8</title>
		<link rel="alternate" type="text/html" href="https://m204wiki.rocketsoftware.com/index.php?title=Release_notes_for_Model_204_version_7.8&amp;diff=117732"/>
		<updated>2019-12-11T18:59:00Z</updated>

		<summary type="html">&lt;p&gt;ELowell: /* New in this release */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
These release notes list the enhancements and other changes contained in Model 204 version 7.8. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;&amp;lt;b&amp;gt;******THIS IS A DRAFT DOCUMENT.******&amp;lt;/b&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
These release notes list the enhancements and other changes contained in Model 204 version 7.8, &amp;lt;b&amp;gt;&amp;lt;i&amp;gt;which is still in development&amp;lt;/i&amp;gt;&amp;lt;/b&amp;gt;. Until the commercial release of the software, Rocket reserves the right to add to, remove, or change anything described herein. &lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
These release notes contain installation and features information for the Rocket Model 204 version 7.8 release.&lt;br /&gt;
Before beginning your installation, please read through this information about product installation and changes.&lt;br /&gt;
&lt;br /&gt;
==New in this release==&lt;br /&gt;
The table below cites some highlights of Model&amp;amp;nbsp;204 version 7.8. For a full list of features, refer to the Table of Contents. &lt;br /&gt;
&amp;lt;p&amp;gt;See also the [[#Compatibility Issues|Compatibility]] section for possible issues.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;tr class=&amp;quot;head&amp;quot;&amp;gt;&amp;lt;th&amp;gt;Category&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Feature&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;SOUL&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The new [[#AmIndependent method|AmIndependent]] method returns TRUE for daemons spawned by RunIndependently.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The Object class now supports the [[#Support for copying Object class objects|copy and deepCopy methods]].&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Janus Web&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[[#Web Sockets|Janus Web Sockets]] are now supported.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td nowrap&amp;gt;Networking&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Note:&amp;lt;/b&amp;gt; The two-phase commit and commit exits features are licensed and purchased separately from Model 204.&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Two-phase commit. A Model 204 online can now be configured to use two-phase commit (2PC). The Janus internal socket API is used for the calls to the coordinator. JANUS commands are used for all 2PC configuration. A new JANUS port type has been added, 2PC.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Commit exits are now supported. The commit exit runs within the APSY, which is defined by the &amp;lt;var&amp;gt;COMMITX&amp;lt;/var&amp;gt; parameter and uses normal APSY processing.  &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;ECF tables&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;DISPLAY ECF&amp;lt;/var&amp;gt; displays details from [[#Managing ECF tables more efficiently|ECF tables]], or the current status of users accessing ECF modules.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The EXTERNAL REMOVE statement statement causes the entry for the named module to be removed from the module table.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Performance&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[[#MP/204 offload improvements|MP/204 offload improvements]] -- application code for these SOUL statements is now fully offloadable: &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;File Records In/On&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Remember&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Position&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Sort Values&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Reset Header/Trailer&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Find and Print Count&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Find All Values&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;For Each Value&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Security&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;CA-Top Secret can [[#CA-Top Secret can disallow CCASTAT logins|disallow CCASTAT logins]].&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[[#DEFUSER can specify a jobname not authorized to access M204|DEFUSER]] can specify a jobname not authorized to access M204.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td nowrap&amp;gt;System enhancements&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The &amp;lt;var&amp;gt;MONITOR USERS&amp;lt;/var&amp;gt; command output displays [[#New wait types for daemon/master waits|two new wait types]].&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td nowrap&amp;gt;AUDIT204 enhancements&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The new TIMEHH parameter on the [[#FORMAT command|FORMAT]] command of the AUDIT204 utility provides greater time stamp precision.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td nowrap&amp;gt;New commands&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;[[#DISPLAY ECF|DISPLAY ECF]]&amp;lt;/var&amp;gt; displays details from ECF tables, or the current status of users accessing ECF modules.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td nowrap&amp;gt;New parameters&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;[[#ENQTIME|ENQTIME]]&amp;lt;/var&amp;gt; specifies the number of milliseconds waited for each record locking retry wait.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;[[#EVALOPT|EVALOPT]]&amp;lt;/var&amp;gt; controls the cancellation of a request on truncation of string data.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;[[#MAXPRE, MAXBOUT, MAXSUBT|MAXPRE, MAXBOUT, and MAXSUBT]]&amp;lt;/var&amp;gt; can be used to cancel a runaway transaction and prevent it from filling the checkpoint data set.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;[[#NLDAPBUF|NLDAPBUF]]&amp;lt;/var&amp;gt; allows the number of LDAP buffers allocated during startup to be set in CCAIN.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;[[#SERV4G|SERV4G]]&amp;lt;/var&amp;gt; allows testing of server tables that span a 4-gigabyte boundary.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;[[#WEBDFLT|WEBDFLT]]&amp;lt;/var&amp;gt; changes the default JANUS WEB ALLOW rule back to ALLOW.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td nowrap&amp;gt;Janus Web and SoftSpy debuggers&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The debuggers can now view or watch the values of [[#Access to exposed variables|variables exposed to local routines/methods]].&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;At breakpoints, the debuggers now [[#Subroutine or method display|display the subroutine or method]] where execution stopped.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td nowrap&amp;gt;User/system statistics&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;[[#MPR, MBO, MCP, and RCV|MPR, MBO, MCP, and RCV]]&amp;lt;/var&amp;gt; provide high water mark transaction information in conjunction with the &amp;lt;var&amp;gt;MAXPRE&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;MAXBOUT&amp;lt;/var&amp;gt;, and &amp;lt;var&amp;gt;MAXSUBT&amp;lt;/var&amp;gt; parameters. &lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[[#DKWTS and DKWTMICS|New system statistics]] DKWTS (DisK WaiTs) and DKWTMICS (DisK WaiT MICroSeconds) collect data to provide rough disk I/O service time numbers.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Operating system and hardware requirements==&lt;br /&gt;
&lt;br /&gt;
===Operating system requirements===&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;IBM z/OS versions supported:&amp;lt;/b&amp;gt; &lt;br /&gt;
  &amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;All IBM supported releases up to and including z/OS 2.3. &amp;lt;br /&amp;gt;(For z/OS 2.2, see [[IBM z/OS 2.2 PTF requirement]].)&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;p&amp;gt;Version 1.07 is sufficient for all functionality except for the following features:&amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;ul&amp;gt;&lt;br /&gt;
    &amp;lt;li&amp;gt;zHPF support requires version [[IBM z/OS 2.1 compatibility issue|2.1]].&amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;li&amp;gt;Large (1 MB) page support requires version 1.9.&amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;li&amp;gt;Extended address volumes (EAV) requires version 1.12.&amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;/ul&amp;gt;&lt;br /&gt;
  &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
On z/OS, Model 204 release 7.8 operates as an APF authorized load module, as required by many 7.8 features. &amp;lt;br /&amp;gt;&lt;br /&gt;
To run Model 204 unauthorized, [[Contacting Rocket Software Technical Support|contact Technical Support]].&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;IBM z/VM versions supported:&amp;lt;/b&amp;gt; &lt;br /&gt;
  &amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;All IBM supported releases up to and including z/VM 6.4.&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;IBM z/VSE versions supported:&amp;lt;/b&amp;gt;&lt;br /&gt;
  &amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;All IBM supported releases up to and including z/VSE 6.1.&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Hardware requirements===&lt;br /&gt;
 &lt;br /&gt;
In general, Model 204 version 7.8 requires the IBM z/890 or above processor.&lt;br /&gt;
&amp;lt;p&amp;gt;However, the IBM z10 or above processor is required for the following features:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;large (1 MB) page support&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;IBM&#039;s High Performance FICON (zHPF) support&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Connect&amp;lt;sup&amp;gt;&amp;amp;#9733;&amp;lt;/sup&amp;gt; compatibility with Model 204===&lt;br /&gt;
&lt;br /&gt;
Connect&amp;lt;span class=&amp;quot;superstar&amp;quot;&amp;gt;&amp;amp;#9733;&amp;lt;/span&amp;gt; version 7.5 or 7.7 is compatible with Model 204 version 7.8.&lt;br /&gt;
&lt;br /&gt;
For more information on Connect&amp;lt;span class=&amp;quot;superstar&amp;quot;&amp;gt;&amp;amp;#9733;&amp;lt;/span&amp;gt; installation, see the [[:Category:Connect*|Connect&amp;lt;span class=&amp;quot;superstar&amp;quot;&amp;gt;&amp;amp;#9733;&amp;lt;/span&amp;gt; wiki pages]].&lt;br /&gt;
&lt;br /&gt;
==SOUL (User Language) enhancements==&lt;br /&gt;
===AmIndependent method===&lt;br /&gt;
The &amp;lt;var&amp;gt;AmIndependent&amp;lt;/var&amp;gt; method returns TRUE for daemons spawned by &amp;lt;var&amp;gt;[[RunIndependently_(Daemon_subroutine)|RunIndependently]]&amp;lt;/var&amp;gt;. (The action of &amp;lt;var&amp;gt;[[AmDaemon_(Daemon_property)|AmDaemon]]&amp;lt;/var&amp;gt; remains unchanged.)&lt;br /&gt;
&lt;br /&gt;
The following table shows the values returned by &amp;lt;var&amp;gt;AmIndependent&amp;lt;/var&amp;gt; versus &amp;lt;var&amp;gt;AmDaemon&amp;lt;/var&amp;gt; for different daemon types:&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Type&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;AmDaemon&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;AmIndependent&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;$COMBG&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;False&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;False&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Independent daemon&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;False&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;True&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Other daemon&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;True&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;False&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Web, etc.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;False&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;False&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===$ProcOpn===&lt;br /&gt;
&amp;lt;var&amp;gt;[[$ProcOpn|$ProcOpn]]&amp;lt;/var&amp;gt; now supports the opening of a procedure with an all-numeric name, and including a leading zero, such as:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;%result = $procOpn(&#039;0123&#039;, &#039;MYFILE&#039;)&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Support for such procedure names was initially introduced at V7.7, and this feature of &amp;lt;var&amp;gt;$ProcOpn&amp;lt;/var&amp;gt; is also enabled in V7.7 with the application of zap 77z054.&lt;br /&gt;
&lt;br /&gt;
===Allow parentheses to surround a boolean enumeration object===&lt;br /&gt;
The following sample code:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;   begin                                       &lt;br /&gt;
   variables are undefined                  &lt;br /&gt;
   %isValid is boolean initial (True)       &lt;br /&gt;
   if (%isValid) then                  &lt;br /&gt;
      print &#039;in IF&#039;                            &lt;br /&gt;
   end if                                   &lt;br /&gt;
   end   &amp;lt;/p&amp;gt;      &lt;br /&gt;
&lt;br /&gt;
will now compile and run successfully, since this syntax: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;if (%isValid) then &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
is logically equivalent to this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;if %isValid then &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Prior to V7.8 the presence of parentheses surrounding the boolean enumeration object would have caused a compilation error. This change is enabled in V7.7 with the application of zap 77z370.&lt;br /&gt;
&lt;br /&gt;
===Support for copying Object class objects===&lt;br /&gt;
The Object class now supports the copy and deepCopy methods. For example, an Object object can be copied as follows:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;   begin               &lt;br /&gt;
   %x is object object &lt;br /&gt;
   %y is object object &lt;br /&gt;
   %y = new            &lt;br /&gt;
   %x = %y:copy        &lt;br /&gt;
   end &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This change is enabled in v7.7 with the application of zap 77z076, and within V7.6 with the application of zap 76z412.&lt;br /&gt;
&lt;br /&gt;
===Assignment of enumeration values to method variables===&lt;br /&gt;
Enumerations values can now be assigned to method variables whose result is an enumeration. So, for example, the following code:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;   begin                                               &lt;br /&gt;
   enumeration colour                                  &lt;br /&gt;
      public                                           &lt;br /&gt;
         value red                                     &lt;br /&gt;
         value white                                   &lt;br /&gt;
         value blue                                    &lt;br /&gt;
      end public                                       &lt;br /&gt;
   end enumeration                                     &lt;br /&gt;
   %func    is function getColour is enumeration colour&lt;br /&gt;
   local function getColour is enumeration colour      &lt;br /&gt;
      return blue                                      &lt;br /&gt;
   end function                                        &lt;br /&gt;
   %func    = getColour                                &lt;br /&gt;
   %func    = (colour):red                             &lt;br /&gt;
   printText {~=%(Local):(%func)}                      &lt;br /&gt;
   end  &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
will produce this result:&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt; %(Local):(%func)=red &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
whereas previously this line:   &lt;br /&gt;
&lt;br /&gt;
  &amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt; %func    = (colour):red &amp;lt;/p&amp;gt;   &lt;br /&gt;
&lt;br /&gt;
would have been rejected with this message:&lt;br /&gt;
&lt;br /&gt;
   &amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;MSIR.0993: Assignment invalid: mismatch between method and method variable &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This change is enabled in V7.7 with the application of zap 77z128.&lt;br /&gt;
&lt;br /&gt;
===Optional output method parameters===&lt;br /&gt;
Prior to this release output parameters could not be optional or have default values. In this release output parameters can be specified as &amp;lt;var&amp;gt;Optional&amp;lt;/var&amp;gt;, and a default value can be specified with &amp;lt;var&amp;gt;Default&amp;lt;/var&amp;gt;. One related change is that if a &amp;lt;var&amp;gt;Len&amp;lt;/var&amp;gt; value is specified with &amp;lt;var&amp;gt;Optional&amp;lt;/var&amp;gt; or &amp;lt;var&amp;gt;Default&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;Output&amp;lt;/var&amp;gt;, it indicates the length of the hidden target for the output parameter if none was passed. For all other &amp;lt;var&amp;gt;Output&amp;lt;/var&amp;gt; parameters, &amp;lt;var&amp;gt;Len&amp;lt;/var&amp;gt; is meaningless, just as it was before Model 204 V7.8. The following is an example of the use of an optional output parameter:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;function getRemote( -&lt;br /&gt;
   %target is string len 32, %errorReason is string len 80 optional output -&lt;br /&gt;
) is float&lt;br /&gt;
  ...&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
In this example, if &amp;lt;code&amp;gt;%errorReason&amp;lt;/code&amp;gt; is not specified in a call and then set to a value longer than 80 bytes it wil be truncated to 80 bytes. However, if a string of a different length is passed, the length of that string determines truncation behavior.&lt;br /&gt;
&lt;br /&gt;
==External Call Facility enhancements==&lt;br /&gt;
===Managing ECF tables more efficiently===&lt;br /&gt;
The are two new features to help manage ECF tables more efficiently, avoid conditions where the table can fill, and prevent the definition of further entities.&lt;br /&gt;
&lt;br /&gt;
The first feature is the new &amp;lt;var&amp;gt;DISPLAY ECF&amp;lt;/var&amp;gt; command, which displays the contents of ECF tables and also the current status of users accessing ECF modules. See more details of the &amp;lt;var&amp;gt;[[#DISPLAY ECF|DISPLAY ECF]]&amp;lt;/var&amp;gt; command below.&lt;br /&gt;
&lt;br /&gt;
The second feature is a new &amp;lt;var&amp;gt;EXTERNAL REMOVE&amp;lt;/var&amp;gt; statement with the following syntax:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;EXTERNAL REMOVE &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;modulename&amp;lt;/span&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This statement causes the entry for the named module to be removed from the module table. The table entry is then placed on a free chain of entries and can be reused by issuing the &amp;lt;var&amp;gt;EXTERNAL MODULE&amp;lt;/var&amp;gt; statement. This allows the module table to be managed with redundant entries removed, without having to recycle the ONLINE.&lt;br /&gt;
&lt;br /&gt;
An &amp;lt;var&amp;gt;EXTERNAL REMOVE&amp;lt;/var&amp;gt; statement will return &amp;lt;code&amp;gt;$status/$statusd&amp;lt;/code&amp;gt; values of &amp;lt;code&amp;gt;0/0&amp;lt;/code&amp;gt;, and most other status values that can be returned by the &amp;lt;var&amp;gt;EXTERNAL REMOVE&amp;lt;/var&amp;gt; statement are already documented in the ECF return codes table. If an &amp;lt;var&amp;gt;EXTERNAL REMOVE&amp;lt;/var&amp;gt; is attempted against a module that is currently being called (in use), then &amp;lt;code&amp;gt;$status/$statusd&amp;lt;/code&amp;gt; will return the values &amp;lt;code&amp;gt;20/1&amp;lt;/code&amp;gt; (module unavailable).&lt;br /&gt;
&lt;br /&gt;
==System enhancements==&lt;br /&gt;
&lt;br /&gt;
===New wait types for daemon/master waits===&lt;br /&gt;
&lt;br /&gt;
Two new wait types, viewable on the &amp;lt;var&amp;gt;[[MONITOR_command|MONITOR]] USERS&amp;lt;/var&amp;gt; command output, have been implemented as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;57&amp;lt;/code&amp;gt; - Means a daemon thread waiting for its master thread  &amp;lt;br /&amp;gt;     &lt;br /&gt;
&amp;lt;code&amp;gt;58&amp;lt;/code&amp;gt; - Means a master thread waiting for one of its daemon threads&lt;br /&gt;
&lt;br /&gt;
This change is enabled in V7.7 with the application of zap 77z410.&lt;br /&gt;
&lt;br /&gt;
===Snap formatting changes===&lt;br /&gt;
Date/time stamps in the page headers of snaps will now be shown in normal format, rather than in julian format as in previous versions. So in the following example, a particular snap header under v7.7 or previous versions would show as: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;SNAPID    1   19226.060155  M204.0022: Bug .. nnnnn               PAGE     1 &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
whereas the same snap header under v7.8 would show as: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;SNAPID    1  2019/08/14 06:01:06   M204.0022: Bug .. nnnnn        PAGE     1 &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Also, due to improvements in handling trailing blanks in snap output, a snap generated under v7.8 should be marginally smaller than the same snap generated under previous versions, assuming the same SNAPCTL settings.&lt;br /&gt;
&lt;br /&gt;
===Call stack trace for problem diagnosis===&lt;br /&gt;
A  call stack trace is now provided to help diagnose and resolve common errors. To enable the stack trace, do either of the following: &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Set the &amp;lt;var&amp;gt;[[SIRFACT parameter|SIRFACT]] X&#039;01&#039;&amp;lt;/var&amp;gt; bit.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Set the &amp;lt;var&amp;gt;[[DEBUGUL parameter|DEBUGL]]&amp;lt;/var&amp;gt; parameter. Note that the &amp;lt;var&amp;gt;DEBUGUL&amp;lt;/var&amp;gt; approach will introduce extra QTBL overhead. &amp;lt;p&amp;gt;(&amp;lt;var&amp;gt;DEBUGUL&amp;lt;/var&amp;gt; provides a similar facility with an include trace of procedures leading to the error, but this might not be potentially as useful as the call trace.)&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt; &lt;br /&gt;
&lt;br /&gt;
The call stack trace can assist in diagnosing run-time errors that might occur, as illustrated by the following &amp;quot;Variable too small for result&amp;quot; and &amp;quot;MBSCAN exceeded&amp;quot; examples.&lt;br /&gt;
&lt;br /&gt;
====Variable too small for result====&lt;br /&gt;
When the stack trace is enabled, a &amp;quot;variable too small&amp;quot; error results in the following message:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;M204.2966: Error at line n, procedure &#039;&#039;procname&#039;&#039; in file &#039;&#039;procfile&#039;&#039;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
which identifies the line within a procedure where the error is occurring, in addition to the usual message:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;M204.0552: Variable too small for result&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Any subsequent M204.2966 messages indicate the point in the code from where the code in error was called. For example, a stack of three subroutine calls leading to a &amp;quot;variable too small&amp;quot; error might result in the following messaging:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;   M204.0552: Variable too small for result                             &lt;br /&gt;
   M204.2966: Error at line 9, procedure MYPROC.LEVEL4 in file MYPROC   &lt;br /&gt;
   M204.2966: Called from line 5, procedure MYPROC.LEVEL3 in file MYPROC&lt;br /&gt;
   M204.2966: Called from line 5, procedure MYPROC.LEVEL2 in file MYPROC&lt;br /&gt;
   M204.2966: Called from line 5, procedure MYPROC.LEVEL1 in file MYPROC &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This information should help in diagnosing the problem. &lt;br /&gt;
&lt;br /&gt;
If the error occurs within a command level program rather than a procedure, then the M204.2966 message is replaced by an M204.2967 message, and a similar error condition to the above with a preceding call stack might be audited as follows:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;   M204.0552: Variable too small for result              &lt;br /&gt;
   M204.2967: Error at line 14 of command level program  &lt;br /&gt;
   M204.2967: Called from line 5 of command level program&lt;br /&gt;
   M204.2967: Called from line 3 of command level program &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If neither &amp;lt;var&amp;gt;SIRFACT X&#039;01&#039;&amp;lt;/var&amp;gt; nor &amp;lt;var&amp;gt;DEBUGUL&amp;lt;/var&amp;gt; is set, then the &amp;quot;variable too small&amp;quot; error produces the following messages:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;   M204.0552: Variable too small for result &lt;br /&gt;
   M204.2968: Error: no debug info &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====MBSCAN exceeded====&lt;br /&gt;
Similarly to the handling of the &amp;quot;variable too small for result&amp;quot; error, the call stack can also be used to diagnose errors where the value of &amp;lt;var&amp;gt;[[MBSCAN parameter|MBSCAN]]&amp;lt;/var&amp;gt; is exceeded as a result of a direct search of Table B records. &lt;br /&gt;
&amp;lt;p&amp;gt;Again, under V7.8, with either the &amp;lt;var&amp;gt;SIRFACT X&#039;01&#039;&amp;lt;/var&amp;gt; bit set or &amp;lt;var&amp;gt;DEBUGUL&amp;lt;/var&amp;gt; set, if a long request occurs as a result of exceeding &amp;lt;var&amp;gt;MBSCAN&amp;lt;/var&amp;gt;, then initially the following message is produced, as before:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;M204.0569: File &#039;&#039;filename&#039;&#039;, Find: Table B records to be searched = &#039;&#039;nnnn&#039;&#039;&amp;lt;/p&amp;gt;&lt;br /&gt;
followed by a DYRWT prompt message. If the user replies &#039;N&#039; to the prompt, or if the request is run in an environment (such as a batch job) where the default response is &#039;N&#039;, the following message is produced after the M204.0569 message:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;Cancelling request: M204.2969: MBSCAN (&#039;&#039;mm&#039;&#039;) exceeded, records to be searched = &#039;&#039;nnnn&#039;&#039;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
where &#039;&#039;mm&#039;&#039; is the current setting of &amp;lt;var&amp;gt;MBSCAN&amp;lt;/var&amp;gt;. The M204.2969 message is followed by M204.2966 messages displaying the call stack trace. Thus, if the following code is run from procedure MYPROC.MBSCAN against the demo database, with an &amp;lt;var&amp;gt;MBSCAN&amp;lt;/var&amp;gt; setting of 10:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;   b                           &lt;br /&gt;
   call sub1                   &lt;br /&gt;
   sub1: subroutine            &lt;br /&gt;
   fd1:                        &lt;br /&gt;
      in clients fd city = ONTARIO&lt;br /&gt;
              end find         &lt;br /&gt;
      fr fd1                      &lt;br /&gt;
         pai                      &lt;br /&gt;
         print                    &lt;br /&gt;
      end for                     &lt;br /&gt;
   end subroutine              &lt;br /&gt;
   end &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
then the following messages are produced, assuming any prompts are responded to with an &#039;N&#039;:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;   M204.0569: File CLIENTS, Find: Table B records to be searched = 3415&lt;br /&gt;
   Cancelling request: M204.2969: MBSCAN (10) exceeded, records to be searched = 3415  &lt;br /&gt;
   M204.2966: Error at line 6, procedure MYPROC.MBSCAN in file MYPROC&lt;br /&gt;
   M204.2966: Called from line 3, procedure MYPROC.MBSCAN in file MYPROC  &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===appendJournalData===&lt;br /&gt;
The &amp;lt;var&amp;gt;[[AppendJournalData_(Stringlist_function)|AppendJournalData]]&amp;lt;/var&amp;gt; function is now more tolerant of an outstanding BUMP request. Previously, if &amp;lt;var&amp;gt;AppendJournalData&amp;lt;/var&amp;gt; was called to inadvertently retrieve a large amount of journal data, typically when called implicitly from within SirScan, then any outstanding BUMP request wouldn&#039;t be honored until all of the data had been retrieved, at which point the BUMP request would be completed, and all data would be lost.&lt;br /&gt;
&lt;br /&gt;
Now, the &amp;lt;var&amp;gt;AppendJournalData&amp;lt;/var&amp;gt; process checks for outstanding BUMP requests before each track I/O is executed, thus avoiding excessive I/Os against the journal and long waits for the BUMP of such a process to complete.&lt;br /&gt;
&lt;br /&gt;
==AUDIT204 enhancements==&lt;br /&gt;
===FORMAT command===&lt;br /&gt;
TIMEHH is a new parameter used with the FORMAT command of the [[Tracking_system_activity_(CCAJRNL,_CCAAUDIT,_CCAJLOG)#AUDIT204_utility|AUDIT204]] utility.  It indicates that timestamps, printed at the beginning of each line of output, should include hundredths of a second. Requires no other arguments.&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;b&amp;gt;NOTE:&amp;lt;/b&amp;gt; This parameter and the 78 version (or later) of AUDIT204 may be used against a 77 (or later) CCAJRNL.&amp;lt;/p&amp;gt;&lt;br /&gt;
For example:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;//CCAIN DD *&lt;br /&gt;
FORMAT YEARFORM 4&lt;br /&gt;
TIMEHH&lt;br /&gt;
TYPE ER MS LI&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Recovery enhancements==&lt;br /&gt;
===Media Recovery in a multi-user environment===&lt;br /&gt;
It is now possible to perform media recovery by issuing the &amp;lt;var&amp;gt;REGENERATE&amp;lt;/var&amp;gt; command to roll forward selected files in a multi-user environment, with the media recovery being carried out by different users with system manager privileges. The new USING option allows for the specification of a ddname for the input journal stream to be used by the &amp;lt;var&amp;gt;REGENERATE&amp;lt;/var&amp;gt; command. Previously media recovery was restricted to single user batch jobs, using the CCAGEN ddname for the input journal. For more details, see the &amp;lt;var&amp;gt;[[#REGENERATE|REGENERATE]]&amp;lt;/var&amp;gt; command below.&lt;br /&gt;
&lt;br /&gt;
==Security enhancements==&lt;br /&gt;
===CA-Top Secret can disallow CCASTAT logins===&lt;br /&gt;
The [[CA-Top_Secret_interface|CA-Top Secret]] interface now recognizes the &amp;lt;code&amp;gt;DEFACID=&amp;lt;/code&amp;gt;, setting and does not allow CCASTAT logins in the online if &amp;lt;code&amp;gt;DEFACID&amp;lt;/code&amp;gt; is set to null. (There is no attempt to log on M204USR.) Therefore, to disallow CCASTAT logons, set DEFACID=, in [[CA-Top_Secret_interface#Preparing_a_TOPSPARM_parameter_module_with_TOPSGEN|TOPSPARM]]. CCASTAT will be opened because it contains file and group passwords, but it will not be used for logons if CCASTAT logons are not allowed.&lt;br /&gt;
&lt;br /&gt;
===CUSTOM=11 and mixed cased input===&lt;br /&gt;
The &amp;lt;var&amp;gt;[[CUSTOM_parameter|CUSTOM]]&amp;lt;/var&amp;gt; parameter CUSTOM=11 setting no longer requires that a *LOWER command be issued prior to a LOGCTL command (to add or change a  password) to preserve mixed case input. Prior to this release, with CUSTOM=11 in place, *LOWER had to be issued before a LOGCTL command, otherwise any mixed case password strings would automatically be translated into uppercase. This change is enabled in V7.7 with the application of zap 77z108.&lt;br /&gt;
&lt;br /&gt;
===DEFUSER can specify a jobname not authorized to access M204===&lt;br /&gt;
When specifying DEFUSER=JOBNAME and VALIDAT=LOGON in the RACFGEN parms for an ONLINE, if the specified jobname ( the owning id for the ONLINE job ) isn&#039;t authorized to use Model 204 via RACF, any LOGIN commands specifying no userid will now succeed ( previously such a LOGON would have failed ). This enables users to submit jobs with USE $JOB, whereby the string USER=jobname  will be added to the submitted JCL, and this in turn is useful if the specified jobname has dataset access privileges to datasets required by the submitted jobs, even if the jobname itself isn&#039;t authorized to use M204.&lt;br /&gt;
&lt;br /&gt;
==Janus product enhancements==&lt;br /&gt;
&lt;br /&gt;
===Web Sockets===&lt;br /&gt;
Web Sockets are now supported in Janus Web Server.&lt;br /&gt;
&lt;br /&gt;
The Web Socket protocol provides various advantages over the HTTP protocol:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Web Sockets allow full-duplex communication.&amp;lt;/li&amp;gt; &lt;br /&gt;
&amp;lt;li&amp;gt;Efficient framing of payload data uses minimal overhead.&amp;lt;/li&amp;gt;  &lt;br /&gt;
&amp;lt;li&amp;gt;The Web Socket protocol is end-user extensible.&amp;lt;/li&amp;gt;  &lt;br /&gt;
&amp;lt;li&amp;gt;Most importantly, Web Sockets can be deployed completely within an existing HTTP/HTTPS framework.&amp;lt;/li&amp;gt; &lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To implement Web Sockets, you must enable the Janus Web port for Web Socket upgrades with the new &lt;br /&gt;
WEBSOCKET parameter. The WEBSOCKET option can be specified on either the port definition or the &lt;br /&gt;
JANUS WEB rule for the URL. &lt;br /&gt;
Likewise, an individual Janus Web rule can either allow or disallow Web Socket connections with the &lt;br /&gt;
WEBSOCKET and NOWEBSOCKET parameters, respectively. &lt;br /&gt;
&lt;br /&gt;
For details on implementing Web Sockets, see the [[WebSocket_(Socket_function)|WebSocket]] wiki page.&lt;br /&gt;
&lt;br /&gt;
===Janus Web Server access rule===&lt;br /&gt;
The automatic &amp;lt;var&amp;gt;[[JANUS WEB ALLOW]]&amp;lt;/var&amp;gt; rule, which allowed any user to access the port without requiring a login, is changed &amp;lt;i&amp;gt;for non-SSL ports&amp;lt;/i&amp;gt; to the following:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;JANUS WEB &amp;lt;i&amp;gt;portname&amp;lt;/i&amp;gt; DISALLOW *&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
This rule requires a system administrator to explicitly define &amp;lt;var&amp;gt;ALLOW&amp;lt;/var&amp;gt; rules to enable users to access non-SSL ports.&lt;br /&gt;
The rule applies unless overridden by user-added rules. &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;blockquote class=&amp;quot;note&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;b&amp;gt;Note:&amp;lt;/b&amp;gt; To revert from this change in the JANUS DEFINE default and make the default &lt;br /&gt;
 non-SSL &amp;lt;var&amp;gt;ALLOW&amp;lt;/var&amp;gt; rule as it was in version 7.5 and earlier (&amp;lt;code&amp;gt;ALLOW *&amp;lt;/code&amp;gt;), turn on the 1 bit of the &amp;lt;var&amp;gt;[[WEBDFLT parameter|WEBDFLT]]&amp;lt;/var&amp;gt; parameter: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;RESET WEBDFLT=1&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Increase in pending accepts for Janus BPX ports===&lt;br /&gt;
The default number of pending accepts for Janus BPX server ports has been increased from 3 to 12, thus reducing the likelihood that a pending accept may fail with the message&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;MSIR.0019 Connection request rejected for port (port), MAXCON exceeded&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The actual number of pending accepts to be supported on the port can be set with the new parameter MAXPEND, set on the &amp;lt;var&amp;gt;[[JANUS_DEFINE|JANUS DEFINE]]&amp;lt;/var&amp;gt; command, where MAXPEND can vary from 3 up to a maximum value of 32. The change to the default value was enabled in V7.7 with the application of zap 77z269.&lt;br /&gt;
&lt;br /&gt;
===TCP listen backlog increased===&lt;br /&gt;
&lt;br /&gt;
The [[Program_Communication_facilities#LISTEN_call|TCP listen]] backlog has been increased from 16 to 1024 under z/OS.&lt;br /&gt;
&lt;br /&gt;
This update tells the TCP stack to queue up to 1024 of such requests up before dropping them, thus reducing, or in most cases eliminating, the likelihood of a connection request drop, other than in exceptional circumstances, such as a denial of service attack. This change was enabled in V7.7 with the application of zap 77z340.&lt;br /&gt;
&lt;br /&gt;
===Defer the freeing of XMLSCREEN input XML===&lt;br /&gt;
&lt;br /&gt;
The freeing of [[XMLSCREEN_and_NOXMLSCREEN_(JANUS_DEFINE_parameters)|XMLSCREEN]] input XML is now deferred until the next Read Screen or session termination. This means that if an application error is detected, the input XML can be retrieved with [[$Web_Input_Content|$Web_Input_Content]] and then logged for problem analysis. &lt;br /&gt;
&lt;br /&gt;
Prior to this release the XML received from the client is freed immediately after being used to set the input data for a Read Screen, rendering it unavailable for problem determination.&lt;br /&gt;
&lt;br /&gt;
This change is enabled in V7.7 with the application of zap 77z368.&lt;br /&gt;
&lt;br /&gt;
===XMLSCREEN and Janus Web Legacy blank stripping===&lt;br /&gt;
&lt;br /&gt;
xmlScreens and Janus Web Legacy screens now adhere to the same standard as standard screen processing in terms of stripping leading blanks from input fields defined as [[Full-screen_feature#DEBLANK_or_NODEBLANK_option|DEBLANK]] (either explicitly or implicitly).&lt;br /&gt;
&lt;br /&gt;
This change is enabled in V7.7 with the application of zap 77z400.&lt;br /&gt;
&lt;br /&gt;
===SSL input buffer size===&lt;br /&gt;
&lt;br /&gt;
The default value of [[SSLIBSIZE_(JANUS_DEFINE_parameter)|SSLIBSIZE]] has been increased to 16384 + 128, or 16512. This size should ensure correct communication with all TLS spec compliant applications. It is the maximum size allowed unless you use [[CUSTOM_parameter#Using_CUSTOM.3D.2818.29|CUSTOM=18]].    &lt;br /&gt;
&lt;br /&gt;
This changed is enabled in V7.7 with the application of zap 77z415.&lt;br /&gt;
&lt;br /&gt;
===Increasing LDAP buffers===&lt;br /&gt;
&lt;br /&gt;
The number of LDAP buffers allocated at startup can now be changed by setting the NLDAPBUF parameter in CCAIN. See below for details on [[#NLDAPBUF|NLDAPBUF]].&lt;br /&gt;
&lt;br /&gt;
===Increase URL length returned with $web_form_action===&lt;br /&gt;
With this release the maximum Janus Web Server incoming URL that can be handled by &amp;lt;var&amp;gt;$web_form_action&amp;lt;/var&amp;gt; is increased from 512 bytes to 1024 bytes. This change is enabled in V7.7 with the application of zap 77z424.&lt;br /&gt;
&lt;br /&gt;
===Maximum RBSIZE setting increased===&lt;br /&gt;
The maximum value for RBSIZE, set on the &amp;lt;var&amp;gt;[[JANUS DEFINE|JANUS DEFINE]]&amp;lt;/var&amp;gt; command, is now increased to 16777215 (previously the maximum was 65534). RBSIZE specifies the RPC or Request Buffer size.  On a Web port, the Janus request buffer holds browser request information such as header data, cookies, and form data. On other port types, it holds RPC input and output parameters. This change is enabled in V7.7 with the application of zap 77z427.&lt;br /&gt;
&lt;br /&gt;
==Debugger enhancements==&lt;br /&gt;
&lt;br /&gt;
===Access to exposed variables===&lt;br /&gt;
The debuggers can now view or watch the values of variables exposed to local routines/methods. Previously, any attempts to access an exposed variable would have displayed &amp;quot;%varname has no value&amp;quot; in the debugger session. (This feature is enabled in V7.7 with the application of zap 77z363.)&lt;br /&gt;
&lt;br /&gt;
===Subroutine or method display===&lt;br /&gt;
When execution stops, as at breakpoints, the debuggers now display in the title bar the subroutine or method where execution stopped.&lt;br /&gt;
&lt;br /&gt;
==Performance enhancements==&lt;br /&gt;
&lt;br /&gt;
===MP/204 offload improvements===&lt;br /&gt;
Application code issuing the following SOUL statements will now now be fully offloadable:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;File Records In/On&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Remember&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt; &lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Position&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Sort Values&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;                                             &lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Reset Header/Trailer&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Find and Print Count&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Find All Values&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;For Each Value&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
the above improvements are also enabled in V7.7 with the application of zaps 77z419 and 77z420.&lt;br /&gt;
&lt;br /&gt;
===X3270OUT exit offloadable===&lt;br /&gt;
When running MP/204 (AMPSUBS&amp;gt;0) and using the [[Coding_SNA_Communications_Server_conversion_exit_routines#X3270OUT_.28convert_output_from_3270_format.29|X3270OUT]] exit to convert a 3270 output data stream to the appropriate device protocol, the exit can now run in parallel mode to improve performance. This change was enabled in V7.7 with the application of zap 77z313.&lt;br /&gt;
&lt;br /&gt;
The X3270OUT exit must be written to be re-entrant.&lt;br /&gt;
&lt;br /&gt;
==New and changed commands==&lt;br /&gt;
===DISPLAY ECF===&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;DISPLAY ECF {{ M | N | U } like ?} &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This new command displays details from ECF tables, or the current status of users accessing ECF modules.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;syntax&amp;quot;&amp;gt;D ECF M&amp;lt;/span&amp;gt; displays the contents of the module table. For example:&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;    D ECF M &lt;br /&gt;
    Module   Loadlib  Address:Length     Loaded@      Lastused@   #Calls  Flags &lt;br /&gt;
    QATUM13C PROGLIB 2FB91FB8:00000028 19023:121506 19023:121506 00000001 &lt;br /&gt;
    QATUM13B PROGLIB 2FE65000:00009C18 19023:121506 19023:121506 00000001 &lt;br /&gt;
    QATUM13A PROGLIB 2FE6EC18:00001CD8 19023:121506 19023:121506 00000001  &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
(flags may be D=deleted; S=shared; H=halted; I=Idle)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;syntax&amp;quot;&amp;gt;D ECF N&amp;lt;/span&amp;gt; displays contents of the name table. For example: &amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;    D ECF N&lt;br /&gt;
    Module   Logical-call-name &lt;br /&gt;
    QATUM13C MOD_QATUM13C &lt;br /&gt;
    QATUM13B MOD_QATUM13B &lt;br /&gt;
    QATUM13A MOD_QATUM13A &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;syntax&amp;quot;&amp;gt;D ECF U&amp;lt;/span&amp;gt; displays details of users currently accessing ECF modules. This is also the default option, and so &amp;lt;span class=&amp;quot;syntax&amp;quot;&amp;gt;D ECF&amp;lt;/span&amp;gt; will display the same output as &amp;lt;span class=&amp;quot;syntax&amp;quot;&amp;gt;D ECF U&amp;lt;/span&amp;gt;. For example:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;    D ECF U                           &lt;br /&gt;
    User# Userid     Module   Parmlen &lt;br /&gt;
    00002 ADMIN      --none--         &lt;br /&gt;
    00003 ADMIN      COBSAMP1 00000002&lt;br /&gt;
    00004 ADMIN      COBSAMP1 00000002 &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;syntax&amp;quot;&amp;gt;D ECF &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;function&amp;lt;/var&amp;gt; LIKE &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;?&amp;lt;/var&amp;gt; &amp;lt;/span&amp;gt; (where &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;?&amp;lt;/var&amp;gt; is a valid pattern) displays details for entities that match the specified pattern. The function is either M (modules), N (names), or U (users), and it defaults to U. So for example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;D ECF U L A&amp;lt;/p&amp;gt;&lt;br /&gt;
or&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;D ECF U L A*&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
displays details of ECF users whose names begin with A.&lt;br /&gt;
&lt;br /&gt;
===REGENERATE===&lt;br /&gt;
The &amp;lt;var&amp;gt;REGENERATE&amp;lt;/var&amp;gt; command can now be run in a multi-user environment by multiple users with system manager privileges. A new option USING is provided to specify the ddname of the input journal, so that the full syntax is now as follows:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;  REGENERATE [USING ddname] FILE filename [FROM dumpname | IGNORE]&lt;br /&gt;
  [TO {LAST UPDATE [BEFORE yy.ddd hh:mm:ss.th] | LAST CHECKPOINT [BEFORE yy.dd hh:mm:ss.th] &lt;br /&gt;
  | UPDATE number OF yy.ddd hh:mm:ss.th | CHECKPOINT yy.ddd hh:mm:ss.th} ]&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The default for the using ddname is CCAGEN, but any ddname may be used to allocate an input journal and used. For example:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;  ALLOCATE REGEN1 WITH SCOPE=SYSTEM DSN=PROD1.GDGJ OLD SEQUENTIAL GEN=+2&lt;br /&gt;
  REGENERATE USING REGEN1 FILE TEST&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It is the user&#039;s responsibility to ensure that the file being regenerated is not in use, and so prior to usage, &amp;lt;var&amp;gt;BUMP FILE&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;STOP FILE&amp;lt;/var&amp;gt; should be used to isolate usage against the file. If the file is in use, the REGEN will fail with these messages:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;  M204.1430: Failed to open file TEST&lt;br /&gt;
  M204.1436: Stopped processing file TEST  &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
$STATUS will now be set for &amp;lt;var&amp;gt;REGENERATE&amp;lt;/var&amp;gt; with the following values:&lt;br /&gt;
&amp;lt;blockquote&amp;gt;    &lt;br /&gt;
    0 - Success &amp;lt;br/&amp;gt;&lt;br /&gt;
    1 - No files were processed &amp;lt;br/&amp;gt;&lt;br /&gt;
    2 - At least one file stopped processing &amp;lt;br/&amp;gt;&lt;br /&gt;
    4 - A serious error occurred, REGEN failed &lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Similarly, &amp;lt;var&amp;gt;SETGRC&amp;lt;/var&amp;gt; may be used to get the return code and error message.&lt;br /&gt;
&lt;br /&gt;
==New and changed parameters==&lt;br /&gt;
&lt;br /&gt;
===ECMODS===&lt;br /&gt;
The new minimum value for ECMODS, the allowable number of ECF modules, is 1. Prior to V7.8 the minimum value was 0. This changed was enabled in V7.7 with the application of zap 77z306.&lt;br /&gt;
&lt;br /&gt;
===ECNAMES===&lt;br /&gt;
The new minimum value for ECNAMES, the allowable number of ECF module names, is 1. Prior to V7.8 the minimum value was 0. This changed was enabled in V7.7 with the application of zap 77z306.&lt;br /&gt;
&lt;br /&gt;
===ECPSIZE===&lt;br /&gt;
The new minimum value for ECPSIZE, the initial storage allocation for ECF parameters, is 1024. Prior to V7.8 the minimum value was 0. This changed was enabled in V7.7 with the application of zap 77z306.&lt;br /&gt;
&lt;br /&gt;
===ENQTIME===&lt;br /&gt;
Millisecond duration of automatic record locking retry wait.&lt;br /&gt;
&lt;br /&gt;
Prior to this change, if record locking conflicts occur frequently in a busy online, any user with a non-zero value for &amp;lt;var&amp;gt;[[ENQRETRY parameter|ENQRETRY]]&amp;lt;/var&amp;gt; will wait at least 3 seconds before the conflict is dealt with. This can degrade overall system performance.      &lt;br /&gt;
                                                         &lt;br /&gt;
The &amp;lt;var&amp;gt;[[ENQTIME parameter|ENQTIME]]&amp;lt;/var&amp;gt; parameter specifies the number of milliseconds waited for each record locking retry wait. ENQTIME can be between 1 and 60000, corresponding to a minimum of 1 millisecond and a maximum of 1 minute. The default value of ENQTIME is 3000 (3 seconds).            &lt;br /&gt;
                                                         &lt;br /&gt;
For example, with ENQTIME = 100 and ENQRETRY = 7, after a record locking conflict occurs the thread will retry 7 times with wait intervals of .1 seconds, and so within at most .7 seconds either the lock becomes available or the conflict triggers an On unit or cancels the request.     &lt;br /&gt;
                                                         &lt;br /&gt;
The ENQTIME parameter may also be reset with $ResetN. &lt;br /&gt;
&lt;br /&gt;
This new parameter was enabled in V7.7 with the application of zap 77z299.&lt;br /&gt;
&lt;br /&gt;
===EVALOPT===&lt;br /&gt;
The new &amp;lt;var&amp;gt;EVALOPT&amp;lt;/var&amp;gt; parameter controls the cancellation of a request on truncation of string data. The default value is 0, and currently there is just one setting, 1, which means &amp;quot;cancel a request if truncation of string data occurs.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
For example, with the default of 0 in place, the following code &amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;    %x is string len 1   &lt;br /&gt;
    %y is string len 2   &lt;br /&gt;
    %y = &#039;ab&#039;            &lt;br /&gt;
    %x = %y              &lt;br /&gt;
    printtext {~} = {%x} &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
would cause silent truncation, and give the result&lt;br /&gt;
    &amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;%x = a &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If &amp;lt;var&amp;gt;EVALOPT&amp;lt;/var&amp;gt; is set to 1, then the above code produces the following message:&lt;br /&gt;
    &amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;M204.0552: Variable too small for result &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and the request is cancelled.&lt;br /&gt;
&lt;br /&gt;
===LFSCB===&lt;br /&gt;
LFSCB, the length of the full screen buffer, now has a new minimum value of 8 ( the previous minimum was 0 ). This change has been enabled in v7.7 with the application of zap 77z042, and within V7.6 with the application of zap 76z393.&lt;br /&gt;
&lt;br /&gt;
===MAXPRE, MAXBOUT, MAXSUBT===&lt;br /&gt;
&amp;lt;p&amp;gt;Introduced in zap 77z257.&amp;lt;/p&amp;gt;&lt;br /&gt;
The new &amp;lt;var&amp;gt;MAXPRE&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;MAXBOUT&amp;lt;/var&amp;gt;, and &amp;lt;var&amp;gt;MAXSUBT&amp;lt;/var&amp;gt; parameters can be used to cancel a runaway transaction and prevent it from filling the checkpoint data set. &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;MAXPRE&amp;lt;/var&amp;gt;:  Maximum number of pre-images per transaction.  &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;MAXBOUT&amp;lt;/var&amp;gt;: Maximum number of backout pages per transaction. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;MAXSUBT&amp;lt;/var&amp;gt;: Maximum number of subtransaction checkpoints that a transaction can span.&amp;lt;/li&amp;gt;&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;Each new parameter defaults to unlimited. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;If a parameter value is set, a transaction is cancelled if that value is exceeded, and the following message is displayed:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;M204.0524: Maximum number (&amp;lt;i&amp;gt;num&amp;lt;/i&amp;gt;) of &amp;lt;i&amp;gt;parameter&amp;lt;/i&amp;gt; exceeded.&amp;lt;/p&amp;gt;&lt;br /&gt;
where &amp;lt;i&amp;gt;num&amp;lt;/i&amp;gt; is the value set for &amp;lt;i&amp;gt;parameter&amp;lt;/i&amp;gt; (&amp;lt;var&amp;gt;MAXPRE&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;MAXBOUT&amp;lt;/var&amp;gt;, or &amp;lt;var&amp;gt;MAXSUBT&amp;lt;/var&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
===NLDAPBUF===&lt;br /&gt;
This new parameter allows the number of LDAP buffers allocated during startup to be set in CCAIN. The default value is 2, and the settable value can range from 0 to 65535.&lt;br /&gt;
&lt;br /&gt;
===PUPDTH (new minimum value)===&lt;br /&gt;
If a user sets the &amp;lt;var&amp;gt;[[PUPDTH parameter|PUPDTH]]&amp;lt;/var&amp;gt; parameter to 0, it will now automatically be increased to 1, its minimum value.&lt;br /&gt;
&lt;br /&gt;
===SERV4G===&lt;br /&gt;
This parameter allows testing of server tables that span a 4-gigabyte boundary. For example, if &amp;lt;var&amp;gt;SERV4G&amp;lt;/var&amp;gt; is &amp;lt;code&amp;gt;X&#039;FFFFF000&#039;&amp;lt;/code&amp;gt;, each ATB server will begin at &amp;lt;code&amp;gt;XX_FFFFF000&amp;lt;/code&amp;gt;. If SERV4G is &amp;lt;code&amp;gt;X&#039;FFFF0000&#039;&amp;lt;/code&amp;gt;, each ATB server will begin at &amp;lt;code&amp;gt;XX_FFFF0000&amp;lt;/code&amp;gt;. &amp;lt;code&amp;gt;XX&amp;lt;/code&amp;gt; is determined by the storage available on the system. The parameter is set in CCAIN.&lt;br /&gt;
&lt;br /&gt;
The contents of the ATB server are specified by using the &amp;lt;var&amp;gt;[[SERVGA parameter|SERVGA]]&amp;lt;/var&amp;gt; parameter.&lt;br /&gt;
&lt;br /&gt;
For example, if you want VTBL to span the 4G boundary, you can use these settings: &amp;lt;code&amp;gt;SERV4G=X&#039;FFFFF000&#039;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;SERVGA=X&#039;00040000&#039;&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;LVTBL=200 (6400 bytes, X&#039;1900&#039;)&amp;lt;/code&amp;gt;. This will force each server&#039;s VTBL to begin at &amp;lt;code&amp;gt;XX_FFFFF000&amp;lt;/code&amp;gt; and end at &amp;lt;code&amp;gt;XX+1_00000900&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===WEBDFLT===&lt;br /&gt;
At V7.7, the default access rule for non-SSL ports was changed from ALLOW * to DISALLOW *, meaning that unless any ALLOW rules were in place resulting in a login/password prompt, the port couldn&#039;t be accessed. The new &amp;lt;var&amp;gt;[[WEBDFLT_parameter|WEBDFLT]]&amp;lt;/var&amp;gt; parameter may be set to 1 for reversion to the old default of ALLOW *. Under V7.7, this new parameter was enabled with the application of zap 77z090. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;var&amp;gt;RESET WEBDFLT&amp;lt;/var&amp;gt; requires system administrator privileges. It is recommended to reset the 1 bit of &amp;lt;var&amp;gt;WEBDFLT&amp;lt;/var&amp;gt; to zero after issuing a series of &amp;lt;var&amp;gt;JANUS DEFINE&amp;lt;/var&amp;gt; commands which need WEBDFLT=1, as in the CCAIN input stream.&lt;br /&gt;
&lt;br /&gt;
==New and changed statistics==&lt;br /&gt;
===MPR, MBO, MCP, and RCV===&lt;br /&gt;
Introduced in zap 77z257.&lt;br /&gt;
&amp;lt;p&amp;gt;These statistics provide high water mark transaction information. (Since-last values will not be available until V78 GA.)&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;They are useful in conjunction with the &amp;lt;var&amp;gt;MAXPRE&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;MAXBOUT&amp;lt;/var&amp;gt;, and &amp;lt;var&amp;gt;MAXSUBT&amp;lt;/var&amp;gt; parameters. &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
User/system statistics:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;MPR: High water mark of transaction pre-images. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;MBO: High water mark of transaction backout pages. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;MCP: High water mark of transaction chkpoint spans. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
System statistics: &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;RCV: Number of blocks needed for subtransaction recovery &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt; &lt;br /&gt;
&amp;lt;p class=&amp;quot;note&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Notes:&amp;lt;/b&amp;gt; M204.0843 now displays the RCV statistic for subtransaction checkpoints.&lt;br /&gt;
The size of recovery checkpoint must be greater than the sum of the last RCV value plus the number of records in [[System_and_media_recovery#RESTART_recovery_considerations_for_sub-transaction_checkpoints|RESTART and RESTARTS]].&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
===DKWTS and DKWTMICS===&lt;br /&gt;
Introduced in zap 77z7289.&lt;br /&gt;
&amp;lt;p&amp;gt;The new system statistics DKWTS (DisK WaiTs) and DKWTMICS (DisK WaiT MICroSeconds) collect data to provide rough disk I/O service time numbers.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
DKWTS shows the number of disk I/O waits. DKWTMICS shows the total wait time for those waits in microseconds. Dividing the difference in DKWTMICS by the difference in DKWTS over an interval provides the average disk I/O wait time in microseconds.              &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;note&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Notes:&amp;lt;/b&amp;gt; &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The wait time does include internal Model 204 scheduler delays, so on a CPU bound Model 204 system, the service times calculated from DKWTS and DKWTMICS are likely to be an overestimate of actual service times.&amp;lt;/li&amp;gt;  &lt;br /&gt;
                                                                    &lt;br /&gt;
&amp;lt;li&amp;gt;DKWTS and DKWTMICS are not available in SirMon; use [[MONITOR_command|MONITOR]] SYSTEM STATISTICS to view these statistics.&amp;lt;/li&amp;gt;&amp;lt;/ul&amp;gt;  &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Compatibility issues==&lt;br /&gt;
===&amp;lt;b id=&amp;quot;listNewInit&amp;quot;&amp;gt;&amp;lt;/b&amp;gt;$ListNew cannot be used in Initial clause===&lt;br /&gt;
It is now a compilation error if &amp;lt;var&amp;gt;$ListNew&amp;lt;/var&amp;gt; is attempted to be used in the &amp;lt;var&amp;gt;Initial&amp;lt;/var&amp;gt; clause of a &lt;br /&gt;
[[Using_variables_and_values_in_computation#Declare_statements_for_.25variables|declaration statement]].&lt;br /&gt;
&amp;lt;p&amp;gt;This change is propagated by zap maintenance to versions 7.5 (zap 75Z487), 7.6 (zap 76Z514), and 7.7 (zap 77z281) of Model 204.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote class=&amp;quot;note&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Note:&amp;lt;/b&amp;gt; Strictly speaking, this would not be considered a compilation error, because previously although &amp;lt;code&amp;gt;..&amp;amp;nbsp;Initial($ListNew)&amp;lt;/code&amp;gt; did not produce a compilation error, in almost all circumstances it would produce a snap if the initialized %variable were used with some other &amp;lt;var&amp;gt;$List&amp;lt;i&amp;gt;xxx&amp;lt;/i&amp;gt;&amp;lt;/var&amp;gt; invocation.&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Restricting the use of the CUSTOM=38 setting===&lt;br /&gt;
The [[CUSTOM parameter|CUSTOM=38]] parameter setting, introduced at V7.5, inadvertently provided System Manager privileges to all users via the RESET command. This CUSTOM setting is now restricted to the RESETting of the LAUDIT parameter.&lt;br /&gt;
&lt;br /&gt;
===Disabling of Closure support===&lt;br /&gt;
Due to a number of bugs related to Closure support, introduced at V7.7, this feature, which can best be described as exposed methods assigned to method variables, has been disabled in this release. This change was also made to V7.7 with application of zap 77z119.&lt;br /&gt;
&lt;br /&gt;
===Password delimiter enforced===&lt;br /&gt;
When using &amp;lt;var&amp;gt;IFSTRTN&amp;lt;/var&amp;gt; to log on to a Model 204 online from an IFAM2 application, both the logonid and password must be followed by a semicolon, which is the delimiter. For example:      &lt;br /&gt;
                                      &lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;CALL IFSTRTN(RC,&#039;logonid;password;&#039;...)&amp;lt;/p&amp;gt;&lt;br /&gt;
                 &lt;br /&gt;
If a semicolon does not follow the password string, the following message will now be issued:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;M204.2964: Password missing or too long &amp;lt;/p&amp;gt;                 &lt;br /&gt;
                                                         &lt;br /&gt;
Previously, a semicolon following the password was not required and the first blank served as a password delimiter.  However, as of V7.7, embedded blanks are valid password characters and a semicolon is now required to delimit the password.&lt;br /&gt;
&lt;br /&gt;
This change has also been enabled in V7.7 with the application of zap 77z231.&lt;br /&gt;
&lt;br /&gt;
===PAGESZ parameter validated===&lt;br /&gt;
Previously it was possible to set the PAGESZ parameter to any value, although Model 204 internally supports one page size of 6184, and any deviation from this value would have led to problems during file creation. The value of this parameter is now controlled, such that setting it to any value other than 6184 will generate an M204.1149 message with the parameter being reset to 6184.&lt;br /&gt;
&lt;br /&gt;
===ECPRIV and the IDCAMS facility===&lt;br /&gt;
At V7.7 a security loophole was closed, whereby all ECF modules were run under external-authorizer profile of the calling user. Previously any ECF tasks were run under the owning job&#039;s external-authorizer profile, and in order for certain sites to retain that ability, a new setting of ECPRIV, value 4, was introduced to retain the ability to run ECF tasks using the job&#039;s security profile. &lt;br /&gt;
&lt;br /&gt;
The ECPRIV 4 setting potentially introduced a security loophole when calling the IDCAMS interface, based upon what the IDCAMS utility is able to do at a system level. Consequently as of this release, the ECPRIV 4 setting will be ignored when calling the IDCAMS facility via ECF, and such IDCAMS processes will always use the calling user&#039;s security profile. Any existing jobs that use ECF to call the IDCAMS utility with the ECFPRIV 4 bit set should be checked to ensure that the calling user&#039;s security profile still satisfies the job&#039;s requirements.&lt;br /&gt;
&lt;br /&gt;
===TCPOPTS is view-only===&lt;br /&gt;
In previous versions the &amp;lt;var&amp;gt;TCPOPTS&amp;lt;/var&amp;gt; parameter, which identifies the type of IP addressing in use (v4 or v6), was resetable, although it was always documented as a view-only parameter. The parameter is now handled as a view-only parameter, and any attempts to reset the parameter will result in the following message:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;gt;   M204.1123: Parameter TCPOPTS not reset&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===ZHPF command can only be issued by a system manager===&lt;br /&gt;
In previous versions it was possible to issue the ZHPF command without being logged on. From this release onwards, a user would have to be logged on with system manager privileges to be able to issue this command.&lt;br /&gt;
&lt;br /&gt;
Additionally, the command output will now only  display results for currently open files.&lt;br /&gt;
&lt;br /&gt;
This changes has been enabled in v7.7 with the application of zap 77z264.&lt;br /&gt;
&lt;br /&gt;
===Terminal MODEL reset failure===&lt;br /&gt;
If a reset of the terminal MODEL parameter fails due to an undersized output page buffer, then in addition to the existing messages that inform the user of this failure:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;gt;    M204.1875 UNABLE TO RESET MODEL TO %C &lt;br /&gt;
    M204.1123: Parameter MODEL not reset&amp;lt;/p&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
the following message will now be issued:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;gt;    M204.1008: LOUTPB must be increased to at least &amp;lt;number&amp;gt; &amp;lt;/p&amp;gt;&lt;br /&gt;
                                                         &lt;br /&gt;
where &amp;lt;number&amp;gt; is the minimum value of LOUTPB necessary to support the terminal model.&lt;br /&gt;
&lt;br /&gt;
This change is enabled in V7.7 with the application of zap 77z309.&lt;br /&gt;
&lt;br /&gt;
==Notes for system manager and installer==&lt;br /&gt;
===CRAM SVC installation is deprecated===&lt;br /&gt;
The CRAM SVC installation has been deprecated as of version 7.5. &amp;lt;br /&amp;gt;Installation of CRAM-XDM is described as part of the [[Model 204 installation]].&lt;br /&gt;
===Authorization and maintenance zaps===&lt;br /&gt;
When you download Rocket M204 product object files, all relevant authorization keys and all current maintenance zaps are pre-applied to the object files as part of the download process.&lt;br /&gt;
&lt;br /&gt;
==New and changed messages==&lt;br /&gt;
&lt;br /&gt;
See [[New and updated messages in Model 204 version 7.8|New and updated messages in Model 204 version 7.8]] for details.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category: Release notes]]&lt;/div&gt;</summary>
		<author><name>ELowell</name></author>
	</entry>
	<entry>
		<id>https://m204wiki.rocketsoftware.com/index.php?title=Release_notes_for_Model_204_version_7.8&amp;diff=117731</id>
		<title>Release notes for Model 204 version 7.8</title>
		<link rel="alternate" type="text/html" href="https://m204wiki.rocketsoftware.com/index.php?title=Release_notes_for_Model_204_version_7.8&amp;diff=117731"/>
		<updated>2019-12-10T21:45:28Z</updated>

		<summary type="html">&lt;p&gt;ELowell: /* Debugger enhancements */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
These release notes list the enhancements and other changes contained in Model 204 version 7.8. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;&amp;lt;b&amp;gt;******THIS IS A DRAFT DOCUMENT.******&amp;lt;/b&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
These release notes list the enhancements and other changes contained in Model 204 version 7.8, &amp;lt;b&amp;gt;&amp;lt;i&amp;gt;which is still in development&amp;lt;/i&amp;gt;&amp;lt;/b&amp;gt;. Until the commercial release of the software, Rocket reserves the right to add to, remove, or change anything described herein. &lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
These release notes contain installation and features information for the Rocket Model 204 version 7.8 release.&lt;br /&gt;
Before beginning your installation, please read through this information about product installation and changes.&lt;br /&gt;
&lt;br /&gt;
==New in this release==&lt;br /&gt;
The table below cites some highlights of Model&amp;amp;nbsp;204 version 7.8. For a full list of features, refer to the Table of Contents. &lt;br /&gt;
&amp;lt;p&amp;gt;See also the [[#Compatibility Issues|Compatibility]] section for possible issues.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;tr class=&amp;quot;head&amp;quot;&amp;gt;&amp;lt;th&amp;gt;Category&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Feature&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;SOUL&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The new [[#AmIndependent|AmIndependent]] method returns TRUE for daemons spawned by RunIndependently.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The Object class now supports the [[#Support for copying Object class objects|copy and deepCopy methods]].&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Janus Web&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[[#Web Sockets|Janus Web Sockets]] are now supported.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td nowrap&amp;gt;Networking&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Note:&amp;lt;/b&amp;gt; The two-phase commit and commit exits features are licensed and purchased separately from Model 204.&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Two-phase commit. A Model 204 online can now be configured to use two-phase commit (2PC). The Janus internal socket API is used for the calls to the coordinator. JANUS commands are used for all 2PC configuration. A new JANUS port type has been added, 2PC.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Commit exits are now supported. The commit exit runs within the APSY, which is defined by the &amp;lt;var&amp;gt;COMMITX&amp;lt;/var&amp;gt; parameter and uses normal APSY processing.  &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;ECF tables&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;DISPLAY ECF&amp;lt;/var&amp;gt; displays details from [[#Managing ECF tables more efficiently|ECF tables]], or the current status of users accessing ECF modules.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;EXTERNAL REMOVE statement&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Performance&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[[#MP/204 offload improvements|MP/204 offload improvements]] -- application code for these SOUL statements is now fully offloadable: &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;File Records In/On&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Remember&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Position&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Sort Values&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Reset Header/Trailer&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Find and Print Count&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Find All Values&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;For Each Value&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Security&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;CA-Top Secret can [[#CA-Top Secret can disallow CCASTAT logins|disallow CCASTAT logins]].&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[[#DEFUSER can specify a jobname not authorized to access M204|DEFUSER]] can specify a jobname not authorized to access M204.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td nowrap&amp;gt;System enhancements&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The &amp;lt;var&amp;gt;MONITOR USERS&amp;lt;/var&amp;gt; command output displays [[#New wait types for daemon/master waits|two new wait types]].&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td nowrap&amp;gt;AUDIT204 enhancements&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The new TIMEHH parameter on the [[#FORMAT command|FORMAT]] command of the AUDIT204 utility provides greater time stamp precision.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td nowrap&amp;gt;New commands&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;[[#DISPLAY ECF|DISPLAY ECF]]&amp;lt;/var&amp;gt; displays details from ECF tables, or the current status of users accessing ECF modules.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td nowrap&amp;gt;New parameters&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;[[#ENQTIME|ENQTIME]]&amp;lt;/var&amp;gt; specifies the number of milliseconds waited for each record locking retry wait.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;[[#EVALOPT|EVALOPT]]&amp;lt;/var&amp;gt; controls the cancellation of a request on truncation of string data.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;[[#MAXPRE, MAXBOUT, MAXSUBT|MAXPRE, MAXBOUT, and MAXSUBT]]&amp;lt;/var&amp;gt; can be used to cancel a runaway transaction and prevent it from filling the checkpoint data set.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;[[#NLDAPBUF|NLDAPBUF]]&amp;lt;/var&amp;gt; allows the number of LDAP buffers allocated during startup to be set in CCAIN.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;[[#SERV4G|SERV4G]]&amp;lt;/var&amp;gt; allows testing of server tables that span a 4-gigabyte boundary.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;[[#WEBDFLT|WEBDFLT]]&amp;lt;/var&amp;gt; changes the default JANUS WEB ALLOW rule back to ALLOW.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td nowrap&amp;gt;Janus Web and SoftSpy debuggers&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The debuggers can now view or watch the values of [[#Access to exposed variables|variables exposed to local routines/methods]].&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;At breakpoints, the debuggers now [[#Subroutine or method display|display the subroutine or method]] where execution stopped.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td nowrap&amp;gt;User/system statistics&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;[[#MPR, MBO, MCP, and RCV|MPR, MBO, MCP, and RCV]]&amp;lt;/var&amp;gt; provide high water mark transaction information in conjunction with the &amp;lt;var&amp;gt;MAXPRE&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;MAXBOUT&amp;lt;/var&amp;gt;, and &amp;lt;var&amp;gt;MAXSUBT&amp;lt;/var&amp;gt; parameters. &lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[[#DKWTS and DKWTMICS|New system statistics]] DKWTS (DisK WaiTs) and DKWTMICS (DisK WaiT MICroSeconds) collect data to provide rough disk I/O service time numbers.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Operating system and hardware requirements==&lt;br /&gt;
&lt;br /&gt;
===Operating system requirements===&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;IBM z/OS versions supported:&amp;lt;/b&amp;gt; &lt;br /&gt;
  &amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;All IBM supported releases up to and including z/OS 2.3. &amp;lt;br /&amp;gt;(For z/OS 2.2, see [[IBM z/OS 2.2 PTF requirement]].)&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;p&amp;gt;Version 1.07 is sufficient for all functionality except for the following features:&amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;ul&amp;gt;&lt;br /&gt;
    &amp;lt;li&amp;gt;zHPF support requires version [[IBM z/OS 2.1 compatibility issue|2.1]].&amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;li&amp;gt;Large (1 MB) page support requires version 1.9.&amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;li&amp;gt;Extended address volumes (EAV) requires version 1.12.&amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;/ul&amp;gt;&lt;br /&gt;
  &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
On z/OS, Model 204 release 7.8 operates as an APF authorized load module, as required by many 7.8 features. &amp;lt;br /&amp;gt;&lt;br /&gt;
To run Model 204 unauthorized, [[Contacting Rocket Software Technical Support|contact Technical Support]].&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;IBM z/VM versions supported:&amp;lt;/b&amp;gt; &lt;br /&gt;
  &amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;All IBM supported releases up to and including z/VM 6.4.&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;IBM z/VSE versions supported:&amp;lt;/b&amp;gt;&lt;br /&gt;
  &amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;All IBM supported releases up to and including z/VSE 6.1.&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Hardware requirements===&lt;br /&gt;
 &lt;br /&gt;
In general, Model 204 version 7.8 requires the IBM z/890 or above processor.&lt;br /&gt;
&amp;lt;p&amp;gt;However, the IBM z10 or above processor is required for the following features:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;large (1 MB) page support&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;IBM&#039;s High Performance FICON (zHPF) support&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Connect&amp;lt;sup&amp;gt;&amp;amp;#9733;&amp;lt;/sup&amp;gt; compatibility with Model 204===&lt;br /&gt;
&lt;br /&gt;
Connect&amp;lt;span class=&amp;quot;superstar&amp;quot;&amp;gt;&amp;amp;#9733;&amp;lt;/span&amp;gt; version 7.5 or 7.7 is compatible with Model 204 version 7.8.&lt;br /&gt;
&lt;br /&gt;
For more information on Connect&amp;lt;span class=&amp;quot;superstar&amp;quot;&amp;gt;&amp;amp;#9733;&amp;lt;/span&amp;gt; installation, see the [[:Category:Connect*|Connect&amp;lt;span class=&amp;quot;superstar&amp;quot;&amp;gt;&amp;amp;#9733;&amp;lt;/span&amp;gt; wiki pages]].&lt;br /&gt;
&lt;br /&gt;
==SOUL (User Language) enhancements==&lt;br /&gt;
===AmIndependent method===&lt;br /&gt;
The &amp;lt;var&amp;gt;AmIndependent&amp;lt;/var&amp;gt; method returns TRUE for daemons spawned by &amp;lt;var&amp;gt;[[RunIndependently_(Daemon_subroutine)|RunIndependently]]&amp;lt;/var&amp;gt;. (The action of &amp;lt;var&amp;gt;[[AmDaemon_(Daemon_property)|AmDaemon]]&amp;lt;/var&amp;gt; remains unchanged.)&lt;br /&gt;
&lt;br /&gt;
The following table shows the values returned by &amp;lt;var&amp;gt;AmIndependent&amp;lt;/var&amp;gt; versus &amp;lt;var&amp;gt;AmDaemon&amp;lt;/var&amp;gt; for different daemon types:&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Type&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;AmDaemon&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;AmIndependent&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;$COMBG&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;False&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;False&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Independent daemon&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;False&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;True&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Other daemon&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;True&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;False&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Web, etc.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;False&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;False&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===$ProcOpn===&lt;br /&gt;
&amp;lt;var&amp;gt;[[$ProcOpn|$ProcOpn]]&amp;lt;/var&amp;gt; now supports the opening of a procedure with an all-numeric name, and including a leading zero, such as:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;%result = $procOpn(&#039;0123&#039;, &#039;MYFILE&#039;)&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Support for such procedure names was initially introduced at V7.7, and this feature of &amp;lt;var&amp;gt;$ProcOpn&amp;lt;/var&amp;gt; is also enabled in V7.7 with the application of zap 77z054.&lt;br /&gt;
&lt;br /&gt;
===Allow parentheses to surround a boolean enumeration object===&lt;br /&gt;
The following sample code:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;   begin                                       &lt;br /&gt;
   variables are undefined                  &lt;br /&gt;
   %isValid is boolean initial (True)       &lt;br /&gt;
   if (%isValid) then                  &lt;br /&gt;
      print &#039;in IF&#039;                            &lt;br /&gt;
   end if                                   &lt;br /&gt;
   end   &amp;lt;/p&amp;gt;      &lt;br /&gt;
&lt;br /&gt;
will now compile and run successfully, since this syntax: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;if (%isValid) then &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
is logically equivalent to this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;if %isValid then &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Prior to V7.8 the presence of parentheses surrounding the boolean enumeration object would have caused a compilation error. This change is enabled in V7.7 with the application of zap 77z370.&lt;br /&gt;
&lt;br /&gt;
===Support for copying Object class objects===&lt;br /&gt;
The Object class now supports the copy and deepCopy methods. For example, an Object object can be copied as follows:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;   begin               &lt;br /&gt;
   %x is object object &lt;br /&gt;
   %y is object object &lt;br /&gt;
   %y = new            &lt;br /&gt;
   %x = %y:copy        &lt;br /&gt;
   end &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This change is enabled in v7.7 with the application of zap 77z076, and within V7.6 with the application of zap 76z412.&lt;br /&gt;
&lt;br /&gt;
===Assignment of enumeration values to method variables===&lt;br /&gt;
Enumerations values can now be assigned to method variables whose result is an enumeration. So, for example, the following code:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;   begin                                               &lt;br /&gt;
   enumeration colour                                  &lt;br /&gt;
      public                                           &lt;br /&gt;
         value red                                     &lt;br /&gt;
         value white                                   &lt;br /&gt;
         value blue                                    &lt;br /&gt;
      end public                                       &lt;br /&gt;
   end enumeration                                     &lt;br /&gt;
   %func    is function getColour is enumeration colour&lt;br /&gt;
   local function getColour is enumeration colour      &lt;br /&gt;
      return blue                                      &lt;br /&gt;
   end function                                        &lt;br /&gt;
   %func    = getColour                                &lt;br /&gt;
   %func    = (colour):red                             &lt;br /&gt;
   printText {~=%(Local):(%func)}                      &lt;br /&gt;
   end  &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
will produce this result:&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt; %(Local):(%func)=red &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
whereas previously this line:   &lt;br /&gt;
&lt;br /&gt;
  &amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt; %func    = (colour):red &amp;lt;/p&amp;gt;   &lt;br /&gt;
&lt;br /&gt;
would have been rejected with this message:&lt;br /&gt;
&lt;br /&gt;
   &amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;MSIR.0993: Assignment invalid: mismatch between method and method variable &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This change is enabled in V7.7 with the application of zap 77z128.&lt;br /&gt;
&lt;br /&gt;
===Optional output method parameters===&lt;br /&gt;
Prior to this release output parameters could not be optional or have default values. In this release output parameters can be specified as &amp;lt;var&amp;gt;Optional&amp;lt;/var&amp;gt;, and a default value can be specified with &amp;lt;var&amp;gt;Default&amp;lt;/var&amp;gt;. One related change is that if a &amp;lt;var&amp;gt;Len&amp;lt;/var&amp;gt; value is specified with &amp;lt;var&amp;gt;Optional&amp;lt;/var&amp;gt; or &amp;lt;var&amp;gt;Default&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;Output&amp;lt;/var&amp;gt;, it indicates the length of the hidden target for the output parameter if none was passed. For all other &amp;lt;var&amp;gt;Output&amp;lt;/var&amp;gt; parameters, &amp;lt;var&amp;gt;Len&amp;lt;/var&amp;gt; is meaningless, just as it was before Model 204 V7.8. The following is an example of the use of an optional output parameter:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;function getRemote( -&lt;br /&gt;
   %target is string len 32, %errorReason is string len 80 optional output -&lt;br /&gt;
) is float&lt;br /&gt;
  ...&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
In this example, if &amp;lt;code&amp;gt;%errorReason&amp;lt;/code&amp;gt; is not specified in a call and then set to a value longer than 80 bytes it wil be truncated to 80 bytes. However, if a string of a different length is passed, the length of that string determines truncation behavior.&lt;br /&gt;
&lt;br /&gt;
==External Call Facility enhancements==&lt;br /&gt;
===Managing ECF tables more efficiently===&lt;br /&gt;
The are two new features to help manage ECF tables more efficiently, avoid conditions where the table can fill, and prevent the definition of further entities.&lt;br /&gt;
&lt;br /&gt;
The first feature is the new &amp;lt;var&amp;gt;DISPLAY ECF&amp;lt;/var&amp;gt; command, which displays the contents of ECF tables and also the current status of users accessing ECF modules. See more details of the &amp;lt;var&amp;gt;[[#DISPLAY ECF|DISPLAY ECF]]&amp;lt;/var&amp;gt; command below.&lt;br /&gt;
&lt;br /&gt;
The second feature is a new &amp;lt;var&amp;gt;EXTERNAL REMOVE&amp;lt;/var&amp;gt; statement with the following syntax:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;EXTERNAL REMOVE &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;modulename&amp;lt;/span&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This statement causes the entry for the named module to be removed from the module table. The table entry is then placed on a free chain of entries and can be reused by issuing the &amp;lt;var&amp;gt;EXTERNAL MODULE&amp;lt;/var&amp;gt; statement. This allows the module table to be managed with redundant entries removed, without having to recycle the ONLINE.&lt;br /&gt;
&lt;br /&gt;
An &amp;lt;var&amp;gt;EXTERNAL REMOVE&amp;lt;/var&amp;gt; statement will return &amp;lt;code&amp;gt;$status/$statusd&amp;lt;/code&amp;gt; values of &amp;lt;code&amp;gt;0/0&amp;lt;/code&amp;gt;, and most other status values that can be returned by the &amp;lt;var&amp;gt;EXTERNAL REMOVE&amp;lt;/var&amp;gt; statement are already documented in the ECF return codes table. If an &amp;lt;var&amp;gt;EXTERNAL REMOVE&amp;lt;/var&amp;gt; is attempted against a module that is currently being called (in use), then &amp;lt;code&amp;gt;$status/$statusd&amp;lt;/code&amp;gt; will return the values &amp;lt;code&amp;gt;20/1&amp;lt;/code&amp;gt; (module unavailable).&lt;br /&gt;
&lt;br /&gt;
==System enhancements==&lt;br /&gt;
&lt;br /&gt;
===New wait types for daemon/master waits===&lt;br /&gt;
&lt;br /&gt;
Two new wait types, viewable on the &amp;lt;var&amp;gt;[[MONITOR_command|MONITOR]] USERS&amp;lt;/var&amp;gt; command output, have been implemented as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;57&amp;lt;/code&amp;gt; - Means a daemon thread waiting for its master thread  &amp;lt;br /&amp;gt;     &lt;br /&gt;
&amp;lt;code&amp;gt;58&amp;lt;/code&amp;gt; - Means a master thread waiting for one of its daemon threads&lt;br /&gt;
&lt;br /&gt;
This change is enabled in V7.7 with the application of zap 77z410.&lt;br /&gt;
&lt;br /&gt;
===Snap formatting changes===&lt;br /&gt;
Date/time stamps in the page headers of snaps will now be shown in normal format, rather than in julian format as in previous versions. So in the following example, a particular snap header under v7.7 or previous versions would show as: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;SNAPID    1   19226.060155  M204.0022: Bug .. nnnnn               PAGE     1 &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
whereas the same snap header under v7.8 would show as: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;SNAPID    1  2019/08/14 06:01:06   M204.0022: Bug .. nnnnn        PAGE     1 &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Also, due to improvements in handling trailing blanks in snap output, a snap generated under v7.8 should be marginally smaller than the same snap generated under previous versions, assuming the same SNAPCTL settings.&lt;br /&gt;
&lt;br /&gt;
===Call stack trace for problem diagnosis===&lt;br /&gt;
A  call stack trace is now provided to help diagnose and resolve common errors. To enable the stack trace, do either of the following: &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Set the &amp;lt;var&amp;gt;[[SIRFACT parameter|SIRFACT]] X&#039;01&#039;&amp;lt;/var&amp;gt; bit.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Set the &amp;lt;var&amp;gt;[[DEBUGUL parameter|DEBUGL]]&amp;lt;/var&amp;gt; parameter. Note that the &amp;lt;var&amp;gt;DEBUGUL&amp;lt;/var&amp;gt; approach will introduce extra QTBL overhead. &amp;lt;p&amp;gt;(&amp;lt;var&amp;gt;DEBUGUL&amp;lt;/var&amp;gt; provides a similar facility with an include trace of procedures leading to the error, but this might not be potentially as useful as the call trace.)&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt; &lt;br /&gt;
&lt;br /&gt;
The call stack trace can assist in diagnosing run-time errors that might occur, as illustrated by the following &amp;quot;Variable too small for result&amp;quot; and &amp;quot;MBSCAN exceeded&amp;quot; examples.&lt;br /&gt;
&lt;br /&gt;
====Variable too small for result====&lt;br /&gt;
When the stack trace is enabled, a &amp;quot;variable too small&amp;quot; error results in the following message:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;M204.2966: Error at line n, procedure &#039;&#039;procname&#039;&#039; in file &#039;&#039;procfile&#039;&#039;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
which identifies the line within a procedure where the error is occurring, in addition to the usual message:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;M204.0552: Variable too small for result&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Any subsequent M204.2966 messages indicate the point in the code from where the code in error was called. For example, a stack of three subroutine calls leading to a &amp;quot;variable too small&amp;quot; error might result in the following messaging:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;   M204.0552: Variable too small for result                             &lt;br /&gt;
   M204.2966: Error at line 9, procedure MYPROC.LEVEL4 in file MYPROC   &lt;br /&gt;
   M204.2966: Called from line 5, procedure MYPROC.LEVEL3 in file MYPROC&lt;br /&gt;
   M204.2966: Called from line 5, procedure MYPROC.LEVEL2 in file MYPROC&lt;br /&gt;
   M204.2966: Called from line 5, procedure MYPROC.LEVEL1 in file MYPROC &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This information should help in diagnosing the problem. &lt;br /&gt;
&lt;br /&gt;
If the error occurs within a command level program rather than a procedure, then the M204.2966 message is replaced by an M204.2967 message, and a similar error condition to the above with a preceding call stack might be audited as follows:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;   M204.0552: Variable too small for result              &lt;br /&gt;
   M204.2967: Error at line 14 of command level program  &lt;br /&gt;
   M204.2967: Called from line 5 of command level program&lt;br /&gt;
   M204.2967: Called from line 3 of command level program &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If neither &amp;lt;var&amp;gt;SIRFACT X&#039;01&#039;&amp;lt;/var&amp;gt; nor &amp;lt;var&amp;gt;DEBUGUL&amp;lt;/var&amp;gt; is set, then the &amp;quot;variable too small&amp;quot; error produces the following messages:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;   M204.0552: Variable too small for result &lt;br /&gt;
   M204.2968: Error: no debug info &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====MBSCAN exceeded====&lt;br /&gt;
Similarly to the handling of the &amp;quot;variable too small for result&amp;quot; error, the call stack can also be used to diagnose errors where the value of &amp;lt;var&amp;gt;[[MBSCAN parameter|MBSCAN]]&amp;lt;/var&amp;gt; is exceeded as a result of a direct search of Table B records. &lt;br /&gt;
&amp;lt;p&amp;gt;Again, under V7.8, with either the &amp;lt;var&amp;gt;SIRFACT X&#039;01&#039;&amp;lt;/var&amp;gt; bit set or &amp;lt;var&amp;gt;DEBUGUL&amp;lt;/var&amp;gt; set, if a long request occurs as a result of exceeding &amp;lt;var&amp;gt;MBSCAN&amp;lt;/var&amp;gt;, then initially the following message is produced, as before:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;M204.0569: File &#039;&#039;filename&#039;&#039;, Find: Table B records to be searched = &#039;&#039;nnnn&#039;&#039;&amp;lt;/p&amp;gt;&lt;br /&gt;
followed by a DYRWT prompt message. If the user replies &#039;N&#039; to the prompt, or if the request is run in an environment (such as a batch job) where the default response is &#039;N&#039;, the following message is produced after the M204.0569 message:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;Cancelling request: M204.2969: MBSCAN (&#039;&#039;mm&#039;&#039;) exceeded, records to be searched = &#039;&#039;nnnn&#039;&#039;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
where &#039;&#039;mm&#039;&#039; is the current setting of &amp;lt;var&amp;gt;MBSCAN&amp;lt;/var&amp;gt;. The M204.2969 message is followed by M204.2966 messages displaying the call stack trace. Thus, if the following code is run from procedure MYPROC.MBSCAN against the demo database, with an &amp;lt;var&amp;gt;MBSCAN&amp;lt;/var&amp;gt; setting of 10:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;   b                           &lt;br /&gt;
   call sub1                   &lt;br /&gt;
   sub1: subroutine            &lt;br /&gt;
   fd1:                        &lt;br /&gt;
      in clients fd city = ONTARIO&lt;br /&gt;
              end find         &lt;br /&gt;
      fr fd1                      &lt;br /&gt;
         pai                      &lt;br /&gt;
         print                    &lt;br /&gt;
      end for                     &lt;br /&gt;
   end subroutine              &lt;br /&gt;
   end &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
then the following messages are produced, assuming any prompts are responded to with an &#039;N&#039;:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;   M204.0569: File CLIENTS, Find: Table B records to be searched = 3415&lt;br /&gt;
   Cancelling request: M204.2969: MBSCAN (10) exceeded, records to be searched = 3415  &lt;br /&gt;
   M204.2966: Error at line 6, procedure MYPROC.MBSCAN in file MYPROC&lt;br /&gt;
   M204.2966: Called from line 3, procedure MYPROC.MBSCAN in file MYPROC  &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===appendJournalData===&lt;br /&gt;
The &amp;lt;var&amp;gt;[[AppendJournalData_(Stringlist_function)|AppendJournalData]]&amp;lt;/var&amp;gt; function is now more tolerant of an outstanding BUMP request. Previously, if &amp;lt;var&amp;gt;AppendJournalData&amp;lt;/var&amp;gt; was called to inadvertently retrieve a large amount of journal data, typically when called implicitly from within SirScan, then any outstanding BUMP request wouldn&#039;t be honored until all of the data had been retrieved, at which point the BUMP request would be completed, and all data would be lost.&lt;br /&gt;
&lt;br /&gt;
Now, the &amp;lt;var&amp;gt;AppendJournalData&amp;lt;/var&amp;gt; process checks for outstanding BUMP requests before each track I/O is executed, thus avoiding excessive I/Os against the journal and long waits for the BUMP of such a process to complete.&lt;br /&gt;
&lt;br /&gt;
==AUDIT204 enhancements==&lt;br /&gt;
===FORMAT command===&lt;br /&gt;
TIMEHH is a new parameter used with the FORMAT command of the [[Tracking_system_activity_(CCAJRNL,_CCAAUDIT,_CCAJLOG)#AUDIT204_utility|AUDIT204]] utility.  It indicates that timestamps, printed at the beginning of each line of output, should include hundredths of a second. Requires no other arguments.&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;b&amp;gt;NOTE:&amp;lt;/b&amp;gt; This parameter and the 78 version (or later) of AUDIT204 may be used against a 77 (or later) CCAJRNL.&amp;lt;/p&amp;gt;&lt;br /&gt;
For example:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;//CCAIN DD *&lt;br /&gt;
FORMAT YEARFORM 4&lt;br /&gt;
TIMEHH&lt;br /&gt;
TYPE ER MS LI&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Recovery enhancements==&lt;br /&gt;
===Media Recovery in a multi-user environment===&lt;br /&gt;
It is now possible to perform media recovery by issuing the &amp;lt;var&amp;gt;REGENERATE&amp;lt;/var&amp;gt; command to roll forward selected files in a multi-user environment, with the media recovery being carried out by different users with system manager privileges. The new USING option allows for the specification of a ddname for the input journal stream to be used by the &amp;lt;var&amp;gt;REGENERATE&amp;lt;/var&amp;gt; command. Previously media recovery was restricted to single user batch jobs, using the CCAGEN ddname for the input journal. For more details, see the &amp;lt;var&amp;gt;[[#REGENERATE|REGENERATE]]&amp;lt;/var&amp;gt; command below.&lt;br /&gt;
&lt;br /&gt;
==Security enhancements==&lt;br /&gt;
===CA-Top Secret can disallow CCASTAT logins===&lt;br /&gt;
The [[CA-Top_Secret_interface|CA-Top Secret]] interface now recognizes the &amp;lt;code&amp;gt;DEFACID=&amp;lt;/code&amp;gt;, setting and does not allow CCASTAT logins in the online if &amp;lt;code&amp;gt;DEFACID&amp;lt;/code&amp;gt; is set to null. (There is no attempt to log on M204USR.) Therefore, to disallow CCASTAT logons, set DEFACID=, in [[CA-Top_Secret_interface#Preparing_a_TOPSPARM_parameter_module_with_TOPSGEN|TOPSPARM]]. CCASTAT will be opened because it contains file and group passwords, but it will not be used for logons if CCASTAT logons are not allowed.&lt;br /&gt;
&lt;br /&gt;
===CUSTOM=11 and mixed cased input===&lt;br /&gt;
The &amp;lt;var&amp;gt;[[CUSTOM_parameter|CUSTOM]]&amp;lt;/var&amp;gt; parameter CUSTOM=11 setting no longer requires that a *LOWER command be issued prior to a LOGCTL command (to add or change a  password) to preserve mixed case input. Prior to this release, with CUSTOM=11 in place, *LOWER had to be issued before a LOGCTL command, otherwise any mixed case password strings would automatically be translated into uppercase. This change is enabled in V7.7 with the application of zap 77z108.&lt;br /&gt;
&lt;br /&gt;
===DEFUSER can specify a jobname not authorized to access M204===&lt;br /&gt;
When specifying DEFUSER=JOBNAME and VALIDAT=LOGON in the RACFGEN parms for an ONLINE, if the specified jobname ( the owning id for the ONLINE job ) isn&#039;t authorized to use Model 204 via RACF, any LOGIN commands specifying no userid will now succeed ( previously such a LOGON would have failed ). This enables users to submit jobs with USE $JOB, whereby the string USER=jobname  will be added to the submitted JCL, and this in turn is useful if the specified jobname has dataset access privileges to datasets required by the submitted jobs, even if the jobname itself isn&#039;t authorized to use M204.&lt;br /&gt;
&lt;br /&gt;
==Janus product enhancements==&lt;br /&gt;
&lt;br /&gt;
===Web Sockets===&lt;br /&gt;
Web Sockets are now supported in Janus Web Server.&lt;br /&gt;
&lt;br /&gt;
The Web Socket protocol provides various advantages over the HTTP protocol:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Web Sockets allow full-duplex communication.&amp;lt;/li&amp;gt; &lt;br /&gt;
&amp;lt;li&amp;gt;Efficient framing of payload data uses minimal overhead.&amp;lt;/li&amp;gt;  &lt;br /&gt;
&amp;lt;li&amp;gt;The Web Socket protocol is end-user extensible.&amp;lt;/li&amp;gt;  &lt;br /&gt;
&amp;lt;li&amp;gt;Most importantly, Web Sockets can be deployed completely within an existing HTTP/HTTPS framework.&amp;lt;/li&amp;gt; &lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To implement Web Sockets, you must enable the Janus Web port for Web Socket upgrades with the new &lt;br /&gt;
WEBSOCKET parameter. The WEBSOCKET option can be specified on either the port definition or the &lt;br /&gt;
JANUS WEB rule for the URL. &lt;br /&gt;
Likewise, an individual Janus Web rule can either allow or disallow Web Socket connections with the &lt;br /&gt;
WEBSOCKET and NOWEBSOCKET parameters, respectively. &lt;br /&gt;
&lt;br /&gt;
For details on implementing Web Sockets, see the [[WebSocket_(Socket_function)|WebSocket]] wiki page.&lt;br /&gt;
&lt;br /&gt;
===Janus Web Server access rule===&lt;br /&gt;
The automatic &amp;lt;var&amp;gt;[[JANUS WEB ALLOW]]&amp;lt;/var&amp;gt; rule, which allowed any user to access the port without requiring a login, is changed &amp;lt;i&amp;gt;for non-SSL ports&amp;lt;/i&amp;gt; to the following:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;JANUS WEB &amp;lt;i&amp;gt;portname&amp;lt;/i&amp;gt; DISALLOW *&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
This rule requires a system administrator to explicitly define &amp;lt;var&amp;gt;ALLOW&amp;lt;/var&amp;gt; rules to enable users to access non-SSL ports.&lt;br /&gt;
The rule applies unless overridden by user-added rules. &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;blockquote class=&amp;quot;note&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;b&amp;gt;Note:&amp;lt;/b&amp;gt; To revert from this change in the JANUS DEFINE default and make the default &lt;br /&gt;
 non-SSL &amp;lt;var&amp;gt;ALLOW&amp;lt;/var&amp;gt; rule as it was in version 7.5 and earlier (&amp;lt;code&amp;gt;ALLOW *&amp;lt;/code&amp;gt;), turn on the 1 bit of the &amp;lt;var&amp;gt;[[WEBDFLT parameter|WEBDFLT]]&amp;lt;/var&amp;gt; parameter: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;RESET WEBDFLT=1&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Increase in pending accepts for Janus BPX ports===&lt;br /&gt;
The default number of pending accepts for Janus BPX server ports has been increased from 3 to 12, thus reducing the likelihood that a pending accept may fail with the message&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;MSIR.0019 Connection request rejected for port (port), MAXCON exceeded&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The actual number of pending accepts to be supported on the port can be set with the new parameter MAXPEND, set on the &amp;lt;var&amp;gt;[[JANUS_DEFINE|JANUS DEFINE]]&amp;lt;/var&amp;gt; command, where MAXPEND can vary from 3 up to a maximum value of 32. The change to the default value was enabled in V7.7 with the application of zap 77z269.&lt;br /&gt;
&lt;br /&gt;
===TCP listen backlog increased===&lt;br /&gt;
&lt;br /&gt;
The [[Program_Communication_facilities#LISTEN_call|TCP listen]] backlog has been increased from 16 to 1024 under z/OS.&lt;br /&gt;
&lt;br /&gt;
This update tells the TCP stack to queue up to 1024 of such requests up before dropping them, thus reducing, or in most cases eliminating, the likelihood of a connection request drop, other than in exceptional circumstances, such as a denial of service attack. This change was enabled in V7.7 with the application of zap 77z340.&lt;br /&gt;
&lt;br /&gt;
===Defer the freeing of XMLSCREEN input XML===&lt;br /&gt;
&lt;br /&gt;
The freeing of [[XMLSCREEN_and_NOXMLSCREEN_(JANUS_DEFINE_parameters)|XMLSCREEN]] input XML is now deferred until the next Read Screen or session termination. This means that if an application error is detected, the input XML can be retrieved with [[$Web_Input_Content|$Web_Input_Content]] and then logged for problem analysis. &lt;br /&gt;
&lt;br /&gt;
Prior to this release the XML received from the client is freed immediately after being used to set the input data for a Read Screen, rendering it unavailable for problem determination.&lt;br /&gt;
&lt;br /&gt;
This change is enabled in V7.7 with the application of zap 77z368.&lt;br /&gt;
&lt;br /&gt;
===XMLSCREEN and Janus Web Legacy blank stripping===&lt;br /&gt;
&lt;br /&gt;
xmlScreens and Janus Web Legacy screens now adhere to the same standard as standard screen processing in terms of stripping leading blanks from input fields defined as [[Full-screen_feature#DEBLANK_or_NODEBLANK_option|DEBLANK]] (either explicitly or implicitly).&lt;br /&gt;
&lt;br /&gt;
This change is enabled in V7.7 with the application of zap 77z400.&lt;br /&gt;
&lt;br /&gt;
===SSL input buffer size===&lt;br /&gt;
&lt;br /&gt;
The default value of [[SSLIBSIZE_(JANUS_DEFINE_parameter)|SSLIBSIZE]] has been increased to 16384 + 128, or 16512. This size should ensure correct communication with all TLS spec compliant applications. It is the maximum size allowed unless you use [[CUSTOM_parameter#Using_CUSTOM.3D.2818.29|CUSTOM=18]].    &lt;br /&gt;
&lt;br /&gt;
This changed is enabled in V7.7 with the application of zap 77z415.&lt;br /&gt;
&lt;br /&gt;
===Increasing LDAP buffers===&lt;br /&gt;
&lt;br /&gt;
The number of LDAP buffers allocated at startup can now be changed by setting the NLDAPBUF parameter in CCAIN. See below for details on [[#NLDAPBUF|NLDAPBUF]].&lt;br /&gt;
&lt;br /&gt;
===Increase URL length returned with $web_form_action===&lt;br /&gt;
With this release the maximum Janus Web Server incoming URL that can be handled by &amp;lt;var&amp;gt;$web_form_action&amp;lt;/var&amp;gt; is increased from 512 bytes to 1024 bytes. This change is enabled in V7.7 with the application of zap 77z424.&lt;br /&gt;
&lt;br /&gt;
===Maximum RBSIZE setting increased===&lt;br /&gt;
The maximum value for RBSIZE, set on the &amp;lt;var&amp;gt;[[JANUS DEFINE|JANUS DEFINE]]&amp;lt;/var&amp;gt; command, is now increased to 16777215 (previously the maximum was 65534). RBSIZE specifies the RPC or Request Buffer size.  On a Web port, the Janus request buffer holds browser request information such as header data, cookies, and form data. On other port types, it holds RPC input and output parameters. This change is enabled in V7.7 with the application of zap 77z427.&lt;br /&gt;
&lt;br /&gt;
==Debugger enhancements==&lt;br /&gt;
&lt;br /&gt;
===Access to exposed variables===&lt;br /&gt;
The debuggers can now view or watch the values of variables exposed to local routines/methods. Previously, any attempts to access an exposed variable would have displayed &amp;quot;%varname has no value&amp;quot; in the debugger session. (This feature is enabled in V7.7 with the application of zap 77z363.)&lt;br /&gt;
&lt;br /&gt;
===Subroutine or method display===&lt;br /&gt;
When execution stops, as at breakpoints, the debuggers now display in the title bar the subroutine or method where execution stopped.&lt;br /&gt;
&lt;br /&gt;
==Performance enhancements==&lt;br /&gt;
&lt;br /&gt;
===MP/204 offload improvements===&lt;br /&gt;
Application code issuing the following SOUL statements will now now be fully offloadable:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;File Records In/On&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Remember&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt; &lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Position&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Sort Values&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;                                             &lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Reset Header/Trailer&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Find and Print Count&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Find All Values&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;For Each Value&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
the above improvements are also enabled in V7.7 with the application of zaps 77z419 and 77z420.&lt;br /&gt;
&lt;br /&gt;
===X3270OUT exit offloadable===&lt;br /&gt;
When running MP/204 (AMPSUBS&amp;gt;0) and using the [[Coding_SNA_Communications_Server_conversion_exit_routines#X3270OUT_.28convert_output_from_3270_format.29|X3270OUT]] exit to convert a 3270 output data stream to the appropriate device protocol, the exit can now run in parallel mode to improve performance. This change was enabled in V7.7 with the application of zap 77z313.&lt;br /&gt;
&lt;br /&gt;
The X3270OUT exit must be written to be re-entrant.&lt;br /&gt;
&lt;br /&gt;
==New and changed commands==&lt;br /&gt;
===DISPLAY ECF===&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;DISPLAY ECF {{ M | N | U } like ?} &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This new command displays details from ECF tables, or the current status of users accessing ECF modules.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;syntax&amp;quot;&amp;gt;D ECF M&amp;lt;/span&amp;gt; displays the contents of the module table. For example:&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;    D ECF M &lt;br /&gt;
    Module   Loadlib  Address:Length     Loaded@      Lastused@   #Calls  Flags &lt;br /&gt;
    QATUM13C PROGLIB 2FB91FB8:00000028 19023:121506 19023:121506 00000001 &lt;br /&gt;
    QATUM13B PROGLIB 2FE65000:00009C18 19023:121506 19023:121506 00000001 &lt;br /&gt;
    QATUM13A PROGLIB 2FE6EC18:00001CD8 19023:121506 19023:121506 00000001  &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
(flags may be D=deleted; S=shared; H=halted; I=Idle)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;syntax&amp;quot;&amp;gt;D ECF N&amp;lt;/span&amp;gt; displays contents of the name table. For example: &amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;    D ECF N&lt;br /&gt;
    Module   Logical-call-name &lt;br /&gt;
    QATUM13C MOD_QATUM13C &lt;br /&gt;
    QATUM13B MOD_QATUM13B &lt;br /&gt;
    QATUM13A MOD_QATUM13A &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;syntax&amp;quot;&amp;gt;D ECF U&amp;lt;/span&amp;gt; displays details of users currently accessing ECF modules. This is also the default option, and so &amp;lt;span class=&amp;quot;syntax&amp;quot;&amp;gt;D ECF&amp;lt;/span&amp;gt; will display the same output as &amp;lt;span class=&amp;quot;syntax&amp;quot;&amp;gt;D ECF U&amp;lt;/span&amp;gt;. For example:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;    D ECF U                           &lt;br /&gt;
    User# Userid     Module   Parmlen &lt;br /&gt;
    00002 ADMIN      --none--         &lt;br /&gt;
    00003 ADMIN      COBSAMP1 00000002&lt;br /&gt;
    00004 ADMIN      COBSAMP1 00000002 &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;syntax&amp;quot;&amp;gt;D ECF &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;function&amp;lt;/var&amp;gt; LIKE &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;?&amp;lt;/var&amp;gt; &amp;lt;/span&amp;gt; (where &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;?&amp;lt;/var&amp;gt; is a valid pattern) displays details for entities that match the specified pattern. The function is either M (modules), N (names), or U (users), and it defaults to U. So for example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;D ECF U L A&amp;lt;/p&amp;gt;&lt;br /&gt;
or&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;D ECF U L A*&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
displays details of ECF users whose names begin with A.&lt;br /&gt;
&lt;br /&gt;
===REGENERATE===&lt;br /&gt;
The &amp;lt;var&amp;gt;REGENERATE&amp;lt;/var&amp;gt; command can now be run in a multi-user environment by multiple users with system manager privileges. A new option USING is provided to specify the ddname of the input journal, so that the full syntax is now as follows:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;  REGENERATE [USING ddname] FILE filename [FROM dumpname | IGNORE]&lt;br /&gt;
  [TO {LAST UPDATE [BEFORE yy.ddd hh:mm:ss.th] | LAST CHECKPOINT [BEFORE yy.dd hh:mm:ss.th] &lt;br /&gt;
  | UPDATE number OF yy.ddd hh:mm:ss.th | CHECKPOINT yy.ddd hh:mm:ss.th} ]&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The default for the using ddname is CCAGEN, but any ddname may be used to allocate an input journal and used. For example:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;  ALLOCATE REGEN1 WITH SCOPE=SYSTEM DSN=PROD1.GDGJ OLD SEQUENTIAL GEN=+2&lt;br /&gt;
  REGENERATE USING REGEN1 FILE TEST&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It is the user&#039;s responsibility to ensure that the file being regenerated is not in use, and so prior to usage, &amp;lt;var&amp;gt;BUMP FILE&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;STOP FILE&amp;lt;/var&amp;gt; should be used to isolate usage against the file. If the file is in use, the REGEN will fail with these messages:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;  M204.1430: Failed to open file TEST&lt;br /&gt;
  M204.1436: Stopped processing file TEST  &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
$STATUS will now be set for &amp;lt;var&amp;gt;REGENERATE&amp;lt;/var&amp;gt; with the following values:&lt;br /&gt;
&amp;lt;blockquote&amp;gt;    &lt;br /&gt;
    0 - Success &amp;lt;br/&amp;gt;&lt;br /&gt;
    1 - No files were processed &amp;lt;br/&amp;gt;&lt;br /&gt;
    2 - At least one file stopped processing &amp;lt;br/&amp;gt;&lt;br /&gt;
    4 - A serious error occurred, REGEN failed &lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Similarly, &amp;lt;var&amp;gt;SETGRC&amp;lt;/var&amp;gt; may be used to get the return code and error message.&lt;br /&gt;
&lt;br /&gt;
==New and changed parameters==&lt;br /&gt;
&lt;br /&gt;
===ECMODS===&lt;br /&gt;
The new minimum value for ECMODS, the allowable number of ECF modules, is 1. Prior to V7.8 the minimum value was 0. This changed was enabled in V7.7 with the application of zap 77z306.&lt;br /&gt;
&lt;br /&gt;
===ECNAMES===&lt;br /&gt;
The new minimum value for ECNAMES, the allowable number of ECF module names, is 1. Prior to V7.8 the minimum value was 0. This changed was enabled in V7.7 with the application of zap 77z306.&lt;br /&gt;
&lt;br /&gt;
===ECPSIZE===&lt;br /&gt;
The new minimum value for ECPSIZE, the initial storage allocation for ECF parameters, is 1024. Prior to V7.8 the minimum value was 0. This changed was enabled in V7.7 with the application of zap 77z306.&lt;br /&gt;
&lt;br /&gt;
===ENQTIME===&lt;br /&gt;
Millisecond duration of automatic record locking retry wait.&lt;br /&gt;
&lt;br /&gt;
Prior to this change, if record locking conflicts occur frequently in a busy online, any user with a non-zero value for &amp;lt;var&amp;gt;[[ENQRETRY parameter|ENQRETRY]]&amp;lt;/var&amp;gt; will wait at least 3 seconds before the conflict is dealt with. This can degrade overall system performance.      &lt;br /&gt;
                                                         &lt;br /&gt;
The &amp;lt;var&amp;gt;[[ENQTIME parameter|ENQTIME]]&amp;lt;/var&amp;gt; parameter specifies the number of milliseconds waited for each record locking retry wait. ENQTIME can be between 1 and 60000, corresponding to a minimum of 1 millisecond and a maximum of 1 minute. The default value of ENQTIME is 3000 (3 seconds).            &lt;br /&gt;
                                                         &lt;br /&gt;
For example, with ENQTIME = 100 and ENQRETRY = 7, after a record locking conflict occurs the thread will retry 7 times with wait intervals of .1 seconds, and so within at most .7 seconds either the lock becomes available or the conflict triggers an On unit or cancels the request.     &lt;br /&gt;
                                                         &lt;br /&gt;
The ENQTIME parameter may also be reset with $ResetN. &lt;br /&gt;
&lt;br /&gt;
This new parameter was enabled in V7.7 with the application of zap 77z299.&lt;br /&gt;
&lt;br /&gt;
===EVALOPT===&lt;br /&gt;
The new &amp;lt;var&amp;gt;EVALOPT&amp;lt;/var&amp;gt; parameter controls the cancellation of a request on truncation of string data. The default value is 0, and currently there is just one setting, 1, which means &amp;quot;cancel a request if truncation of string data occurs.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
For example, with the default of 0 in place, the following code &amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;    %x is string len 1   &lt;br /&gt;
    %y is string len 2   &lt;br /&gt;
    %y = &#039;ab&#039;            &lt;br /&gt;
    %x = %y              &lt;br /&gt;
    printtext {~} = {%x} &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
would cause silent truncation, and give the result&lt;br /&gt;
    &amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;%x = a &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If &amp;lt;var&amp;gt;EVALOPT&amp;lt;/var&amp;gt; is set to 1, then the above code produces the following message:&lt;br /&gt;
    &amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;M204.0552: Variable too small for result &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and the request is cancelled.&lt;br /&gt;
&lt;br /&gt;
===LFSCB===&lt;br /&gt;
LFSCB, the length of the full screen buffer, now has a new minimum value of 8 ( the previous minimum was 0 ). This change has been enabled in v7.7 with the application of zap 77z042, and within V7.6 with the application of zap 76z393.&lt;br /&gt;
&lt;br /&gt;
===MAXPRE, MAXBOUT, MAXSUBT===&lt;br /&gt;
&amp;lt;p&amp;gt;Introduced in zap 77z257.&amp;lt;/p&amp;gt;&lt;br /&gt;
The new &amp;lt;var&amp;gt;MAXPRE&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;MAXBOUT&amp;lt;/var&amp;gt;, and &amp;lt;var&amp;gt;MAXSUBT&amp;lt;/var&amp;gt; parameters can be used to cancel a runaway transaction and prevent it from filling the checkpoint data set. &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;MAXPRE&amp;lt;/var&amp;gt;:  Maximum number of pre-images per transaction.  &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;MAXBOUT&amp;lt;/var&amp;gt;: Maximum number of backout pages per transaction. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;MAXSUBT&amp;lt;/var&amp;gt;: Maximum number of subtransaction checkpoints that a transaction can span.&amp;lt;/li&amp;gt;&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;Each new parameter defaults to unlimited. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;If a parameter value is set, a transaction is cancelled if that value is exceeded, and the following message is displayed:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;M204.0524: Maximum number (&amp;lt;i&amp;gt;num&amp;lt;/i&amp;gt;) of &amp;lt;i&amp;gt;parameter&amp;lt;/i&amp;gt; exceeded.&amp;lt;/p&amp;gt;&lt;br /&gt;
where &amp;lt;i&amp;gt;num&amp;lt;/i&amp;gt; is the value set for &amp;lt;i&amp;gt;parameter&amp;lt;/i&amp;gt; (&amp;lt;var&amp;gt;MAXPRE&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;MAXBOUT&amp;lt;/var&amp;gt;, or &amp;lt;var&amp;gt;MAXSUBT&amp;lt;/var&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
===NLDAPBUF===&lt;br /&gt;
This new parameter allows the number of LDAP buffers allocated during startup to be set in CCAIN. The default value is 2, and the settable value can range from 0 to 65535.&lt;br /&gt;
&lt;br /&gt;
===PUPDTH (new minimum value)===&lt;br /&gt;
If a user sets the &amp;lt;var&amp;gt;[[PUPDTH parameter|PUPDTH]]&amp;lt;/var&amp;gt; parameter to 0, it will now automatically be increased to 1, its minimum value.&lt;br /&gt;
&lt;br /&gt;
===SERV4G===&lt;br /&gt;
This parameter allows testing of server tables that span a 4-gigabyte boundary. For example, if &amp;lt;var&amp;gt;SERV4G&amp;lt;/var&amp;gt; is &amp;lt;code&amp;gt;X&#039;FFFFF000&#039;&amp;lt;/code&amp;gt;, each ATB server will begin at &amp;lt;code&amp;gt;XX_FFFFF000&amp;lt;/code&amp;gt;. If SERV4G is &amp;lt;code&amp;gt;X&#039;FFFF0000&#039;&amp;lt;/code&amp;gt;, each ATB server will begin at &amp;lt;code&amp;gt;XX_FFFF0000&amp;lt;/code&amp;gt;. &amp;lt;code&amp;gt;XX&amp;lt;/code&amp;gt; is determined by the storage available on the system. The parameter is set in CCAIN.&lt;br /&gt;
&lt;br /&gt;
The contents of the ATB server are specified by using the &amp;lt;var&amp;gt;[[SERVGA parameter|SERVGA]]&amp;lt;/var&amp;gt; parameter.&lt;br /&gt;
&lt;br /&gt;
For example, if you want VTBL to span the 4G boundary, you can use these settings: &amp;lt;code&amp;gt;SERV4G=X&#039;FFFFF000&#039;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;SERVGA=X&#039;00040000&#039;&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;LVTBL=200 (6400 bytes, X&#039;1900&#039;)&amp;lt;/code&amp;gt;. This will force each server&#039;s VTBL to begin at &amp;lt;code&amp;gt;XX_FFFFF000&amp;lt;/code&amp;gt; and end at &amp;lt;code&amp;gt;XX+1_00000900&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===WEBDFLT===&lt;br /&gt;
At V7.7, the default access rule for non-SSL ports was changed from ALLOW * to DISALLOW *, meaning that unless any ALLOW rules were in place resulting in a login/password prompt, the port couldn&#039;t be accessed. The new &amp;lt;var&amp;gt;[[WEBDFLT_parameter|WEBDFLT]]&amp;lt;/var&amp;gt; parameter may be set to 1 for reversion to the old default of ALLOW *. Under V7.7, this new parameter was enabled with the application of zap 77z090. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;var&amp;gt;RESET WEBDFLT&amp;lt;/var&amp;gt; requires system administrator privileges. It is recommended to reset the 1 bit of &amp;lt;var&amp;gt;WEBDFLT&amp;lt;/var&amp;gt; to zero after issuing a series of &amp;lt;var&amp;gt;JANUS DEFINE&amp;lt;/var&amp;gt; commands which need WEBDFLT=1, as in the CCAIN input stream.&lt;br /&gt;
&lt;br /&gt;
==New and changed statistics==&lt;br /&gt;
===MPR, MBO, MCP, and RCV===&lt;br /&gt;
Introduced in zap 77z257.&lt;br /&gt;
&amp;lt;p&amp;gt;These statistics provide high water mark transaction information. (Since-last values will not be available until V78 GA.)&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;They are useful in conjunction with the &amp;lt;var&amp;gt;MAXPRE&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;MAXBOUT&amp;lt;/var&amp;gt;, and &amp;lt;var&amp;gt;MAXSUBT&amp;lt;/var&amp;gt; parameters. &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
User/system statistics:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;MPR: High water mark of transaction pre-images. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;MBO: High water mark of transaction backout pages. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;MCP: High water mark of transaction chkpoint spans. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
System statistics: &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;RCV: Number of blocks needed for subtransaction recovery &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt; &lt;br /&gt;
&amp;lt;p class=&amp;quot;note&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Notes:&amp;lt;/b&amp;gt; M204.0843 now displays the RCV statistic for subtransaction checkpoints.&lt;br /&gt;
The size of recovery checkpoint must be greater than the sum of the last RCV value plus the number of records in [[System_and_media_recovery#RESTART_recovery_considerations_for_sub-transaction_checkpoints|RESTART and RESTARTS]].&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
===DKWTS and DKWTMICS===&lt;br /&gt;
Introduced in zap 77z7289.&lt;br /&gt;
&amp;lt;p&amp;gt;The new system statistics DKWTS (DisK WaiTs) and DKWTMICS (DisK WaiT MICroSeconds) collect data to provide rough disk I/O service time numbers.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
DKWTS shows the number of disk I/O waits. DKWTMICS shows the total wait time for those waits in microseconds. Dividing the difference in DKWTMICS by the difference in DKWTS over an interval provides the average disk I/O wait time in microseconds.              &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;note&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Notes:&amp;lt;/b&amp;gt; &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The wait time does include internal Model 204 scheduler delays, so on a CPU bound Model 204 system, the service times calculated from DKWTS and DKWTMICS are likely to be an overestimate of actual service times.&amp;lt;/li&amp;gt;  &lt;br /&gt;
                                                                    &lt;br /&gt;
&amp;lt;li&amp;gt;DKWTS and DKWTMICS are not available in SirMon; use [[MONITOR_command|MONITOR]] SYSTEM STATISTICS to view these statistics.&amp;lt;/li&amp;gt;&amp;lt;/ul&amp;gt;  &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Compatibility issues==&lt;br /&gt;
===&amp;lt;b id=&amp;quot;listNewInit&amp;quot;&amp;gt;&amp;lt;/b&amp;gt;$ListNew cannot be used in Initial clause===&lt;br /&gt;
It is now a compilation error if &amp;lt;var&amp;gt;$ListNew&amp;lt;/var&amp;gt; is attempted to be used in the &amp;lt;var&amp;gt;Initial&amp;lt;/var&amp;gt; clause of a &lt;br /&gt;
[[Using_variables_and_values_in_computation#Declare_statements_for_.25variables|declaration statement]].&lt;br /&gt;
&amp;lt;p&amp;gt;This change is propagated by zap maintenance to versions 7.5 (zap 75Z487), 7.6 (zap 76Z514), and 7.7 (zap 77z281) of Model 204.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote class=&amp;quot;note&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Note:&amp;lt;/b&amp;gt; Strictly speaking, this would not be considered a compilation error, because previously although &amp;lt;code&amp;gt;..&amp;amp;nbsp;Initial($ListNew)&amp;lt;/code&amp;gt; did not produce a compilation error, in almost all circumstances it would produce a snap if the initialized %variable were used with some other &amp;lt;var&amp;gt;$List&amp;lt;i&amp;gt;xxx&amp;lt;/i&amp;gt;&amp;lt;/var&amp;gt; invocation.&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Restricting the use of the CUSTOM=38 setting===&lt;br /&gt;
The [[CUSTOM parameter|CUSTOM=38]] parameter setting, introduced at V7.5, inadvertently provided System Manager privileges to all users via the RESET command. This CUSTOM setting is now restricted to the RESETting of the LAUDIT parameter.&lt;br /&gt;
&lt;br /&gt;
===Disabling of Closure support===&lt;br /&gt;
Due to a number of bugs related to Closure support, introduced at V7.7, this feature, which can best be described as exposed methods assigned to method variables, has been disabled in this release. This change was also made to V7.7 with application of zap 77z119.&lt;br /&gt;
&lt;br /&gt;
===Password delimiter enforced===&lt;br /&gt;
When using &amp;lt;var&amp;gt;IFSTRTN&amp;lt;/var&amp;gt; to log on to a Model 204 online from an IFAM2 application, both the logonid and password must be followed by a semicolon, which is the delimiter. For example:      &lt;br /&gt;
                                      &lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;CALL IFSTRTN(RC,&#039;logonid;password;&#039;...)&amp;lt;/p&amp;gt;&lt;br /&gt;
                 &lt;br /&gt;
If a semicolon does not follow the password string, the following message will now be issued:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;M204.2964: Password missing or too long &amp;lt;/p&amp;gt;                 &lt;br /&gt;
                                                         &lt;br /&gt;
Previously, a semicolon following the password was not required and the first blank served as a password delimiter.  However, as of V7.7, embedded blanks are valid password characters and a semicolon is now required to delimit the password.&lt;br /&gt;
&lt;br /&gt;
This change has also been enabled in V7.7 with the application of zap 77z231.&lt;br /&gt;
&lt;br /&gt;
===PAGESZ parameter validated===&lt;br /&gt;
Previously it was possible to set the PAGESZ parameter to any value, although Model 204 internally supports one page size of 6184, and any deviation from this value would have led to problems during file creation. The value of this parameter is now controlled, such that setting it to any value other than 6184 will generate an M204.1149 message with the parameter being reset to 6184.&lt;br /&gt;
&lt;br /&gt;
===ECPRIV and the IDCAMS facility===&lt;br /&gt;
At V7.7 a security loophole was closed, whereby all ECF modules were run under external-authorizer profile of the calling user. Previously any ECF tasks were run under the owning job&#039;s external-authorizer profile, and in order for certain sites to retain that ability, a new setting of ECPRIV, value 4, was introduced to retain the ability to run ECF tasks using the job&#039;s security profile. &lt;br /&gt;
&lt;br /&gt;
The ECPRIV 4 setting potentially introduced a security loophole when calling the IDCAMS interface, based upon what the IDCAMS utility is able to do at a system level. Consequently as of this release, the ECPRIV 4 setting will be ignored when calling the IDCAMS facility via ECF, and such IDCAMS processes will always use the calling user&#039;s security profile. Any existing jobs that use ECF to call the IDCAMS utility with the ECFPRIV 4 bit set should be checked to ensure that the calling user&#039;s security profile still satisfies the job&#039;s requirements.&lt;br /&gt;
&lt;br /&gt;
===TCPOPTS is view-only===&lt;br /&gt;
In previous versions the &amp;lt;var&amp;gt;TCPOPTS&amp;lt;/var&amp;gt; parameter, which identifies the type of IP addressing in use (v4 or v6), was resetable, although it was always documented as a view-only parameter. The parameter is now handled as a view-only parameter, and any attempts to reset the parameter will result in the following message:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;gt;   M204.1123: Parameter TCPOPTS not reset&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===ZHPF command can only be issued by a system manager===&lt;br /&gt;
In previous versions it was possible to issue the ZHPF command without being logged on. From this release onwards, a user would have to be logged on with system manager privileges to be able to issue this command.&lt;br /&gt;
&lt;br /&gt;
Additionally, the command output will now only  display results for currently open files.&lt;br /&gt;
&lt;br /&gt;
This changes has been enabled in v7.7 with the application of zap 77z264.&lt;br /&gt;
&lt;br /&gt;
===Terminal MODEL reset failure===&lt;br /&gt;
If a reset of the terminal MODEL parameter fails due to an undersized output page buffer, then in addition to the existing messages that inform the user of this failure:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;gt;    M204.1875 UNABLE TO RESET MODEL TO %C &lt;br /&gt;
    M204.1123: Parameter MODEL not reset&amp;lt;/p&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
the following message will now be issued:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;gt;    M204.1008: LOUTPB must be increased to at least &amp;lt;number&amp;gt; &amp;lt;/p&amp;gt;&lt;br /&gt;
                                                         &lt;br /&gt;
where &amp;lt;number&amp;gt; is the minimum value of LOUTPB necessary to support the terminal model.&lt;br /&gt;
&lt;br /&gt;
This change is enabled in V7.7 with the application of zap 77z309.&lt;br /&gt;
&lt;br /&gt;
==Notes for system manager and installer==&lt;br /&gt;
===CRAM SVC installation is deprecated===&lt;br /&gt;
The CRAM SVC installation has been deprecated as of version 7.5. &amp;lt;br /&amp;gt;Installation of CRAM-XDM is described as part of the [[Model 204 installation]].&lt;br /&gt;
===Authorization and maintenance zaps===&lt;br /&gt;
When you download Rocket M204 product object files, all relevant authorization keys and all current maintenance zaps are pre-applied to the object files as part of the download process.&lt;br /&gt;
&lt;br /&gt;
==New and changed messages==&lt;br /&gt;
&lt;br /&gt;
See [[New and updated messages in Model 204 version 7.8|New and updated messages in Model 204 version 7.8]] for details.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category: Release notes]]&lt;/div&gt;</summary>
		<author><name>ELowell</name></author>
	</entry>
	<entry>
		<id>https://m204wiki.rocketsoftware.com/index.php?title=Release_notes_for_Model_204_version_7.8&amp;diff=117730</id>
		<title>Release notes for Model 204 version 7.8</title>
		<link rel="alternate" type="text/html" href="https://m204wiki.rocketsoftware.com/index.php?title=Release_notes_for_Model_204_version_7.8&amp;diff=117730"/>
		<updated>2019-12-10T21:33:08Z</updated>

		<summary type="html">&lt;p&gt;ELowell: /* New in this release */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
These release notes list the enhancements and other changes contained in Model 204 version 7.8. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;&amp;lt;b&amp;gt;******THIS IS A DRAFT DOCUMENT.******&amp;lt;/b&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
These release notes list the enhancements and other changes contained in Model 204 version 7.8, &amp;lt;b&amp;gt;&amp;lt;i&amp;gt;which is still in development&amp;lt;/i&amp;gt;&amp;lt;/b&amp;gt;. Until the commercial release of the software, Rocket reserves the right to add to, remove, or change anything described herein. &lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
These release notes contain installation and features information for the Rocket Model 204 version 7.8 release.&lt;br /&gt;
Before beginning your installation, please read through this information about product installation and changes.&lt;br /&gt;
&lt;br /&gt;
==New in this release==&lt;br /&gt;
The table below cites some highlights of Model&amp;amp;nbsp;204 version 7.8. For a full list of features, refer to the Table of Contents. &lt;br /&gt;
&amp;lt;p&amp;gt;See also the [[#Compatibility Issues|Compatibility]] section for possible issues.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;tr class=&amp;quot;head&amp;quot;&amp;gt;&amp;lt;th&amp;gt;Category&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Feature&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;SOUL&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The new [[#AmIndependent|AmIndependent]] method returns TRUE for daemons spawned by RunIndependently.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The Object class now supports the [[#Support for copying Object class objects|copy and deepCopy methods]].&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Janus Web&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[[#Web Sockets|Janus Web Sockets]] are now supported.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td nowrap&amp;gt;Networking&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Note:&amp;lt;/b&amp;gt; The two-phase commit and commit exits features are licensed and purchased separately from Model 204.&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Two-phase commit. A Model 204 online can now be configured to use two-phase commit (2PC). The Janus internal socket API is used for the calls to the coordinator. JANUS commands are used for all 2PC configuration. A new JANUS port type has been added, 2PC.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Commit exits are now supported. The commit exit runs within the APSY, which is defined by the &amp;lt;var&amp;gt;COMMITX&amp;lt;/var&amp;gt; parameter and uses normal APSY processing.  &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;ECF tables&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;DISPLAY ECF&amp;lt;/var&amp;gt; displays details from [[#Managing ECF tables more efficiently|ECF tables]], or the current status of users accessing ECF modules.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;EXTERNAL REMOVE statement&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Performance&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[[#MP/204 offload improvements|MP/204 offload improvements]] -- application code for these SOUL statements is now fully offloadable: &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;File Records In/On&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Remember&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Position&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Sort Values&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Reset Header/Trailer&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Find and Print Count&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Find All Values&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;For Each Value&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Security&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;CA-Top Secret can [[#CA-Top Secret can disallow CCASTAT logins|disallow CCASTAT logins]].&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[[#DEFUSER can specify a jobname not authorized to access M204|DEFUSER]] can specify a jobname not authorized to access M204.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td nowrap&amp;gt;System enhancements&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The &amp;lt;var&amp;gt;MONITOR USERS&amp;lt;/var&amp;gt; command output displays [[#New wait types for daemon/master waits|two new wait types]].&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td nowrap&amp;gt;AUDIT204 enhancements&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The new TIMEHH parameter on the [[#FORMAT command|FORMAT]] command of the AUDIT204 utility provides greater time stamp precision.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td nowrap&amp;gt;New commands&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;[[#DISPLAY ECF|DISPLAY ECF]]&amp;lt;/var&amp;gt; displays details from ECF tables, or the current status of users accessing ECF modules.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td nowrap&amp;gt;New parameters&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;[[#ENQTIME|ENQTIME]]&amp;lt;/var&amp;gt; specifies the number of milliseconds waited for each record locking retry wait.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;[[#EVALOPT|EVALOPT]]&amp;lt;/var&amp;gt; controls the cancellation of a request on truncation of string data.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;[[#MAXPRE, MAXBOUT, MAXSUBT|MAXPRE, MAXBOUT, and MAXSUBT]]&amp;lt;/var&amp;gt; can be used to cancel a runaway transaction and prevent it from filling the checkpoint data set.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;[[#NLDAPBUF|NLDAPBUF]]&amp;lt;/var&amp;gt; allows the number of LDAP buffers allocated during startup to be set in CCAIN.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;[[#SERV4G|SERV4G]]&amp;lt;/var&amp;gt; allows testing of server tables that span a 4-gigabyte boundary.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;[[#WEBDFLT|WEBDFLT]]&amp;lt;/var&amp;gt; changes the default JANUS WEB ALLOW rule back to ALLOW.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td nowrap&amp;gt;Janus Web and SoftSpy debuggers&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The debuggers can now view or watch the values of [[#Access to exposed variables|variables exposed to local routines/methods]].&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;At breakpoints, the debuggers now [[#Subroutine or method display|display the subroutine or method]] where execution stopped.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td nowrap&amp;gt;User/system statistics&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;[[#MPR, MBO, MCP, and RCV|MPR, MBO, MCP, and RCV]]&amp;lt;/var&amp;gt; provide high water mark transaction information in conjunction with the &amp;lt;var&amp;gt;MAXPRE&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;MAXBOUT&amp;lt;/var&amp;gt;, and &amp;lt;var&amp;gt;MAXSUBT&amp;lt;/var&amp;gt; parameters. &lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[[#DKWTS and DKWTMICS|New system statistics]] DKWTS (DisK WaiTs) and DKWTMICS (DisK WaiT MICroSeconds) collect data to provide rough disk I/O service time numbers.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Operating system and hardware requirements==&lt;br /&gt;
&lt;br /&gt;
===Operating system requirements===&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;IBM z/OS versions supported:&amp;lt;/b&amp;gt; &lt;br /&gt;
  &amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;All IBM supported releases up to and including z/OS 2.3. &amp;lt;br /&amp;gt;(For z/OS 2.2, see [[IBM z/OS 2.2 PTF requirement]].)&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;p&amp;gt;Version 1.07 is sufficient for all functionality except for the following features:&amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;ul&amp;gt;&lt;br /&gt;
    &amp;lt;li&amp;gt;zHPF support requires version [[IBM z/OS 2.1 compatibility issue|2.1]].&amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;li&amp;gt;Large (1 MB) page support requires version 1.9.&amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;li&amp;gt;Extended address volumes (EAV) requires version 1.12.&amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;/ul&amp;gt;&lt;br /&gt;
  &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
On z/OS, Model 204 release 7.8 operates as an APF authorized load module, as required by many 7.8 features. &amp;lt;br /&amp;gt;&lt;br /&gt;
To run Model 204 unauthorized, [[Contacting Rocket Software Technical Support|contact Technical Support]].&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;IBM z/VM versions supported:&amp;lt;/b&amp;gt; &lt;br /&gt;
  &amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;All IBM supported releases up to and including z/VM 6.4.&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;IBM z/VSE versions supported:&amp;lt;/b&amp;gt;&lt;br /&gt;
  &amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;All IBM supported releases up to and including z/VSE 6.1.&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Hardware requirements===&lt;br /&gt;
 &lt;br /&gt;
In general, Model 204 version 7.8 requires the IBM z/890 or above processor.&lt;br /&gt;
&amp;lt;p&amp;gt;However, the IBM z10 or above processor is required for the following features:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;large (1 MB) page support&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;IBM&#039;s High Performance FICON (zHPF) support&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Connect&amp;lt;sup&amp;gt;&amp;amp;#9733;&amp;lt;/sup&amp;gt; compatibility with Model 204===&lt;br /&gt;
&lt;br /&gt;
Connect&amp;lt;span class=&amp;quot;superstar&amp;quot;&amp;gt;&amp;amp;#9733;&amp;lt;/span&amp;gt; version 7.5 or 7.7 is compatible with Model 204 version 7.8.&lt;br /&gt;
&lt;br /&gt;
For more information on Connect&amp;lt;span class=&amp;quot;superstar&amp;quot;&amp;gt;&amp;amp;#9733;&amp;lt;/span&amp;gt; installation, see the [[:Category:Connect*|Connect&amp;lt;span class=&amp;quot;superstar&amp;quot;&amp;gt;&amp;amp;#9733;&amp;lt;/span&amp;gt; wiki pages]].&lt;br /&gt;
&lt;br /&gt;
==SOUL (User Language) enhancements==&lt;br /&gt;
===AmIndependent method===&lt;br /&gt;
The &amp;lt;var&amp;gt;AmIndependent&amp;lt;/var&amp;gt; method returns TRUE for daemons spawned by &amp;lt;var&amp;gt;[[RunIndependently_(Daemon_subroutine)|RunIndependently]]&amp;lt;/var&amp;gt;. (The action of &amp;lt;var&amp;gt;[[AmDaemon_(Daemon_property)|AmDaemon]]&amp;lt;/var&amp;gt; remains unchanged.)&lt;br /&gt;
&lt;br /&gt;
The following table shows the values returned by &amp;lt;var&amp;gt;AmIndependent&amp;lt;/var&amp;gt; versus &amp;lt;var&amp;gt;AmDaemon&amp;lt;/var&amp;gt; for different daemon types:&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Type&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;AmDaemon&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;AmIndependent&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;$COMBG&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;False&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;False&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Independent daemon&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;False&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;True&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Other daemon&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;True&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;False&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Web, etc.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;False&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;False&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===$ProcOpn===&lt;br /&gt;
&amp;lt;var&amp;gt;[[$ProcOpn|$ProcOpn]]&amp;lt;/var&amp;gt; now supports the opening of a procedure with an all-numeric name, and including a leading zero, such as:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;%result = $procOpn(&#039;0123&#039;, &#039;MYFILE&#039;)&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Support for such procedure names was initially introduced at V7.7, and this feature of &amp;lt;var&amp;gt;$ProcOpn&amp;lt;/var&amp;gt; is also enabled in V7.7 with the application of zap 77z054.&lt;br /&gt;
&lt;br /&gt;
===Allow parentheses to surround a boolean enumeration object===&lt;br /&gt;
The following sample code:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;   begin                                       &lt;br /&gt;
   variables are undefined                  &lt;br /&gt;
   %isValid is boolean initial (True)       &lt;br /&gt;
   if (%isValid) then                  &lt;br /&gt;
      print &#039;in IF&#039;                            &lt;br /&gt;
   end if                                   &lt;br /&gt;
   end   &amp;lt;/p&amp;gt;      &lt;br /&gt;
&lt;br /&gt;
will now compile and run successfully, since this syntax: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;if (%isValid) then &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
is logically equivalent to this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;if %isValid then &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Prior to V7.8 the presence of parentheses surrounding the boolean enumeration object would have caused a compilation error. This change is enabled in V7.7 with the application of zap 77z370.&lt;br /&gt;
&lt;br /&gt;
===Support for copying Object class objects===&lt;br /&gt;
The Object class now supports the copy and deepCopy methods. For example, an Object object can be copied as follows:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;   begin               &lt;br /&gt;
   %x is object object &lt;br /&gt;
   %y is object object &lt;br /&gt;
   %y = new            &lt;br /&gt;
   %x = %y:copy        &lt;br /&gt;
   end &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This change is enabled in v7.7 with the application of zap 77z076, and within V7.6 with the application of zap 76z412.&lt;br /&gt;
&lt;br /&gt;
===Assignment of enumeration values to method variables===&lt;br /&gt;
Enumerations values can now be assigned to method variables whose result is an enumeration. So, for example, the following code:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;   begin                                               &lt;br /&gt;
   enumeration colour                                  &lt;br /&gt;
      public                                           &lt;br /&gt;
         value red                                     &lt;br /&gt;
         value white                                   &lt;br /&gt;
         value blue                                    &lt;br /&gt;
      end public                                       &lt;br /&gt;
   end enumeration                                     &lt;br /&gt;
   %func    is function getColour is enumeration colour&lt;br /&gt;
   local function getColour is enumeration colour      &lt;br /&gt;
      return blue                                      &lt;br /&gt;
   end function                                        &lt;br /&gt;
   %func    = getColour                                &lt;br /&gt;
   %func    = (colour):red                             &lt;br /&gt;
   printText {~=%(Local):(%func)}                      &lt;br /&gt;
   end  &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
will produce this result:&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt; %(Local):(%func)=red &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
whereas previously this line:   &lt;br /&gt;
&lt;br /&gt;
  &amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt; %func    = (colour):red &amp;lt;/p&amp;gt;   &lt;br /&gt;
&lt;br /&gt;
would have been rejected with this message:&lt;br /&gt;
&lt;br /&gt;
   &amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;MSIR.0993: Assignment invalid: mismatch between method and method variable &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This change is enabled in V7.7 with the application of zap 77z128.&lt;br /&gt;
&lt;br /&gt;
===Optional output method parameters===&lt;br /&gt;
Prior to this release output parameters could not be optional or have default values. In this release output parameters can be specified as &amp;lt;var&amp;gt;Optional&amp;lt;/var&amp;gt;, and a default value can be specified with &amp;lt;var&amp;gt;Default&amp;lt;/var&amp;gt;. One related change is that if a &amp;lt;var&amp;gt;Len&amp;lt;/var&amp;gt; value is specified with &amp;lt;var&amp;gt;Optional&amp;lt;/var&amp;gt; or &amp;lt;var&amp;gt;Default&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;Output&amp;lt;/var&amp;gt;, it indicates the length of the hidden target for the output parameter if none was passed. For all other &amp;lt;var&amp;gt;Output&amp;lt;/var&amp;gt; parameters, &amp;lt;var&amp;gt;Len&amp;lt;/var&amp;gt; is meaningless, just as it was before Model 204 V7.8. The following is an example of the use of an optional output parameter:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;function getRemote( -&lt;br /&gt;
   %target is string len 32, %errorReason is string len 80 optional output -&lt;br /&gt;
) is float&lt;br /&gt;
  ...&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
In this example, if &amp;lt;code&amp;gt;%errorReason&amp;lt;/code&amp;gt; is not specified in a call and then set to a value longer than 80 bytes it wil be truncated to 80 bytes. However, if a string of a different length is passed, the length of that string determines truncation behavior.&lt;br /&gt;
&lt;br /&gt;
==External Call Facility enhancements==&lt;br /&gt;
===Managing ECF tables more efficiently===&lt;br /&gt;
The are two new features to help manage ECF tables more efficiently, avoid conditions where the table can fill, and prevent the definition of further entities.&lt;br /&gt;
&lt;br /&gt;
The first feature is the new &amp;lt;var&amp;gt;DISPLAY ECF&amp;lt;/var&amp;gt; command, which displays the contents of ECF tables and also the current status of users accessing ECF modules. See more details of the &amp;lt;var&amp;gt;[[#DISPLAY ECF|DISPLAY ECF]]&amp;lt;/var&amp;gt; command below.&lt;br /&gt;
&lt;br /&gt;
The second feature is a new &amp;lt;var&amp;gt;EXTERNAL REMOVE&amp;lt;/var&amp;gt; statement with the following syntax:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;EXTERNAL REMOVE &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;modulename&amp;lt;/span&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This statement causes the entry for the named module to be removed from the module table. The table entry is then placed on a free chain of entries and can be reused by issuing the &amp;lt;var&amp;gt;EXTERNAL MODULE&amp;lt;/var&amp;gt; statement. This allows the module table to be managed with redundant entries removed, without having to recycle the ONLINE.&lt;br /&gt;
&lt;br /&gt;
An &amp;lt;var&amp;gt;EXTERNAL REMOVE&amp;lt;/var&amp;gt; statement will return &amp;lt;code&amp;gt;$status/$statusd&amp;lt;/code&amp;gt; values of &amp;lt;code&amp;gt;0/0&amp;lt;/code&amp;gt;, and most other status values that can be returned by the &amp;lt;var&amp;gt;EXTERNAL REMOVE&amp;lt;/var&amp;gt; statement are already documented in the ECF return codes table. If an &amp;lt;var&amp;gt;EXTERNAL REMOVE&amp;lt;/var&amp;gt; is attempted against a module that is currently being called (in use), then &amp;lt;code&amp;gt;$status/$statusd&amp;lt;/code&amp;gt; will return the values &amp;lt;code&amp;gt;20/1&amp;lt;/code&amp;gt; (module unavailable).&lt;br /&gt;
&lt;br /&gt;
==System enhancements==&lt;br /&gt;
&lt;br /&gt;
===New wait types for daemon/master waits===&lt;br /&gt;
&lt;br /&gt;
Two new wait types, viewable on the &amp;lt;var&amp;gt;[[MONITOR_command|MONITOR]] USERS&amp;lt;/var&amp;gt; command output, have been implemented as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;57&amp;lt;/code&amp;gt; - Means a daemon thread waiting for its master thread  &amp;lt;br /&amp;gt;     &lt;br /&gt;
&amp;lt;code&amp;gt;58&amp;lt;/code&amp;gt; - Means a master thread waiting for one of its daemon threads&lt;br /&gt;
&lt;br /&gt;
This change is enabled in V7.7 with the application of zap 77z410.&lt;br /&gt;
&lt;br /&gt;
===Snap formatting changes===&lt;br /&gt;
Date/time stamps in the page headers of snaps will now be shown in normal format, rather than in julian format as in previous versions. So in the following example, a particular snap header under v7.7 or previous versions would show as: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;SNAPID    1   19226.060155  M204.0022: Bug .. nnnnn               PAGE     1 &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
whereas the same snap header under v7.8 would show as: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;SNAPID    1  2019/08/14 06:01:06   M204.0022: Bug .. nnnnn        PAGE     1 &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Also, due to improvements in handling trailing blanks in snap output, a snap generated under v7.8 should be marginally smaller than the same snap generated under previous versions, assuming the same SNAPCTL settings.&lt;br /&gt;
&lt;br /&gt;
===Call stack trace for problem diagnosis===&lt;br /&gt;
A  call stack trace is now provided to help diagnose and resolve common errors. To enable the stack trace, do either of the following: &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Set the &amp;lt;var&amp;gt;[[SIRFACT parameter|SIRFACT]] X&#039;01&#039;&amp;lt;/var&amp;gt; bit.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Set the &amp;lt;var&amp;gt;[[DEBUGUL parameter|DEBUGL]]&amp;lt;/var&amp;gt; parameter. Note that the &amp;lt;var&amp;gt;DEBUGUL&amp;lt;/var&amp;gt; approach will introduce extra QTBL overhead. &amp;lt;p&amp;gt;(&amp;lt;var&amp;gt;DEBUGUL&amp;lt;/var&amp;gt; provides a similar facility with an include trace of procedures leading to the error, but this might not be potentially as useful as the call trace.)&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt; &lt;br /&gt;
&lt;br /&gt;
The call stack trace can assist in diagnosing run-time errors that might occur, as illustrated by the following &amp;quot;Variable too small for result&amp;quot; and &amp;quot;MBSCAN exceeded&amp;quot; examples.&lt;br /&gt;
&lt;br /&gt;
====Variable too small for result====&lt;br /&gt;
When the stack trace is enabled, a &amp;quot;variable too small&amp;quot; error results in the following message:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;M204.2966: Error at line n, procedure &#039;&#039;procname&#039;&#039; in file &#039;&#039;procfile&#039;&#039;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
which identifies the line within a procedure where the error is occurring, in addition to the usual message:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;M204.0552: Variable too small for result&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Any subsequent M204.2966 messages indicate the point in the code from where the code in error was called. For example, a stack of three subroutine calls leading to a &amp;quot;variable too small&amp;quot; error might result in the following messaging:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;   M204.0552: Variable too small for result                             &lt;br /&gt;
   M204.2966: Error at line 9, procedure MYPROC.LEVEL4 in file MYPROC   &lt;br /&gt;
   M204.2966: Called from line 5, procedure MYPROC.LEVEL3 in file MYPROC&lt;br /&gt;
   M204.2966: Called from line 5, procedure MYPROC.LEVEL2 in file MYPROC&lt;br /&gt;
   M204.2966: Called from line 5, procedure MYPROC.LEVEL1 in file MYPROC &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This information should help in diagnosing the problem. &lt;br /&gt;
&lt;br /&gt;
If the error occurs within a command level program rather than a procedure, then the M204.2966 message is replaced by an M204.2967 message, and a similar error condition to the above with a preceding call stack might be audited as follows:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;   M204.0552: Variable too small for result              &lt;br /&gt;
   M204.2967: Error at line 14 of command level program  &lt;br /&gt;
   M204.2967: Called from line 5 of command level program&lt;br /&gt;
   M204.2967: Called from line 3 of command level program &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If neither &amp;lt;var&amp;gt;SIRFACT X&#039;01&#039;&amp;lt;/var&amp;gt; nor &amp;lt;var&amp;gt;DEBUGUL&amp;lt;/var&amp;gt; is set, then the &amp;quot;variable too small&amp;quot; error produces the following messages:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;   M204.0552: Variable too small for result &lt;br /&gt;
   M204.2968: Error: no debug info &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====MBSCAN exceeded====&lt;br /&gt;
Similarly to the handling of the &amp;quot;variable too small for result&amp;quot; error, the call stack can also be used to diagnose errors where the value of &amp;lt;var&amp;gt;[[MBSCAN parameter|MBSCAN]]&amp;lt;/var&amp;gt; is exceeded as a result of a direct search of Table B records. &lt;br /&gt;
&amp;lt;p&amp;gt;Again, under V7.8, with either the &amp;lt;var&amp;gt;SIRFACT X&#039;01&#039;&amp;lt;/var&amp;gt; bit set or &amp;lt;var&amp;gt;DEBUGUL&amp;lt;/var&amp;gt; set, if a long request occurs as a result of exceeding &amp;lt;var&amp;gt;MBSCAN&amp;lt;/var&amp;gt;, then initially the following message is produced, as before:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;M204.0569: File &#039;&#039;filename&#039;&#039;, Find: Table B records to be searched = &#039;&#039;nnnn&#039;&#039;&amp;lt;/p&amp;gt;&lt;br /&gt;
followed by a DYRWT prompt message. If the user replies &#039;N&#039; to the prompt, or if the request is run in an environment (such as a batch job) where the default response is &#039;N&#039;, the following message is produced after the M204.0569 message:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;Cancelling request: M204.2969: MBSCAN (&#039;&#039;mm&#039;&#039;) exceeded, records to be searched = &#039;&#039;nnnn&#039;&#039;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
where &#039;&#039;mm&#039;&#039; is the current setting of &amp;lt;var&amp;gt;MBSCAN&amp;lt;/var&amp;gt;. The M204.2969 message is followed by M204.2966 messages displaying the call stack trace. Thus, if the following code is run from procedure MYPROC.MBSCAN against the demo database, with an &amp;lt;var&amp;gt;MBSCAN&amp;lt;/var&amp;gt; setting of 10:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;   b                           &lt;br /&gt;
   call sub1                   &lt;br /&gt;
   sub1: subroutine            &lt;br /&gt;
   fd1:                        &lt;br /&gt;
      in clients fd city = ONTARIO&lt;br /&gt;
              end find         &lt;br /&gt;
      fr fd1                      &lt;br /&gt;
         pai                      &lt;br /&gt;
         print                    &lt;br /&gt;
      end for                     &lt;br /&gt;
   end subroutine              &lt;br /&gt;
   end &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
then the following messages are produced, assuming any prompts are responded to with an &#039;N&#039;:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;   M204.0569: File CLIENTS, Find: Table B records to be searched = 3415&lt;br /&gt;
   Cancelling request: M204.2969: MBSCAN (10) exceeded, records to be searched = 3415  &lt;br /&gt;
   M204.2966: Error at line 6, procedure MYPROC.MBSCAN in file MYPROC&lt;br /&gt;
   M204.2966: Called from line 3, procedure MYPROC.MBSCAN in file MYPROC  &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===appendJournalData===&lt;br /&gt;
The &amp;lt;var&amp;gt;[[AppendJournalData_(Stringlist_function)|AppendJournalData]]&amp;lt;/var&amp;gt; function is now more tolerant of an outstanding BUMP request. Previously, if &amp;lt;var&amp;gt;AppendJournalData&amp;lt;/var&amp;gt; was called to inadvertently retrieve a large amount of journal data, typically when called implicitly from within SirScan, then any outstanding BUMP request wouldn&#039;t be honored until all of the data had been retrieved, at which point the BUMP request would be completed, and all data would be lost.&lt;br /&gt;
&lt;br /&gt;
Now, the &amp;lt;var&amp;gt;AppendJournalData&amp;lt;/var&amp;gt; process checks for outstanding BUMP requests before each track I/O is executed, thus avoiding excessive I/Os against the journal and long waits for the BUMP of such a process to complete.&lt;br /&gt;
&lt;br /&gt;
==AUDIT204 enhancements==&lt;br /&gt;
===FORMAT command===&lt;br /&gt;
TIMEHH is a new parameter used with the FORMAT command of the [[Tracking_system_activity_(CCAJRNL,_CCAAUDIT,_CCAJLOG)#AUDIT204_utility|AUDIT204]] utility.  It indicates that timestamps, printed at the beginning of each line of output, should include hundredths of a second. Requires no other arguments.&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;b&amp;gt;NOTE:&amp;lt;/b&amp;gt; This parameter and the 78 version (or later) of AUDIT204 may be used against a 77 (or later) CCAJRNL.&amp;lt;/p&amp;gt;&lt;br /&gt;
For example:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;//CCAIN DD *&lt;br /&gt;
FORMAT YEARFORM 4&lt;br /&gt;
TIMEHH&lt;br /&gt;
TYPE ER MS LI&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Recovery enhancements==&lt;br /&gt;
===Media Recovery in a multi-user environment===&lt;br /&gt;
It is now possible to perform media recovery by issuing the &amp;lt;var&amp;gt;REGENERATE&amp;lt;/var&amp;gt; command to roll forward selected files in a multi-user environment, with the media recovery being carried out by different users with system manager privileges. The new USING option allows for the specification of a ddname for the input journal stream to be used by the &amp;lt;var&amp;gt;REGENERATE&amp;lt;/var&amp;gt; command. Previously media recovery was restricted to single user batch jobs, using the CCAGEN ddname for the input journal. For more details, see the &amp;lt;var&amp;gt;[[#REGENERATE|REGENERATE]]&amp;lt;/var&amp;gt; command below.&lt;br /&gt;
&lt;br /&gt;
==Security enhancements==&lt;br /&gt;
===CA-Top Secret can disallow CCASTAT logins===&lt;br /&gt;
The [[CA-Top_Secret_interface|CA-Top Secret]] interface now recognizes the &amp;lt;code&amp;gt;DEFACID=&amp;lt;/code&amp;gt;, setting and does not allow CCASTAT logins in the online if &amp;lt;code&amp;gt;DEFACID&amp;lt;/code&amp;gt; is set to null. (There is no attempt to log on M204USR.) Therefore, to disallow CCASTAT logons, set DEFACID=, in [[CA-Top_Secret_interface#Preparing_a_TOPSPARM_parameter_module_with_TOPSGEN|TOPSPARM]]. CCASTAT will be opened because it contains file and group passwords, but it will not be used for logons if CCASTAT logons are not allowed.&lt;br /&gt;
&lt;br /&gt;
===CUSTOM=11 and mixed cased input===&lt;br /&gt;
The &amp;lt;var&amp;gt;[[CUSTOM_parameter|CUSTOM]]&amp;lt;/var&amp;gt; parameter CUSTOM=11 setting no longer requires that a *LOWER command be issued prior to a LOGCTL command (to add or change a  password) to preserve mixed case input. Prior to this release, with CUSTOM=11 in place, *LOWER had to be issued before a LOGCTL command, otherwise any mixed case password strings would automatically be translated into uppercase. This change is enabled in V7.7 with the application of zap 77z108.&lt;br /&gt;
&lt;br /&gt;
===DEFUSER can specify a jobname not authorized to access M204===&lt;br /&gt;
When specifying DEFUSER=JOBNAME and VALIDAT=LOGON in the RACFGEN parms for an ONLINE, if the specified jobname ( the owning id for the ONLINE job ) isn&#039;t authorized to use Model 204 via RACF, any LOGIN commands specifying no userid will now succeed ( previously such a LOGON would have failed ). This enables users to submit jobs with USE $JOB, whereby the string USER=jobname  will be added to the submitted JCL, and this in turn is useful if the specified jobname has dataset access privileges to datasets required by the submitted jobs, even if the jobname itself isn&#039;t authorized to use M204.&lt;br /&gt;
&lt;br /&gt;
==Janus product enhancements==&lt;br /&gt;
&lt;br /&gt;
===Web Sockets===&lt;br /&gt;
Web Sockets are now supported in Janus Web Server.&lt;br /&gt;
&lt;br /&gt;
The Web Socket protocol provides various advantages over the HTTP protocol:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Web Sockets allow full-duplex communication.&amp;lt;/li&amp;gt; &lt;br /&gt;
&amp;lt;li&amp;gt;Efficient framing of payload data uses minimal overhead.&amp;lt;/li&amp;gt;  &lt;br /&gt;
&amp;lt;li&amp;gt;The Web Socket protocol is end-user extensible.&amp;lt;/li&amp;gt;  &lt;br /&gt;
&amp;lt;li&amp;gt;Most importantly, Web Sockets can be deployed completely within an existing HTTP/HTTPS framework.&amp;lt;/li&amp;gt; &lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To implement Web Sockets, you must enable the Janus Web port for Web Socket upgrades with the new &lt;br /&gt;
WEBSOCKET parameter. The WEBSOCKET option can be specified on either the port definition or the &lt;br /&gt;
JANUS WEB rule for the URL. &lt;br /&gt;
Likewise, an individual Janus Web rule can either allow or disallow Web Socket connections with the &lt;br /&gt;
WEBSOCKET and NOWEBSOCKET parameters, respectively. &lt;br /&gt;
&lt;br /&gt;
For details on implementing Web Sockets, see the [[WebSocket_(Socket_function)|WebSocket]] wiki page.&lt;br /&gt;
&lt;br /&gt;
===Janus Web Server access rule===&lt;br /&gt;
The automatic &amp;lt;var&amp;gt;[[JANUS WEB ALLOW]]&amp;lt;/var&amp;gt; rule, which allowed any user to access the port without requiring a login, is changed &amp;lt;i&amp;gt;for non-SSL ports&amp;lt;/i&amp;gt; to the following:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;JANUS WEB &amp;lt;i&amp;gt;portname&amp;lt;/i&amp;gt; DISALLOW *&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
This rule requires a system administrator to explicitly define &amp;lt;var&amp;gt;ALLOW&amp;lt;/var&amp;gt; rules to enable users to access non-SSL ports.&lt;br /&gt;
The rule applies unless overridden by user-added rules. &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;blockquote class=&amp;quot;note&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;b&amp;gt;Note:&amp;lt;/b&amp;gt; To revert from this change in the JANUS DEFINE default and make the default &lt;br /&gt;
 non-SSL &amp;lt;var&amp;gt;ALLOW&amp;lt;/var&amp;gt; rule as it was in version 7.5 and earlier (&amp;lt;code&amp;gt;ALLOW *&amp;lt;/code&amp;gt;), turn on the 1 bit of the &amp;lt;var&amp;gt;[[WEBDFLT parameter|WEBDFLT]]&amp;lt;/var&amp;gt; parameter: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;RESET WEBDFLT=1&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Increase in pending accepts for Janus BPX ports===&lt;br /&gt;
The default number of pending accepts for Janus BPX server ports has been increased from 3 to 12, thus reducing the likelihood that a pending accept may fail with the message&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;MSIR.0019 Connection request rejected for port (port), MAXCON exceeded&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The actual number of pending accepts to be supported on the port can be set with the new parameter MAXPEND, set on the &amp;lt;var&amp;gt;[[JANUS_DEFINE|JANUS DEFINE]]&amp;lt;/var&amp;gt; command, where MAXPEND can vary from 3 up to a maximum value of 32. The change to the default value was enabled in V7.7 with the application of zap 77z269.&lt;br /&gt;
&lt;br /&gt;
===TCP listen backlog increased===&lt;br /&gt;
&lt;br /&gt;
The [[Program_Communication_facilities#LISTEN_call|TCP listen]] backlog has been increased from 16 to 1024 under z/OS.&lt;br /&gt;
&lt;br /&gt;
This update tells the TCP stack to queue up to 1024 of such requests up before dropping them, thus reducing, or in most cases eliminating, the likelihood of a connection request drop, other than in exceptional circumstances, such as a denial of service attack. This change was enabled in V7.7 with the application of zap 77z340.&lt;br /&gt;
&lt;br /&gt;
===Defer the freeing of XMLSCREEN input XML===&lt;br /&gt;
&lt;br /&gt;
The freeing of [[XMLSCREEN_and_NOXMLSCREEN_(JANUS_DEFINE_parameters)|XMLSCREEN]] input XML is now deferred until the next Read Screen or session termination. This means that if an application error is detected, the input XML can be retrieved with [[$Web_Input_Content|$Web_Input_Content]] and then logged for problem analysis. &lt;br /&gt;
&lt;br /&gt;
Prior to this release the XML received from the client is freed immediately after being used to set the input data for a Read Screen, rendering it unavailable for problem determination.&lt;br /&gt;
&lt;br /&gt;
This change is enabled in V7.7 with the application of zap 77z368.&lt;br /&gt;
&lt;br /&gt;
===XMLSCREEN and Janus Web Legacy blank stripping===&lt;br /&gt;
&lt;br /&gt;
xmlScreens and Janus Web Legacy screens now adhere to the same standard as standard screen processing in terms of stripping leading blanks from input fields defined as [[Full-screen_feature#DEBLANK_or_NODEBLANK_option|DEBLANK]] (either explicitly or implicitly).&lt;br /&gt;
&lt;br /&gt;
This change is enabled in V7.7 with the application of zap 77z400.&lt;br /&gt;
&lt;br /&gt;
===SSL input buffer size===&lt;br /&gt;
&lt;br /&gt;
The default value of [[SSLIBSIZE_(JANUS_DEFINE_parameter)|SSLIBSIZE]] has been increased to 16384 + 128, or 16512. This size should ensure correct communication with all TLS spec compliant applications. It is the maximum size allowed unless you use [[CUSTOM_parameter#Using_CUSTOM.3D.2818.29|CUSTOM=18]].    &lt;br /&gt;
&lt;br /&gt;
This changed is enabled in V7.7 with the application of zap 77z415.&lt;br /&gt;
&lt;br /&gt;
===Increasing LDAP buffers===&lt;br /&gt;
&lt;br /&gt;
The number of LDAP buffers allocated at startup can now be changed by setting the NLDAPBUF parameter in CCAIN. See below for details on [[#NLDAPBUF|NLDAPBUF]].&lt;br /&gt;
&lt;br /&gt;
===Increase URL length returned with $web_form_action===&lt;br /&gt;
With this release the maximum Janus Web Server incoming URL that can be handled by &amp;lt;var&amp;gt;$web_form_action&amp;lt;/var&amp;gt; is increased from 512 bytes to 1024 bytes. This change is enabled in V7.7 with the application of zap 77z424.&lt;br /&gt;
&lt;br /&gt;
===Maximum RBSIZE setting increased===&lt;br /&gt;
The maximum value for RBSIZE, set on the &amp;lt;var&amp;gt;[[JANUS DEFINE|JANUS DEFINE]]&amp;lt;/var&amp;gt; command, is now increased to 16777215 (previously the maximum was 65534). RBSIZE specifies the RPC or Request Buffer size.  On a Web port, the Janus request buffer holds browser request information such as header data, cookies, and form data. On other port types, it holds RPC input and output parameters. This change is enabled in V7.7 with the application of zap 77z427.&lt;br /&gt;
&lt;br /&gt;
==Debugger enhancements==&lt;br /&gt;
&lt;br /&gt;
===Access to exposed variables===&lt;br /&gt;
The debuggers can now view or watch the values of variables exposed to local routines/methods. Previously, any attempts to access an exposed variable would have displayed &amp;quot;%varname has no value&amp;quot; in the debugger session. (This feature is enabled in V7.7 with the application of zap 77z363.)&lt;br /&gt;
&lt;br /&gt;
==Performance enhancements==&lt;br /&gt;
&lt;br /&gt;
===MP/204 offload improvements===&lt;br /&gt;
Application code issuing the following SOUL statements will now now be fully offloadable:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;File Records In/On&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Remember&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt; &lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Position&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Sort Values&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;                                             &lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Reset Header/Trailer&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Find and Print Count&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Find All Values&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;For Each Value&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
the above improvements are also enabled in V7.7 with the application of zaps 77z419 and 77z420.&lt;br /&gt;
&lt;br /&gt;
===X3270OUT exit offloadable===&lt;br /&gt;
When running MP/204 (AMPSUBS&amp;gt;0) and using the [[Coding_SNA_Communications_Server_conversion_exit_routines#X3270OUT_.28convert_output_from_3270_format.29|X3270OUT]] exit to convert a 3270 output data stream to the appropriate device protocol, the exit can now run in parallel mode to improve performance. This change was enabled in V7.7 with the application of zap 77z313.&lt;br /&gt;
&lt;br /&gt;
The X3270OUT exit must be written to be re-entrant.&lt;br /&gt;
&lt;br /&gt;
==New and changed commands==&lt;br /&gt;
===DISPLAY ECF===&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;DISPLAY ECF {{ M | N | U } like ?} &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This new command displays details from ECF tables, or the current status of users accessing ECF modules.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;syntax&amp;quot;&amp;gt;D ECF M&amp;lt;/span&amp;gt; displays the contents of the module table. For example:&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;    D ECF M &lt;br /&gt;
    Module   Loadlib  Address:Length     Loaded@      Lastused@   #Calls  Flags &lt;br /&gt;
    QATUM13C PROGLIB 2FB91FB8:00000028 19023:121506 19023:121506 00000001 &lt;br /&gt;
    QATUM13B PROGLIB 2FE65000:00009C18 19023:121506 19023:121506 00000001 &lt;br /&gt;
    QATUM13A PROGLIB 2FE6EC18:00001CD8 19023:121506 19023:121506 00000001  &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
(flags may be D=deleted; S=shared; H=halted; I=Idle)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;syntax&amp;quot;&amp;gt;D ECF N&amp;lt;/span&amp;gt; displays contents of the name table. For example: &amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;    D ECF N&lt;br /&gt;
    Module   Logical-call-name &lt;br /&gt;
    QATUM13C MOD_QATUM13C &lt;br /&gt;
    QATUM13B MOD_QATUM13B &lt;br /&gt;
    QATUM13A MOD_QATUM13A &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;syntax&amp;quot;&amp;gt;D ECF U&amp;lt;/span&amp;gt; displays details of users currently accessing ECF modules. This is also the default option, and so &amp;lt;span class=&amp;quot;syntax&amp;quot;&amp;gt;D ECF&amp;lt;/span&amp;gt; will display the same output as &amp;lt;span class=&amp;quot;syntax&amp;quot;&amp;gt;D ECF U&amp;lt;/span&amp;gt;. For example:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;    D ECF U                           &lt;br /&gt;
    User# Userid     Module   Parmlen &lt;br /&gt;
    00002 ADMIN      --none--         &lt;br /&gt;
    00003 ADMIN      COBSAMP1 00000002&lt;br /&gt;
    00004 ADMIN      COBSAMP1 00000002 &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;syntax&amp;quot;&amp;gt;D ECF &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;function&amp;lt;/var&amp;gt; LIKE &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;?&amp;lt;/var&amp;gt; &amp;lt;/span&amp;gt; (where &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;?&amp;lt;/var&amp;gt; is a valid pattern) displays details for entities that match the specified pattern. The function is either M (modules), N (names), or U (users), and it defaults to U. So for example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;D ECF U L A&amp;lt;/p&amp;gt;&lt;br /&gt;
or&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;D ECF U L A*&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
displays details of ECF users whose names begin with A.&lt;br /&gt;
&lt;br /&gt;
===REGENERATE===&lt;br /&gt;
The &amp;lt;var&amp;gt;REGENERATE&amp;lt;/var&amp;gt; command can now be run in a multi-user environment by multiple users with system manager privileges. A new option USING is provided to specify the ddname of the input journal, so that the full syntax is now as follows:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;  REGENERATE [USING ddname] FILE filename [FROM dumpname | IGNORE]&lt;br /&gt;
  [TO {LAST UPDATE [BEFORE yy.ddd hh:mm:ss.th] | LAST CHECKPOINT [BEFORE yy.dd hh:mm:ss.th] &lt;br /&gt;
  | UPDATE number OF yy.ddd hh:mm:ss.th | CHECKPOINT yy.ddd hh:mm:ss.th} ]&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The default for the using ddname is CCAGEN, but any ddname may be used to allocate an input journal and used. For example:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;  ALLOCATE REGEN1 WITH SCOPE=SYSTEM DSN=PROD1.GDGJ OLD SEQUENTIAL GEN=+2&lt;br /&gt;
  REGENERATE USING REGEN1 FILE TEST&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It is the user&#039;s responsibility to ensure that the file being regenerated is not in use, and so prior to usage, &amp;lt;var&amp;gt;BUMP FILE&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;STOP FILE&amp;lt;/var&amp;gt; should be used to isolate usage against the file. If the file is in use, the REGEN will fail with these messages:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;  M204.1430: Failed to open file TEST&lt;br /&gt;
  M204.1436: Stopped processing file TEST  &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
$STATUS will now be set for &amp;lt;var&amp;gt;REGENERATE&amp;lt;/var&amp;gt; with the following values:&lt;br /&gt;
&amp;lt;blockquote&amp;gt;    &lt;br /&gt;
    0 - Success &amp;lt;br/&amp;gt;&lt;br /&gt;
    1 - No files were processed &amp;lt;br/&amp;gt;&lt;br /&gt;
    2 - At least one file stopped processing &amp;lt;br/&amp;gt;&lt;br /&gt;
    4 - A serious error occurred, REGEN failed &lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Similarly, &amp;lt;var&amp;gt;SETGRC&amp;lt;/var&amp;gt; may be used to get the return code and error message.&lt;br /&gt;
&lt;br /&gt;
==New and changed parameters==&lt;br /&gt;
&lt;br /&gt;
===ECMODS===&lt;br /&gt;
The new minimum value for ECMODS, the allowable number of ECF modules, is 1. Prior to V7.8 the minimum value was 0. This changed was enabled in V7.7 with the application of zap 77z306.&lt;br /&gt;
&lt;br /&gt;
===ECNAMES===&lt;br /&gt;
The new minimum value for ECNAMES, the allowable number of ECF module names, is 1. Prior to V7.8 the minimum value was 0. This changed was enabled in V7.7 with the application of zap 77z306.&lt;br /&gt;
&lt;br /&gt;
===ECPSIZE===&lt;br /&gt;
The new minimum value for ECPSIZE, the initial storage allocation for ECF parameters, is 1024. Prior to V7.8 the minimum value was 0. This changed was enabled in V7.7 with the application of zap 77z306.&lt;br /&gt;
&lt;br /&gt;
===ENQTIME===&lt;br /&gt;
Millisecond duration of automatic record locking retry wait.&lt;br /&gt;
&lt;br /&gt;
Prior to this change, if record locking conflicts occur frequently in a busy online, any user with a non-zero value for &amp;lt;var&amp;gt;[[ENQRETRY parameter|ENQRETRY]]&amp;lt;/var&amp;gt; will wait at least 3 seconds before the conflict is dealt with. This can degrade overall system performance.      &lt;br /&gt;
                                                         &lt;br /&gt;
The &amp;lt;var&amp;gt;[[ENQTIME parameter|ENQTIME]]&amp;lt;/var&amp;gt; parameter specifies the number of milliseconds waited for each record locking retry wait. ENQTIME can be between 1 and 60000, corresponding to a minimum of 1 millisecond and a maximum of 1 minute. The default value of ENQTIME is 3000 (3 seconds).            &lt;br /&gt;
                                                         &lt;br /&gt;
For example, with ENQTIME = 100 and ENQRETRY = 7, after a record locking conflict occurs the thread will retry 7 times with wait intervals of .1 seconds, and so within at most .7 seconds either the lock becomes available or the conflict triggers an On unit or cancels the request.     &lt;br /&gt;
                                                         &lt;br /&gt;
The ENQTIME parameter may also be reset with $ResetN. &lt;br /&gt;
&lt;br /&gt;
This new parameter was enabled in V7.7 with the application of zap 77z299.&lt;br /&gt;
&lt;br /&gt;
===EVALOPT===&lt;br /&gt;
The new &amp;lt;var&amp;gt;EVALOPT&amp;lt;/var&amp;gt; parameter controls the cancellation of a request on truncation of string data. The default value is 0, and currently there is just one setting, 1, which means &amp;quot;cancel a request if truncation of string data occurs.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
For example, with the default of 0 in place, the following code &amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;    %x is string len 1   &lt;br /&gt;
    %y is string len 2   &lt;br /&gt;
    %y = &#039;ab&#039;            &lt;br /&gt;
    %x = %y              &lt;br /&gt;
    printtext {~} = {%x} &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
would cause silent truncation, and give the result&lt;br /&gt;
    &amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;%x = a &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If &amp;lt;var&amp;gt;EVALOPT&amp;lt;/var&amp;gt; is set to 1, then the above code produces the following message:&lt;br /&gt;
    &amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;M204.0552: Variable too small for result &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and the request is cancelled.&lt;br /&gt;
&lt;br /&gt;
===LFSCB===&lt;br /&gt;
LFSCB, the length of the full screen buffer, now has a new minimum value of 8 ( the previous minimum was 0 ). This change has been enabled in v7.7 with the application of zap 77z042, and within V7.6 with the application of zap 76z393.&lt;br /&gt;
&lt;br /&gt;
===MAXPRE, MAXBOUT, MAXSUBT===&lt;br /&gt;
&amp;lt;p&amp;gt;Introduced in zap 77z257.&amp;lt;/p&amp;gt;&lt;br /&gt;
The new &amp;lt;var&amp;gt;MAXPRE&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;MAXBOUT&amp;lt;/var&amp;gt;, and &amp;lt;var&amp;gt;MAXSUBT&amp;lt;/var&amp;gt; parameters can be used to cancel a runaway transaction and prevent it from filling the checkpoint data set. &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;MAXPRE&amp;lt;/var&amp;gt;:  Maximum number of pre-images per transaction.  &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;MAXBOUT&amp;lt;/var&amp;gt;: Maximum number of backout pages per transaction. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;MAXSUBT&amp;lt;/var&amp;gt;: Maximum number of subtransaction checkpoints that a transaction can span.&amp;lt;/li&amp;gt;&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;Each new parameter defaults to unlimited. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;If a parameter value is set, a transaction is cancelled if that value is exceeded, and the following message is displayed:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;M204.0524: Maximum number (&amp;lt;i&amp;gt;num&amp;lt;/i&amp;gt;) of &amp;lt;i&amp;gt;parameter&amp;lt;/i&amp;gt; exceeded.&amp;lt;/p&amp;gt;&lt;br /&gt;
where &amp;lt;i&amp;gt;num&amp;lt;/i&amp;gt; is the value set for &amp;lt;i&amp;gt;parameter&amp;lt;/i&amp;gt; (&amp;lt;var&amp;gt;MAXPRE&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;MAXBOUT&amp;lt;/var&amp;gt;, or &amp;lt;var&amp;gt;MAXSUBT&amp;lt;/var&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
===NLDAPBUF===&lt;br /&gt;
This new parameter allows the number of LDAP buffers allocated during startup to be set in CCAIN. The default value is 2, and the settable value can range from 0 to 65535.&lt;br /&gt;
&lt;br /&gt;
===PUPDTH (new minimum value)===&lt;br /&gt;
If a user sets the &amp;lt;var&amp;gt;[[PUPDTH parameter|PUPDTH]]&amp;lt;/var&amp;gt; parameter to 0, it will now automatically be increased to 1, its minimum value.&lt;br /&gt;
&lt;br /&gt;
===SERV4G===&lt;br /&gt;
This parameter allows testing of server tables that span a 4-gigabyte boundary. For example, if &amp;lt;var&amp;gt;SERV4G&amp;lt;/var&amp;gt; is &amp;lt;code&amp;gt;X&#039;FFFFF000&#039;&amp;lt;/code&amp;gt;, each ATB server will begin at &amp;lt;code&amp;gt;XX_FFFFF000&amp;lt;/code&amp;gt;. If SERV4G is &amp;lt;code&amp;gt;X&#039;FFFF0000&#039;&amp;lt;/code&amp;gt;, each ATB server will begin at &amp;lt;code&amp;gt;XX_FFFF0000&amp;lt;/code&amp;gt;. &amp;lt;code&amp;gt;XX&amp;lt;/code&amp;gt; is determined by the storage available on the system. The parameter is set in CCAIN.&lt;br /&gt;
&lt;br /&gt;
The contents of the ATB server are specified by using the &amp;lt;var&amp;gt;[[SERVGA parameter|SERVGA]]&amp;lt;/var&amp;gt; parameter.&lt;br /&gt;
&lt;br /&gt;
For example, if you want VTBL to span the 4G boundary, you can use these settings: &amp;lt;code&amp;gt;SERV4G=X&#039;FFFFF000&#039;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;SERVGA=X&#039;00040000&#039;&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;LVTBL=200 (6400 bytes, X&#039;1900&#039;)&amp;lt;/code&amp;gt;. This will force each server&#039;s VTBL to begin at &amp;lt;code&amp;gt;XX_FFFFF000&amp;lt;/code&amp;gt; and end at &amp;lt;code&amp;gt;XX+1_00000900&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===WEBDFLT===&lt;br /&gt;
At V7.7, the default access rule for non-SSL ports was changed from ALLOW * to DISALLOW *, meaning that unless any ALLOW rules were in place resulting in a login/password prompt, the port couldn&#039;t be accessed. The new &amp;lt;var&amp;gt;[[WEBDFLT_parameter|WEBDFLT]]&amp;lt;/var&amp;gt; parameter may be set to 1 for reversion to the old default of ALLOW *. Under V7.7, this new parameter was enabled with the application of zap 77z090. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;var&amp;gt;RESET WEBDFLT&amp;lt;/var&amp;gt; requires system administrator privileges. It is recommended to reset the 1 bit of &amp;lt;var&amp;gt;WEBDFLT&amp;lt;/var&amp;gt; to zero after issuing a series of &amp;lt;var&amp;gt;JANUS DEFINE&amp;lt;/var&amp;gt; commands which need WEBDFLT=1, as in the CCAIN input stream.&lt;br /&gt;
&lt;br /&gt;
==New and changed statistics==&lt;br /&gt;
===MPR, MBO, MCP, and RCV===&lt;br /&gt;
Introduced in zap 77z257.&lt;br /&gt;
&amp;lt;p&amp;gt;These statistics provide high water mark transaction information. (Since-last values will not be available until V78 GA.)&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;They are useful in conjunction with the &amp;lt;var&amp;gt;MAXPRE&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;MAXBOUT&amp;lt;/var&amp;gt;, and &amp;lt;var&amp;gt;MAXSUBT&amp;lt;/var&amp;gt; parameters. &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
User/system statistics:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;MPR: High water mark of transaction pre-images. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;MBO: High water mark of transaction backout pages. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;MCP: High water mark of transaction chkpoint spans. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
System statistics: &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;RCV: Number of blocks needed for subtransaction recovery &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt; &lt;br /&gt;
&amp;lt;p class=&amp;quot;note&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Notes:&amp;lt;/b&amp;gt; M204.0843 now displays the RCV statistic for subtransaction checkpoints.&lt;br /&gt;
The size of recovery checkpoint must be greater than the sum of the last RCV value plus the number of records in [[System_and_media_recovery#RESTART_recovery_considerations_for_sub-transaction_checkpoints|RESTART and RESTARTS]].&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
===DKWTS and DKWTMICS===&lt;br /&gt;
Introduced in zap 77z7289.&lt;br /&gt;
&amp;lt;p&amp;gt;The new system statistics DKWTS (DisK WaiTs) and DKWTMICS (DisK WaiT MICroSeconds) collect data to provide rough disk I/O service time numbers.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
DKWTS shows the number of disk I/O waits. DKWTMICS shows the total wait time for those waits in microseconds. Dividing the difference in DKWTMICS by the difference in DKWTS over an interval provides the average disk I/O wait time in microseconds.              &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;note&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Notes:&amp;lt;/b&amp;gt; &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The wait time does include internal Model 204 scheduler delays, so on a CPU bound Model 204 system, the service times calculated from DKWTS and DKWTMICS are likely to be an overestimate of actual service times.&amp;lt;/li&amp;gt;  &lt;br /&gt;
                                                                    &lt;br /&gt;
&amp;lt;li&amp;gt;DKWTS and DKWTMICS are not available in SirMon; use [[MONITOR_command|MONITOR]] SYSTEM STATISTICS to view these statistics.&amp;lt;/li&amp;gt;&amp;lt;/ul&amp;gt;  &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Compatibility issues==&lt;br /&gt;
===&amp;lt;b id=&amp;quot;listNewInit&amp;quot;&amp;gt;&amp;lt;/b&amp;gt;$ListNew cannot be used in Initial clause===&lt;br /&gt;
It is now a compilation error if &amp;lt;var&amp;gt;$ListNew&amp;lt;/var&amp;gt; is attempted to be used in the &amp;lt;var&amp;gt;Initial&amp;lt;/var&amp;gt; clause of a &lt;br /&gt;
[[Using_variables_and_values_in_computation#Declare_statements_for_.25variables|declaration statement]].&lt;br /&gt;
&amp;lt;p&amp;gt;This change is propagated by zap maintenance to versions 7.5 (zap 75Z487), 7.6 (zap 76Z514), and 7.7 (zap 77z281) of Model 204.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote class=&amp;quot;note&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Note:&amp;lt;/b&amp;gt; Strictly speaking, this would not be considered a compilation error, because previously although &amp;lt;code&amp;gt;..&amp;amp;nbsp;Initial($ListNew)&amp;lt;/code&amp;gt; did not produce a compilation error, in almost all circumstances it would produce a snap if the initialized %variable were used with some other &amp;lt;var&amp;gt;$List&amp;lt;i&amp;gt;xxx&amp;lt;/i&amp;gt;&amp;lt;/var&amp;gt; invocation.&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Restricting the use of the CUSTOM=38 setting===&lt;br /&gt;
The [[CUSTOM parameter|CUSTOM=38]] parameter setting, introduced at V7.5, inadvertently provided System Manager privileges to all users via the RESET command. This CUSTOM setting is now restricted to the RESETting of the LAUDIT parameter.&lt;br /&gt;
&lt;br /&gt;
===Disabling of Closure support===&lt;br /&gt;
Due to a number of bugs related to Closure support, introduced at V7.7, this feature, which can best be described as exposed methods assigned to method variables, has been disabled in this release. This change was also made to V7.7 with application of zap 77z119.&lt;br /&gt;
&lt;br /&gt;
===Password delimiter enforced===&lt;br /&gt;
When using &amp;lt;var&amp;gt;IFSTRTN&amp;lt;/var&amp;gt; to log on to a Model 204 online from an IFAM2 application, both the logonid and password must be followed by a semicolon, which is the delimiter. For example:      &lt;br /&gt;
                                      &lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;CALL IFSTRTN(RC,&#039;logonid;password;&#039;...)&amp;lt;/p&amp;gt;&lt;br /&gt;
                 &lt;br /&gt;
If a semicolon does not follow the password string, the following message will now be issued:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;M204.2964: Password missing or too long &amp;lt;/p&amp;gt;                 &lt;br /&gt;
                                                         &lt;br /&gt;
Previously, a semicolon following the password was not required and the first blank served as a password delimiter.  However, as of V7.7, embedded blanks are valid password characters and a semicolon is now required to delimit the password.&lt;br /&gt;
&lt;br /&gt;
This change has also been enabled in V7.7 with the application of zap 77z231.&lt;br /&gt;
&lt;br /&gt;
===PAGESZ parameter validated===&lt;br /&gt;
Previously it was possible to set the PAGESZ parameter to any value, although Model 204 internally supports one page size of 6184, and any deviation from this value would have led to problems during file creation. The value of this parameter is now controlled, such that setting it to any value other than 6184 will generate an M204.1149 message with the parameter being reset to 6184.&lt;br /&gt;
&lt;br /&gt;
===ECPRIV and the IDCAMS facility===&lt;br /&gt;
At V7.7 a security loophole was closed, whereby all ECF modules were run under external-authorizer profile of the calling user. Previously any ECF tasks were run under the owning job&#039;s external-authorizer profile, and in order for certain sites to retain that ability, a new setting of ECPRIV, value 4, was introduced to retain the ability to run ECF tasks using the job&#039;s security profile. &lt;br /&gt;
&lt;br /&gt;
The ECPRIV 4 setting potentially introduced a security loophole when calling the IDCAMS interface, based upon what the IDCAMS utility is able to do at a system level. Consequently as of this release, the ECPRIV 4 setting will be ignored when calling the IDCAMS facility via ECF, and such IDCAMS processes will always use the calling user&#039;s security profile. Any existing jobs that use ECF to call the IDCAMS utility with the ECFPRIV 4 bit set should be checked to ensure that the calling user&#039;s security profile still satisfies the job&#039;s requirements.&lt;br /&gt;
&lt;br /&gt;
===TCPOPTS is view-only===&lt;br /&gt;
In previous versions the &amp;lt;var&amp;gt;TCPOPTS&amp;lt;/var&amp;gt; parameter, which identifies the type of IP addressing in use (v4 or v6), was resetable, although it was always documented as a view-only parameter. The parameter is now handled as a view-only parameter, and any attempts to reset the parameter will result in the following message:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;gt;   M204.1123: Parameter TCPOPTS not reset&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===ZHPF command can only be issued by a system manager===&lt;br /&gt;
In previous versions it was possible to issue the ZHPF command without being logged on. From this release onwards, a user would have to be logged on with system manager privileges to be able to issue this command.&lt;br /&gt;
&lt;br /&gt;
Additionally, the command output will now only  display results for currently open files.&lt;br /&gt;
&lt;br /&gt;
This changes has been enabled in v7.7 with the application of zap 77z264.&lt;br /&gt;
&lt;br /&gt;
===Terminal MODEL reset failure===&lt;br /&gt;
If a reset of the terminal MODEL parameter fails due to an undersized output page buffer, then in addition to the existing messages that inform the user of this failure:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;gt;    M204.1875 UNABLE TO RESET MODEL TO %C &lt;br /&gt;
    M204.1123: Parameter MODEL not reset&amp;lt;/p&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
the following message will now be issued:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;gt;    M204.1008: LOUTPB must be increased to at least &amp;lt;number&amp;gt; &amp;lt;/p&amp;gt;&lt;br /&gt;
                                                         &lt;br /&gt;
where &amp;lt;number&amp;gt; is the minimum value of LOUTPB necessary to support the terminal model.&lt;br /&gt;
&lt;br /&gt;
This change is enabled in V7.7 with the application of zap 77z309.&lt;br /&gt;
&lt;br /&gt;
==Notes for system manager and installer==&lt;br /&gt;
===CRAM SVC installation is deprecated===&lt;br /&gt;
The CRAM SVC installation has been deprecated as of version 7.5. &amp;lt;br /&amp;gt;Installation of CRAM-XDM is described as part of the [[Model 204 installation]].&lt;br /&gt;
===Authorization and maintenance zaps===&lt;br /&gt;
When you download Rocket M204 product object files, all relevant authorization keys and all current maintenance zaps are pre-applied to the object files as part of the download process.&lt;br /&gt;
&lt;br /&gt;
==New and changed messages==&lt;br /&gt;
&lt;br /&gt;
See [[New and updated messages in Model 204 version 7.8|New and updated messages in Model 204 version 7.8]] for details.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category: Release notes]]&lt;/div&gt;</summary>
		<author><name>ELowell</name></author>
	</entry>
	<entry>
		<id>https://m204wiki.rocketsoftware.com/index.php?title=Release_notes_for_Model_204_version_7.8&amp;diff=117729</id>
		<title>Release notes for Model 204 version 7.8</title>
		<link rel="alternate" type="text/html" href="https://m204wiki.rocketsoftware.com/index.php?title=Release_notes_for_Model_204_version_7.8&amp;diff=117729"/>
		<updated>2019-12-10T20:45:28Z</updated>

		<summary type="html">&lt;p&gt;ELowell: /* Overview */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
These release notes list the enhancements and other changes contained in Model 204 version 7.8. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;&amp;lt;b&amp;gt;******THIS IS A DRAFT DOCUMENT.******&amp;lt;/b&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
These release notes list the enhancements and other changes contained in Model 204 version 7.8, &amp;lt;b&amp;gt;&amp;lt;i&amp;gt;which is still in development&amp;lt;/i&amp;gt;&amp;lt;/b&amp;gt;. Until the commercial release of the software, Rocket reserves the right to add to, remove, or change anything described herein. &lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
These release notes contain installation and features information for the Rocket Model 204 version 7.8 release.&lt;br /&gt;
Before beginning your installation, please read through this information about product installation and changes.&lt;br /&gt;
&lt;br /&gt;
==New in this release==&lt;br /&gt;
The table below cites some highlights of Model&amp;amp;nbsp;204 version 7.8. For a full list of features, refer to the Table of Contents. &lt;br /&gt;
&amp;lt;p&amp;gt; See also the [[#Compatibility Issues|Compatibility]] section for possible issues.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;tr class=&amp;quot;head&amp;quot;&amp;gt;&amp;lt;th&amp;gt;Category&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Feature&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;SOUL&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The new AmIndependent method returns TRUE for daemons spawned by RunIndependently.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The Object class now supports the copy and deepCopy methods.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Janus Web&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Janus Web Sockets are now supported.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td nowrap&amp;gt;Networking&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Note:&amp;lt;/b&amp;gt; The two-phase commit and commit exits features are licensed and purchased separately from Model 204.&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Two-phase commit. A Model 204 online can now be configured to use two-phase commit (2PC). The Janus internal socket API is used for the calls to the coordinator. JANUS commands are used for all 2PC configuration. A new JANUS port type has been added, 2PC.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Commit exits.... &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;ECF tables&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;DISPLAY ECF&amp;lt;/var&amp;gt; displays details from ECF tables, or the current status of users accessing ECF modules.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;EXTERNAL REMOVE statement&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Performance&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;MP/204 offload improvements&lt;br /&gt;
- Application code for various SOUL statements is now fully offloadable: [list]&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Security&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;CA-Top Secret can disallow CCASTAT logins.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;DEFUSER can specify a jobname not authorized to access M204.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td nowrap&amp;gt;System enhancements&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Two new wait types are viewable on the &amp;lt;var&amp;gt;MONITOR USERS&amp;lt;/var&amp;gt; command output.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td nowrap&amp;gt;AUDIT204 enhancements&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;A new TIMEHH parameter on FORMAT command of the AUDIT204 utility provides more precision in time stamping.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td nowrap&amp;gt;New commands&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;DISPLAY ECF&amp;lt;/var&amp;gt; displays details from ECF tables, or the current status of users accessing ECF modules.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td nowrap&amp;gt;New parameters&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;ENQTIME&amp;lt;/var&amp;gt; specifies the number of milliseconds waited for each record locking retry wait.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;EVALOPT&amp;lt;/var&amp;gt; controls the cancellation of a request on truncation of string data.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;MAXPRE&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;MAXBOUT&amp;lt;/var&amp;gt;, and &amp;lt;var&amp;gt;MAXSUBT&amp;lt;/var&amp;gt; can be used to cancel a runaway transaction and prevent it from filling the checkpoint data set.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;NLDAPBUF&amp;lt;/var&amp;gt; allows the number of LDAP buffers allocated during startup to be set in CCAIN.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;SERV4G&amp;lt;/var&amp;gt; allows testing of server tables that span a 4-gigabyte boundary.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;WEBDFLT&amp;lt;/var&amp;gt; changes the default JANUS WEB ALLOW rule back to ALLOW.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td nowrap&amp;gt;Janus Web and SoftSpy debuggers&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The debuggers can now view or watch the values of variables exposed to local routines/methods.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;At breakpoints, the debuggers now display in the title bar the subroutine or method where execution stopped.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td nowrap&amp;gt;User/system statistics&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;MPR, MBO, MCP, and RCV provide high water mark transaction information in conjunction with the &amp;lt;var&amp;gt;MAXPRE&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;MAXBOUT&amp;lt;/var&amp;gt;, and &amp;lt;var&amp;gt;MAXSUBT&amp;lt;/var&amp;gt; parameters. &lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;New system statistics DKWTS (DisK WaiTs) and DKWTMICS (DisK WaiT MICroSeconds) collect data to provide rough disk I/O service time numbers.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Operating system and hardware requirements==&lt;br /&gt;
&lt;br /&gt;
===Operating system requirements===&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;IBM z/OS versions supported:&amp;lt;/b&amp;gt; &lt;br /&gt;
  &amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;All IBM supported releases up to and including z/OS 2.3. &amp;lt;br /&amp;gt;(For z/OS 2.2, see [[IBM z/OS 2.2 PTF requirement]].)&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;p&amp;gt;Version 1.07 is sufficient for all functionality except for the following features:&amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;ul&amp;gt;&lt;br /&gt;
    &amp;lt;li&amp;gt;zHPF support requires version [[IBM z/OS 2.1 compatibility issue|2.1]].&amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;li&amp;gt;Large (1 MB) page support requires version 1.9.&amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;li&amp;gt;Extended address volumes (EAV) requires version 1.12.&amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;/ul&amp;gt;&lt;br /&gt;
  &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
On z/OS, Model 204 release 7.8 operates as an APF authorized load module, as required by many 7.8 features. &amp;lt;br /&amp;gt;&lt;br /&gt;
To run Model 204 unauthorized, [[Contacting Rocket Software Technical Support|contact Technical Support]].&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;IBM z/VM versions supported:&amp;lt;/b&amp;gt; &lt;br /&gt;
  &amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;All IBM supported releases up to and including z/VM 6.4.&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;IBM z/VSE versions supported:&amp;lt;/b&amp;gt;&lt;br /&gt;
  &amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;All IBM supported releases up to and including z/VSE 6.1.&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Hardware requirements===&lt;br /&gt;
 &lt;br /&gt;
In general, Model 204 version 7.8 requires the IBM z/890 or above processor.&lt;br /&gt;
&amp;lt;p&amp;gt;However, the IBM z10 or above processor is required for the following features:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;large (1 MB) page support&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;IBM&#039;s High Performance FICON (zHPF) support&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Connect&amp;lt;sup&amp;gt;&amp;amp;#9733;&amp;lt;/sup&amp;gt; compatibility with Model 204===&lt;br /&gt;
&lt;br /&gt;
Connect&amp;lt;span class=&amp;quot;superstar&amp;quot;&amp;gt;&amp;amp;#9733;&amp;lt;/span&amp;gt; version 7.5 or 7.7 is compatible with Model 204 version 7.8.&lt;br /&gt;
&lt;br /&gt;
For more information on Connect&amp;lt;span class=&amp;quot;superstar&amp;quot;&amp;gt;&amp;amp;#9733;&amp;lt;/span&amp;gt; installation, see the [[:Category:Connect*|Connect&amp;lt;span class=&amp;quot;superstar&amp;quot;&amp;gt;&amp;amp;#9733;&amp;lt;/span&amp;gt; wiki pages]].&lt;br /&gt;
&lt;br /&gt;
==SOUL (User Language) enhancements==&lt;br /&gt;
===AmIndependent method===&lt;br /&gt;
The &amp;lt;var&amp;gt;AmIndependent&amp;lt;/var&amp;gt; method returns TRUE for daemons spawned by &amp;lt;var&amp;gt;[[RunIndependently_(Daemon_subroutine)|RunIndependently]]&amp;lt;/var&amp;gt;. (The action of &amp;lt;var&amp;gt;[[AmDaemon_(Daemon_property)|AmDaemon]]&amp;lt;/var&amp;gt; remains unchanged.)&lt;br /&gt;
&lt;br /&gt;
The following table shows the values returned by &amp;lt;var&amp;gt;AmIndependent&amp;lt;/var&amp;gt; versus &amp;lt;var&amp;gt;AmDaemon&amp;lt;/var&amp;gt; for different daemon types:&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Type&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;AmDaemon&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;AmIndependent&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;$COMBG&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;False&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;False&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Independent daemon&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;False&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;True&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Other daemon&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;True&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;False&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Web, etc.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;False&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;False&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===$ProcOpn===&lt;br /&gt;
&amp;lt;var&amp;gt;[[$ProcOpn|$ProcOpn]]&amp;lt;/var&amp;gt; now supports the opening of a procedure with an all-numeric name, and including a leading zero, such as:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;%result = $procOpn(&#039;0123&#039;, &#039;MYFILE&#039;)&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Support for such procedure names was initially introduced at V7.7, and this feature of &amp;lt;var&amp;gt;$ProcOpn&amp;lt;/var&amp;gt; is also enabled in V7.7 with the application of zap 77z054.&lt;br /&gt;
&lt;br /&gt;
===Allow parentheses to surround a boolean enumeration object===&lt;br /&gt;
The following sample code:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;   begin                                       &lt;br /&gt;
   variables are undefined                  &lt;br /&gt;
   %isValid is boolean initial (True)       &lt;br /&gt;
   if (%isValid) then                  &lt;br /&gt;
      print &#039;in IF&#039;                            &lt;br /&gt;
   end if                                   &lt;br /&gt;
   end   &amp;lt;/p&amp;gt;      &lt;br /&gt;
&lt;br /&gt;
will now compile and run successfully, since this syntax: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;if (%isValid) then &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
is logically equivalent to this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;if %isValid then &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Prior to V7.8 the presence of parentheses surrounding the boolean enumeration object would have caused a compilation error. This change is enabled in V7.7 with the application of zap 77z370.&lt;br /&gt;
&lt;br /&gt;
===Support for copying Object class objects===&lt;br /&gt;
The Object class now supports the copy and deepCopy methods. For example, an Object object can be copied as follows:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;   begin               &lt;br /&gt;
   %x is object object &lt;br /&gt;
   %y is object object &lt;br /&gt;
   %y = new            &lt;br /&gt;
   %x = %y:copy        &lt;br /&gt;
   end &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This change is enabled in v7.7 with the application of zap 77z076, and within V7.6 with the application of zap 76z412.&lt;br /&gt;
&lt;br /&gt;
===Assignment of enumeration values to method variables===&lt;br /&gt;
Enumerations values can now be assigned to method variables whose result is an enumeration. So, for example, the following code:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;   begin                                               &lt;br /&gt;
   enumeration colour                                  &lt;br /&gt;
      public                                           &lt;br /&gt;
         value red                                     &lt;br /&gt;
         value white                                   &lt;br /&gt;
         value blue                                    &lt;br /&gt;
      end public                                       &lt;br /&gt;
   end enumeration                                     &lt;br /&gt;
   %func    is function getColour is enumeration colour&lt;br /&gt;
   local function getColour is enumeration colour      &lt;br /&gt;
      return blue                                      &lt;br /&gt;
   end function                                        &lt;br /&gt;
   %func    = getColour                                &lt;br /&gt;
   %func    = (colour):red                             &lt;br /&gt;
   printText {~=%(Local):(%func)}                      &lt;br /&gt;
   end  &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
will produce this result:&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt; %(Local):(%func)=red &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
whereas previously this line:   &lt;br /&gt;
&lt;br /&gt;
  &amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt; %func    = (colour):red &amp;lt;/p&amp;gt;   &lt;br /&gt;
&lt;br /&gt;
would have been rejected with this message:&lt;br /&gt;
&lt;br /&gt;
   &amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;MSIR.0993: Assignment invalid: mismatch between method and method variable &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This change is enabled in V7.7 with the application of zap 77z128.&lt;br /&gt;
&lt;br /&gt;
===Optional output method parameters===&lt;br /&gt;
Prior to this release output parameters could not be optional or have default values. In this release output parameters can be specified as &amp;lt;var&amp;gt;Optional&amp;lt;/var&amp;gt;, and a default value can be specified with &amp;lt;var&amp;gt;Default&amp;lt;/var&amp;gt;. One related change is that if a &amp;lt;var&amp;gt;Len&amp;lt;/var&amp;gt; value is specified with &amp;lt;var&amp;gt;Optional&amp;lt;/var&amp;gt; or &amp;lt;var&amp;gt;Default&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;Output&amp;lt;/var&amp;gt;, it indicates the length of the hidden target for the output parameter if none was passed. For all other &amp;lt;var&amp;gt;Output&amp;lt;/var&amp;gt; parameters, &amp;lt;var&amp;gt;Len&amp;lt;/var&amp;gt; is meaningless, just as it was before Model 204 V7.8. The following is an example of the use of an optional output parameter:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;function getRemote( -&lt;br /&gt;
   %target is string len 32, %errorReason is string len 80 optional output -&lt;br /&gt;
) is float&lt;br /&gt;
  ...&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
In this example, if &amp;lt;code&amp;gt;%errorReason&amp;lt;/code&amp;gt; is not specified in a call and then set to a value longer than 80 bytes it wil be truncated to 80 bytes. However, if a string of a different length is passed, the length of that string determines truncation behavior.&lt;br /&gt;
&lt;br /&gt;
==External Call Facility enhancements==&lt;br /&gt;
===Managing ECF tables more efficiently===&lt;br /&gt;
The are two new features to help manage ECF tables more efficiently, avoid conditions where the table can fill, and prevent the definition of further entities.&lt;br /&gt;
&lt;br /&gt;
The first feature is the new &amp;lt;var&amp;gt;DISPLAY ECF&amp;lt;/var&amp;gt; command, which displays the contents of ECF tables and also the current status of users accessing ECF modules. See more details of the &amp;lt;var&amp;gt;[[#DISPLAY ECF|DISPLAY ECF]]&amp;lt;/var&amp;gt; command below.&lt;br /&gt;
&lt;br /&gt;
The second feature is a new &amp;lt;var&amp;gt;EXTERNAL REMOVE&amp;lt;/var&amp;gt; statement with the following syntax:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;EXTERNAL REMOVE &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;modulename&amp;lt;/span&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This statement causes the entry for the named module to be removed from the module table. The table entry is then placed on a free chain of entries and can be reused by issuing the &amp;lt;var&amp;gt;EXTERNAL MODULE&amp;lt;/var&amp;gt; statement. This allows the module table to be managed with redundant entries removed, without having to recycle the ONLINE.&lt;br /&gt;
&lt;br /&gt;
An &amp;lt;var&amp;gt;EXTERNAL REMOVE&amp;lt;/var&amp;gt; statement will return &amp;lt;code&amp;gt;$status/$statusd&amp;lt;/code&amp;gt; values of &amp;lt;code&amp;gt;0/0&amp;lt;/code&amp;gt;, and most other status values that can be returned by the &amp;lt;var&amp;gt;EXTERNAL REMOVE&amp;lt;/var&amp;gt; statement are already documented in the ECF return codes table. If an &amp;lt;var&amp;gt;EXTERNAL REMOVE&amp;lt;/var&amp;gt; is attempted against a module that is currently being called (in use), then &amp;lt;code&amp;gt;$status/$statusd&amp;lt;/code&amp;gt; will return the values &amp;lt;code&amp;gt;20/1&amp;lt;/code&amp;gt; (module unavailable).&lt;br /&gt;
&lt;br /&gt;
==System enhancements==&lt;br /&gt;
&lt;br /&gt;
===New wait types for daemon/master waits===&lt;br /&gt;
&lt;br /&gt;
Two new wait types, viewable on the &amp;lt;var&amp;gt;[[MONITOR_command|MONITOR]] USERS&amp;lt;/var&amp;gt; command output, have been implemented as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;57&amp;lt;/code&amp;gt; - Means a daemon thread waiting for its master thread  &amp;lt;br /&amp;gt;     &lt;br /&gt;
&amp;lt;code&amp;gt;58&amp;lt;/code&amp;gt; - Means a master thread waiting for one of its daemon threads&lt;br /&gt;
&lt;br /&gt;
This change is enabled in V7.7 with the application of zap 77z410.&lt;br /&gt;
&lt;br /&gt;
===Snap formatting changes===&lt;br /&gt;
Date/time stamps in the page headers of snaps will now be shown in normal format, rather than in julian format as in previous versions. So in the following example, a particular snap header under v7.7 or previous versions would show as: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;SNAPID    1   19226.060155  M204.0022: Bug .. nnnnn               PAGE     1 &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
whereas the same snap header under v7.8 would show as: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;SNAPID    1  2019/08/14 06:01:06   M204.0022: Bug .. nnnnn        PAGE     1 &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Also, due to improvements in handling trailing blanks in snap output, a snap generated under v7.8 should be marginally smaller than the same snap generated under previous versions, assuming the same SNAPCTL settings.&lt;br /&gt;
&lt;br /&gt;
===Call stack trace for problem diagnosis===&lt;br /&gt;
A  call stack trace is now provided to help diagnose and resolve common errors. To enable the stack trace, do either of the following: &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Set the &amp;lt;var&amp;gt;[[SIRFACT parameter|SIRFACT]] X&#039;01&#039;&amp;lt;/var&amp;gt; bit.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Set the &amp;lt;var&amp;gt;[[DEBUGUL parameter|DEBUGL]]&amp;lt;/var&amp;gt; parameter. Note that the &amp;lt;var&amp;gt;DEBUGUL&amp;lt;/var&amp;gt; approach will introduce extra QTBL overhead. &amp;lt;p&amp;gt;(&amp;lt;var&amp;gt;DEBUGUL&amp;lt;/var&amp;gt; provides a similar facility with an include trace of procedures leading to the error, but this might not be potentially as useful as the call trace.)&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt; &lt;br /&gt;
&lt;br /&gt;
The call stack trace can assist in diagnosing run-time errors that might occur, as illustrated by the following &amp;quot;Variable too small for result&amp;quot; and &amp;quot;MBSCAN exceeded&amp;quot; examples.&lt;br /&gt;
&lt;br /&gt;
====Variable too small for result====&lt;br /&gt;
When the stack trace is enabled, a &amp;quot;variable too small&amp;quot; error results in the following message:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;M204.2966: Error at line n, procedure &#039;&#039;procname&#039;&#039; in file &#039;&#039;procfile&#039;&#039;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
which identifies the line within a procedure where the error is occurring, in addition to the usual message:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;M204.0552: Variable too small for result&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Any subsequent M204.2966 messages indicate the point in the code from where the code in error was called. For example, a stack of three subroutine calls leading to a &amp;quot;variable too small&amp;quot; error might result in the following messaging:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;   M204.0552: Variable too small for result                             &lt;br /&gt;
   M204.2966: Error at line 9, procedure MYPROC.LEVEL4 in file MYPROC   &lt;br /&gt;
   M204.2966: Called from line 5, procedure MYPROC.LEVEL3 in file MYPROC&lt;br /&gt;
   M204.2966: Called from line 5, procedure MYPROC.LEVEL2 in file MYPROC&lt;br /&gt;
   M204.2966: Called from line 5, procedure MYPROC.LEVEL1 in file MYPROC &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This information should help in diagnosing the problem. &lt;br /&gt;
&lt;br /&gt;
If the error occurs within a command level program rather than a procedure, then the M204.2966 message is replaced by an M204.2967 message, and a similar error condition to the above with a preceding call stack might be audited as follows:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;   M204.0552: Variable too small for result              &lt;br /&gt;
   M204.2967: Error at line 14 of command level program  &lt;br /&gt;
   M204.2967: Called from line 5 of command level program&lt;br /&gt;
   M204.2967: Called from line 3 of command level program &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If neither &amp;lt;var&amp;gt;SIRFACT X&#039;01&#039;&amp;lt;/var&amp;gt; nor &amp;lt;var&amp;gt;DEBUGUL&amp;lt;/var&amp;gt; is set, then the &amp;quot;variable too small&amp;quot; error produces the following messages:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;   M204.0552: Variable too small for result &lt;br /&gt;
   M204.2968: Error: no debug info &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====MBSCAN exceeded====&lt;br /&gt;
Similarly to the handling of the &amp;quot;variable too small for result&amp;quot; error, the call stack can also be used to diagnose errors where the value of &amp;lt;var&amp;gt;[[MBSCAN parameter|MBSCAN]]&amp;lt;/var&amp;gt; is exceeded as a result of a direct search of Table B records. &lt;br /&gt;
&amp;lt;p&amp;gt;Again, under V7.8, with either the &amp;lt;var&amp;gt;SIRFACT X&#039;01&#039;&amp;lt;/var&amp;gt; bit set or &amp;lt;var&amp;gt;DEBUGUL&amp;lt;/var&amp;gt; set, if a long request occurs as a result of exceeding &amp;lt;var&amp;gt;MBSCAN&amp;lt;/var&amp;gt;, then initially the following message is produced, as before:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;M204.0569: File &#039;&#039;filename&#039;&#039;, Find: Table B records to be searched = &#039;&#039;nnnn&#039;&#039;&amp;lt;/p&amp;gt;&lt;br /&gt;
followed by a DYRWT prompt message. If the user replies &#039;N&#039; to the prompt, or if the request is run in an environment (such as a batch job) where the default response is &#039;N&#039;, the following message is produced after the M204.0569 message:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;Cancelling request: M204.2969: MBSCAN (&#039;&#039;mm&#039;&#039;) exceeded, records to be searched = &#039;&#039;nnnn&#039;&#039;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
where &#039;&#039;mm&#039;&#039; is the current setting of &amp;lt;var&amp;gt;MBSCAN&amp;lt;/var&amp;gt;. The M204.2969 message is followed by M204.2966 messages displaying the call stack trace. Thus, if the following code is run from procedure MYPROC.MBSCAN against the demo database, with an &amp;lt;var&amp;gt;MBSCAN&amp;lt;/var&amp;gt; setting of 10:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;   b                           &lt;br /&gt;
   call sub1                   &lt;br /&gt;
   sub1: subroutine            &lt;br /&gt;
   fd1:                        &lt;br /&gt;
      in clients fd city = ONTARIO&lt;br /&gt;
              end find         &lt;br /&gt;
      fr fd1                      &lt;br /&gt;
         pai                      &lt;br /&gt;
         print                    &lt;br /&gt;
      end for                     &lt;br /&gt;
   end subroutine              &lt;br /&gt;
   end &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
then the following messages are produced, assuming any prompts are responded to with an &#039;N&#039;:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;   M204.0569: File CLIENTS, Find: Table B records to be searched = 3415&lt;br /&gt;
   Cancelling request: M204.2969: MBSCAN (10) exceeded, records to be searched = 3415  &lt;br /&gt;
   M204.2966: Error at line 6, procedure MYPROC.MBSCAN in file MYPROC&lt;br /&gt;
   M204.2966: Called from line 3, procedure MYPROC.MBSCAN in file MYPROC  &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===appendJournalData===&lt;br /&gt;
The &amp;lt;var&amp;gt;[[AppendJournalData_(Stringlist_function)|AppendJournalData]]&amp;lt;/var&amp;gt; function is now more tolerant of an outstanding BUMP request. Previously, if &amp;lt;var&amp;gt;AppendJournalData&amp;lt;/var&amp;gt; was called to inadvertently retrieve a large amount of journal data, typically when called implicitly from within SirScan, then any outstanding BUMP request wouldn&#039;t be honored until all of the data had been retrieved, at which point the BUMP request would be completed, and all data would be lost.&lt;br /&gt;
&lt;br /&gt;
Now, the &amp;lt;var&amp;gt;AppendJournalData&amp;lt;/var&amp;gt; process checks for outstanding BUMP requests before each track I/O is executed, thus avoiding excessive I/Os against the journal and long waits for the BUMP of such a process to complete.&lt;br /&gt;
&lt;br /&gt;
==AUDIT204 enhancements==&lt;br /&gt;
===FORMAT command===&lt;br /&gt;
TIMEHH is a new parameter used with the FORMAT command of the [[Tracking_system_activity_(CCAJRNL,_CCAAUDIT,_CCAJLOG)#AUDIT204_utility|AUDIT204]] utility.  It indicates that timestamps, printed at the beginning of each line of output, should include hundredths of a second. Requires no other arguments.&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;b&amp;gt;NOTE:&amp;lt;/b&amp;gt; This parameter and the 78 version (or later) of AUDIT204 may be used against a 77 (or later) CCAJRNL.&amp;lt;/p&amp;gt;&lt;br /&gt;
For example:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;//CCAIN DD *&lt;br /&gt;
FORMAT YEARFORM 4&lt;br /&gt;
TIMEHH&lt;br /&gt;
TYPE ER MS LI&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Recovery enhancements==&lt;br /&gt;
===Media Recovery in a multi-user environment===&lt;br /&gt;
It is now possible to perform media recovery by issuing the &amp;lt;var&amp;gt;REGENERATE&amp;lt;/var&amp;gt; command to roll forward selected files in a multi-user environment, with the media recovery being carried out by different users with system manager privileges. The new USING option allows for the specification of a ddname for the input journal stream to be used by the &amp;lt;var&amp;gt;REGENERATE&amp;lt;/var&amp;gt; command. Previously media recovery was restricted to single user batch jobs, using the CCAGEN ddname for the input journal. For more details, see the &amp;lt;var&amp;gt;[[#REGENERATE|REGENERATE]]&amp;lt;/var&amp;gt; command below.&lt;br /&gt;
&lt;br /&gt;
==Security enhancements==&lt;br /&gt;
===CA-Top Secret can disallow CCASTAT logins===&lt;br /&gt;
The [[CA-Top_Secret_interface|CA-Top Secret]] interface now recognizes the &amp;lt;code&amp;gt;DEFACID=&amp;lt;/code&amp;gt;, setting and does not allow CCASTAT logins in the online if &amp;lt;code&amp;gt;DEFACID&amp;lt;/code&amp;gt; is set to null. (There is no attempt to log on M204USR.) Therefore, to disallow CCASTAT logons, set DEFACID=, in [[CA-Top_Secret_interface#Preparing_a_TOPSPARM_parameter_module_with_TOPSGEN|TOPSPARM]]. CCASTAT will be opened because it contains file and group passwords, but it will not be used for logons if CCASTAT logons are not allowed.&lt;br /&gt;
&lt;br /&gt;
===CUSTOM=11 and mixed cased input===&lt;br /&gt;
The &amp;lt;var&amp;gt;[[CUSTOM_parameter|CUSTOM]]&amp;lt;/var&amp;gt; parameter CUSTOM=11 setting no longer requires that a *LOWER command be issued prior to a LOGCTL command (to add or change a  password) to preserve mixed case input. Prior to this release, with CUSTOM=11 in place, *LOWER had to be issued before a LOGCTL command, otherwise any mixed case password strings would automatically be translated into uppercase. This change is enabled in V7.7 with the application of zap 77z108.&lt;br /&gt;
&lt;br /&gt;
===DEFUSER can specify a jobname not authorized to access M204===&lt;br /&gt;
When specifying DEFUSER=JOBNAME and VALIDAT=LOGON in the RACFGEN parms for an ONLINE, if the specified jobname ( the owning id for the ONLINE job ) isn&#039;t authorized to use Model 204 via RACF, any LOGIN commands specifying no userid will now succeed ( previously such a LOGON would have failed ). This enables users to submit jobs with USE $JOB, whereby the string USER=jobname  will be added to the submitted JCL, and this in turn is useful if the specified jobname has dataset access privileges to datasets required by the submitted jobs, even if the jobname itself isn&#039;t authorized to use M204.&lt;br /&gt;
&lt;br /&gt;
==Janus product enhancements==&lt;br /&gt;
&lt;br /&gt;
===Web Sockets===&lt;br /&gt;
Web Sockets are now supported in Janus Web Server.&lt;br /&gt;
&lt;br /&gt;
The Web Socket protocol provides various advantages over the HTTP protocol:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Web Sockets allow full-duplex communication.&amp;lt;/li&amp;gt; &lt;br /&gt;
&amp;lt;li&amp;gt;Efficient framing of payload data uses minimal overhead.&amp;lt;/li&amp;gt;  &lt;br /&gt;
&amp;lt;li&amp;gt;The Web Socket protocol is end-user extensible.&amp;lt;/li&amp;gt;  &lt;br /&gt;
&amp;lt;li&amp;gt;Most importantly, Web Sockets can be deployed completely within an existing HTTP/HTTPS framework.&amp;lt;/li&amp;gt; &lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To implement Web Sockets, you must enable the Janus Web port for Web Socket upgrades with the new &lt;br /&gt;
WEBSOCKET parameter. The WEBSOCKET option can be specified on either the port definition or the &lt;br /&gt;
JANUS WEB rule for the URL. &lt;br /&gt;
Likewise, an individual Janus Web rule can either allow or disallow Web Socket connections with the &lt;br /&gt;
WEBSOCKET and NOWEBSOCKET parameters, respectively. &lt;br /&gt;
&lt;br /&gt;
For details on implementing Web Sockets, see the [[WebSocket_(Socket_function)|WebSocket]] wiki page.&lt;br /&gt;
&lt;br /&gt;
===Janus Web Server access rule===&lt;br /&gt;
The automatic &amp;lt;var&amp;gt;[[JANUS WEB ALLOW]]&amp;lt;/var&amp;gt; rule, which allowed any user to access the port without requiring a login, is changed &amp;lt;i&amp;gt;for non-SSL ports&amp;lt;/i&amp;gt; to the following:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;JANUS WEB &amp;lt;i&amp;gt;portname&amp;lt;/i&amp;gt; DISALLOW *&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
This rule requires a system administrator to explicitly define &amp;lt;var&amp;gt;ALLOW&amp;lt;/var&amp;gt; rules to enable users to access non-SSL ports.&lt;br /&gt;
The rule applies unless overridden by user-added rules. &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;blockquote class=&amp;quot;note&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;b&amp;gt;Note:&amp;lt;/b&amp;gt; To revert from this change in the JANUS DEFINE default and make the default &lt;br /&gt;
 non-SSL &amp;lt;var&amp;gt;ALLOW&amp;lt;/var&amp;gt; rule as it was in version 7.5 and earlier (&amp;lt;code&amp;gt;ALLOW *&amp;lt;/code&amp;gt;), turn on the 1 bit of the &amp;lt;var&amp;gt;[[WEBDFLT parameter|WEBDFLT]]&amp;lt;/var&amp;gt; parameter: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;RESET WEBDFLT=1&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Increase in pending accepts for Janus BPX ports===&lt;br /&gt;
The default number of pending accepts for Janus BPX server ports has been increased from 3 to 12, thus reducing the likelihood that a pending accept may fail with the message&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;MSIR.0019 Connection request rejected for port (port), MAXCON exceeded&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The actual number of pending accepts to be supported on the port can be set with the new parameter MAXPEND, set on the &amp;lt;var&amp;gt;[[JANUS_DEFINE|JANUS DEFINE]]&amp;lt;/var&amp;gt; command, where MAXPEND can vary from 3 up to a maximum value of 32. The change to the default value was enabled in V7.7 with the application of zap 77z269.&lt;br /&gt;
&lt;br /&gt;
===TCP listen backlog increased===&lt;br /&gt;
&lt;br /&gt;
The [[Program_Communication_facilities#LISTEN_call|TCP listen]] backlog has been increased from 16 to 1024 under z/OS.&lt;br /&gt;
&lt;br /&gt;
This update tells the TCP stack to queue up to 1024 of such requests up before dropping them, thus reducing, or in most cases eliminating, the likelihood of a connection request drop, other than in exceptional circumstances, such as a denial of service attack. This change was enabled in V7.7 with the application of zap 77z340.&lt;br /&gt;
&lt;br /&gt;
===Defer the freeing of XMLSCREEN input XML===&lt;br /&gt;
&lt;br /&gt;
The freeing of [[XMLSCREEN_and_NOXMLSCREEN_(JANUS_DEFINE_parameters)|XMLSCREEN]] input XML is now deferred until the next Read Screen or session termination. This means that if an application error is detected, the input XML can be retrieved with [[$Web_Input_Content|$Web_Input_Content]] and then logged for problem analysis. &lt;br /&gt;
&lt;br /&gt;
Prior to this release the XML received from the client is freed immediately after being used to set the input data for a Read Screen, rendering it unavailable for problem determination.&lt;br /&gt;
&lt;br /&gt;
This change is enabled in V7.7 with the application of zap 77z368.&lt;br /&gt;
&lt;br /&gt;
===XMLSCREEN and Janus Web Legacy blank stripping===&lt;br /&gt;
&lt;br /&gt;
xmlScreens and Janus Web Legacy screens now adhere to the same standard as standard screen processing in terms of stripping leading blanks from input fields defined as [[Full-screen_feature#DEBLANK_or_NODEBLANK_option|DEBLANK]] (either explicitly or implicitly).&lt;br /&gt;
&lt;br /&gt;
This change is enabled in V7.7 with the application of zap 77z400.&lt;br /&gt;
&lt;br /&gt;
===SSL input buffer size===&lt;br /&gt;
&lt;br /&gt;
The default value of [[SSLIBSIZE_(JANUS_DEFINE_parameter)|SSLIBSIZE]] has been increased to 16384 + 128, or 16512. This size should ensure correct communication with all TLS spec compliant applications. It is the maximum size allowed unless you use [[CUSTOM_parameter#Using_CUSTOM.3D.2818.29|CUSTOM=18]].    &lt;br /&gt;
&lt;br /&gt;
This changed is enabled in V7.7 with the application of zap 77z415.&lt;br /&gt;
&lt;br /&gt;
===Increasing LDAP buffers===&lt;br /&gt;
&lt;br /&gt;
The number of LDAP buffers allocated at startup can now be changed by setting the NLDAPBUF parameter in CCAIN. See below for details on [[#NLDAPBUF|NLDAPBUF]].&lt;br /&gt;
&lt;br /&gt;
===Increase URL length returned with $web_form_action===&lt;br /&gt;
With this release the maximum Janus Web Server incoming URL that can be handled by &amp;lt;var&amp;gt;$web_form_action&amp;lt;/var&amp;gt; is increased from 512 bytes to 1024 bytes. This change is enabled in V7.7 with the application of zap 77z424.&lt;br /&gt;
&lt;br /&gt;
===Maximum RBSIZE setting increased===&lt;br /&gt;
The maximum value for RBSIZE, set on the &amp;lt;var&amp;gt;[[JANUS DEFINE|JANUS DEFINE]]&amp;lt;/var&amp;gt; command, is now increased to 16777215 (previously the maximum was 65534). RBSIZE specifies the RPC or Request Buffer size.  On a Web port, the Janus request buffer holds browser request information such as header data, cookies, and form data. On other port types, it holds RPC input and output parameters. This change is enabled in V7.7 with the application of zap 77z427.&lt;br /&gt;
&lt;br /&gt;
==Debugger enhancements==&lt;br /&gt;
&lt;br /&gt;
===Access to exposed variables===&lt;br /&gt;
The debuggers can now view or watch the values of variables exposed to local routines/methods. Previously, any attempts to access an exposed variable would have displayed &amp;quot;%varname has no value&amp;quot; in the debugger session. (This feature is enabled in V7.7 with the application of zap 77z363.)&lt;br /&gt;
&lt;br /&gt;
==Performance enhancements==&lt;br /&gt;
&lt;br /&gt;
===MP/204 offload improvements===&lt;br /&gt;
Application code issuing the following SOUL statements will now now be fully offloadable:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;File Records In/On&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Remember&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt; &lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Position&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Sort Values&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;                                             &lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Reset Header/Trailer&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Find and Print Count&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Find All Values&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;For Each Value&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
the above improvements are also enabled in V7.7 with the application of zaps 77z419 and 77z420.&lt;br /&gt;
&lt;br /&gt;
===X3270OUT exit offloadable===&lt;br /&gt;
When running MP/204 (AMPSUBS&amp;gt;0) and using the [[Coding_SNA_Communications_Server_conversion_exit_routines#X3270OUT_.28convert_output_from_3270_format.29|X3270OUT]] exit to convert a 3270 output data stream to the appropriate device protocol, the exit can now run in parallel mode to improve performance. This change was enabled in V7.7 with the application of zap 77z313.&lt;br /&gt;
&lt;br /&gt;
The X3270OUT exit must be written to be re-entrant.&lt;br /&gt;
&lt;br /&gt;
==New and changed commands==&lt;br /&gt;
===DISPLAY ECF===&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;DISPLAY ECF {{ M | N | U } like ?} &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This new command displays details from ECF tables, or the current status of users accessing ECF modules.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;syntax&amp;quot;&amp;gt;D ECF M&amp;lt;/span&amp;gt; displays the contents of the module table. For example:&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;    D ECF M &lt;br /&gt;
    Module   Loadlib  Address:Length     Loaded@      Lastused@   #Calls  Flags &lt;br /&gt;
    QATUM13C PROGLIB 2FB91FB8:00000028 19023:121506 19023:121506 00000001 &lt;br /&gt;
    QATUM13B PROGLIB 2FE65000:00009C18 19023:121506 19023:121506 00000001 &lt;br /&gt;
    QATUM13A PROGLIB 2FE6EC18:00001CD8 19023:121506 19023:121506 00000001  &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
(flags may be D=deleted; S=shared; H=halted; I=Idle)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;syntax&amp;quot;&amp;gt;D ECF N&amp;lt;/span&amp;gt; displays contents of the name table. For example: &amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;    D ECF N&lt;br /&gt;
    Module   Logical-call-name &lt;br /&gt;
    QATUM13C MOD_QATUM13C &lt;br /&gt;
    QATUM13B MOD_QATUM13B &lt;br /&gt;
    QATUM13A MOD_QATUM13A &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;syntax&amp;quot;&amp;gt;D ECF U&amp;lt;/span&amp;gt; displays details of users currently accessing ECF modules. This is also the default option, and so &amp;lt;span class=&amp;quot;syntax&amp;quot;&amp;gt;D ECF&amp;lt;/span&amp;gt; will display the same output as &amp;lt;span class=&amp;quot;syntax&amp;quot;&amp;gt;D ECF U&amp;lt;/span&amp;gt;. For example:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;    D ECF U                           &lt;br /&gt;
    User# Userid     Module   Parmlen &lt;br /&gt;
    00002 ADMIN      --none--         &lt;br /&gt;
    00003 ADMIN      COBSAMP1 00000002&lt;br /&gt;
    00004 ADMIN      COBSAMP1 00000002 &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;syntax&amp;quot;&amp;gt;D ECF &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;function&amp;lt;/var&amp;gt; LIKE &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;?&amp;lt;/var&amp;gt; &amp;lt;/span&amp;gt; (where &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;?&amp;lt;/var&amp;gt; is a valid pattern) displays details for entities that match the specified pattern. The function is either M (modules), N (names), or U (users), and it defaults to U. So for example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;D ECF U L A&amp;lt;/p&amp;gt;&lt;br /&gt;
or&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;D ECF U L A*&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
displays details of ECF users whose names begin with A.&lt;br /&gt;
&lt;br /&gt;
===REGENERATE===&lt;br /&gt;
The &amp;lt;var&amp;gt;REGENERATE&amp;lt;/var&amp;gt; command can now be run in a multi-user environment by multiple users with system manager privileges. A new option USING is provided to specify the ddname of the input journal, so that the full syntax is now as follows:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;  REGENERATE [USING ddname] FILE filename [FROM dumpname | IGNORE]&lt;br /&gt;
  [TO {LAST UPDATE [BEFORE yy.ddd hh:mm:ss.th] | LAST CHECKPOINT [BEFORE yy.dd hh:mm:ss.th] &lt;br /&gt;
  | UPDATE number OF yy.ddd hh:mm:ss.th | CHECKPOINT yy.ddd hh:mm:ss.th} ]&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The default for the using ddname is CCAGEN, but any ddname may be used to allocate an input journal and used. For example:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;  ALLOCATE REGEN1 WITH SCOPE=SYSTEM DSN=PROD1.GDGJ OLD SEQUENTIAL GEN=+2&lt;br /&gt;
  REGENERATE USING REGEN1 FILE TEST&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It is the user&#039;s responsibility to ensure that the file being regenerated is not in use, and so prior to usage, &amp;lt;var&amp;gt;BUMP FILE&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;STOP FILE&amp;lt;/var&amp;gt; should be used to isolate usage against the file. If the file is in use, the REGEN will fail with these messages:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;  M204.1430: Failed to open file TEST&lt;br /&gt;
  M204.1436: Stopped processing file TEST  &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
$STATUS will now be set for &amp;lt;var&amp;gt;REGENERATE&amp;lt;/var&amp;gt; with the following values:&lt;br /&gt;
&amp;lt;blockquote&amp;gt;    &lt;br /&gt;
    0 - Success &amp;lt;br/&amp;gt;&lt;br /&gt;
    1 - No files were processed &amp;lt;br/&amp;gt;&lt;br /&gt;
    2 - At least one file stopped processing &amp;lt;br/&amp;gt;&lt;br /&gt;
    4 - A serious error occurred, REGEN failed &lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Similarly, &amp;lt;var&amp;gt;SETGRC&amp;lt;/var&amp;gt; may be used to get the return code and error message.&lt;br /&gt;
&lt;br /&gt;
==New and changed parameters==&lt;br /&gt;
&lt;br /&gt;
===ECMODS===&lt;br /&gt;
The new minimum value for ECMODS, the allowable number of ECF modules, is 1. Prior to V7.8 the minimum value was 0. This changed was enabled in V7.7 with the application of zap 77z306.&lt;br /&gt;
&lt;br /&gt;
===ECNAMES===&lt;br /&gt;
The new minimum value for ECNAMES, the allowable number of ECF module names, is 1. Prior to V7.8 the minimum value was 0. This changed was enabled in V7.7 with the application of zap 77z306.&lt;br /&gt;
&lt;br /&gt;
===ECPSIZE===&lt;br /&gt;
The new minimum value for ECPSIZE, the initial storage allocation for ECF parameters, is 1024. Prior to V7.8 the minimum value was 0. This changed was enabled in V7.7 with the application of zap 77z306.&lt;br /&gt;
&lt;br /&gt;
===ENQTIME===&lt;br /&gt;
Millisecond duration of automatic record locking retry wait.&lt;br /&gt;
&lt;br /&gt;
Prior to this change, if record locking conflicts occur frequently in a busy online, any user with a non-zero value for &amp;lt;var&amp;gt;[[ENQRETRY parameter|ENQRETRY]]&amp;lt;/var&amp;gt; will wait at least 3 seconds before the conflict is dealt with. This can degrade overall system performance.      &lt;br /&gt;
                                                         &lt;br /&gt;
The &amp;lt;var&amp;gt;[[ENQTIME parameter|ENQTIME]]&amp;lt;/var&amp;gt; parameter specifies the number of milliseconds waited for each record locking retry wait. ENQTIME can be between 1 and 60000, corresponding to a minimum of 1 millisecond and a maximum of 1 minute. The default value of ENQTIME is 3000 (3 seconds).            &lt;br /&gt;
                                                         &lt;br /&gt;
For example, with ENQTIME = 100 and ENQRETRY = 7, after a record locking conflict occurs the thread will retry 7 times with wait intervals of .1 seconds, and so within at most .7 seconds either the lock becomes available or the conflict triggers an On unit or cancels the request.     &lt;br /&gt;
                                                         &lt;br /&gt;
The ENQTIME parameter may also be reset with $ResetN. &lt;br /&gt;
&lt;br /&gt;
This new parameter was enabled in V7.7 with the application of zap 77z299.&lt;br /&gt;
&lt;br /&gt;
===EVALOPT===&lt;br /&gt;
The new &amp;lt;var&amp;gt;EVALOPT&amp;lt;/var&amp;gt; parameter controls the cancellation of a request on truncation of string data. The default value is 0, and currently there is just one setting, 1, which means &amp;quot;cancel a request if truncation of string data occurs.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
For example, with the default of 0 in place, the following code &amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;    %x is string len 1   &lt;br /&gt;
    %y is string len 2   &lt;br /&gt;
    %y = &#039;ab&#039;            &lt;br /&gt;
    %x = %y              &lt;br /&gt;
    printtext {~} = {%x} &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
would cause silent truncation, and give the result&lt;br /&gt;
    &amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;%x = a &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If &amp;lt;var&amp;gt;EVALOPT&amp;lt;/var&amp;gt; is set to 1, then the above code produces the following message:&lt;br /&gt;
    &amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;M204.0552: Variable too small for result &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and the request is cancelled.&lt;br /&gt;
&lt;br /&gt;
===LFSCB===&lt;br /&gt;
LFSCB, the length of the full screen buffer, now has a new minimum value of 8 ( the previous minimum was 0 ). This change has been enabled in v7.7 with the application of zap 77z042, and within V7.6 with the application of zap 76z393.&lt;br /&gt;
&lt;br /&gt;
===MAXPRE, MAXBOUT, MAXSUBT===&lt;br /&gt;
&amp;lt;p&amp;gt;Introduced in zap 77z257.&amp;lt;/p&amp;gt;&lt;br /&gt;
The new &amp;lt;var&amp;gt;MAXPRE&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;MAXBOUT&amp;lt;/var&amp;gt;, and &amp;lt;var&amp;gt;MAXSUBT&amp;lt;/var&amp;gt; parameters can be used to cancel a runaway transaction and prevent it from filling the checkpoint data set. &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;MAXPRE&amp;lt;/var&amp;gt;:  Maximum number of pre-images per transaction.  &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;MAXBOUT&amp;lt;/var&amp;gt;: Maximum number of backout pages per transaction. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;MAXSUBT&amp;lt;/var&amp;gt;: Maximum number of subtransaction checkpoints that a transaction can span.&amp;lt;/li&amp;gt;&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;Each new parameter defaults to unlimited. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;If a parameter value is set, a transaction is cancelled if that value is exceeded, and the following message is displayed:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;M204.0524: Maximum number (&amp;lt;i&amp;gt;num&amp;lt;/i&amp;gt;) of &amp;lt;i&amp;gt;parameter&amp;lt;/i&amp;gt; exceeded.&amp;lt;/p&amp;gt;&lt;br /&gt;
where &amp;lt;i&amp;gt;num&amp;lt;/i&amp;gt; is the value set for &amp;lt;i&amp;gt;parameter&amp;lt;/i&amp;gt; (&amp;lt;var&amp;gt;MAXPRE&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;MAXBOUT&amp;lt;/var&amp;gt;, or &amp;lt;var&amp;gt;MAXSUBT&amp;lt;/var&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
===NLDAPBUF===&lt;br /&gt;
This new parameter allows the number of LDAP buffers allocated during startup to be set in CCAIN. The default value is 2, and the settable value can range from 0 to 65535.&lt;br /&gt;
&lt;br /&gt;
===PUPDTH (new minimum value)===&lt;br /&gt;
If a user sets the &amp;lt;var&amp;gt;[[PUPDTH parameter|PUPDTH]]&amp;lt;/var&amp;gt; parameter to 0, it will now automatically be increased to 1, its minimum value.&lt;br /&gt;
&lt;br /&gt;
===SERV4G===&lt;br /&gt;
This parameter allows testing of server tables that span a 4-gigabyte boundary. For example, if &amp;lt;var&amp;gt;SERV4G&amp;lt;/var&amp;gt; is &amp;lt;code&amp;gt;X&#039;FFFFF000&#039;&amp;lt;/code&amp;gt;, each ATB server will begin at &amp;lt;code&amp;gt;XX_FFFFF000&amp;lt;/code&amp;gt;. If SERV4G is &amp;lt;code&amp;gt;X&#039;FFFF0000&#039;&amp;lt;/code&amp;gt;, each ATB server will begin at &amp;lt;code&amp;gt;XX_FFFF0000&amp;lt;/code&amp;gt;. &amp;lt;code&amp;gt;XX&amp;lt;/code&amp;gt; is determined by the storage available on the system. The parameter is set in CCAIN.&lt;br /&gt;
&lt;br /&gt;
The contents of the ATB server are specified by using the &amp;lt;var&amp;gt;[[SERVGA parameter|SERVGA]]&amp;lt;/var&amp;gt; parameter.&lt;br /&gt;
&lt;br /&gt;
For example, if you want VTBL to span the 4G boundary, you can use these settings: &amp;lt;code&amp;gt;SERV4G=X&#039;FFFFF000&#039;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;SERVGA=X&#039;00040000&#039;&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;LVTBL=200 (6400 bytes, X&#039;1900&#039;)&amp;lt;/code&amp;gt;. This will force each server&#039;s VTBL to begin at &amp;lt;code&amp;gt;XX_FFFFF000&amp;lt;/code&amp;gt; and end at &amp;lt;code&amp;gt;XX+1_00000900&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===WEBDFLT===&lt;br /&gt;
At V7.7, the default access rule for non-SSL ports was changed from ALLOW * to DISALLOW *, meaning that unless any ALLOW rules were in place resulting in a login/password prompt, the port couldn&#039;t be accessed. The new &amp;lt;var&amp;gt;[[WEBDFLT_parameter|WEBDFLT]]&amp;lt;/var&amp;gt; parameter may be set to 1 for reversion to the old default of ALLOW *. Under V7.7, this new parameter was enabled with the application of zap 77z090. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;var&amp;gt;RESET WEBDFLT&amp;lt;/var&amp;gt; requires system administrator privileges. It is recommended to reset the 1 bit of &amp;lt;var&amp;gt;WEBDFLT&amp;lt;/var&amp;gt; to zero after issuing a series of &amp;lt;var&amp;gt;JANUS DEFINE&amp;lt;/var&amp;gt; commands which need WEBDFLT=1, as in the CCAIN input stream.&lt;br /&gt;
&lt;br /&gt;
==New and changed statistics==&lt;br /&gt;
===MPR, MBO, MCP, and RCV===&lt;br /&gt;
Introduced in zap 77z257.&lt;br /&gt;
&amp;lt;p&amp;gt;These statistics provide high water mark transaction information. (Since-last values will not be available until V78 GA.)&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;They are useful in conjunction with the &amp;lt;var&amp;gt;MAXPRE&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;MAXBOUT&amp;lt;/var&amp;gt;, and &amp;lt;var&amp;gt;MAXSUBT&amp;lt;/var&amp;gt; parameters. &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
User/system statistics:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;MPR: High water mark of transaction pre-images. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;MBO: High water mark of transaction backout pages. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;MCP: High water mark of transaction chkpoint spans. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
System statistics: &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;RCV: Number of blocks needed for subtransaction recovery &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt; &lt;br /&gt;
&amp;lt;p class=&amp;quot;note&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Notes:&amp;lt;/b&amp;gt; M204.0843 now displays the RCV statistic for subtransaction checkpoints.&lt;br /&gt;
The size of recovery checkpoint must be greater than the sum of the last RCV value plus the number of records in [[System_and_media_recovery#RESTART_recovery_considerations_for_sub-transaction_checkpoints|RESTART and RESTARTS]].&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
===DKWTS and DKWTMICS===&lt;br /&gt;
Introduced in zap 77z7289.&lt;br /&gt;
&amp;lt;p&amp;gt;The new system statistics DKWTS (DisK WaiTs) and DKWTMICS (DisK WaiT MICroSeconds) collect data to provide rough disk I/O service time numbers.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
DKWTS shows the number of disk I/O waits. DKWTMICS shows the total wait time for those waits in microseconds. Dividing the difference in DKWTMICS by the difference in DKWTS over an interval provides the average disk I/O wait time in microseconds.              &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;note&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Notes:&amp;lt;/b&amp;gt; &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The wait time does include internal Model 204 scheduler delays, so on a CPU bound Model 204 system, the service times calculated from DKWTS and DKWTMICS are likely to be an overestimate of actual service times.&amp;lt;/li&amp;gt;  &lt;br /&gt;
                                                                    &lt;br /&gt;
&amp;lt;li&amp;gt;DKWTS and DKWTMICS are not available in SirMon; use [[MONITOR_command|MONITOR]] SYSTEM STATISTICS to view these statistics.&amp;lt;/li&amp;gt;&amp;lt;/ul&amp;gt;  &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Compatibility issues==&lt;br /&gt;
===&amp;lt;b id=&amp;quot;listNewInit&amp;quot;&amp;gt;&amp;lt;/b&amp;gt;$ListNew cannot be used in Initial clause===&lt;br /&gt;
It is now a compilation error if &amp;lt;var&amp;gt;$ListNew&amp;lt;/var&amp;gt; is attempted to be used in the &amp;lt;var&amp;gt;Initial&amp;lt;/var&amp;gt; clause of a &lt;br /&gt;
[[Using_variables_and_values_in_computation#Declare_statements_for_.25variables|declaration statement]].&lt;br /&gt;
&amp;lt;p&amp;gt;This change is propagated by zap maintenance to versions 7.5 (zap 75Z487), 7.6 (zap 76Z514), and 7.7 (zap 77z281) of Model 204.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote class=&amp;quot;note&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Note:&amp;lt;/b&amp;gt; Strictly speaking, this would not be considered a compilation error, because previously although &amp;lt;code&amp;gt;..&amp;amp;nbsp;Initial($ListNew)&amp;lt;/code&amp;gt; did not produce a compilation error, in almost all circumstances it would produce a snap if the initialized %variable were used with some other &amp;lt;var&amp;gt;$List&amp;lt;i&amp;gt;xxx&amp;lt;/i&amp;gt;&amp;lt;/var&amp;gt; invocation.&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Restricting the use of the CUSTOM=38 setting===&lt;br /&gt;
The [[CUSTOM parameter|CUSTOM=38]] parameter setting, introduced at V7.5, inadvertently provided System Manager privileges to all users via the RESET command. This CUSTOM setting is now restricted to the RESETting of the LAUDIT parameter.&lt;br /&gt;
&lt;br /&gt;
===Disabling of Closure support===&lt;br /&gt;
Due to a number of bugs related to Closure support, introduced at V7.7, this feature, which can best be described as exposed methods assigned to method variables, has been disabled in this release. This change was also made to V7.7 with application of zap 77z119.&lt;br /&gt;
&lt;br /&gt;
===Password delimiter enforced===&lt;br /&gt;
When using &amp;lt;var&amp;gt;IFSTRTN&amp;lt;/var&amp;gt; to log on to a Model 204 online from an IFAM2 application, both the logonid and password must be followed by a semicolon, which is the delimiter. For example:      &lt;br /&gt;
                                      &lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;CALL IFSTRTN(RC,&#039;logonid;password;&#039;...)&amp;lt;/p&amp;gt;&lt;br /&gt;
                 &lt;br /&gt;
If a semicolon does not follow the password string, the following message will now be issued:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;M204.2964: Password missing or too long &amp;lt;/p&amp;gt;                 &lt;br /&gt;
                                                         &lt;br /&gt;
Previously, a semicolon following the password was not required and the first blank served as a password delimiter.  However, as of V7.7, embedded blanks are valid password characters and a semicolon is now required to delimit the password.&lt;br /&gt;
&lt;br /&gt;
This change has also been enabled in V7.7 with the application of zap 77z231.&lt;br /&gt;
&lt;br /&gt;
===PAGESZ parameter validated===&lt;br /&gt;
Previously it was possible to set the PAGESZ parameter to any value, although Model 204 internally supports one page size of 6184, and any deviation from this value would have led to problems during file creation. The value of this parameter is now controlled, such that setting it to any value other than 6184 will generate an M204.1149 message with the parameter being reset to 6184.&lt;br /&gt;
&lt;br /&gt;
===ECPRIV and the IDCAMS facility===&lt;br /&gt;
At V7.7 a security loophole was closed, whereby all ECF modules were run under external-authorizer profile of the calling user. Previously any ECF tasks were run under the owning job&#039;s external-authorizer profile, and in order for certain sites to retain that ability, a new setting of ECPRIV, value 4, was introduced to retain the ability to run ECF tasks using the job&#039;s security profile. &lt;br /&gt;
&lt;br /&gt;
The ECPRIV 4 setting potentially introduced a security loophole when calling the IDCAMS interface, based upon what the IDCAMS utility is able to do at a system level. Consequently as of this release, the ECPRIV 4 setting will be ignored when calling the IDCAMS facility via ECF, and such IDCAMS processes will always use the calling user&#039;s security profile. Any existing jobs that use ECF to call the IDCAMS utility with the ECFPRIV 4 bit set should be checked to ensure that the calling user&#039;s security profile still satisfies the job&#039;s requirements.&lt;br /&gt;
&lt;br /&gt;
===TCPOPTS is view-only===&lt;br /&gt;
In previous versions the &amp;lt;var&amp;gt;TCPOPTS&amp;lt;/var&amp;gt; parameter, which identifies the type of IP addressing in use (v4 or v6), was resetable, although it was always documented as a view-only parameter. The parameter is now handled as a view-only parameter, and any attempts to reset the parameter will result in the following message:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;gt;   M204.1123: Parameter TCPOPTS not reset&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===ZHPF command can only be issued by a system manager===&lt;br /&gt;
In previous versions it was possible to issue the ZHPF command without being logged on. From this release onwards, a user would have to be logged on with system manager privileges to be able to issue this command.&lt;br /&gt;
&lt;br /&gt;
Additionally, the command output will now only  display results for currently open files.&lt;br /&gt;
&lt;br /&gt;
This changes has been enabled in v7.7 with the application of zap 77z264.&lt;br /&gt;
&lt;br /&gt;
===Terminal MODEL reset failure===&lt;br /&gt;
If a reset of the terminal MODEL parameter fails due to an undersized output page buffer, then in addition to the existing messages that inform the user of this failure:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;gt;    M204.1875 UNABLE TO RESET MODEL TO %C &lt;br /&gt;
    M204.1123: Parameter MODEL not reset&amp;lt;/p&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
the following message will now be issued:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;gt;    M204.1008: LOUTPB must be increased to at least &amp;lt;number&amp;gt; &amp;lt;/p&amp;gt;&lt;br /&gt;
                                                         &lt;br /&gt;
where &amp;lt;number&amp;gt; is the minimum value of LOUTPB necessary to support the terminal model.&lt;br /&gt;
&lt;br /&gt;
This change is enabled in V7.7 with the application of zap 77z309.&lt;br /&gt;
&lt;br /&gt;
==Notes for system manager and installer==&lt;br /&gt;
===CRAM SVC installation is deprecated===&lt;br /&gt;
The CRAM SVC installation has been deprecated as of version 7.5. &amp;lt;br /&amp;gt;Installation of CRAM-XDM is described as part of the [[Model 204 installation]].&lt;br /&gt;
===Authorization and maintenance zaps===&lt;br /&gt;
When you download Rocket M204 product object files, all relevant authorization keys and all current maintenance zaps are pre-applied to the object files as part of the download process.&lt;br /&gt;
&lt;br /&gt;
==New and changed messages==&lt;br /&gt;
&lt;br /&gt;
See [[New and updated messages in Model 204 version 7.8|New and updated messages in Model 204 version 7.8]] for details.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category: Release notes]]&lt;/div&gt;</summary>
		<author><name>ELowell</name></author>
	</entry>
	<entry>
		<id>https://m204wiki.rocketsoftware.com/index.php?title=Release_notes_for_Model_204_version_7.8&amp;diff=117728</id>
		<title>Release notes for Model 204 version 7.8</title>
		<link rel="alternate" type="text/html" href="https://m204wiki.rocketsoftware.com/index.php?title=Release_notes_for_Model_204_version_7.8&amp;diff=117728"/>
		<updated>2019-12-10T20:24:11Z</updated>

		<summary type="html">&lt;p&gt;ELowell: /* Janus product enhancements */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
These release notes list the enhancements and other changes contained in Model 204 version 7.8. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;&amp;lt;b&amp;gt;******THIS IS A DRAFT DOCUMENT.******&amp;lt;/b&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
These release notes list the enhancements and other changes contained in Model 204 version 7.8, &amp;lt;b&amp;gt;&amp;lt;i&amp;gt;which is still in development&amp;lt;/i&amp;gt;&amp;lt;/b&amp;gt;. Until the commercial release of the software, Rocket reserves the right to add to, remove, or change anything described herein. &lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
These release notes contain installation and features information for the Rocket Model 204 version 7.8 release.&lt;br /&gt;
Before beginning your installation, please read through this information about product installation and changes.&lt;br /&gt;
&lt;br /&gt;
==Operating system and hardware requirements==&lt;br /&gt;
&lt;br /&gt;
===Operating system requirements===&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;IBM z/OS versions supported:&amp;lt;/b&amp;gt; &lt;br /&gt;
  &amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;All IBM supported releases up to and including z/OS 2.3. &amp;lt;br /&amp;gt;(For z/OS 2.2, see [[IBM z/OS 2.2 PTF requirement]].)&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;p&amp;gt;Version 1.07 is sufficient for all functionality except for the following features:&amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;ul&amp;gt;&lt;br /&gt;
    &amp;lt;li&amp;gt;zHPF support requires version [[IBM z/OS 2.1 compatibility issue|2.1]].&amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;li&amp;gt;Large (1 MB) page support requires version 1.9.&amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;li&amp;gt;Extended address volumes (EAV) requires version 1.12.&amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;/ul&amp;gt;&lt;br /&gt;
  &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
On z/OS, Model 204 release 7.8 operates as an APF authorized load module, as required by many 7.8 features. &amp;lt;br /&amp;gt;&lt;br /&gt;
To run Model 204 unauthorized, [[Contacting Rocket Software Technical Support|contact Technical Support]].&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;IBM z/VM versions supported:&amp;lt;/b&amp;gt; &lt;br /&gt;
  &amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;All IBM supported releases up to and including z/VM 6.4.&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;IBM z/VSE versions supported:&amp;lt;/b&amp;gt;&lt;br /&gt;
  &amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;All IBM supported releases up to and including z/VSE 6.1.&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Hardware requirements===&lt;br /&gt;
 &lt;br /&gt;
In general, Model 204 version 7.8 requires the IBM z/890 or above processor.&lt;br /&gt;
&amp;lt;p&amp;gt;However, the IBM z10 or above processor is required for the following features:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;large (1 MB) page support&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;IBM&#039;s High Performance FICON (zHPF) support&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Connect&amp;lt;sup&amp;gt;&amp;amp;#9733;&amp;lt;/sup&amp;gt; compatibility with Model 204===&lt;br /&gt;
&lt;br /&gt;
Connect&amp;lt;span class=&amp;quot;superstar&amp;quot;&amp;gt;&amp;amp;#9733;&amp;lt;/span&amp;gt; version 7.5 or 7.7 is compatible with Model 204 version 7.8.&lt;br /&gt;
&lt;br /&gt;
For more information on Connect&amp;lt;span class=&amp;quot;superstar&amp;quot;&amp;gt;&amp;amp;#9733;&amp;lt;/span&amp;gt; installation, see the [[:Category:Connect*|Connect&amp;lt;span class=&amp;quot;superstar&amp;quot;&amp;gt;&amp;amp;#9733;&amp;lt;/span&amp;gt; wiki pages]].&lt;br /&gt;
&lt;br /&gt;
==SOUL (User Language) enhancements==&lt;br /&gt;
===AmIndependent method===&lt;br /&gt;
The &amp;lt;var&amp;gt;AmIndependent&amp;lt;/var&amp;gt; method returns TRUE for daemons spawned by &amp;lt;var&amp;gt;[[RunIndependently_(Daemon_subroutine)|RunIndependently]]&amp;lt;/var&amp;gt;. (The action of &amp;lt;var&amp;gt;[[AmDaemon_(Daemon_property)|AmDaemon]]&amp;lt;/var&amp;gt; remains unchanged.)&lt;br /&gt;
&lt;br /&gt;
The following table shows the values returned by &amp;lt;var&amp;gt;AmIndependent&amp;lt;/var&amp;gt; versus &amp;lt;var&amp;gt;AmDaemon&amp;lt;/var&amp;gt; for different daemon types:&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Type&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;AmDaemon&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;AmIndependent&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;$COMBG&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;False&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;False&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Independent daemon&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;False&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;True&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Other daemon&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;True&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;False&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Web, etc.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;False&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;False&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===$ProcOpn===&lt;br /&gt;
&amp;lt;var&amp;gt;[[$ProcOpn|$ProcOpn]]&amp;lt;/var&amp;gt; now supports the opening of a procedure with an all-numeric name, and including a leading zero, such as:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;%result = $procOpn(&#039;0123&#039;, &#039;MYFILE&#039;)&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Support for such procedure names was initially introduced at V7.7, and this feature of &amp;lt;var&amp;gt;$ProcOpn&amp;lt;/var&amp;gt; is also enabled in V7.7 with the application of zap 77z054.&lt;br /&gt;
&lt;br /&gt;
===Allow parentheses to surround a boolean enumeration object===&lt;br /&gt;
The following sample code:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;   begin                                       &lt;br /&gt;
   variables are undefined                  &lt;br /&gt;
   %isValid is boolean initial (True)       &lt;br /&gt;
   if (%isValid) then                  &lt;br /&gt;
      print &#039;in IF&#039;                            &lt;br /&gt;
   end if                                   &lt;br /&gt;
   end   &amp;lt;/p&amp;gt;      &lt;br /&gt;
&lt;br /&gt;
will now compile and run successfully, since this syntax: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;if (%isValid) then &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
is logically equivalent to this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;if %isValid then &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Prior to V7.8 the presence of parentheses surrounding the boolean enumeration object would have caused a compilation error. This change is enabled in V7.7 with the application of zap 77z370.&lt;br /&gt;
&lt;br /&gt;
===Support for copying Object class objects===&lt;br /&gt;
The Object class now supports the copy and deepCopy methods. For example, an Object object can be copied as follows:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;   begin               &lt;br /&gt;
   %x is object object &lt;br /&gt;
   %y is object object &lt;br /&gt;
   %y = new            &lt;br /&gt;
   %x = %y:copy        &lt;br /&gt;
   end &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This change is enabled in v7.7 with the application of zap 77z076, and within V7.6 with the application of zap 76z412.&lt;br /&gt;
&lt;br /&gt;
===Assignment of enumeration values to method variables===&lt;br /&gt;
Enumerations values can now be assigned to method variables whose result is an enumeration. So, for example, the following code:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;   begin                                               &lt;br /&gt;
   enumeration colour                                  &lt;br /&gt;
      public                                           &lt;br /&gt;
         value red                                     &lt;br /&gt;
         value white                                   &lt;br /&gt;
         value blue                                    &lt;br /&gt;
      end public                                       &lt;br /&gt;
   end enumeration                                     &lt;br /&gt;
   %func    is function getColour is enumeration colour&lt;br /&gt;
   local function getColour is enumeration colour      &lt;br /&gt;
      return blue                                      &lt;br /&gt;
   end function                                        &lt;br /&gt;
   %func    = getColour                                &lt;br /&gt;
   %func    = (colour):red                             &lt;br /&gt;
   printText {~=%(Local):(%func)}                      &lt;br /&gt;
   end  &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
will produce this result:&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt; %(Local):(%func)=red &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
whereas previously this line:   &lt;br /&gt;
&lt;br /&gt;
  &amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt; %func    = (colour):red &amp;lt;/p&amp;gt;   &lt;br /&gt;
&lt;br /&gt;
would have been rejected with this message:&lt;br /&gt;
&lt;br /&gt;
   &amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;MSIR.0993: Assignment invalid: mismatch between method and method variable &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This change is enabled in V7.7 with the application of zap 77z128.&lt;br /&gt;
&lt;br /&gt;
===Optional output method parameters===&lt;br /&gt;
Prior to this release output parameters could not be optional or have default values. In this release output parameters can be specified as &amp;lt;var&amp;gt;Optional&amp;lt;/var&amp;gt;, and a default value can be specified with &amp;lt;var&amp;gt;Default&amp;lt;/var&amp;gt;. One related change is that if a &amp;lt;var&amp;gt;Len&amp;lt;/var&amp;gt; value is specified with &amp;lt;var&amp;gt;Optional&amp;lt;/var&amp;gt; or &amp;lt;var&amp;gt;Default&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;Output&amp;lt;/var&amp;gt;, it indicates the length of the hidden target for the output parameter if none was passed. For all other &amp;lt;var&amp;gt;Output&amp;lt;/var&amp;gt; parameters, &amp;lt;var&amp;gt;Len&amp;lt;/var&amp;gt; is meaningless, just as it was before Model 204 V7.8. The following is an example of the use of an optional output parameter:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;function getRemote( -&lt;br /&gt;
   %target is string len 32, %errorReason is string len 80 optional output -&lt;br /&gt;
) is float&lt;br /&gt;
  ...&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
In this example, if &amp;lt;code&amp;gt;%errorReason&amp;lt;/code&amp;gt; is not specified in a call and then set to a value longer than 80 bytes it wil be truncated to 80 bytes. However, if a string of a different length is passed, the length of that string determines truncation behavior.&lt;br /&gt;
&lt;br /&gt;
==External Call Facility enhancements==&lt;br /&gt;
===Managing ECF tables more efficiently===&lt;br /&gt;
The are two new features to help manage ECF tables more efficiently, avoid conditions where the table can fill, and prevent the definition of further entities.&lt;br /&gt;
&lt;br /&gt;
The first feature is the new &amp;lt;var&amp;gt;DISPLAY ECF&amp;lt;/var&amp;gt; command, which displays the contents of ECF tables and also the current status of users accessing ECF modules. See more details of the &amp;lt;var&amp;gt;[[#DISPLAY ECF|DISPLAY ECF]]&amp;lt;/var&amp;gt; command below.&lt;br /&gt;
&lt;br /&gt;
The second feature is a new &amp;lt;var&amp;gt;EXTERNAL REMOVE&amp;lt;/var&amp;gt; statement with the following syntax:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;EXTERNAL REMOVE &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;modulename&amp;lt;/span&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This statement causes the entry for the named module to be removed from the module table. The table entry is then placed on a free chain of entries and can be reused by issuing the &amp;lt;var&amp;gt;EXTERNAL MODULE&amp;lt;/var&amp;gt; statement. This allows the module table to be managed with redundant entries removed, without having to recycle the ONLINE.&lt;br /&gt;
&lt;br /&gt;
An &amp;lt;var&amp;gt;EXTERNAL REMOVE&amp;lt;/var&amp;gt; statement will return &amp;lt;code&amp;gt;$status/$statusd&amp;lt;/code&amp;gt; values of &amp;lt;code&amp;gt;0/0&amp;lt;/code&amp;gt;, and most other status values that can be returned by the &amp;lt;var&amp;gt;EXTERNAL REMOVE&amp;lt;/var&amp;gt; statement are already documented in the ECF return codes table. If an &amp;lt;var&amp;gt;EXTERNAL REMOVE&amp;lt;/var&amp;gt; is attempted against a module that is currently being called (in use), then &amp;lt;code&amp;gt;$status/$statusd&amp;lt;/code&amp;gt; will return the values &amp;lt;code&amp;gt;20/1&amp;lt;/code&amp;gt; (module unavailable).&lt;br /&gt;
&lt;br /&gt;
==System enhancements==&lt;br /&gt;
&lt;br /&gt;
===New wait types for daemon/master waits===&lt;br /&gt;
&lt;br /&gt;
Two new wait types, viewable on the &amp;lt;var&amp;gt;[[MONITOR_command|MONITOR]] USERS&amp;lt;/var&amp;gt; command output, have been implemented as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;57&amp;lt;/code&amp;gt; - Means a daemon thread waiting for its master thread  &amp;lt;br /&amp;gt;     &lt;br /&gt;
&amp;lt;code&amp;gt;58&amp;lt;/code&amp;gt; - Means a master thread waiting for one of its daemon threads&lt;br /&gt;
&lt;br /&gt;
This change is enabled in V7.7 with the application of zap 77z410.&lt;br /&gt;
&lt;br /&gt;
===Snap formatting changes===&lt;br /&gt;
Date/time stamps in the page headers of snaps will now be shown in normal format, rather than in julian format as in previous versions. So in the following example, a particular snap header under v7.7 or previous versions would show as: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;SNAPID    1   19226.060155  M204.0022: Bug .. nnnnn               PAGE     1 &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
whereas the same snap header under v7.8 would show as: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;SNAPID    1  2019/08/14 06:01:06   M204.0022: Bug .. nnnnn        PAGE     1 &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Also, due to improvements in handling trailing blanks in snap output, a snap generated under v7.8 should be marginally smaller than the same snap generated under previous versions, assuming the same SNAPCTL settings.&lt;br /&gt;
&lt;br /&gt;
===Call stack trace for problem diagnosis===&lt;br /&gt;
A  call stack trace is now provided to help diagnose and resolve common errors. To enable the stack trace, do either of the following: &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Set the &amp;lt;var&amp;gt;[[SIRFACT parameter|SIRFACT]] X&#039;01&#039;&amp;lt;/var&amp;gt; bit.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Set the &amp;lt;var&amp;gt;[[DEBUGUL parameter|DEBUGL]]&amp;lt;/var&amp;gt; parameter. Note that the &amp;lt;var&amp;gt;DEBUGUL&amp;lt;/var&amp;gt; approach will introduce extra QTBL overhead. &amp;lt;p&amp;gt;(&amp;lt;var&amp;gt;DEBUGUL&amp;lt;/var&amp;gt; provides a similar facility with an include trace of procedures leading to the error, but this might not be potentially as useful as the call trace.)&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt; &lt;br /&gt;
&lt;br /&gt;
The call stack trace can assist in diagnosing run-time errors that might occur, as illustrated by the following &amp;quot;Variable too small for result&amp;quot; and &amp;quot;MBSCAN exceeded&amp;quot; examples.&lt;br /&gt;
&lt;br /&gt;
====Variable too small for result====&lt;br /&gt;
When the stack trace is enabled, a &amp;quot;variable too small&amp;quot; error results in the following message:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;M204.2966: Error at line n, procedure &#039;&#039;procname&#039;&#039; in file &#039;&#039;procfile&#039;&#039;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
which identifies the line within a procedure where the error is occurring, in addition to the usual message:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;M204.0552: Variable too small for result&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Any subsequent M204.2966 messages indicate the point in the code from where the code in error was called. For example, a stack of three subroutine calls leading to a &amp;quot;variable too small&amp;quot; error might result in the following messaging:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;   M204.0552: Variable too small for result                             &lt;br /&gt;
   M204.2966: Error at line 9, procedure MYPROC.LEVEL4 in file MYPROC   &lt;br /&gt;
   M204.2966: Called from line 5, procedure MYPROC.LEVEL3 in file MYPROC&lt;br /&gt;
   M204.2966: Called from line 5, procedure MYPROC.LEVEL2 in file MYPROC&lt;br /&gt;
   M204.2966: Called from line 5, procedure MYPROC.LEVEL1 in file MYPROC &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This information should help in diagnosing the problem. &lt;br /&gt;
&lt;br /&gt;
If the error occurs within a command level program rather than a procedure, then the M204.2966 message is replaced by an M204.2967 message, and a similar error condition to the above with a preceding call stack might be audited as follows:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;   M204.0552: Variable too small for result              &lt;br /&gt;
   M204.2967: Error at line 14 of command level program  &lt;br /&gt;
   M204.2967: Called from line 5 of command level program&lt;br /&gt;
   M204.2967: Called from line 3 of command level program &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If neither &amp;lt;var&amp;gt;SIRFACT X&#039;01&#039;&amp;lt;/var&amp;gt; nor &amp;lt;var&amp;gt;DEBUGUL&amp;lt;/var&amp;gt; is set, then the &amp;quot;variable too small&amp;quot; error produces the following messages:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;   M204.0552: Variable too small for result &lt;br /&gt;
   M204.2968: Error: no debug info &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====MBSCAN exceeded====&lt;br /&gt;
Similarly to the handling of the &amp;quot;variable too small for result&amp;quot; error, the call stack can also be used to diagnose errors where the value of &amp;lt;var&amp;gt;[[MBSCAN parameter|MBSCAN]]&amp;lt;/var&amp;gt; is exceeded as a result of a direct search of Table B records. &lt;br /&gt;
&amp;lt;p&amp;gt;Again, under V7.8, with either the &amp;lt;var&amp;gt;SIRFACT X&#039;01&#039;&amp;lt;/var&amp;gt; bit set or &amp;lt;var&amp;gt;DEBUGUL&amp;lt;/var&amp;gt; set, if a long request occurs as a result of exceeding &amp;lt;var&amp;gt;MBSCAN&amp;lt;/var&amp;gt;, then initially the following message is produced, as before:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;M204.0569: File &#039;&#039;filename&#039;&#039;, Find: Table B records to be searched = &#039;&#039;nnnn&#039;&#039;&amp;lt;/p&amp;gt;&lt;br /&gt;
followed by a DYRWT prompt message. If the user replies &#039;N&#039; to the prompt, or if the request is run in an environment (such as a batch job) where the default response is &#039;N&#039;, the following message is produced after the M204.0569 message:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;Cancelling request: M204.2969: MBSCAN (&#039;&#039;mm&#039;&#039;) exceeded, records to be searched = &#039;&#039;nnnn&#039;&#039;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
where &#039;&#039;mm&#039;&#039; is the current setting of &amp;lt;var&amp;gt;MBSCAN&amp;lt;/var&amp;gt;. The M204.2969 message is followed by M204.2966 messages displaying the call stack trace. Thus, if the following code is run from procedure MYPROC.MBSCAN against the demo database, with an &amp;lt;var&amp;gt;MBSCAN&amp;lt;/var&amp;gt; setting of 10:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;   b                           &lt;br /&gt;
   call sub1                   &lt;br /&gt;
   sub1: subroutine            &lt;br /&gt;
   fd1:                        &lt;br /&gt;
      in clients fd city = ONTARIO&lt;br /&gt;
              end find         &lt;br /&gt;
      fr fd1                      &lt;br /&gt;
         pai                      &lt;br /&gt;
         print                    &lt;br /&gt;
      end for                     &lt;br /&gt;
   end subroutine              &lt;br /&gt;
   end &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
then the following messages are produced, assuming any prompts are responded to with an &#039;N&#039;:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;   M204.0569: File CLIENTS, Find: Table B records to be searched = 3415&lt;br /&gt;
   Cancelling request: M204.2969: MBSCAN (10) exceeded, records to be searched = 3415  &lt;br /&gt;
   M204.2966: Error at line 6, procedure MYPROC.MBSCAN in file MYPROC&lt;br /&gt;
   M204.2966: Called from line 3, procedure MYPROC.MBSCAN in file MYPROC  &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===appendJournalData===&lt;br /&gt;
The &amp;lt;var&amp;gt;[[AppendJournalData_(Stringlist_function)|AppendJournalData]]&amp;lt;/var&amp;gt; function is now more tolerant of an outstanding BUMP request. Previously, if &amp;lt;var&amp;gt;AppendJournalData&amp;lt;/var&amp;gt; was called to inadvertently retrieve a large amount of journal data, typically when called implicitly from within SirScan, then any outstanding BUMP request wouldn&#039;t be honored until all of the data had been retrieved, at which point the BUMP request would be completed, and all data would be lost.&lt;br /&gt;
&lt;br /&gt;
Now, the &amp;lt;var&amp;gt;AppendJournalData&amp;lt;/var&amp;gt; process checks for outstanding BUMP requests before each track I/O is executed, thus avoiding excessive I/Os against the journal and long waits for the BUMP of such a process to complete.&lt;br /&gt;
&lt;br /&gt;
==AUDIT204 enhancements==&lt;br /&gt;
===FORMAT command===&lt;br /&gt;
TIMEHH is a new parameter used with the FORMAT command of the [[Tracking_system_activity_(CCAJRNL,_CCAAUDIT,_CCAJLOG)#AUDIT204_utility|AUDIT204]] utility.  It indicates that timestamps, printed at the beginning of each line of output, should include hundredths of a second. Requires no other arguments.&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;b&amp;gt;NOTE:&amp;lt;/b&amp;gt; This parameter and the 78 version (or later) of AUDIT204 may be used against a 77 (or later) CCAJRNL.&amp;lt;/p&amp;gt;&lt;br /&gt;
For example:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;//CCAIN DD *&lt;br /&gt;
FORMAT YEARFORM 4&lt;br /&gt;
TIMEHH&lt;br /&gt;
TYPE ER MS LI&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Recovery enhancements==&lt;br /&gt;
===Media Recovery in a multi-user environment===&lt;br /&gt;
It is now possible to perform media recovery by issuing the &amp;lt;var&amp;gt;REGENERATE&amp;lt;/var&amp;gt; command to roll forward selected files in a multi-user environment, with the media recovery being carried out by different users with system manager privileges. The new USING option allows for the specification of a ddname for the input journal stream to be used by the &amp;lt;var&amp;gt;REGENERATE&amp;lt;/var&amp;gt; command. Previously media recovery was restricted to single user batch jobs, using the CCAGEN ddname for the input journal. For more details, see the &amp;lt;var&amp;gt;[[#REGENERATE|REGENERATE]]&amp;lt;/var&amp;gt; command below.&lt;br /&gt;
&lt;br /&gt;
==Security enhancements==&lt;br /&gt;
===CA-Top Secret can disallow CCASTAT logins===&lt;br /&gt;
The [[CA-Top_Secret_interface|CA-Top Secret]] interface now recognizes the &amp;lt;code&amp;gt;DEFACID=&amp;lt;/code&amp;gt;, setting and does not allow CCASTAT logins in the online if &amp;lt;code&amp;gt;DEFACID&amp;lt;/code&amp;gt; is set to null. (There is no attempt to log on M204USR.) Therefore, to disallow CCASTAT logons, set DEFACID=, in [[CA-Top_Secret_interface#Preparing_a_TOPSPARM_parameter_module_with_TOPSGEN|TOPSPARM]]. CCASTAT will be opened because it contains file and group passwords, but it will not be used for logons if CCASTAT logons are not allowed.&lt;br /&gt;
&lt;br /&gt;
===CUSTOM=11 and mixed cased input===&lt;br /&gt;
The &amp;lt;var&amp;gt;[[CUSTOM_parameter|CUSTOM]]&amp;lt;/var&amp;gt; parameter CUSTOM=11 setting no longer requires that a *LOWER command be issued prior to a LOGCTL command (to add or change a  password) to preserve mixed case input. Prior to this release, with CUSTOM=11 in place, *LOWER had to be issued before a LOGCTL command, otherwise any mixed case password strings would automatically be translated into uppercase. This change is enabled in V7.7 with the application of zap 77z108.&lt;br /&gt;
&lt;br /&gt;
===DEFUSER can specify a jobname not authorized to access M204===&lt;br /&gt;
When specifying DEFUSER=JOBNAME and VALIDAT=LOGON in the RACFGEN parms for an ONLINE, if the specified jobname ( the owning id for the ONLINE job ) isn&#039;t authorized to use Model 204 via RACF, any LOGIN commands specifying no userid will now succeed ( previously such a LOGON would have failed ). This enables users to submit jobs with USE $JOB, whereby the string USER=jobname  will be added to the submitted JCL, and this in turn is useful if the specified jobname has dataset access privileges to datasets required by the submitted jobs, even if the jobname itself isn&#039;t authorized to use M204.&lt;br /&gt;
&lt;br /&gt;
==Janus product enhancements==&lt;br /&gt;
&lt;br /&gt;
===Web Sockets===&lt;br /&gt;
Web Sockets are now supported in Janus Web Server.&lt;br /&gt;
&lt;br /&gt;
The Web Socket protocol provides various advantages over the HTTP protocol:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Web Sockets allow full-duplex communication.&amp;lt;/li&amp;gt; &lt;br /&gt;
&amp;lt;li&amp;gt;Efficient framing of payload data uses minimal overhead.&amp;lt;/li&amp;gt;  &lt;br /&gt;
&amp;lt;li&amp;gt;The Web Socket protocol is end-user extensible.&amp;lt;/li&amp;gt;  &lt;br /&gt;
&amp;lt;li&amp;gt;Most importantly, Web Sockets can be deployed completely within an existing HTTP/HTTPS framework.&amp;lt;/li&amp;gt; &lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To implement Web Sockets, you must enable the Janus Web port for Web Socket upgrades with the new &lt;br /&gt;
WEBSOCKET parameter. The WEBSOCKET option can be specified on either the port definition or the &lt;br /&gt;
JANUS WEB rule for the URL. &lt;br /&gt;
Likewise, an individual Janus Web rule can either allow or disallow Web Socket connections with the &lt;br /&gt;
WEBSOCKET and NOWEBSOCKET parameters, respectively. &lt;br /&gt;
&lt;br /&gt;
For details on implementing Web Sockets, see the [[WebSocket_(Socket_function)|WebSocket]] wiki page.&lt;br /&gt;
&lt;br /&gt;
===Janus Web Server access rule===&lt;br /&gt;
The automatic &amp;lt;var&amp;gt;[[JANUS WEB ALLOW]]&amp;lt;/var&amp;gt; rule, which allowed any user to access the port without requiring a login, is changed &amp;lt;i&amp;gt;for non-SSL ports&amp;lt;/i&amp;gt; to the following:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;JANUS WEB &amp;lt;i&amp;gt;portname&amp;lt;/i&amp;gt; DISALLOW *&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
This rule requires a system administrator to explicitly define &amp;lt;var&amp;gt;ALLOW&amp;lt;/var&amp;gt; rules to enable users to access non-SSL ports.&lt;br /&gt;
The rule applies unless overridden by user-added rules. &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;blockquote class=&amp;quot;note&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;b&amp;gt;Note:&amp;lt;/b&amp;gt; To revert from this change in the JANUS DEFINE default and make the default &lt;br /&gt;
 non-SSL &amp;lt;var&amp;gt;ALLOW&amp;lt;/var&amp;gt; rule as it was in version 7.5 and earlier (&amp;lt;code&amp;gt;ALLOW *&amp;lt;/code&amp;gt;), turn on the 1 bit of the &amp;lt;var&amp;gt;[[WEBDFLT parameter|WEBDFLT]]&amp;lt;/var&amp;gt; parameter: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;RESET WEBDFLT=1&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Increase in pending accepts for Janus BPX ports===&lt;br /&gt;
The default number of pending accepts for Janus BPX server ports has been increased from 3 to 12, thus reducing the likelihood that a pending accept may fail with the message&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;MSIR.0019 Connection request rejected for port (port), MAXCON exceeded&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The actual number of pending accepts to be supported on the port can be set with the new parameter MAXPEND, set on the &amp;lt;var&amp;gt;[[JANUS_DEFINE|JANUS DEFINE]]&amp;lt;/var&amp;gt; command, where MAXPEND can vary from 3 up to a maximum value of 32. The change to the default value was enabled in V7.7 with the application of zap 77z269.&lt;br /&gt;
&lt;br /&gt;
===TCP listen backlog increased===&lt;br /&gt;
&lt;br /&gt;
The [[Program_Communication_facilities#LISTEN_call|TCP listen]] backlog has been increased from 16 to 1024 under z/OS.&lt;br /&gt;
&lt;br /&gt;
This update tells the TCP stack to queue up to 1024 of such requests up before dropping them, thus reducing, or in most cases eliminating, the likelihood of a connection request drop, other than in exceptional circumstances, such as a denial of service attack. This change was enabled in V7.7 with the application of zap 77z340.&lt;br /&gt;
&lt;br /&gt;
===Defer the freeing of XMLSCREEN input XML===&lt;br /&gt;
&lt;br /&gt;
The freeing of [[XMLSCREEN_and_NOXMLSCREEN_(JANUS_DEFINE_parameters)|XMLSCREEN]] input XML is now deferred until the next Read Screen or session termination. This means that if an application error is detected, the input XML can be retrieved with [[$Web_Input_Content|$Web_Input_Content]] and then logged for problem analysis. &lt;br /&gt;
&lt;br /&gt;
Prior to this release the XML received from the client is freed immediately after being used to set the input data for a Read Screen, rendering it unavailable for problem determination.&lt;br /&gt;
&lt;br /&gt;
This change is enabled in V7.7 with the application of zap 77z368.&lt;br /&gt;
&lt;br /&gt;
===XMLSCREEN and Janus Web Legacy blank stripping===&lt;br /&gt;
&lt;br /&gt;
xmlScreens and Janus Web Legacy screens now adhere to the same standard as standard screen processing in terms of stripping leading blanks from input fields defined as [[Full-screen_feature#DEBLANK_or_NODEBLANK_option|DEBLANK]] (either explicitly or implicitly).&lt;br /&gt;
&lt;br /&gt;
This change is enabled in V7.7 with the application of zap 77z400.&lt;br /&gt;
&lt;br /&gt;
===SSL input buffer size===&lt;br /&gt;
&lt;br /&gt;
The default value of [[SSLIBSIZE_(JANUS_DEFINE_parameter)|SSLIBSIZE]] has been increased to 16384 + 128, or 16512. This size should ensure correct communication with all TLS spec compliant applications. It is the maximum size allowed unless you use [[CUSTOM_parameter#Using_CUSTOM.3D.2818.29|CUSTOM=18]].    &lt;br /&gt;
&lt;br /&gt;
This changed is enabled in V7.7 with the application of zap 77z415.&lt;br /&gt;
&lt;br /&gt;
===Increasing LDAP buffers===&lt;br /&gt;
&lt;br /&gt;
The number of LDAP buffers allocated at startup can now be changed by setting the NLDAPBUF parameter in CCAIN. See below for details on [[#NLDAPBUF|NLDAPBUF]].&lt;br /&gt;
&lt;br /&gt;
===Increase URL length returned with $web_form_action===&lt;br /&gt;
With this release the maximum Janus Web Server incoming URL that can be handled by &amp;lt;var&amp;gt;$web_form_action&amp;lt;/var&amp;gt; is increased from 512 bytes to 1024 bytes. This change is enabled in V7.7 with the application of zap 77z424.&lt;br /&gt;
&lt;br /&gt;
===Maximum RBSIZE setting increased===&lt;br /&gt;
The maximum value for RBSIZE, set on the &amp;lt;var&amp;gt;[[JANUS DEFINE|JANUS DEFINE]]&amp;lt;/var&amp;gt; command, is now increased to 16777215 (previously the maximum was 65534). RBSIZE specifies the RPC or Request Buffer size.  On a Web port, the Janus request buffer holds browser request information such as header data, cookies, and form data. On other port types, it holds RPC input and output parameters. This change is enabled in V7.7 with the application of zap 77z427.&lt;br /&gt;
&lt;br /&gt;
==Debugger enhancements==&lt;br /&gt;
&lt;br /&gt;
===Access to exposed variables===&lt;br /&gt;
The debuggers can now view or watch the values of variables exposed to local routines/methods. Previously, any attempts to access an exposed variable would have displayed &amp;quot;%varname has no value&amp;quot; in the debugger session. (This feature is enabled in V7.7 with the application of zap 77z363.)&lt;br /&gt;
&lt;br /&gt;
==Performance enhancements==&lt;br /&gt;
&lt;br /&gt;
===MP/204 offload improvements===&lt;br /&gt;
Application code issuing the following SOUL statements will now now be fully offloadable:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;File Records In/On&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Remember&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt; &lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Position&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Sort Values&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;                                             &lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Reset Header/Trailer&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Find and Print Count&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Find All Values&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;For Each Value&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
the above improvements are also enabled in V7.7 with the application of zaps 77z419 and 77z420.&lt;br /&gt;
&lt;br /&gt;
===X3270OUT exit offloadable===&lt;br /&gt;
When running MP/204 (AMPSUBS&amp;gt;0) and using the [[Coding_SNA_Communications_Server_conversion_exit_routines#X3270OUT_.28convert_output_from_3270_format.29|X3270OUT]] exit to convert a 3270 output data stream to the appropriate device protocol, the exit can now run in parallel mode to improve performance. This change was enabled in V7.7 with the application of zap 77z313.&lt;br /&gt;
&lt;br /&gt;
The X3270OUT exit must be written to be re-entrant.&lt;br /&gt;
&lt;br /&gt;
==New and changed commands==&lt;br /&gt;
===DISPLAY ECF===&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;DISPLAY ECF {{ M | N | U } like ?} &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This new command displays details from ECF tables, or the current status of users accessing ECF modules.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;syntax&amp;quot;&amp;gt;D ECF M&amp;lt;/span&amp;gt; displays the contents of the module table. For example:&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;    D ECF M &lt;br /&gt;
    Module   Loadlib  Address:Length     Loaded@      Lastused@   #Calls  Flags &lt;br /&gt;
    QATUM13C PROGLIB 2FB91FB8:00000028 19023:121506 19023:121506 00000001 &lt;br /&gt;
    QATUM13B PROGLIB 2FE65000:00009C18 19023:121506 19023:121506 00000001 &lt;br /&gt;
    QATUM13A PROGLIB 2FE6EC18:00001CD8 19023:121506 19023:121506 00000001  &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
(flags may be D=deleted; S=shared; H=halted; I=Idle)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;syntax&amp;quot;&amp;gt;D ECF N&amp;lt;/span&amp;gt; displays contents of the name table. For example: &amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;    D ECF N&lt;br /&gt;
    Module   Logical-call-name &lt;br /&gt;
    QATUM13C MOD_QATUM13C &lt;br /&gt;
    QATUM13B MOD_QATUM13B &lt;br /&gt;
    QATUM13A MOD_QATUM13A &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;syntax&amp;quot;&amp;gt;D ECF U&amp;lt;/span&amp;gt; displays details of users currently accessing ECF modules. This is also the default option, and so &amp;lt;span class=&amp;quot;syntax&amp;quot;&amp;gt;D ECF&amp;lt;/span&amp;gt; will display the same output as &amp;lt;span class=&amp;quot;syntax&amp;quot;&amp;gt;D ECF U&amp;lt;/span&amp;gt;. For example:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;    D ECF U                           &lt;br /&gt;
    User# Userid     Module   Parmlen &lt;br /&gt;
    00002 ADMIN      --none--         &lt;br /&gt;
    00003 ADMIN      COBSAMP1 00000002&lt;br /&gt;
    00004 ADMIN      COBSAMP1 00000002 &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;syntax&amp;quot;&amp;gt;D ECF &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;function&amp;lt;/var&amp;gt; LIKE &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;?&amp;lt;/var&amp;gt; &amp;lt;/span&amp;gt; (where &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;?&amp;lt;/var&amp;gt; is a valid pattern) displays details for entities that match the specified pattern. The function is either M (modules), N (names), or U (users), and it defaults to U. So for example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;D ECF U L A&amp;lt;/p&amp;gt;&lt;br /&gt;
or&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;D ECF U L A*&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
displays details of ECF users whose names begin with A.&lt;br /&gt;
&lt;br /&gt;
===REGENERATE===&lt;br /&gt;
The &amp;lt;var&amp;gt;REGENERATE&amp;lt;/var&amp;gt; command can now be run in a multi-user environment by multiple users with system manager privileges. A new option USING is provided to specify the ddname of the input journal, so that the full syntax is now as follows:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;  REGENERATE [USING ddname] FILE filename [FROM dumpname | IGNORE]&lt;br /&gt;
  [TO {LAST UPDATE [BEFORE yy.ddd hh:mm:ss.th] | LAST CHECKPOINT [BEFORE yy.dd hh:mm:ss.th] &lt;br /&gt;
  | UPDATE number OF yy.ddd hh:mm:ss.th | CHECKPOINT yy.ddd hh:mm:ss.th} ]&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The default for the using ddname is CCAGEN, but any ddname may be used to allocate an input journal and used. For example:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;  ALLOCATE REGEN1 WITH SCOPE=SYSTEM DSN=PROD1.GDGJ OLD SEQUENTIAL GEN=+2&lt;br /&gt;
  REGENERATE USING REGEN1 FILE TEST&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It is the user&#039;s responsibility to ensure that the file being regenerated is not in use, and so prior to usage, &amp;lt;var&amp;gt;BUMP FILE&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;STOP FILE&amp;lt;/var&amp;gt; should be used to isolate usage against the file. If the file is in use, the REGEN will fail with these messages:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;  M204.1430: Failed to open file TEST&lt;br /&gt;
  M204.1436: Stopped processing file TEST  &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
$STATUS will now be set for &amp;lt;var&amp;gt;REGENERATE&amp;lt;/var&amp;gt; with the following values:&lt;br /&gt;
&amp;lt;blockquote&amp;gt;    &lt;br /&gt;
    0 - Success &amp;lt;br/&amp;gt;&lt;br /&gt;
    1 - No files were processed &amp;lt;br/&amp;gt;&lt;br /&gt;
    2 - At least one file stopped processing &amp;lt;br/&amp;gt;&lt;br /&gt;
    4 - A serious error occurred, REGEN failed &lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Similarly, &amp;lt;var&amp;gt;SETGRC&amp;lt;/var&amp;gt; may be used to get the return code and error message.&lt;br /&gt;
&lt;br /&gt;
==New and changed parameters==&lt;br /&gt;
&lt;br /&gt;
===ECMODS===&lt;br /&gt;
The new minimum value for ECMODS, the allowable number of ECF modules, is 1. Prior to V7.8 the minimum value was 0. This changed was enabled in V7.7 with the application of zap 77z306.&lt;br /&gt;
&lt;br /&gt;
===ECNAMES===&lt;br /&gt;
The new minimum value for ECNAMES, the allowable number of ECF module names, is 1. Prior to V7.8 the minimum value was 0. This changed was enabled in V7.7 with the application of zap 77z306.&lt;br /&gt;
&lt;br /&gt;
===ECPSIZE===&lt;br /&gt;
The new minimum value for ECPSIZE, the initial storage allocation for ECF parameters, is 1024. Prior to V7.8 the minimum value was 0. This changed was enabled in V7.7 with the application of zap 77z306.&lt;br /&gt;
&lt;br /&gt;
===ENQTIME===&lt;br /&gt;
Millisecond duration of automatic record locking retry wait.&lt;br /&gt;
&lt;br /&gt;
Prior to this change, if record locking conflicts occur frequently in a busy online, any user with a non-zero value for &amp;lt;var&amp;gt;[[ENQRETRY parameter|ENQRETRY]]&amp;lt;/var&amp;gt; will wait at least 3 seconds before the conflict is dealt with. This can degrade overall system performance.      &lt;br /&gt;
                                                         &lt;br /&gt;
The &amp;lt;var&amp;gt;[[ENQTIME parameter|ENQTIME]]&amp;lt;/var&amp;gt; parameter specifies the number of milliseconds waited for each record locking retry wait. ENQTIME can be between 1 and 60000, corresponding to a minimum of 1 millisecond and a maximum of 1 minute. The default value of ENQTIME is 3000 (3 seconds).            &lt;br /&gt;
                                                         &lt;br /&gt;
For example, with ENQTIME = 100 and ENQRETRY = 7, after a record locking conflict occurs the thread will retry 7 times with wait intervals of .1 seconds, and so within at most .7 seconds either the lock becomes available or the conflict triggers an On unit or cancels the request.     &lt;br /&gt;
                                                         &lt;br /&gt;
The ENQTIME parameter may also be reset with $ResetN. &lt;br /&gt;
&lt;br /&gt;
This new parameter was enabled in V7.7 with the application of zap 77z299.&lt;br /&gt;
&lt;br /&gt;
===EVALOPT===&lt;br /&gt;
The new &amp;lt;var&amp;gt;EVALOPT&amp;lt;/var&amp;gt; parameter controls the cancellation of a request on truncation of string data. The default value is 0, and currently there is just one setting, 1, which means &amp;quot;cancel a request if truncation of string data occurs.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
For example, with the default of 0 in place, the following code &amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;    %x is string len 1   &lt;br /&gt;
    %y is string len 2   &lt;br /&gt;
    %y = &#039;ab&#039;            &lt;br /&gt;
    %x = %y              &lt;br /&gt;
    printtext {~} = {%x} &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
would cause silent truncation, and give the result&lt;br /&gt;
    &amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;%x = a &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If &amp;lt;var&amp;gt;EVALOPT&amp;lt;/var&amp;gt; is set to 1, then the above code produces the following message:&lt;br /&gt;
    &amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;M204.0552: Variable too small for result &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and the request is cancelled.&lt;br /&gt;
&lt;br /&gt;
===LFSCB===&lt;br /&gt;
LFSCB, the length of the full screen buffer, now has a new minimum value of 8 ( the previous minimum was 0 ). This change has been enabled in v7.7 with the application of zap 77z042, and within V7.6 with the application of zap 76z393.&lt;br /&gt;
&lt;br /&gt;
===MAXPRE, MAXBOUT, MAXSUBT===&lt;br /&gt;
&amp;lt;p&amp;gt;Introduced in zap 77z257.&amp;lt;/p&amp;gt;&lt;br /&gt;
The new &amp;lt;var&amp;gt;MAXPRE&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;MAXBOUT&amp;lt;/var&amp;gt;, and &amp;lt;var&amp;gt;MAXSUBT&amp;lt;/var&amp;gt; parameters can be used to cancel a runaway transaction and prevent it from filling the checkpoint data set. &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;MAXPRE&amp;lt;/var&amp;gt;:  Maximum number of pre-images per transaction.  &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;MAXBOUT&amp;lt;/var&amp;gt;: Maximum number of backout pages per transaction. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;MAXSUBT&amp;lt;/var&amp;gt;: Maximum number of subtransaction checkpoints that a transaction can span.&amp;lt;/li&amp;gt;&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;Each new parameter defaults to unlimited. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;If a parameter value is set, a transaction is cancelled if that value is exceeded, and the following message is displayed:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;M204.0524: Maximum number (&amp;lt;i&amp;gt;num&amp;lt;/i&amp;gt;) of &amp;lt;i&amp;gt;parameter&amp;lt;/i&amp;gt; exceeded.&amp;lt;/p&amp;gt;&lt;br /&gt;
where &amp;lt;i&amp;gt;num&amp;lt;/i&amp;gt; is the value set for &amp;lt;i&amp;gt;parameter&amp;lt;/i&amp;gt; (&amp;lt;var&amp;gt;MAXPRE&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;MAXBOUT&amp;lt;/var&amp;gt;, or &amp;lt;var&amp;gt;MAXSUBT&amp;lt;/var&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
===NLDAPBUF===&lt;br /&gt;
This new parameter allows the number of LDAP buffers allocated during startup to be set in CCAIN. The default value is 2, and the settable value can range from 0 to 65535.&lt;br /&gt;
&lt;br /&gt;
===PUPDTH (new minimum value)===&lt;br /&gt;
If a user sets the &amp;lt;var&amp;gt;[[PUPDTH parameter|PUPDTH]]&amp;lt;/var&amp;gt; parameter to 0, it will now automatically be increased to 1, its minimum value.&lt;br /&gt;
&lt;br /&gt;
===SERV4G===&lt;br /&gt;
This parameter allows testing of server tables that span a 4-gigabyte boundary. For example, if &amp;lt;var&amp;gt;SERV4G&amp;lt;/var&amp;gt; is &amp;lt;code&amp;gt;X&#039;FFFFF000&#039;&amp;lt;/code&amp;gt;, each ATB server will begin at &amp;lt;code&amp;gt;XX_FFFFF000&amp;lt;/code&amp;gt;. If SERV4G is &amp;lt;code&amp;gt;X&#039;FFFF0000&#039;&amp;lt;/code&amp;gt;, each ATB server will begin at &amp;lt;code&amp;gt;XX_FFFF0000&amp;lt;/code&amp;gt;. &amp;lt;code&amp;gt;XX&amp;lt;/code&amp;gt; is determined by the storage available on the system. The parameter is set in CCAIN.&lt;br /&gt;
&lt;br /&gt;
The contents of the ATB server are specified by using the &amp;lt;var&amp;gt;[[SERVGA parameter|SERVGA]]&amp;lt;/var&amp;gt; parameter.&lt;br /&gt;
&lt;br /&gt;
For example, if you want VTBL to span the 4G boundary, you can use these settings: &amp;lt;code&amp;gt;SERV4G=X&#039;FFFFF000&#039;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;SERVGA=X&#039;00040000&#039;&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;LVTBL=200 (6400 bytes, X&#039;1900&#039;)&amp;lt;/code&amp;gt;. This will force each server&#039;s VTBL to begin at &amp;lt;code&amp;gt;XX_FFFFF000&amp;lt;/code&amp;gt; and end at &amp;lt;code&amp;gt;XX+1_00000900&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===WEBDFLT===&lt;br /&gt;
At V7.7, the default access rule for non-SSL ports was changed from ALLOW * to DISALLOW *, meaning that unless any ALLOW rules were in place resulting in a login/password prompt, the port couldn&#039;t be accessed. The new &amp;lt;var&amp;gt;[[WEBDFLT_parameter|WEBDFLT]]&amp;lt;/var&amp;gt; parameter may be set to 1 for reversion to the old default of ALLOW *. Under V7.7, this new parameter was enabled with the application of zap 77z090. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;var&amp;gt;RESET WEBDFLT&amp;lt;/var&amp;gt; requires system administrator privileges. It is recommended to reset the 1 bit of &amp;lt;var&amp;gt;WEBDFLT&amp;lt;/var&amp;gt; to zero after issuing a series of &amp;lt;var&amp;gt;JANUS DEFINE&amp;lt;/var&amp;gt; commands which need WEBDFLT=1, as in the CCAIN input stream.&lt;br /&gt;
&lt;br /&gt;
==New and changed statistics==&lt;br /&gt;
===MPR, MBO, MCP, and RCV===&lt;br /&gt;
Introduced in zap 77z257.&lt;br /&gt;
&amp;lt;p&amp;gt;These statistics provide high water mark transaction information. (Since-last values will not be available until V78 GA.)&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;They are useful in conjunction with the &amp;lt;var&amp;gt;MAXPRE&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;MAXBOUT&amp;lt;/var&amp;gt;, and &amp;lt;var&amp;gt;MAXSUBT&amp;lt;/var&amp;gt; parameters. &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
User/system statistics:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;MPR: High water mark of transaction pre-images. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;MBO: High water mark of transaction backout pages. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;MCP: High water mark of transaction chkpoint spans. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
System statistics: &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;RCV: Number of blocks needed for subtransaction recovery &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt; &lt;br /&gt;
&amp;lt;p class=&amp;quot;note&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Notes:&amp;lt;/b&amp;gt; M204.0843 now displays the RCV statistic for subtransaction checkpoints.&lt;br /&gt;
The size of recovery checkpoint must be greater than the sum of the last RCV value plus the number of records in [[System_and_media_recovery#RESTART_recovery_considerations_for_sub-transaction_checkpoints|RESTART and RESTARTS]].&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
===DKWTS and DKWTMICS===&lt;br /&gt;
Introduced in zap 77z7289.&lt;br /&gt;
&amp;lt;p&amp;gt;The new system statistics DKWTS (DisK WaiTs) and DKWTMICS (DisK WaiT MICroSeconds) collect data to provide rough disk I/O service time numbers.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
DKWTS shows the number of disk I/O waits. DKWTMICS shows the total wait time for those waits in microseconds. Dividing the difference in DKWTMICS by the difference in DKWTS over an interval provides the average disk I/O wait time in microseconds.              &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;note&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Notes:&amp;lt;/b&amp;gt; &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The wait time does include internal Model 204 scheduler delays, so on a CPU bound Model 204 system, the service times calculated from DKWTS and DKWTMICS are likely to be an overestimate of actual service times.&amp;lt;/li&amp;gt;  &lt;br /&gt;
                                                                    &lt;br /&gt;
&amp;lt;li&amp;gt;DKWTS and DKWTMICS are not available in SirMon; use [[MONITOR_command|MONITOR]] SYSTEM STATISTICS to view these statistics.&amp;lt;/li&amp;gt;&amp;lt;/ul&amp;gt;  &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Compatibility issues==&lt;br /&gt;
===&amp;lt;b id=&amp;quot;listNewInit&amp;quot;&amp;gt;&amp;lt;/b&amp;gt;$ListNew cannot be used in Initial clause===&lt;br /&gt;
It is now a compilation error if &amp;lt;var&amp;gt;$ListNew&amp;lt;/var&amp;gt; is attempted to be used in the &amp;lt;var&amp;gt;Initial&amp;lt;/var&amp;gt; clause of a &lt;br /&gt;
[[Using_variables_and_values_in_computation#Declare_statements_for_.25variables|declaration statement]].&lt;br /&gt;
&amp;lt;p&amp;gt;This change is propagated by zap maintenance to versions 7.5 (zap 75Z487), 7.6 (zap 76Z514), and 7.7 (zap 77z281) of Model 204.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote class=&amp;quot;note&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Note:&amp;lt;/b&amp;gt; Strictly speaking, this would not be considered a compilation error, because previously although &amp;lt;code&amp;gt;..&amp;amp;nbsp;Initial($ListNew)&amp;lt;/code&amp;gt; did not produce a compilation error, in almost all circumstances it would produce a snap if the initialized %variable were used with some other &amp;lt;var&amp;gt;$List&amp;lt;i&amp;gt;xxx&amp;lt;/i&amp;gt;&amp;lt;/var&amp;gt; invocation.&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Restricting the use of the CUSTOM=38 setting===&lt;br /&gt;
The [[CUSTOM parameter|CUSTOM=38]] parameter setting, introduced at V7.5, inadvertently provided System Manager privileges to all users via the RESET command. This CUSTOM setting is now restricted to the RESETting of the LAUDIT parameter.&lt;br /&gt;
&lt;br /&gt;
===Disabling of Closure support===&lt;br /&gt;
Due to a number of bugs related to Closure support, introduced at V7.7, this feature, which can best be described as exposed methods assigned to method variables, has been disabled in this release. This change was also made to V7.7 with application of zap 77z119.&lt;br /&gt;
&lt;br /&gt;
===Password delimiter enforced===&lt;br /&gt;
When using &amp;lt;var&amp;gt;IFSTRTN&amp;lt;/var&amp;gt; to log on to a Model 204 online from an IFAM2 application, both the logonid and password must be followed by a semicolon, which is the delimiter. For example:      &lt;br /&gt;
                                      &lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;CALL IFSTRTN(RC,&#039;logonid;password;&#039;...)&amp;lt;/p&amp;gt;&lt;br /&gt;
                 &lt;br /&gt;
If a semicolon does not follow the password string, the following message will now be issued:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;M204.2964: Password missing or too long &amp;lt;/p&amp;gt;                 &lt;br /&gt;
                                                         &lt;br /&gt;
Previously, a semicolon following the password was not required and the first blank served as a password delimiter.  However, as of V7.7, embedded blanks are valid password characters and a semicolon is now required to delimit the password.&lt;br /&gt;
&lt;br /&gt;
This change has also been enabled in V7.7 with the application of zap 77z231.&lt;br /&gt;
&lt;br /&gt;
===PAGESZ parameter validated===&lt;br /&gt;
Previously it was possible to set the PAGESZ parameter to any value, although Model 204 internally supports one page size of 6184, and any deviation from this value would have led to problems during file creation. The value of this parameter is now controlled, such that setting it to any value other than 6184 will generate an M204.1149 message with the parameter being reset to 6184.&lt;br /&gt;
&lt;br /&gt;
===ECPRIV and the IDCAMS facility===&lt;br /&gt;
At V7.7 a security loophole was closed, whereby all ECF modules were run under external-authorizer profile of the calling user. Previously any ECF tasks were run under the owning job&#039;s external-authorizer profile, and in order for certain sites to retain that ability, a new setting of ECPRIV, value 4, was introduced to retain the ability to run ECF tasks using the job&#039;s security profile. &lt;br /&gt;
&lt;br /&gt;
The ECPRIV 4 setting potentially introduced a security loophole when calling the IDCAMS interface, based upon what the IDCAMS utility is able to do at a system level. Consequently as of this release, the ECPRIV 4 setting will be ignored when calling the IDCAMS facility via ECF, and such IDCAMS processes will always use the calling user&#039;s security profile. Any existing jobs that use ECF to call the IDCAMS utility with the ECFPRIV 4 bit set should be checked to ensure that the calling user&#039;s security profile still satisfies the job&#039;s requirements.&lt;br /&gt;
&lt;br /&gt;
===TCPOPTS is view-only===&lt;br /&gt;
In previous versions the &amp;lt;var&amp;gt;TCPOPTS&amp;lt;/var&amp;gt; parameter, which identifies the type of IP addressing in use (v4 or v6), was resetable, although it was always documented as a view-only parameter. The parameter is now handled as a view-only parameter, and any attempts to reset the parameter will result in the following message:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;gt;   M204.1123: Parameter TCPOPTS not reset&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===ZHPF command can only be issued by a system manager===&lt;br /&gt;
In previous versions it was possible to issue the ZHPF command without being logged on. From this release onwards, a user would have to be logged on with system manager privileges to be able to issue this command.&lt;br /&gt;
&lt;br /&gt;
Additionally, the command output will now only  display results for currently open files.&lt;br /&gt;
&lt;br /&gt;
This changes has been enabled in v7.7 with the application of zap 77z264.&lt;br /&gt;
&lt;br /&gt;
===Terminal MODEL reset failure===&lt;br /&gt;
If a reset of the terminal MODEL parameter fails due to an undersized output page buffer, then in addition to the existing messages that inform the user of this failure:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;gt;    M204.1875 UNABLE TO RESET MODEL TO %C &lt;br /&gt;
    M204.1123: Parameter MODEL not reset&amp;lt;/p&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
the following message will now be issued:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;gt;    M204.1008: LOUTPB must be increased to at least &amp;lt;number&amp;gt; &amp;lt;/p&amp;gt;&lt;br /&gt;
                                                         &lt;br /&gt;
where &amp;lt;number&amp;gt; is the minimum value of LOUTPB necessary to support the terminal model.&lt;br /&gt;
&lt;br /&gt;
This change is enabled in V7.7 with the application of zap 77z309.&lt;br /&gt;
&lt;br /&gt;
==Notes for system manager and installer==&lt;br /&gt;
===CRAM SVC installation is deprecated===&lt;br /&gt;
The CRAM SVC installation has been deprecated as of version 7.5. &amp;lt;br /&amp;gt;Installation of CRAM-XDM is described as part of the [[Model 204 installation]].&lt;br /&gt;
===Authorization and maintenance zaps===&lt;br /&gt;
When you download Rocket M204 product object files, all relevant authorization keys and all current maintenance zaps are pre-applied to the object files as part of the download process.&lt;br /&gt;
&lt;br /&gt;
==New and changed messages==&lt;br /&gt;
&lt;br /&gt;
See [[New and updated messages in Model 204 version 7.8|New and updated messages in Model 204 version 7.8]] for details.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category: Release notes]]&lt;/div&gt;</summary>
		<author><name>ELowell</name></author>
	</entry>
	<entry>
		<id>https://m204wiki.rocketsoftware.com/index.php?title=WebSocket_(Socket_function)&amp;diff=117725</id>
		<title>WebSocket (Socket function)</title>
		<link rel="alternate" type="text/html" href="https://m204wiki.rocketsoftware.com/index.php?title=WebSocket_(Socket_function)&amp;diff=117725"/>
		<updated>2019-12-10T18:07:56Z</updated>

		<summary type="html">&lt;p&gt;ELowell: /* Usage notes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:Socket:WebSocket subtitle}}&lt;br /&gt;
&lt;br /&gt;
This page is [[under construction]].&lt;br /&gt;
==Syntax==&lt;br /&gt;
{{Template:Socket:WebSocket syntax}}&lt;br /&gt;
===Syntax terms===&lt;br /&gt;
&amp;lt;table class=&amp;quot;syntaxTable&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;%outSocket&amp;lt;/th&amp;gt;&amp;lt;td&amp;gt;&amp;lt;var&amp;gt;Socket&amp;lt;/var&amp;gt; object&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;th nowrap=&amp;quot;true&amp;quot;&amp;gt;&amp;lt;var&amp;gt;[%(Socket):]&amp;lt;/var&amp;gt;&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;The optional class name in parentheses denotes a [[Notation conventions for methods#Constructors|virtual constructor]]. See [[#Usage notes|&amp;quot;Usage notes&amp;quot;]], below, for more information about invoking a virtual constructor.&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
==Usage notes==&lt;br /&gt;
The HTTP protocol has been indispensible in creating the Internet as it exists today. It&#039;s still the core protocol for Web browsers and many other applications, whether on PCs, servers, laptops, or mobile devices. It has been extended over the years to accommodate demands for streaming video and sound, transfer of data files, and many other uses.&lt;br /&gt;
&lt;br /&gt;
Yet HTTP still falls short in providing for efficient general purpose data transfer.&lt;br /&gt;
&lt;br /&gt;
First, it is a half-duplex protocol, meaning that one side of the communication is always waiting for the other to reply. Second, the HTTP headers add considerable overhead to each interaction, wasting valuable bandwidth. Finally, each HTTP request requires its own TCP connection, which is generally closed after the server replies. This adds the overhead of connection establishment to every individual request. A typical web page requires several distinct http requests, each of which require separate TCP connections and its own set of http headers.&lt;br /&gt;
&lt;br /&gt;
The Web Socket protocol was created to address these shortcomings. It is designed to allow full-duplex communication. Efficient framing of payload data uses minimal overhead. The protocol is end-user extensible. Most importantly, it can be deployed completely within an existing http/https framework. No firewall rule changes are required, and optional data masking avoids potential issues with caching proxies.&lt;br /&gt;
&lt;br /&gt;
Web Sockets are supported in Janus Web Server as of Model 204 7.8.&lt;br /&gt;
&lt;br /&gt;
The Janus Web implementation of Web Sockets requires some preparation before you can write your applications.&lt;br /&gt;
&lt;br /&gt;
A Janus Web port is enabled for Web Socket communication with the WEBSOCKET parameter. &lt;br /&gt;
Likewise, an individual Janus Web rule can either allow or disallow Web Socket connections with the WEBSOCKET and NOWEBSOCKET parameters, respectively.&lt;br /&gt;
&lt;br /&gt;
An http request for a Web Socket connection looks very similar to a normal http GET request. A special &amp;quot;upgrade&amp;quot; header in a request differentiates a Web Socket upgrade from all others. The upgrade request along with other unique headers advertise a request to negotiate a switch from HTTP to the Web Socket protocol.&lt;br /&gt;
&lt;br /&gt;
When this negotiation completes successfully on a Janus Web Server thread, the connection immediately and irreversibly transitions to a Janus WebSocket connection.&lt;br /&gt;
&lt;br /&gt;
From this point until the connection is closed, no Web method or $function calls are allowed. The server program must first call the WebSocket method to complete the transition to a Web Socket thread and thereafter may only call the Socket methods SendWebSocket, ReceiveWebSocket, and Close.&lt;br /&gt;
&lt;br /&gt;
The WebSocket method will initiate acceptance of an upgrade of a Janus Web thread to a WebSocket thread. Once the WebSocket method returns, SendWebSocket, ReceiveWebSocket and Close are the only valid socket methods. No Janus Web $functions or methods are allowed and will result in request cancellation. &lt;br /&gt;
&lt;br /&gt;
The Janus Web port must be enabled for Web Socket upgrades with the WEBSOCKET parameter. The WEBSOCKET option can be specified on either the port definition or the JANUS WEB rule for the URL. &lt;br /&gt;
&lt;br /&gt;
Any other usage will result in request cancellation.&lt;br /&gt;
&lt;br /&gt;
==Examples==&lt;br /&gt;
The following example sends a text message to the WebSocket client.&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;...&lt;br /&gt;
                                                           &lt;br /&gt;
%sock = WebSocket                                                              &lt;br /&gt;
if %sock is null then                                                          &lt;br /&gt;
   audittext Socket closed, status is {$STATUSD}                               &lt;br /&gt;
   stop                                                                        &lt;br /&gt;
end if   &lt;br /&gt;
                                                                      &lt;br /&gt;
%op = %sock:ReceiveWebSocket(%wsi)                                             &lt;br /&gt;
if %op eq 1 then                                                               &lt;br /&gt;
   setText %wso  = Received your text message of {%wsi:length} bytes.          &lt;br /&gt;
   %sock:SendWebSocket(%wso, %op, true)                                        &lt;br /&gt;
end if                                                                         &lt;br /&gt;
                                                                               &lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
{{Template:Socket:WebSocket footer}}&lt;/div&gt;</summary>
		<author><name>ELowell</name></author>
	</entry>
	<entry>
		<id>https://m204wiki.rocketsoftware.com/index.php?title=Release_notes_for_Model_204_version_7.8&amp;diff=117724</id>
		<title>Release notes for Model 204 version 7.8</title>
		<link rel="alternate" type="text/html" href="https://m204wiki.rocketsoftware.com/index.php?title=Release_notes_for_Model_204_version_7.8&amp;diff=117724"/>
		<updated>2019-12-10T02:33:30Z</updated>

		<summary type="html">&lt;p&gt;ELowell: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
These release notes list the enhancements and other changes contained in Model 204 version 7.8. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;&amp;lt;b&amp;gt;******THIS IS A DRAFT DOCUMENT.******&amp;lt;/b&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
These release notes list the enhancements and other changes contained in Model 204 version 7.8, &amp;lt;b&amp;gt;&amp;lt;i&amp;gt;which is still in development&amp;lt;/i&amp;gt;&amp;lt;/b&amp;gt;. Until the commercial release of the software, Rocket reserves the right to add to, remove, or change anything described herein. &lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
These release notes contain installation and features information for the Rocket Model 204 version 7.8 release.&lt;br /&gt;
Before beginning your installation, please read through this information about product installation and changes.&lt;br /&gt;
&lt;br /&gt;
==Operating system and hardware requirements==&lt;br /&gt;
&lt;br /&gt;
===Operating system requirements===&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;IBM z/OS versions supported:&amp;lt;/b&amp;gt; &lt;br /&gt;
  &amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;All IBM supported releases up to and including z/OS 2.3. &amp;lt;br /&amp;gt;(For z/OS 2.2, see [[IBM z/OS 2.2 PTF requirement]].)&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;p&amp;gt;Version 1.07 is sufficient for all functionality except for the following features:&amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;ul&amp;gt;&lt;br /&gt;
    &amp;lt;li&amp;gt;zHPF support requires version [[IBM z/OS 2.1 compatibility issue|2.1]].&amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;li&amp;gt;Large (1 MB) page support requires version 1.9.&amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;li&amp;gt;Extended address volumes (EAV) requires version 1.12.&amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;/ul&amp;gt;&lt;br /&gt;
  &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
On z/OS, Model 204 release 7.8 operates as an APF authorized load module, as required by many 7.8 features. &amp;lt;br /&amp;gt;&lt;br /&gt;
To run Model 204 unauthorized, [[Contacting Rocket Software Technical Support|contact Technical Support]].&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;IBM z/VM versions supported:&amp;lt;/b&amp;gt; &lt;br /&gt;
  &amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;All IBM supported releases up to and including z/VM 6.4.&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;IBM z/VSE versions supported:&amp;lt;/b&amp;gt;&lt;br /&gt;
  &amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;All IBM supported releases up to and including z/VSE 6.1.&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Hardware requirements===&lt;br /&gt;
 &lt;br /&gt;
In general, Model 204 version 7.8 requires the IBM z/890 or above processor.&lt;br /&gt;
&amp;lt;p&amp;gt;However, the IBM z10 or above processor is required for the following features:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;large (1 MB) page support&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;IBM&#039;s High Performance FICON (zHPF) support&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Connect&amp;lt;sup&amp;gt;&amp;amp;#9733;&amp;lt;/sup&amp;gt; compatibility with Model 204===&lt;br /&gt;
&lt;br /&gt;
Connect&amp;lt;span class=&amp;quot;superstar&amp;quot;&amp;gt;&amp;amp;#9733;&amp;lt;/span&amp;gt; version 7.5 or 7.7 is compatible with Model 204 version 7.8.&lt;br /&gt;
&lt;br /&gt;
For more information on Connect&amp;lt;span class=&amp;quot;superstar&amp;quot;&amp;gt;&amp;amp;#9733;&amp;lt;/span&amp;gt; installation, see the [[:Category:Connect*|Connect&amp;lt;span class=&amp;quot;superstar&amp;quot;&amp;gt;&amp;amp;#9733;&amp;lt;/span&amp;gt; wiki pages]].&lt;br /&gt;
&lt;br /&gt;
==SOUL (User Language) enhancements==&lt;br /&gt;
===AmIndependent method===&lt;br /&gt;
The &amp;lt;var&amp;gt;AmIndependent&amp;lt;/var&amp;gt; method returns TRUE for daemons spawned by &amp;lt;var&amp;gt;[[RunIndependently_(Daemon_subroutine)|RunIndependently]]&amp;lt;/var&amp;gt;. (The action of &amp;lt;var&amp;gt;[[AmDaemon_(Daemon_property)|AmDaemon]]&amp;lt;/var&amp;gt; remains unchanged.)&lt;br /&gt;
&lt;br /&gt;
The following table shows the values returned by &amp;lt;var&amp;gt;AmIndependent&amp;lt;/var&amp;gt; versus &amp;lt;var&amp;gt;AmDaemon&amp;lt;/var&amp;gt; for different daemon types:&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Type&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;AmDaemon&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;AmIndependent&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;$COMBG&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;False&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;False&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Independent daemon&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;False&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;True&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Other daemon&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;True&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;False&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Web, etc.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;False&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;False&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===$ProcOpn===&lt;br /&gt;
&amp;lt;var&amp;gt;[[$ProcOpn|$ProcOpn]]&amp;lt;/var&amp;gt; now supports the opening of a procedure with an all-numeric name, and including a leading zero, such as:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;%result = $procOpn(&#039;0123&#039;, &#039;MYFILE&#039;)&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Support for such procedure names was initially introduced at V7.7, and this feature of &amp;lt;var&amp;gt;$ProcOpn&amp;lt;/var&amp;gt; is also enabled in V7.7 with the application of zap 77z054.&lt;br /&gt;
&lt;br /&gt;
===Allow parentheses to surround a boolean enumeration object===&lt;br /&gt;
The following sample code:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;   begin                                       &lt;br /&gt;
   variables are undefined                  &lt;br /&gt;
   %isValid is boolean initial (True)       &lt;br /&gt;
   if (%isValid) then                  &lt;br /&gt;
      print &#039;in IF&#039;                            &lt;br /&gt;
   end if                                   &lt;br /&gt;
   end   &amp;lt;/p&amp;gt;      &lt;br /&gt;
&lt;br /&gt;
will now compile and run successfully, since this syntax: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;if (%isValid) then &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
is logically equivalent to this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;if %isValid then &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Prior to V7.8 the presence of parentheses surrounding the boolean enumeration object would have caused a compilation error. This change is enabled in V7.7 with the application of zap 77z370.&lt;br /&gt;
&lt;br /&gt;
===Support for copying Object class objects===&lt;br /&gt;
The Object class now supports the copy and deepCopy methods. For example, an Object object can be copied as follows:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;   begin               &lt;br /&gt;
   %x is object object &lt;br /&gt;
   %y is object object &lt;br /&gt;
   %y = new            &lt;br /&gt;
   %x = %y:copy        &lt;br /&gt;
   end &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This change is enabled in v7.7 with the application of zap 77z076, and within V7.6 with the application of zap 76z412.&lt;br /&gt;
&lt;br /&gt;
===Assignment of enumeration values to method variables===&lt;br /&gt;
Enumerations values can now be assigned to method variables whose result is an enumeration. So, for example, the following code:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;   begin                                               &lt;br /&gt;
   enumeration colour                                  &lt;br /&gt;
      public                                           &lt;br /&gt;
         value red                                     &lt;br /&gt;
         value white                                   &lt;br /&gt;
         value blue                                    &lt;br /&gt;
      end public                                       &lt;br /&gt;
   end enumeration                                     &lt;br /&gt;
   %func    is function getColour is enumeration colour&lt;br /&gt;
   local function getColour is enumeration colour      &lt;br /&gt;
      return blue                                      &lt;br /&gt;
   end function                                        &lt;br /&gt;
   %func    = getColour                                &lt;br /&gt;
   %func    = (colour):red                             &lt;br /&gt;
   printText {~=%(Local):(%func)}                      &lt;br /&gt;
   end  &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
will produce this result:&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt; %(Local):(%func)=red &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
whereas previously this line:   &lt;br /&gt;
&lt;br /&gt;
  &amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt; %func    = (colour):red &amp;lt;/p&amp;gt;   &lt;br /&gt;
&lt;br /&gt;
would have been rejected with this message:&lt;br /&gt;
&lt;br /&gt;
   &amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;MSIR.0993: Assignment invalid: mismatch between method and method variable &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This change is enabled in V7.7 with the application of zap 77z128.&lt;br /&gt;
&lt;br /&gt;
===Optional output method parameters===&lt;br /&gt;
Prior to this release output parameters could not be optional or have default values. In this release output parameters can be specified as &amp;lt;var&amp;gt;Optional&amp;lt;/var&amp;gt;, and a default value can be specified with &amp;lt;var&amp;gt;Default&amp;lt;/var&amp;gt;. One related change is that if a &amp;lt;var&amp;gt;Len&amp;lt;/var&amp;gt; value is specified with &amp;lt;var&amp;gt;Optional&amp;lt;/var&amp;gt; or &amp;lt;var&amp;gt;Default&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;Output&amp;lt;/var&amp;gt;, it indicates the length of the hidden target for the output parameter if none was passed. For all other &amp;lt;var&amp;gt;Output&amp;lt;/var&amp;gt; parameters, &amp;lt;var&amp;gt;Len&amp;lt;/var&amp;gt; is meaningless, just as it was before Model 204 V7.8. The following is an example of the use of an optional output parameter:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;function getRemote( -&lt;br /&gt;
   %target is string len 32, %errorReason is string len 80 optional output -&lt;br /&gt;
) is float&lt;br /&gt;
  ...&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
In this example, if &amp;lt;code&amp;gt;%errorReason&amp;lt;/code&amp;gt; is not specified in a call and then set to a value longer than 80 bytes it wil be truncated to 80 bytes. However, if a string of a different length is passed, the length of that string determines truncation behavior.&lt;br /&gt;
&lt;br /&gt;
==External Call Facility enhancements==&lt;br /&gt;
===Managing ECF tables more efficiently===&lt;br /&gt;
The are two new features to help manage ECF tables more efficiently, avoid conditions where the table can fill, and prevent the definition of further entities.&lt;br /&gt;
&lt;br /&gt;
The first feature is the new &amp;lt;var&amp;gt;DISPLAY ECF&amp;lt;/var&amp;gt; command, which displays the contents of ECF tables and also the current status of users accessing ECF modules. See more details of the &amp;lt;var&amp;gt;[[#DISPLAY ECF|DISPLAY ECF]]&amp;lt;/var&amp;gt; command below.&lt;br /&gt;
&lt;br /&gt;
The second feature is a new &amp;lt;var&amp;gt;EXTERNAL REMOVE&amp;lt;/var&amp;gt; statement with the following syntax:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;EXTERNAL REMOVE &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;modulename&amp;lt;/span&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This statement causes the entry for the named module to be removed from the module table. The table entry is then placed on a free chain of entries and can be reused by issuing the &amp;lt;var&amp;gt;EXTERNAL MODULE&amp;lt;/var&amp;gt; statement. This allows the module table to be managed with redundant entries removed, without having to recycle the ONLINE.&lt;br /&gt;
&lt;br /&gt;
An &amp;lt;var&amp;gt;EXTERNAL REMOVE&amp;lt;/var&amp;gt; statement will return &amp;lt;code&amp;gt;$status/$statusd&amp;lt;/code&amp;gt; values of &amp;lt;code&amp;gt;0/0&amp;lt;/code&amp;gt;, and most other status values that can be returned by the &amp;lt;var&amp;gt;EXTERNAL REMOVE&amp;lt;/var&amp;gt; statement are already documented in the ECF return codes table. If an &amp;lt;var&amp;gt;EXTERNAL REMOVE&amp;lt;/var&amp;gt; is attempted against a module that is currently being called (in use), then &amp;lt;code&amp;gt;$status/$statusd&amp;lt;/code&amp;gt; will return the values &amp;lt;code&amp;gt;20/1&amp;lt;/code&amp;gt; (module unavailable).&lt;br /&gt;
&lt;br /&gt;
==System enhancements==&lt;br /&gt;
&lt;br /&gt;
===New wait types for daemon/master waits===&lt;br /&gt;
&lt;br /&gt;
Two new wait types, viewable on the &amp;lt;var&amp;gt;[[MONITOR_command|MONITOR]] USERS&amp;lt;/var&amp;gt; command output, have been implemented as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;57&amp;lt;/code&amp;gt; - Means a daemon thread waiting for its master thread  &amp;lt;br /&amp;gt;     &lt;br /&gt;
&amp;lt;code&amp;gt;58&amp;lt;/code&amp;gt; - Means a master thread waiting for one of its daemon threads&lt;br /&gt;
&lt;br /&gt;
This change is enabled in V7.7 with the application of zap 77z410.&lt;br /&gt;
&lt;br /&gt;
===Snap formatting changes===&lt;br /&gt;
Date/time stamps in the page headers of snaps will now be shown in normal format, rather than in julian format as in previous versions. So in the following example, a particular snap header under v7.7 or previous versions would show as: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;SNAPID    1   19226.060155  M204.0022: Bug .. nnnnn               PAGE     1 &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
whereas the same snap header under v7.8 would show as: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;SNAPID    1  2019/08/14 06:01:06   M204.0022: Bug .. nnnnn        PAGE     1 &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Also, due to improvements in handling trailing blanks in snap output, a snap generated under v7.8 should be marginally smaller than the same snap generated under previous versions, assuming the same SNAPCTL settings.&lt;br /&gt;
&lt;br /&gt;
===Call stack trace for problem diagnosis===&lt;br /&gt;
A  call stack trace is now provided to help diagnose and resolve common errors. To enable the stack trace, do either of the following: &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Set the &amp;lt;var&amp;gt;[[SIRFACT parameter|SIRFACT]] X&#039;01&#039;&amp;lt;/var&amp;gt; bit.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Set the &amp;lt;var&amp;gt;[[DEBUGUL parameter|DEBUGL]]&amp;lt;/var&amp;gt; parameter. Note that the &amp;lt;var&amp;gt;DEBUGUL&amp;lt;/var&amp;gt; approach will introduce extra QTBL overhead. &amp;lt;p&amp;gt;(&amp;lt;var&amp;gt;DEBUGUL&amp;lt;/var&amp;gt; provides a similar facility with an include trace of procedures leading to the error, but this might not be potentially as useful as the call trace.)&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt; &lt;br /&gt;
&lt;br /&gt;
The call stack trace can assist in diagnosing run-time errors that might occur, as illustrated by the following &amp;quot;Variable too small for result&amp;quot; and &amp;quot;MBSCAN exceeded&amp;quot; examples.&lt;br /&gt;
&lt;br /&gt;
====Variable too small for result====&lt;br /&gt;
When the stack trace is enabled, a &amp;quot;variable too small&amp;quot; error results in the following message:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;M204.2966: Error at line n, procedure &#039;&#039;procname&#039;&#039; in file &#039;&#039;procfile&#039;&#039;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
which identifies the line within a procedure where the error is occurring, in addition to the usual message:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;M204.0552: Variable too small for result&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Any subsequent M204.2966 messages indicate the point in the code from where the code in error was called. For example, a stack of three subroutine calls leading to a &amp;quot;variable too small&amp;quot; error might result in the following messaging:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;   M204.0552: Variable too small for result                             &lt;br /&gt;
   M204.2966: Error at line 9, procedure MYPROC.LEVEL4 in file MYPROC   &lt;br /&gt;
   M204.2966: Called from line 5, procedure MYPROC.LEVEL3 in file MYPROC&lt;br /&gt;
   M204.2966: Called from line 5, procedure MYPROC.LEVEL2 in file MYPROC&lt;br /&gt;
   M204.2966: Called from line 5, procedure MYPROC.LEVEL1 in file MYPROC &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This information should help in diagnosing the problem. &lt;br /&gt;
&lt;br /&gt;
If the error occurs within a command level program rather than a procedure, then the M204.2966 message is replaced by an M204.2967 message, and a similar error condition to the above with a preceding call stack might be audited as follows:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;   M204.0552: Variable too small for result              &lt;br /&gt;
   M204.2967: Error at line 14 of command level program  &lt;br /&gt;
   M204.2967: Called from line 5 of command level program&lt;br /&gt;
   M204.2967: Called from line 3 of command level program &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If neither &amp;lt;var&amp;gt;SIRFACT X&#039;01&#039;&amp;lt;/var&amp;gt; nor &amp;lt;var&amp;gt;DEBUGUL&amp;lt;/var&amp;gt; is set, then the &amp;quot;variable too small&amp;quot; error produces the following messages:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;   M204.0552: Variable too small for result &lt;br /&gt;
   M204.2968: Error: no debug info &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====MBSCAN exceeded====&lt;br /&gt;
Similarly to the handling of the &amp;quot;variable too small for result&amp;quot; error, the call stack can also be used to diagnose errors where the value of &amp;lt;var&amp;gt;[[MBSCAN parameter|MBSCAN]]&amp;lt;/var&amp;gt; is exceeded as a result of a direct search of Table B records. &lt;br /&gt;
&amp;lt;p&amp;gt;Again, under V7.8, with either the &amp;lt;var&amp;gt;SIRFACT X&#039;01&#039;&amp;lt;/var&amp;gt; bit set or &amp;lt;var&amp;gt;DEBUGUL&amp;lt;/var&amp;gt; set, if a long request occurs as a result of exceeding &amp;lt;var&amp;gt;MBSCAN&amp;lt;/var&amp;gt;, then initially the following message is produced, as before:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;M204.0569: File &#039;&#039;filename&#039;&#039;, Find: Table B records to be searched = &#039;&#039;nnnn&#039;&#039;&amp;lt;/p&amp;gt;&lt;br /&gt;
followed by a DYRWT prompt message. If the user replies &#039;N&#039; to the prompt, or if the request is run in an environment (such as a batch job) where the default response is &#039;N&#039;, the following message is produced after the M204.0569 message:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;Cancelling request: M204.2969: MBSCAN (&#039;&#039;mm&#039;&#039;) exceeded, records to be searched = &#039;&#039;nnnn&#039;&#039;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
where &#039;&#039;mm&#039;&#039; is the current setting of &amp;lt;var&amp;gt;MBSCAN&amp;lt;/var&amp;gt;. The M204.2969 message is followed by M204.2966 messages displaying the call stack trace. Thus, if the following code is run from procedure MYPROC.MBSCAN against the demo database, with an &amp;lt;var&amp;gt;MBSCAN&amp;lt;/var&amp;gt; setting of 10:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;   b                           &lt;br /&gt;
   call sub1                   &lt;br /&gt;
   sub1: subroutine            &lt;br /&gt;
   fd1:                        &lt;br /&gt;
      in clients fd city = ONTARIO&lt;br /&gt;
              end find         &lt;br /&gt;
      fr fd1                      &lt;br /&gt;
         pai                      &lt;br /&gt;
         print                    &lt;br /&gt;
      end for                     &lt;br /&gt;
   end subroutine              &lt;br /&gt;
   end &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
then the following messages are produced, assuming any prompts are responded to with an &#039;N&#039;:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;   M204.0569: File CLIENTS, Find: Table B records to be searched = 3415&lt;br /&gt;
   Cancelling request: M204.2969: MBSCAN (10) exceeded, records to be searched = 3415  &lt;br /&gt;
   M204.2966: Error at line 6, procedure MYPROC.MBSCAN in file MYPROC&lt;br /&gt;
   M204.2966: Called from line 3, procedure MYPROC.MBSCAN in file MYPROC  &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===appendJournalData===&lt;br /&gt;
The &amp;lt;var&amp;gt;[[AppendJournalData_(Stringlist_function)|AppendJournalData]]&amp;lt;/var&amp;gt; function is now more tolerant of an outstanding BUMP request. Previously, if &amp;lt;var&amp;gt;AppendJournalData&amp;lt;/var&amp;gt; was called to inadvertently retrieve a large amount of journal data, typically when called implicitly from within SirScan, then any outstanding BUMP request wouldn&#039;t be honored until all of the data had been retrieved, at which point the BUMP request would be completed, and all data would be lost.&lt;br /&gt;
&lt;br /&gt;
Now, the &amp;lt;var&amp;gt;AppendJournalData&amp;lt;/var&amp;gt; process checks for outstanding BUMP requests before each track I/O is executed, thus avoiding excessive I/Os against the journal and long waits for the BUMP of such a process to complete.&lt;br /&gt;
&lt;br /&gt;
==AUDIT204 enhancements==&lt;br /&gt;
===FORMAT command===&lt;br /&gt;
TIMEHH is a new parameter used with the FORMAT command of the [[Tracking_system_activity_(CCAJRNL,_CCAAUDIT,_CCAJLOG)#AUDIT204_utility|AUDIT204]] utility.  It indicates that timestamps, printed at the beginning of each line of output, should include hundredths of a second. Requires no other arguments.&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;b&amp;gt;NOTE:&amp;lt;/b&amp;gt; This parameter and the 78 version (or later) of AUDIT204 may be used against a 77 (or later) CCAJRNL.&amp;lt;/p&amp;gt;&lt;br /&gt;
For example:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;//CCAIN DD *&lt;br /&gt;
FORMAT YEARFORM 4&lt;br /&gt;
TIMEHH&lt;br /&gt;
TYPE ER MS LI&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Recovery enhancements==&lt;br /&gt;
===Media Recovery in a multi-user environment===&lt;br /&gt;
It is now possible to perform media recovery by issuing the &amp;lt;var&amp;gt;REGENERATE&amp;lt;/var&amp;gt; command to roll forward selected files in a multi-user environment, with the media recovery being carried out by different users with system manager privileges. The new USING option allows for the specification of a ddname for the input journal stream to be used by the &amp;lt;var&amp;gt;REGENERATE&amp;lt;/var&amp;gt; command. Previously media recovery was restricted to single user batch jobs, using the CCAGEN ddname for the input journal. For more details, see the &amp;lt;var&amp;gt;[[#REGENERATE|REGENERATE]]&amp;lt;/var&amp;gt; command below.&lt;br /&gt;
&lt;br /&gt;
==Security enhancements==&lt;br /&gt;
===CA-Top Secret can disallow CCASTAT logins===&lt;br /&gt;
The [[CA-Top_Secret_interface|CA-Top Secret]] interface now recognizes the &amp;lt;code&amp;gt;DEFACID=&amp;lt;/code&amp;gt;, setting and does not allow CCASTAT logins in the online if &amp;lt;code&amp;gt;DEFACID&amp;lt;/code&amp;gt; is set to null. (There is no attempt to log on M204USR.) Therefore, to disallow CCASTAT logons, set DEFACID=, in [[CA-Top_Secret_interface#Preparing_a_TOPSPARM_parameter_module_with_TOPSGEN|TOPSPARM]]. CCASTAT will be opened because it contains file and group passwords, but it will not be used for logons if CCASTAT logons are not allowed.&lt;br /&gt;
&lt;br /&gt;
===CUSTOM=11 and mixed cased input===&lt;br /&gt;
The &amp;lt;var&amp;gt;[[CUSTOM_parameter|CUSTOM]]&amp;lt;/var&amp;gt; parameter CUSTOM=11 setting no longer requires that a *LOWER command be issued prior to a LOGCTL command (to add or change a  password) to preserve mixed case input. Prior to this release, with CUSTOM=11 in place, *LOWER had to be issued before a LOGCTL command, otherwise any mixed case password strings would automatically be translated into uppercase. This change is enabled in V7.7 with the application of zap 77z108.&lt;br /&gt;
&lt;br /&gt;
===DEFUSER can specify a jobname not authorized to access M204===&lt;br /&gt;
When specifying DEFUSER=JOBNAME and VALIDAT=LOGON in the RACFGEN parms for an ONLINE, if the specified jobname ( the owning id for the ONLINE job ) isn&#039;t authorized to use Model 204 via RACF, any LOGIN commands specifying no userid will now succeed ( previously such a LOGON would have failed ). This enables users to submit jobs with USE $JOB, whereby the string USER=jobname  will be added to the submitted JCL, and this in turn is useful if the specified jobname has dataset access privileges to datasets required by the submitted jobs, even if the jobname itself isn&#039;t authorized to use M204.&lt;br /&gt;
&lt;br /&gt;
==Janus product enhancements==&lt;br /&gt;
&lt;br /&gt;
===Janus Web Server access rule===&lt;br /&gt;
The automatic &amp;lt;var&amp;gt;[[JANUS WEB ALLOW]]&amp;lt;/var&amp;gt; rule, which allowed any user to access the port without requiring a login, is changed &amp;lt;i&amp;gt;for non-SSL ports&amp;lt;/i&amp;gt; to the following:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;JANUS WEB &amp;lt;i&amp;gt;portname&amp;lt;/i&amp;gt; DISALLOW *&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
This rule requires a system administrator to explicitly define &amp;lt;var&amp;gt;ALLOW&amp;lt;/var&amp;gt; rules to enable users to access non-SSL ports.&lt;br /&gt;
The rule applies unless overridden by user-added rules. &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;blockquote class=&amp;quot;note&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;b&amp;gt;Note:&amp;lt;/b&amp;gt; To revert from this change in the JANUS DEFINE default and make the default &lt;br /&gt;
 non-SSL &amp;lt;var&amp;gt;ALLOW&amp;lt;/var&amp;gt; rule as it was in version 7.5 and earlier (&amp;lt;code&amp;gt;ALLOW *&amp;lt;/code&amp;gt;), turn on the 1 bit of the &amp;lt;var&amp;gt;[[WEBDFLT parameter|WEBDFLT]]&amp;lt;/var&amp;gt; parameter: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;RESET WEBDFLT=1&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Increase in pending accepts for Janus BPX ports===&lt;br /&gt;
The default number of pending accepts for Janus BPX server ports has been increased from 3 to 12, thus reducing the likelihood that a pending accept may fail with the message&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;MSIR.0019 Connection request rejected for port (port), MAXCON exceeded&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The actual number of pending accepts to be supported on the port can be set with the new parameter MAXPEND, set on the &amp;lt;var&amp;gt;[[JANUS_DEFINE|JANUS DEFINE]]&amp;lt;/var&amp;gt; command, where MAXPEND can vary from 3 up to a maximum value of 32. The change to the default value was enabled in V7.7 with the application of zap 77z269.&lt;br /&gt;
&lt;br /&gt;
===TCP listen backlog increased===&lt;br /&gt;
&lt;br /&gt;
The [[Program_Communication_facilities#LISTEN_call|TCP listen]] backlog has been increased from 16 to 1024 under z/OS.&lt;br /&gt;
&lt;br /&gt;
This update tells the TCP stack to queue up to 1024 of such requests up before dropping them, thus reducing, or in most cases eliminating, the likelihood of a connection request drop, other than in exceptional circumstances, such as a denial of service attack. This change was enabled in V7.7 with the application of zap 77z340.&lt;br /&gt;
&lt;br /&gt;
===Defer the freeing of XMLSCREEN input XML===&lt;br /&gt;
&lt;br /&gt;
The freeing of [[XMLSCREEN_and_NOXMLSCREEN_(JANUS_DEFINE_parameters)|XMLSCREEN]] input XML is now deferred until the next Read Screen or session termination. This means that if an application error is detected, the input XML can be retrieved with [[$Web_Input_Content|$Web_Input_Content]] and then logged for problem analysis. &lt;br /&gt;
&lt;br /&gt;
Prior to this release the XML received from the client is freed immediately after being used to set the input data for a Read Screen, rendering it unavailable for problem determination.&lt;br /&gt;
&lt;br /&gt;
This change is enabled in V7.7 with the application of zap 77z368.&lt;br /&gt;
&lt;br /&gt;
===XMLSCREEN and Janus Web Legacy blank stripping===&lt;br /&gt;
&lt;br /&gt;
xmlScreens and Janus Web Legacy screens now adhere to the same standard as standard screen processing in terms of stripping leading blanks from input fields defined as [[Full-screen_feature#DEBLANK_or_NODEBLANK_option|DEBLANK]] (either explicitly or implicitly).&lt;br /&gt;
&lt;br /&gt;
This change is enabled in V7.7 with the application of zap 77z400.&lt;br /&gt;
&lt;br /&gt;
===SSL input buffer size===&lt;br /&gt;
&lt;br /&gt;
The default value of [[SSLIBSIZE_(JANUS_DEFINE_parameter)|SSLIBSIZE]] has been increased to 16384 + 128, or 16512. This size should ensure correct communication with all TLS spec compliant applications. It is the maximum size allowed unless you use [[CUSTOM_parameter#Using_CUSTOM.3D.2818.29|CUSTOM=18]].    &lt;br /&gt;
&lt;br /&gt;
This changed is enabled in V7.7 with the application of zap 77z415.&lt;br /&gt;
&lt;br /&gt;
===Increasing LDAP buffers===&lt;br /&gt;
&lt;br /&gt;
The number of LDAP buffers allocated at startup can now be changed by setting the NLDAPBUF parameter in CCAIN. See below for details on [[#NLDAPBUF|NLDAPBUF]].&lt;br /&gt;
&lt;br /&gt;
===Increase URL length returned with $web_form_action===&lt;br /&gt;
With this release the maximum Janus Web Server incoming URL that can be handled by &amp;lt;var&amp;gt;$web_form_action&amp;lt;/var&amp;gt; is increased from 512 bytes to 1024 bytes. This change is enabled in V7.7 with the application of zap 77z424.&lt;br /&gt;
&lt;br /&gt;
===Maximum RBSIZE setting increased===&lt;br /&gt;
The maximum value for RBSIZE, set on the &amp;lt;var&amp;gt;[[JANUS DEFINE|JANUS DEFINE]]&amp;lt;/var&amp;gt; command, is now increased to 16777215 (previously the maximum was 65534). RBSIZE specifies the RPC or Request Buffer size.  On a Web port, the Janus request buffer holds browser request information such as header data, cookies, and form data. On other port types, it holds RPC input and output parameters. This change is enabled in V7.7 with the application of zap 77z427.&lt;br /&gt;
&lt;br /&gt;
==Debugger enhancements==&lt;br /&gt;
&lt;br /&gt;
===Access to exposed variables===&lt;br /&gt;
The debuggers can now view or watch the values of variables exposed to local routines/methods. Previously, any attempts to access an exposed variable would have displayed &amp;quot;%varname has no value&amp;quot; in the debugger session. (This feature is enabled in V7.7 with the application of zap 77z363.)&lt;br /&gt;
&lt;br /&gt;
==Performance enhancements==&lt;br /&gt;
&lt;br /&gt;
===MP/204 offload improvements===&lt;br /&gt;
Application code issuing the following SOUL statements will now now be fully offloadable:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;File Records In/On&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Remember&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt; &lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Position&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Sort Values&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;                                             &lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Reset Header/Trailer&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Find and Print Count&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Find All Values&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;For Each Value&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
the above improvements are also enabled in V7.7 with the application of zaps 77z419 and 77z420.&lt;br /&gt;
&lt;br /&gt;
===X3270OUT exit offloadable===&lt;br /&gt;
When running MP/204 (AMPSUBS&amp;gt;0) and using the [[Coding_SNA_Communications_Server_conversion_exit_routines#X3270OUT_.28convert_output_from_3270_format.29|X3270OUT]] exit to convert a 3270 output data stream to the appropriate device protocol, the exit can now run in parallel mode to improve performance. This change was enabled in V7.7 with the application of zap 77z313.&lt;br /&gt;
&lt;br /&gt;
The X3270OUT exit must be written to be re-entrant.&lt;br /&gt;
&lt;br /&gt;
==New and changed commands==&lt;br /&gt;
===DISPLAY ECF===&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;DISPLAY ECF {{ M | N | U } like ?} &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This new command displays details from ECF tables, or the current status of users accessing ECF modules.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;syntax&amp;quot;&amp;gt;D ECF M&amp;lt;/span&amp;gt; displays the contents of the module table. For example:&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;    D ECF M &lt;br /&gt;
    Module   Loadlib  Address:Length     Loaded@      Lastused@   #Calls  Flags &lt;br /&gt;
    QATUM13C PROGLIB 2FB91FB8:00000028 19023:121506 19023:121506 00000001 &lt;br /&gt;
    QATUM13B PROGLIB 2FE65000:00009C18 19023:121506 19023:121506 00000001 &lt;br /&gt;
    QATUM13A PROGLIB 2FE6EC18:00001CD8 19023:121506 19023:121506 00000001  &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
(flags may be D=deleted; S=shared; H=halted; I=Idle)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;syntax&amp;quot;&amp;gt;D ECF N&amp;lt;/span&amp;gt; displays contents of the name table. For example: &amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;    D ECF N&lt;br /&gt;
    Module   Logical-call-name &lt;br /&gt;
    QATUM13C MOD_QATUM13C &lt;br /&gt;
    QATUM13B MOD_QATUM13B &lt;br /&gt;
    QATUM13A MOD_QATUM13A &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;syntax&amp;quot;&amp;gt;D ECF U&amp;lt;/span&amp;gt; displays details of users currently accessing ECF modules. This is also the default option, and so &amp;lt;span class=&amp;quot;syntax&amp;quot;&amp;gt;D ECF&amp;lt;/span&amp;gt; will display the same output as &amp;lt;span class=&amp;quot;syntax&amp;quot;&amp;gt;D ECF U&amp;lt;/span&amp;gt;. For example:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;    D ECF U                           &lt;br /&gt;
    User# Userid     Module   Parmlen &lt;br /&gt;
    00002 ADMIN      --none--         &lt;br /&gt;
    00003 ADMIN      COBSAMP1 00000002&lt;br /&gt;
    00004 ADMIN      COBSAMP1 00000002 &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;syntax&amp;quot;&amp;gt;D ECF &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;function&amp;lt;/var&amp;gt; LIKE &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;?&amp;lt;/var&amp;gt; &amp;lt;/span&amp;gt; (where &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;?&amp;lt;/var&amp;gt; is a valid pattern) displays details for entities that match the specified pattern. The function is either M (modules), N (names), or U (users), and it defaults to U. So for example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;D ECF U L A&amp;lt;/p&amp;gt;&lt;br /&gt;
or&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;D ECF U L A*&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
displays details of ECF users whose names begin with A.&lt;br /&gt;
&lt;br /&gt;
===REGENERATE===&lt;br /&gt;
The &amp;lt;var&amp;gt;REGENERATE&amp;lt;/var&amp;gt; command can now be run in a multi-user environment by multiple users with system manager privileges. A new option USING is provided to specify the ddname of the input journal, so that the full syntax is now as follows:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;  REGENERATE [USING ddname] FILE filename [FROM dumpname | IGNORE]&lt;br /&gt;
  [TO {LAST UPDATE [BEFORE yy.ddd hh:mm:ss.th] | LAST CHECKPOINT [BEFORE yy.dd hh:mm:ss.th] &lt;br /&gt;
  | UPDATE number OF yy.ddd hh:mm:ss.th | CHECKPOINT yy.ddd hh:mm:ss.th} ]&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The default for the using ddname is CCAGEN, but any ddname may be used to allocate an input journal and used. For example:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;  ALLOCATE REGEN1 WITH SCOPE=SYSTEM DSN=PROD1.GDGJ OLD SEQUENTIAL GEN=+2&lt;br /&gt;
  REGENERATE USING REGEN1 FILE TEST&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It is the user&#039;s responsibility to ensure that the file being regenerated is not in use, and so prior to usage, &amp;lt;var&amp;gt;BUMP FILE&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;STOP FILE&amp;lt;/var&amp;gt; should be used to isolate usage against the file. If the file is in use, the REGEN will fail with these messages:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;  M204.1430: Failed to open file TEST&lt;br /&gt;
  M204.1436: Stopped processing file TEST  &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
$STATUS will now be set for &amp;lt;var&amp;gt;REGENERATE&amp;lt;/var&amp;gt; with the following values:&lt;br /&gt;
&amp;lt;blockquote&amp;gt;    &lt;br /&gt;
    0 - Success &amp;lt;br/&amp;gt;&lt;br /&gt;
    1 - No files were processed &amp;lt;br/&amp;gt;&lt;br /&gt;
    2 - At least one file stopped processing &amp;lt;br/&amp;gt;&lt;br /&gt;
    4 - A serious error occurred, REGEN failed &lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Similarly, &amp;lt;var&amp;gt;SETGRC&amp;lt;/var&amp;gt; may be used to get the return code and error message.&lt;br /&gt;
&lt;br /&gt;
==New and changed parameters==&lt;br /&gt;
&lt;br /&gt;
===ECMODS===&lt;br /&gt;
The new minimum value for ECMODS, the allowable number of ECF modules, is 1. Prior to V7.8 the minimum value was 0. This changed was enabled in V7.7 with the application of zap 77z306.&lt;br /&gt;
&lt;br /&gt;
===ECNAMES===&lt;br /&gt;
The new minimum value for ECNAMES, the allowable number of ECF module names, is 1. Prior to V7.8 the minimum value was 0. This changed was enabled in V7.7 with the application of zap 77z306.&lt;br /&gt;
&lt;br /&gt;
===ECPSIZE===&lt;br /&gt;
The new minimum value for ECPSIZE, the initial storage allocation for ECF parameters, is 1024. Prior to V7.8 the minimum value was 0. This changed was enabled in V7.7 with the application of zap 77z306.&lt;br /&gt;
&lt;br /&gt;
===ENQTIME===&lt;br /&gt;
Millisecond duration of automatic record locking retry wait.&lt;br /&gt;
&lt;br /&gt;
Prior to this change, if record locking conflicts occur frequently in a busy online, any user with a non-zero value for &amp;lt;var&amp;gt;[[ENQRETRY parameter|ENQRETRY]]&amp;lt;/var&amp;gt; will wait at least 3 seconds before the conflict is dealt with. This can degrade overall system performance.      &lt;br /&gt;
                                                         &lt;br /&gt;
The &amp;lt;var&amp;gt;[[ENQTIME parameter|ENQTIME]]&amp;lt;/var&amp;gt; parameter specifies the number of milliseconds waited for each record locking retry wait. ENQTIME can be between 1 and 60000, corresponding to a minimum of 1 millisecond and a maximum of 1 minute. The default value of ENQTIME is 3000 (3 seconds).            &lt;br /&gt;
                                                         &lt;br /&gt;
For example, with ENQTIME = 100 and ENQRETRY = 7, after a record locking conflict occurs the thread will retry 7 times with wait intervals of .1 seconds, and so within at most .7 seconds either the lock becomes available or the conflict triggers an On unit or cancels the request.     &lt;br /&gt;
                                                         &lt;br /&gt;
The ENQTIME parameter may also be reset with $ResetN. &lt;br /&gt;
&lt;br /&gt;
This new parameter was enabled in V7.7 with the application of zap 77z299.&lt;br /&gt;
&lt;br /&gt;
===EVALOPT===&lt;br /&gt;
The new &amp;lt;var&amp;gt;EVALOPT&amp;lt;/var&amp;gt; parameter controls the cancellation of a request on truncation of string data. The default value is 0, and currently there is just one setting, 1, which means &amp;quot;cancel a request if truncation of string data occurs.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
For example, with the default of 0 in place, the following code &amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;    %x is string len 1   &lt;br /&gt;
    %y is string len 2   &lt;br /&gt;
    %y = &#039;ab&#039;            &lt;br /&gt;
    %x = %y              &lt;br /&gt;
    printtext {~} = {%x} &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
would cause silent truncation, and give the result&lt;br /&gt;
    &amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;%x = a &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If &amp;lt;var&amp;gt;EVALOPT&amp;lt;/var&amp;gt; is set to 1, then the above code produces the following message:&lt;br /&gt;
    &amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;M204.0552: Variable too small for result &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and the request is cancelled.&lt;br /&gt;
&lt;br /&gt;
===LFSCB===&lt;br /&gt;
LFSCB, the length of the full screen buffer, now has a new minimum value of 8 ( the previous minimum was 0 ). This change has been enabled in v7.7 with the application of zap 77z042, and within V7.6 with the application of zap 76z393.&lt;br /&gt;
&lt;br /&gt;
===MAXPRE, MAXBOUT, MAXSUBT===&lt;br /&gt;
&amp;lt;p&amp;gt;Introduced in zap 77z257.&amp;lt;/p&amp;gt;&lt;br /&gt;
The new &amp;lt;var&amp;gt;MAXPRE&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;MAXBOUT&amp;lt;/var&amp;gt;, and &amp;lt;var&amp;gt;MAXSUBT&amp;lt;/var&amp;gt; parameters can be used to cancel a runaway transaction and prevent it from filling the checkpoint data set. &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;MAXPRE&amp;lt;/var&amp;gt;:  Maximum number of pre-images per transaction.  &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;MAXBOUT&amp;lt;/var&amp;gt;: Maximum number of backout pages per transaction. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;MAXSUBT&amp;lt;/var&amp;gt;: Maximum number of subtransaction checkpoints that a transaction can span.&amp;lt;/li&amp;gt;&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;Each new parameter defaults to unlimited. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;If a parameter value is set, a transaction is cancelled if that value is exceeded, and the following message is displayed:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;M204.0524: Maximum number (&amp;lt;i&amp;gt;num&amp;lt;/i&amp;gt;) of &amp;lt;i&amp;gt;parameter&amp;lt;/i&amp;gt; exceeded.&amp;lt;/p&amp;gt;&lt;br /&gt;
where &amp;lt;i&amp;gt;num&amp;lt;/i&amp;gt; is the value set for &amp;lt;i&amp;gt;parameter&amp;lt;/i&amp;gt; (&amp;lt;var&amp;gt;MAXPRE&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;MAXBOUT&amp;lt;/var&amp;gt;, or &amp;lt;var&amp;gt;MAXSUBT&amp;lt;/var&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
===NLDAPBUF===&lt;br /&gt;
This new parameter allows the number of LDAP buffers allocated during startup to be set in CCAIN. The default value is 2, and the settable value can range from 0 to 65535.&lt;br /&gt;
&lt;br /&gt;
===PUPDTH (new minimum value)===&lt;br /&gt;
If a user sets the &amp;lt;var&amp;gt;[[PUPDTH parameter|PUPDTH]]&amp;lt;/var&amp;gt; parameter to 0, it will now automatically be increased to 1, its minimum value.&lt;br /&gt;
&lt;br /&gt;
===SERV4G===&lt;br /&gt;
This parameter allows testing of server tables that span a 4-gigabyte boundary. For example, if &amp;lt;var&amp;gt;SERV4G&amp;lt;/var&amp;gt; is &amp;lt;code&amp;gt;X&#039;FFFFF000&#039;&amp;lt;/code&amp;gt;, each ATB server will begin at &amp;lt;code&amp;gt;XX_FFFFF000&amp;lt;/code&amp;gt;. If SERV4G is &amp;lt;code&amp;gt;X&#039;FFFF0000&#039;&amp;lt;/code&amp;gt;, each ATB server will begin at &amp;lt;code&amp;gt;XX_FFFF0000&amp;lt;/code&amp;gt;. &amp;lt;code&amp;gt;XX&amp;lt;/code&amp;gt; is determined by the storage available on the system. The parameter is set in CCAIN.&lt;br /&gt;
&lt;br /&gt;
The contents of the ATB server are specified by using the &amp;lt;var&amp;gt;[[SERVGA parameter|SERVGA]]&amp;lt;/var&amp;gt; parameter.&lt;br /&gt;
&lt;br /&gt;
For example, if you want VTBL to span the 4G boundary, you can use these settings: &amp;lt;code&amp;gt;SERV4G=X&#039;FFFFF000&#039;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;SERVGA=X&#039;00040000&#039;&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;LVTBL=200 (6400 bytes, X&#039;1900&#039;)&amp;lt;/code&amp;gt;. This will force each server&#039;s VTBL to begin at &amp;lt;code&amp;gt;XX_FFFFF000&amp;lt;/code&amp;gt; and end at &amp;lt;code&amp;gt;XX+1_00000900&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===WEBDFLT===&lt;br /&gt;
At V7.7, the default access rule for non-SSL ports was changed from ALLOW * to DISALLOW *, meaning that unless any ALLOW rules were in place resulting in a login/password prompt, the port couldn&#039;t be accessed. The new &amp;lt;var&amp;gt;[[WEBDFLT_parameter|WEBDFLT]]&amp;lt;/var&amp;gt; parameter may be set to 1 for reversion to the old default of ALLOW *. Under V7.7, this new parameter was enabled with the application of zap 77z090. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;var&amp;gt;RESET WEBDFLT&amp;lt;/var&amp;gt; requires system administrator privileges. It is recommended to reset the 1 bit of &amp;lt;var&amp;gt;WEBDFLT&amp;lt;/var&amp;gt; to zero after issuing a series of &amp;lt;var&amp;gt;JANUS DEFINE&amp;lt;/var&amp;gt; commands which need WEBDFLT=1, as in the CCAIN input stream.&lt;br /&gt;
&lt;br /&gt;
==New and changed statistics==&lt;br /&gt;
===MPR, MBO, MCP, and RCV===&lt;br /&gt;
Introduced in zap 77z257.&lt;br /&gt;
&amp;lt;p&amp;gt;These statistics provide high water mark transaction information. (Since-last values will not be available until V78 GA.)&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;They are useful in conjunction with the &amp;lt;var&amp;gt;MAXPRE&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;MAXBOUT&amp;lt;/var&amp;gt;, and &amp;lt;var&amp;gt;MAXSUBT&amp;lt;/var&amp;gt; parameters. &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
User/system statistics:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;MPR: High water mark of transaction pre-images. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;MBO: High water mark of transaction backout pages. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;MCP: High water mark of transaction chkpoint spans. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
System statistics: &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;RCV: Number of blocks needed for subtransaction recovery &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt; &lt;br /&gt;
&amp;lt;p class=&amp;quot;note&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Notes:&amp;lt;/b&amp;gt; M204.0843 now displays the RCV statistic for subtransaction checkpoints.&lt;br /&gt;
The size of recovery checkpoint must be greater than the sum of the last RCV value plus the number of records in [[System_and_media_recovery#RESTART_recovery_considerations_for_sub-transaction_checkpoints|RESTART and RESTARTS]].&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
===DKWTS and DKWTMICS===&lt;br /&gt;
Introduced in zap 77z7289.&lt;br /&gt;
&amp;lt;p&amp;gt;The new system statistics DKWTS (DisK WaiTs) and DKWTMICS (DisK WaiT MICroSeconds) collect data to provide rough disk I/O service time numbers.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
DKWTS shows the number of disk I/O waits. DKWTMICS shows the total wait time for those waits in microseconds. Dividing the difference in DKWTMICS by the difference in DKWTS over an interval provides the average disk I/O wait time in microseconds.              &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;note&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Notes:&amp;lt;/b&amp;gt; &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The wait time does include internal Model 204 scheduler delays, so on a CPU bound Model 204 system, the service times calculated from DKWTS and DKWTMICS are likely to be an overestimate of actual service times.&amp;lt;/li&amp;gt;  &lt;br /&gt;
                                                                    &lt;br /&gt;
&amp;lt;li&amp;gt;DKWTS and DKWTMICS are not available in SirMon; use [[MONITOR_command|MONITOR]] SYSTEM STATISTICS to view these statistics.&amp;lt;/li&amp;gt;&amp;lt;/ul&amp;gt;  &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Compatibility issues==&lt;br /&gt;
===&amp;lt;b id=&amp;quot;listNewInit&amp;quot;&amp;gt;&amp;lt;/b&amp;gt;$ListNew cannot be used in Initial clause===&lt;br /&gt;
It is now a compilation error if &amp;lt;var&amp;gt;$ListNew&amp;lt;/var&amp;gt; is attempted to be used in the &amp;lt;var&amp;gt;Initial&amp;lt;/var&amp;gt; clause of a &lt;br /&gt;
[[Using_variables_and_values_in_computation#Declare_statements_for_.25variables|declaration statement]].&lt;br /&gt;
&amp;lt;p&amp;gt;This change is propagated by zap maintenance to versions 7.5 (zap 75Z487), 7.6 (zap 76Z514), and 7.7 (zap 77z281) of Model 204.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote class=&amp;quot;note&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Note:&amp;lt;/b&amp;gt; Strictly speaking, this would not be considered a compilation error, because previously although &amp;lt;code&amp;gt;..&amp;amp;nbsp;Initial($ListNew)&amp;lt;/code&amp;gt; did not produce a compilation error, in almost all circumstances it would produce a snap if the initialized %variable were used with some other &amp;lt;var&amp;gt;$List&amp;lt;i&amp;gt;xxx&amp;lt;/i&amp;gt;&amp;lt;/var&amp;gt; invocation.&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Restricting the use of the CUSTOM=38 setting===&lt;br /&gt;
The [[CUSTOM parameter|CUSTOM=38]] parameter setting, introduced at V7.5, inadvertently provided System Manager privileges to all users via the RESET command. This CUSTOM setting is now restricted to the RESETting of the LAUDIT parameter.&lt;br /&gt;
&lt;br /&gt;
===Disabling of Closure support===&lt;br /&gt;
Due to a number of bugs related to Closure support, introduced at V7.7, this feature, which can best be described as exposed methods assigned to method variables, has been disabled in this release. This change was also made to V7.7 with application of zap 77z119.&lt;br /&gt;
&lt;br /&gt;
===Password delimiter enforced===&lt;br /&gt;
When using &amp;lt;var&amp;gt;IFSTRTN&amp;lt;/var&amp;gt; to log on to a Model 204 online from an IFAM2 application, both the logonid and password must be followed by a semicolon, which is the delimiter. For example:      &lt;br /&gt;
                                      &lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;CALL IFSTRTN(RC,&#039;logonid;password;&#039;...)&amp;lt;/p&amp;gt;&lt;br /&gt;
                 &lt;br /&gt;
If a semicolon does not follow the password string, the following message will now be issued:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;M204.2964: Password missing or too long &amp;lt;/p&amp;gt;                 &lt;br /&gt;
                                                         &lt;br /&gt;
Previously, a semicolon following the password was not required and the first blank served as a password delimiter.  However, as of V7.7, embedded blanks are valid password characters and a semicolon is now required to delimit the password.&lt;br /&gt;
&lt;br /&gt;
This change has also been enabled in V7.7 with the application of zap 77z231.&lt;br /&gt;
&lt;br /&gt;
===PAGESZ parameter validated===&lt;br /&gt;
Previously it was possible to set the PAGESZ parameter to any value, although Model 204 internally supports one page size of 6184, and any deviation from this value would have led to problems during file creation. The value of this parameter is now controlled, such that setting it to any value other than 6184 will generate an M204.1149 message with the parameter being reset to 6184.&lt;br /&gt;
&lt;br /&gt;
===ECPRIV and the IDCAMS facility===&lt;br /&gt;
At V7.7 a security loophole was closed, whereby all ECF modules were run under external-authorizer profile of the calling user. Previously any ECF tasks were run under the owning job&#039;s external-authorizer profile, and in order for certain sites to retain that ability, a new setting of ECPRIV, value 4, was introduced to retain the ability to run ECF tasks using the job&#039;s security profile. &lt;br /&gt;
&lt;br /&gt;
The ECPRIV 4 setting potentially introduced a security loophole when calling the IDCAMS interface, based upon what the IDCAMS utility is able to do at a system level. Consequently as of this release, the ECPRIV 4 setting will be ignored when calling the IDCAMS facility via ECF, and such IDCAMS processes will always use the calling user&#039;s security profile. Any existing jobs that use ECF to call the IDCAMS utility with the ECFPRIV 4 bit set should be checked to ensure that the calling user&#039;s security profile still satisfies the job&#039;s requirements.&lt;br /&gt;
&lt;br /&gt;
===TCPOPTS is view-only===&lt;br /&gt;
In previous versions the &amp;lt;var&amp;gt;TCPOPTS&amp;lt;/var&amp;gt; parameter, which identifies the type of IP addressing in use (v4 or v6), was resetable, although it was always documented as a view-only parameter. The parameter is now handled as a view-only parameter, and any attempts to reset the parameter will result in the following message:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;gt;   M204.1123: Parameter TCPOPTS not reset&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===ZHPF command can only be issued by a system manager===&lt;br /&gt;
In previous versions it was possible to issue the ZHPF command without being logged on. From this release onwards, a user would have to be logged on with system manager privileges to be able to issue this command.&lt;br /&gt;
&lt;br /&gt;
Additionally, the command output will now only  display results for currently open files.&lt;br /&gt;
&lt;br /&gt;
This changes has been enabled in v7.7 with the application of zap 77z264.&lt;br /&gt;
&lt;br /&gt;
===Terminal MODEL reset failure===&lt;br /&gt;
If a reset of the terminal MODEL parameter fails due to an undersized output page buffer, then in addition to the existing messages that inform the user of this failure:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;gt;    M204.1875 UNABLE TO RESET MODEL TO %C &lt;br /&gt;
    M204.1123: Parameter MODEL not reset&amp;lt;/p&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
the following message will now be issued:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;gt;    M204.1008: LOUTPB must be increased to at least &amp;lt;number&amp;gt; &amp;lt;/p&amp;gt;&lt;br /&gt;
                                                         &lt;br /&gt;
where &amp;lt;number&amp;gt; is the minimum value of LOUTPB necessary to support the terminal model.&lt;br /&gt;
&lt;br /&gt;
This change is enabled in V7.7 with the application of zap 77z309.&lt;br /&gt;
&lt;br /&gt;
==Notes for system manager and installer==&lt;br /&gt;
===CRAM SVC installation is deprecated===&lt;br /&gt;
The CRAM SVC installation has been deprecated as of version 7.5. &amp;lt;br /&amp;gt;Installation of CRAM-XDM is described as part of the [[Model 204 installation]].&lt;br /&gt;
===Authorization and maintenance zaps===&lt;br /&gt;
When you download Rocket M204 product object files, all relevant authorization keys and all current maintenance zaps are pre-applied to the object files as part of the download process.&lt;br /&gt;
&lt;br /&gt;
==New and changed messages==&lt;br /&gt;
&lt;br /&gt;
See [[New and updated messages in Model 204 version 7.8|New and updated messages in Model 204 version 7.8]] for details.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category: Release notes]]&lt;/div&gt;</summary>
		<author><name>ELowell</name></author>
	</entry>
	<entry>
		<id>https://m204wiki.rocketsoftware.com/index.php?title=Release_notes_for_Model_204_version_7.8&amp;diff=117723</id>
		<title>Release notes for Model 204 version 7.8</title>
		<link rel="alternate" type="text/html" href="https://m204wiki.rocketsoftware.com/index.php?title=Release_notes_for_Model_204_version_7.8&amp;diff=117723"/>
		<updated>2019-12-07T00:51:30Z</updated>

		<summary type="html">&lt;p&gt;ELowell: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
These release notes list the enhancements and other changes contained in Model 204 version 7.8. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;&amp;lt;b&amp;gt;******THIS IS A DRAFT DOCUMENT.******&amp;lt;/b&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
These release notes list the enhancements and other changes contained in Model 204 version 7.8, &amp;lt;b&amp;gt;&amp;lt;i&amp;gt;which is still in development&amp;lt;/i&amp;gt;&amp;lt;/b&amp;gt;. Until the commercial release of the software, Rocket reserves the right to add to, remove, or change anything described herein. &lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
These release notes contain installation and features information for the Rocket Model 204 version 7.8 release.&lt;br /&gt;
Before beginning your installation, please read through this information about product installation and changes.&lt;br /&gt;
&lt;br /&gt;
==SOUL enhancements==&lt;br /&gt;
===AmIndependent method===&lt;br /&gt;
The &amp;lt;var&amp;gt;AmIndependent&amp;lt;/var&amp;gt; method returns TRUE for daemons spawned by &amp;lt;var&amp;gt;[[RunIndependently_(Daemon_subroutine)|RunIndependently]]&amp;lt;/var&amp;gt;. (The action of &amp;lt;var&amp;gt;[[AmDaemon_(Daemon_property)|AmDaemon]]&amp;lt;/var&amp;gt; remains unchanged.)&lt;br /&gt;
&lt;br /&gt;
The following table shows the values returned by &amp;lt;var&amp;gt;AmIndependent&amp;lt;/var&amp;gt; versus &amp;lt;var&amp;gt;AmDaemon&amp;lt;/var&amp;gt; for different daemon types:&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Type&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;AmDaemon&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;AmIndependent&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;$COMBG&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;False&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;False&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Independent daemon&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;False&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;True&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Other daemon&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;True&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;False&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Web, etc.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;False&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;False&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===$ProcOpn===&lt;br /&gt;
&amp;lt;var&amp;gt;[[$ProcOpn|$ProcOpn]]&amp;lt;/var&amp;gt; now supports the opening of a procedure with an all-numeric name, and including a leading zero, such as:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;%result = $procOpn(&#039;0123&#039;, &#039;MYFILE&#039;)&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Support for such procedure names was initially introduced at V7.7, and this feature of &amp;lt;var&amp;gt;$ProcOpn&amp;lt;/var&amp;gt; is also enabled in V7.7 with the application of zap 77z054.&lt;br /&gt;
&lt;br /&gt;
===Allow parentheses to surround a boolean enumeration object===&lt;br /&gt;
The following sample code:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;   begin                                       &lt;br /&gt;
   variables are undefined                  &lt;br /&gt;
   %isValid is boolean initial (True)       &lt;br /&gt;
   if (%isValid) then                  &lt;br /&gt;
      print &#039;in IF&#039;                            &lt;br /&gt;
   end if                                   &lt;br /&gt;
   end   &amp;lt;/p&amp;gt;      &lt;br /&gt;
&lt;br /&gt;
will now compile and run successfully, since this syntax: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;if (%isValid) then &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
is logically equivalent to this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;if %isValid then &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Prior to V7.8 the presence of parentheses surrounding the boolean enumeration object would have caused a compilation error. This change is enabled in V7.7 with the application of zap 77z370.&lt;br /&gt;
&lt;br /&gt;
===Support for copying Object class objects===&lt;br /&gt;
The Object class now supports the copy and deepCopy methods. For example, an Object object can be copied as follows:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;   begin               &lt;br /&gt;
   %x is object object &lt;br /&gt;
   %y is object object &lt;br /&gt;
   %y = new            &lt;br /&gt;
   %x = %y:copy        &lt;br /&gt;
   end &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This change is enabled in v7.7 with the application of zap 77z076, and within V7.6 with the application of zap 76z412.&lt;br /&gt;
&lt;br /&gt;
===Assignment of enumeration values to method variables===&lt;br /&gt;
Enumerations values can now be assigned to method variables whose result is an enumeration. So, for example, the following code:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;   begin                                               &lt;br /&gt;
   enumeration colour                                  &lt;br /&gt;
      public                                           &lt;br /&gt;
         value red                                     &lt;br /&gt;
         value white                                   &lt;br /&gt;
         value blue                                    &lt;br /&gt;
      end public                                       &lt;br /&gt;
   end enumeration                                     &lt;br /&gt;
   %func    is function getColour is enumeration colour&lt;br /&gt;
   local function getColour is enumeration colour      &lt;br /&gt;
      return blue                                      &lt;br /&gt;
   end function                                        &lt;br /&gt;
   %func    = getColour                                &lt;br /&gt;
   %func    = (colour):red                             &lt;br /&gt;
   printText {~=%(Local):(%func)}                      &lt;br /&gt;
   end  &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
will produce this result:&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt; %(Local):(%func)=red &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
whereas previously this line:   &lt;br /&gt;
&lt;br /&gt;
  &amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt; %func    = (colour):red &amp;lt;/p&amp;gt;   &lt;br /&gt;
&lt;br /&gt;
would have been rejected with this message:&lt;br /&gt;
&lt;br /&gt;
   &amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;MSIR.0993: Assignment invalid: mismatch between method and method variable &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This change is enabled in V7.7 with the application of zap 77z128.&lt;br /&gt;
&lt;br /&gt;
===Optional output method parameters===&lt;br /&gt;
Prior to this release output parameters could not be optional or have default values. In this release output parameters can be specified as &amp;lt;var&amp;gt;Optional&amp;lt;/var&amp;gt;, and a default value can be specified with &amp;lt;var&amp;gt;Default&amp;lt;/var&amp;gt;. One related change is that if a &amp;lt;var&amp;gt;Len&amp;lt;/var&amp;gt; value is specified with &amp;lt;var&amp;gt;Optional&amp;lt;/var&amp;gt; or &amp;lt;var&amp;gt;Default&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;Output&amp;lt;/var&amp;gt;, it indicates the length of the hidden target for the output parameter if none was passed. For all other &amp;lt;var&amp;gt;Output&amp;lt;/var&amp;gt; parameters, &amp;lt;var&amp;gt;Len&amp;lt;/var&amp;gt; is meaningless, just as it was before Model 204 V7.8. The following is an example of the use of an optional output parameter:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;function getRemote( -&lt;br /&gt;
   %target is string len 32, %errorReason is string len 80 optional output -&lt;br /&gt;
) is float&lt;br /&gt;
  ...&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
In this example, if &amp;lt;code&amp;gt;%errorReason&amp;lt;/code&amp;gt; is not specified in a call and then set to a value longer than 80 bytes it wil be truncated to 80 bytes. However, if a string of a different length is passed, the length of that string determines truncation behavior.&lt;br /&gt;
&lt;br /&gt;
==External Call Facility enhancements==&lt;br /&gt;
===Managing ECF tables more efficiently===&lt;br /&gt;
The are two new features to help manage ECF tables more efficiently, avoid conditions where the table can fill, and prevent the definition of further entities.&lt;br /&gt;
&lt;br /&gt;
The first feature is the new &amp;lt;var&amp;gt;DISPLAY ECF&amp;lt;/var&amp;gt; command, which displays the contents of ECF tables and also the current status of users accessing ECF modules. See more details of the &amp;lt;var&amp;gt;[[#DISPLAY ECF|DISPLAY ECF]]&amp;lt;/var&amp;gt; command below.&lt;br /&gt;
&lt;br /&gt;
The second feature is a new &amp;lt;var&amp;gt;EXTERNAL REMOVE&amp;lt;/var&amp;gt; statement with the following syntax:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;EXTERNAL REMOVE &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;modulename&amp;lt;/span&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This statement causes the entry for the named module to be removed from the module table. The table entry is then placed on a free chain of entries and can be reused by issuing the &amp;lt;var&amp;gt;EXTERNAL MODULE&amp;lt;/var&amp;gt; statement. This allows the module table to be managed with redundant entries removed, without having to recycle the ONLINE.&lt;br /&gt;
&lt;br /&gt;
An &amp;lt;var&amp;gt;EXTERNAL REMOVE&amp;lt;/var&amp;gt; statement will return &amp;lt;code&amp;gt;$status/$statusd&amp;lt;/code&amp;gt; values of &amp;lt;code&amp;gt;0/0&amp;lt;/code&amp;gt;, and most other status values that can be returned by the &amp;lt;var&amp;gt;EXTERNAL REMOVE&amp;lt;/var&amp;gt; statement are already documented in the ECF return codes table. If an &amp;lt;var&amp;gt;EXTERNAL REMOVE&amp;lt;/var&amp;gt; is attempted against a module that is currently being called (in use), then &amp;lt;code&amp;gt;$status/$statusd&amp;lt;/code&amp;gt; will return the values &amp;lt;code&amp;gt;20/1&amp;lt;/code&amp;gt; (module unavailable).&lt;br /&gt;
&lt;br /&gt;
==System enhancements==&lt;br /&gt;
&lt;br /&gt;
===New wait types for daemon/master waits===&lt;br /&gt;
&lt;br /&gt;
Two new wait types, viewable on the &amp;lt;var&amp;gt;[[MONITOR_command|MONITOR]] USERS&amp;lt;/var&amp;gt; command output, have been implemented as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;57&amp;lt;/code&amp;gt; - Means a daemon thread waiting for its master thread  &amp;lt;br /&amp;gt;     &lt;br /&gt;
&amp;lt;code&amp;gt;58&amp;lt;/code&amp;gt; - Means a master thread waiting for one of its daemon threads&lt;br /&gt;
&lt;br /&gt;
This change is enabled in V7.7 with the application of zap 77z410.&lt;br /&gt;
&lt;br /&gt;
===Snap formatting changes===&lt;br /&gt;
Date/time stamps in the page headers of snaps will now be shown in normal format, rather than in julian format as in previous versions. So in the following example, a particular snap header under v7.7 or previous versions would show as: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;SNAPID    1   19226.060155  M204.0022: Bug .. nnnnn               PAGE     1 &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
whereas the same snap header under v7.8 would show as: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;SNAPID    1  2019/08/14 06:01:06   M204.0022: Bug .. nnnnn        PAGE     1 &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Also, due to improvements in handling trailing blanks in snap output, a snap generated under v7.8 should be marginally smaller than the same snap generated under previous versions, assuming the same SNAPCTL settings.&lt;br /&gt;
&lt;br /&gt;
===Call stack trace for problem diagnosis===&lt;br /&gt;
A  call stack trace is now provided to help diagnose and resolve common errors. To enable the stack trace, do either of the following: &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Set the &amp;lt;var&amp;gt;[[SIRFACT parameter|SIRFACT]] X&#039;01&#039;&amp;lt;/var&amp;gt; bit.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Set the &amp;lt;var&amp;gt;[[DEBUGUL parameter|DEBUGL]]&amp;lt;/var&amp;gt; parameter. Note that the &amp;lt;var&amp;gt;DEBUGUL&amp;lt;/var&amp;gt; approach will introduce extra QTBL overhead. &amp;lt;p&amp;gt;(&amp;lt;var&amp;gt;DEBUGUL&amp;lt;/var&amp;gt; provides a similar facility with an include trace of procedures leading to the error, but this might not be potentially as useful as the call trace.)&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt; &lt;br /&gt;
&lt;br /&gt;
The call stack trace can assist in diagnosing run-time errors that might occur, as illustrated by the following &amp;quot;Variable too small for result&amp;quot; and &amp;quot;MBSCAN exceeded&amp;quot; examples.&lt;br /&gt;
&lt;br /&gt;
====Variable too small for result====&lt;br /&gt;
When the stack trace is enabled, a &amp;quot;variable too small&amp;quot; error results in the following message:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;M204.2966: Error at line n, procedure &#039;&#039;procname&#039;&#039; in file &#039;&#039;procfile&#039;&#039;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
which identifies the line within a procedure where the error is occurring, in addition to the usual message:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;M204.0552: Variable too small for result&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Any subsequent M204.2966 messages indicate the point in the code from where the code in error was called. For example, a stack of three subroutine calls leading to a &amp;quot;variable too small&amp;quot; error might result in the following messaging:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;   M204.0552: Variable too small for result                             &lt;br /&gt;
   M204.2966: Error at line 9, procedure MYPROC.LEVEL4 in file MYPROC   &lt;br /&gt;
   M204.2966: Called from line 5, procedure MYPROC.LEVEL3 in file MYPROC&lt;br /&gt;
   M204.2966: Called from line 5, procedure MYPROC.LEVEL2 in file MYPROC&lt;br /&gt;
   M204.2966: Called from line 5, procedure MYPROC.LEVEL1 in file MYPROC &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This information should help in diagnosing the problem. &lt;br /&gt;
&lt;br /&gt;
If the error occurs within a command level program rather than a procedure, then the M204.2966 message is replaced by an M204.2967 message, and a similar error condition to the above with a preceding call stack might be audited as follows:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;   M204.0552: Variable too small for result              &lt;br /&gt;
   M204.2967: Error at line 14 of command level program  &lt;br /&gt;
   M204.2967: Called from line 5 of command level program&lt;br /&gt;
   M204.2967: Called from line 3 of command level program &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If neither &amp;lt;var&amp;gt;SIRFACT X&#039;01&#039;&amp;lt;/var&amp;gt; nor &amp;lt;var&amp;gt;DEBUGUL&amp;lt;/var&amp;gt; is set, then the &amp;quot;variable too small&amp;quot; error produces the following messages:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;   M204.0552: Variable too small for result &lt;br /&gt;
   M204.2968: Error: no debug info &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====MBSCAN exceeded====&lt;br /&gt;
Similarly to the handling of the &amp;quot;variable too small for result&amp;quot; error, the call stack can also be used to diagnose errors where the value of &amp;lt;var&amp;gt;[[MBSCAN parameter|MBSCAN]]&amp;lt;/var&amp;gt; is exceeded as a result of a direct search of Table B records. &lt;br /&gt;
&amp;lt;p&amp;gt;Again, under V7.8, with either the &amp;lt;var&amp;gt;SIRFACT X&#039;01&#039;&amp;lt;/var&amp;gt; bit set or &amp;lt;var&amp;gt;DEBUGUL&amp;lt;/var&amp;gt; set, if a long request occurs as a result of exceeding &amp;lt;var&amp;gt;MBSCAN&amp;lt;/var&amp;gt;, then initially the following message is produced, as before:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;M204.0569: File &#039;&#039;filename&#039;&#039;, Find: Table B records to be searched = &#039;&#039;nnnn&#039;&#039;&amp;lt;/p&amp;gt;&lt;br /&gt;
followed by a DYRWT prompt message. If the user replies &#039;N&#039; to the prompt, or if the request is run in an environment (such as a batch job) where the default response is &#039;N&#039;, the following message is produced after the M204.0569 message:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;Cancelling request: M204.2969: MBSCAN (&#039;&#039;mm&#039;&#039;) exceeded, records to be searched = &#039;&#039;nnnn&#039;&#039;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
where &#039;&#039;mm&#039;&#039; is the current setting of &amp;lt;var&amp;gt;MBSCAN&amp;lt;/var&amp;gt;. The M204.2969 message is followed by M204.2966 messages displaying the call stack trace. Thus, if the following code is run from procedure MYPROC.MBSCAN against the demo database, with an &amp;lt;var&amp;gt;MBSCAN&amp;lt;/var&amp;gt; setting of 10:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;   b                           &lt;br /&gt;
   call sub1                   &lt;br /&gt;
   sub1: subroutine            &lt;br /&gt;
   fd1:                        &lt;br /&gt;
      in clients fd city = ONTARIO&lt;br /&gt;
              end find         &lt;br /&gt;
      fr fd1                      &lt;br /&gt;
         pai                      &lt;br /&gt;
         print                    &lt;br /&gt;
      end for                     &lt;br /&gt;
   end subroutine              &lt;br /&gt;
   end &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
then the following messages are produced, assuming any prompts are responded to with an &#039;N&#039;:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;   M204.0569: File CLIENTS, Find: Table B records to be searched = 3415&lt;br /&gt;
   Cancelling request: M204.2969: MBSCAN (10) exceeded, records to be searched = 3415  &lt;br /&gt;
   M204.2966: Error at line 6, procedure MYPROC.MBSCAN in file MYPROC&lt;br /&gt;
   M204.2966: Called from line 3, procedure MYPROC.MBSCAN in file MYPROC  &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===appendJournalData===&lt;br /&gt;
The &amp;lt;var&amp;gt;[[AppendJournalData_(Stringlist_function)|AppendJournalData]]&amp;lt;/var&amp;gt; function is now more tolerant of an outstanding BUMP request. Previously, if &amp;lt;var&amp;gt;AppendJournalData&amp;lt;/var&amp;gt; was called to inadvertently retrieve a large amount of journal data, typically when called implicitly from within SirScan, then any outstanding BUMP request wouldn&#039;t be honored until all of the data had been retrieved, at which point the BUMP request would be completed, and all data would be lost.&lt;br /&gt;
&lt;br /&gt;
Now, the &amp;lt;var&amp;gt;AppendJournalData&amp;lt;/var&amp;gt; process checks for outstanding BUMP requests before each track I/O is executed, thus avoiding excessive I/Os against the journal and long waits for the BUMP of such a process to complete.&lt;br /&gt;
&lt;br /&gt;
==AUDIT204 enhancements==&lt;br /&gt;
===FORMAT command===&lt;br /&gt;
TIMEHH is a new parameter used with the FORMAT command of the [[Tracking_system_activity_(CCAJRNL,_CCAAUDIT,_CCAJLOG)#AUDIT204_utility|AUDIT204]] utility.  It indicates that timestamps, printed at the beginning of each line of output, should include hundredths of a second. Requires no other arguments.&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;b&amp;gt;NOTE:&amp;lt;/b&amp;gt; This parameter and the 78 version (or later) of AUDIT204 may be used against a 77 (or later) CCAJRNL.&amp;lt;/p&amp;gt;&lt;br /&gt;
For example:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;//CCAIN DD *&lt;br /&gt;
FORMAT YEARFORM 4&lt;br /&gt;
TIMEHH&lt;br /&gt;
TYPE ER MS LI&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Recovery enhancements==&lt;br /&gt;
===Media Recovery in a multi-user environment===&lt;br /&gt;
It is now possible to perform media recovery by issuing the &amp;lt;var&amp;gt;REGENERATE&amp;lt;/var&amp;gt; command to roll forward selected files in a multi-user environment, with the media recovery being carried out by different users with system manager privileges. The new USING option allows for the specification of a ddname for the input journal stream to be used by the &amp;lt;var&amp;gt;REGENERATE&amp;lt;/var&amp;gt; command. Previously media recovery was restricted to single user batch jobs, using the CCAGEN ddname for the input journal. For more details, see the &amp;lt;var&amp;gt;[[#REGENERATE|REGENERATE]]&amp;lt;/var&amp;gt; command below.&lt;br /&gt;
&lt;br /&gt;
==Security enhancements==&lt;br /&gt;
===CA-Top Secret can disallow CCASTAT logins===&lt;br /&gt;
The [[CA-Top_Secret_interface|CA-Top Secret]] interface now recognizes the &amp;lt;code&amp;gt;DEFACID=&amp;lt;/code&amp;gt;, setting and does not allow CCASTAT logins in the online if &amp;lt;code&amp;gt;DEFACID&amp;lt;/code&amp;gt; is set to null. (There is no attempt to log on M204USR.) Therefore, to disallow CCASTAT logons, set DEFACID=, in [[CA-Top_Secret_interface#Preparing_a_TOPSPARM_parameter_module_with_TOPSGEN|TOPSPARM]]. CCASTAT will be opened because it contains file and group passwords, but it will not be used for logons if CCASTAT logons are not allowed.&lt;br /&gt;
&lt;br /&gt;
===CUSTOM=11 and mixed cased input===&lt;br /&gt;
The &amp;lt;var&amp;gt;[[CUSTOM_parameter|CUSTOM]]&amp;lt;/var&amp;gt; parameter CUSTOM=11 setting no longer requires that a *LOWER command be issued prior to a LOGCTL command (to add or change a  password) to preserve mixed case input. Prior to this release, with CUSTOM=11 in place, *LOWER had to be issued before a LOGCTL command, otherwise any mixed case password strings would automatically be translated into uppercase. This change is enabled in V7.7 with the application of zap 77z108.&lt;br /&gt;
&lt;br /&gt;
===DEFUSER can specify a jobname not authorized to access M204===&lt;br /&gt;
When specifying DEFUSER=JOBNAME and VALIDAT=LOGON in the RACFGEN parms for an ONLINE, if the specified jobname ( the owning id for the ONLINE job ) isn&#039;t authorized to use Model 204 via RACF, any LOGIN commands specifying no userid will now succeed ( previously such a LOGON would have failed ). This enables users to submit jobs with USE $JOB, whereby the string USER=jobname  will be added to the submitted JCL, and this in turn is useful if the specified jobname has dataset access privileges to datasets required by the submitted jobs, even if the jobname itself isn&#039;t authorized to use M204.&lt;br /&gt;
&lt;br /&gt;
==Janus product enhancements==&lt;br /&gt;
&lt;br /&gt;
===Janus Web Server access rule===&lt;br /&gt;
The automatic &amp;lt;var&amp;gt;[[JANUS WEB ALLOW]]&amp;lt;/var&amp;gt; rule, which allowed any user to access the port without requiring a login, is changed &amp;lt;i&amp;gt;for non-SSL ports&amp;lt;/i&amp;gt; to the following:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;JANUS WEB &amp;lt;i&amp;gt;portname&amp;lt;/i&amp;gt; DISALLOW *&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
This rule requires a system administrator to explicitly define &amp;lt;var&amp;gt;ALLOW&amp;lt;/var&amp;gt; rules to enable users to access non-SSL ports.&lt;br /&gt;
The rule applies unless overridden by user-added rules. &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;blockquote class=&amp;quot;note&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;b&amp;gt;Note:&amp;lt;/b&amp;gt; To revert from this change in the JANUS DEFINE default and make the default &lt;br /&gt;
 non-SSL &amp;lt;var&amp;gt;ALLOW&amp;lt;/var&amp;gt; rule as it was in version 7.5 and earlier (&amp;lt;code&amp;gt;ALLOW *&amp;lt;/code&amp;gt;), turn on the 1 bit of the &amp;lt;var&amp;gt;[[WEBDFLT parameter|WEBDFLT]]&amp;lt;/var&amp;gt; parameter: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;RESET WEBDFLT=1&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Increase in pending accepts for Janus BPX ports===&lt;br /&gt;
The default number of pending accepts for Janus BPX server ports has been increased from 3 to 12, thus reducing the likelihood that a pending accept may fail with the message&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;MSIR.0019 Connection request rejected for port (port), MAXCON exceeded&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The actual number of pending accepts to be supported on the port can be set with the new parameter MAXPEND, set on the &amp;lt;var&amp;gt;[[JANUS_DEFINE|JANUS DEFINE]]&amp;lt;/var&amp;gt; command, where MAXPEND can vary from 3 up to a maximum value of 32. The change to the default value was enabled in V7.7 with the application of zap 77z269.&lt;br /&gt;
&lt;br /&gt;
===TCP listen backlog increased===&lt;br /&gt;
&lt;br /&gt;
The [[Program_Communication_facilities#LISTEN_call|TCP listen]] backlog has been increased from 16 to 1024 under z/OS.&lt;br /&gt;
&lt;br /&gt;
This update tells the TCP stack to queue up to 1024 of such requests up before dropping them, thus reducing, or in most cases eliminating, the likelihood of a connection request drop, other than in exceptional circumstances, such as a denial of service attack. This change was enabled in V7.7 with the application of zap 77z340.&lt;br /&gt;
&lt;br /&gt;
===Defer the freeing of XMLSCREEN input XML===&lt;br /&gt;
&lt;br /&gt;
The freeing of [[XMLSCREEN_and_NOXMLSCREEN_(JANUS_DEFINE_parameters)|XMLSCREEN]] input XML is now deferred until the next Read Screen or session termination. This means that if an application error is detected, the input XML can be retrieved with [[$Web_Input_Content|$Web_Input_Content]] and then logged for problem analysis. &lt;br /&gt;
&lt;br /&gt;
Prior to this release the XML received from the client is freed immediately after being used to set the input data for a Read Screen, rendering it unavailable for problem determination.&lt;br /&gt;
&lt;br /&gt;
This change is enabled in V7.7 with the application of zap 77z368.&lt;br /&gt;
&lt;br /&gt;
===XMLSCREEN and Janus Web Legacy blank stripping===&lt;br /&gt;
&lt;br /&gt;
xmlScreens and Janus Web Legacy screens now adhere to the same standard as standard screen processing in terms of stripping leading blanks from input fields defined as [[Full-screen_feature#DEBLANK_or_NODEBLANK_option|DEBLANK]] (either explicitly or implicitly).&lt;br /&gt;
&lt;br /&gt;
This change is enabled in V7.7 with the application of zap 77z400.&lt;br /&gt;
&lt;br /&gt;
===SSL input buffer size===&lt;br /&gt;
&lt;br /&gt;
The default value of [[SSLIBSIZE_(JANUS_DEFINE_parameter)|SSLIBSIZE]] has been increased to 16384 + 128, or 16512. This size should ensure correct communication with all TLS spec compliant applications. It is the maximum size allowed unless you use [[CUSTOM_parameter#Using_CUSTOM.3D.2818.29|CUSTOM=18]].    &lt;br /&gt;
&lt;br /&gt;
This changed is enabled in V7.7 with the application of zap 77z415.&lt;br /&gt;
&lt;br /&gt;
===Increasing LDAP buffers===&lt;br /&gt;
&lt;br /&gt;
The number of LDAP buffers allocated at startup can now be changed by setting the NLDAPBUF parameter in CCAIN. See below for details on [[#NLDAPBUF|NLDAPBUF]].&lt;br /&gt;
&lt;br /&gt;
===Increase URL length returned with $web_form_action===&lt;br /&gt;
With this release the maximum Janus Web Server incoming URL that can be handled by &amp;lt;var&amp;gt;$web_form_action&amp;lt;/var&amp;gt; is increased from 512 bytes to 1024 bytes. This change is enabled in V7.7 with the application of zap 77z424.&lt;br /&gt;
&lt;br /&gt;
===Maximum RBSIZE setting increased===&lt;br /&gt;
The maximum value for RBSIZE, set on the &amp;lt;var&amp;gt;[[JANUS DEFINE|JANUS DEFINE]]&amp;lt;/var&amp;gt; command, is now increased to 16777215 (previously the maximum was 65534). RBSIZE specifies the RPC or Request Buffer size.  On a Web port, the Janus request buffer holds browser request information such as header data, cookies, and form data. On other port types, it holds RPC input and output parameters. This change is enabled in V7.7 with the application of zap 77z427.&lt;br /&gt;
&lt;br /&gt;
==Debugger enhancements==&lt;br /&gt;
&lt;br /&gt;
===Access to exposed variables===&lt;br /&gt;
The debuggers can now view or watch the values of variables exposed to local routines/methods. Previously, any attempts to access an exposed variable would have displayed &amp;quot;%varname has no value&amp;quot; in the debugger session. (This feature is enabled in V7.7 with the application of zap 77z363.)&lt;br /&gt;
&lt;br /&gt;
==Performance enhancements==&lt;br /&gt;
&lt;br /&gt;
===MP/204 offload improvements===&lt;br /&gt;
Application code issuing the following SOUL statements will now now be fully offloadable:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;File Records In/On&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Remember&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt; &lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Position&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Sort Values&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;                                             &lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Reset Header/Trailer&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Find and Print Count&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Find All Values&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;For Each Value&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
the above improvements are also enabled in V7.7 with the application of zaps 77z419 and 77z420.&lt;br /&gt;
&lt;br /&gt;
===X3270OUT exit offloadable===&lt;br /&gt;
When running MP/204 (AMPSUBS&amp;gt;0) and using the [[Coding_SNA_Communications_Server_conversion_exit_routines#X3270OUT_.28convert_output_from_3270_format.29|X3270OUT]] exit to convert a 3270 output data stream to the appropriate device protocol, the exit can now run in parallel mode to improve performance. This change was enabled in V7.7 with the application of zap 77z313.&lt;br /&gt;
&lt;br /&gt;
The X3270OUT exit must be written to be re-entrant.&lt;br /&gt;
&lt;br /&gt;
==New and changed commands==&lt;br /&gt;
===DISPLAY ECF===&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;DISPLAY ECF {{ M | N | U } like ?} &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This new command displays details from ECF tables, or the current status of users accessing ECF modules.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;syntax&amp;quot;&amp;gt;D ECF M&amp;lt;/span&amp;gt; displays the contents of the module table. For example:&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;    D ECF M &lt;br /&gt;
    Module   Loadlib  Address:Length     Loaded@      Lastused@   #Calls  Flags &lt;br /&gt;
    QATUM13C PROGLIB 2FB91FB8:00000028 19023:121506 19023:121506 00000001 &lt;br /&gt;
    QATUM13B PROGLIB 2FE65000:00009C18 19023:121506 19023:121506 00000001 &lt;br /&gt;
    QATUM13A PROGLIB 2FE6EC18:00001CD8 19023:121506 19023:121506 00000001  &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
(flags may be D=deleted; S=shared; H=halted; I=Idle)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;syntax&amp;quot;&amp;gt;D ECF N&amp;lt;/span&amp;gt; displays contents of the name table. For example: &amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;    D ECF N&lt;br /&gt;
    Module   Logical-call-name &lt;br /&gt;
    QATUM13C MOD_QATUM13C &lt;br /&gt;
    QATUM13B MOD_QATUM13B &lt;br /&gt;
    QATUM13A MOD_QATUM13A &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;syntax&amp;quot;&amp;gt;D ECF U&amp;lt;/span&amp;gt; displays details of users currently accessing ECF modules. This is also the default option, and so &amp;lt;span class=&amp;quot;syntax&amp;quot;&amp;gt;D ECF&amp;lt;/span&amp;gt; will display the same output as &amp;lt;span class=&amp;quot;syntax&amp;quot;&amp;gt;D ECF U&amp;lt;/span&amp;gt;. For example:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;    D ECF U                           &lt;br /&gt;
    User# Userid     Module   Parmlen &lt;br /&gt;
    00002 ADMIN      --none--         &lt;br /&gt;
    00003 ADMIN      COBSAMP1 00000002&lt;br /&gt;
    00004 ADMIN      COBSAMP1 00000002 &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;syntax&amp;quot;&amp;gt;D ECF &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;function&amp;lt;/var&amp;gt; LIKE &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;?&amp;lt;/var&amp;gt; &amp;lt;/span&amp;gt; (where &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;?&amp;lt;/var&amp;gt; is a valid pattern) displays details for entities that match the specified pattern. The function is either M (modules), N (names), or U (users), and it defaults to U. So for example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;D ECF U L A&amp;lt;/p&amp;gt;&lt;br /&gt;
or&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;D ECF U L A*&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
displays details of ECF users whose names begin with A.&lt;br /&gt;
&lt;br /&gt;
===REGENERATE===&lt;br /&gt;
The &amp;lt;var&amp;gt;REGENERATE&amp;lt;/var&amp;gt; command can now be run in a multi-user environment by multiple users with system manager privileges. A new option USING is provided to specify the ddname of the input journal, so that the full syntax is now as follows:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;  REGENERATE [USING ddname] FILE filename [FROM dumpname | IGNORE]&lt;br /&gt;
  [TO {LAST UPDATE [BEFORE yy.ddd hh:mm:ss.th] | LAST CHECKPOINT [BEFORE yy.dd hh:mm:ss.th] &lt;br /&gt;
  | UPDATE number OF yy.ddd hh:mm:ss.th | CHECKPOINT yy.ddd hh:mm:ss.th} ]&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The default for the using ddname is CCAGEN, but any ddname may be used to allocate an input journal and used. For example:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;  ALLOCATE REGEN1 WITH SCOPE=SYSTEM DSN=PROD1.GDGJ OLD SEQUENTIAL GEN=+2&lt;br /&gt;
  REGENERATE USING REGEN1 FILE TEST&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It is the user&#039;s responsibility to ensure that the file being regenerated is not in use, and so prior to usage, &amp;lt;var&amp;gt;BUMP FILE&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;STOP FILE&amp;lt;/var&amp;gt; should be used to isolate usage against the file. If the file is in use, the REGEN will fail with these messages:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;  M204.1430: Failed to open file TEST&lt;br /&gt;
  M204.1436: Stopped processing file TEST  &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
$STATUS will now be set for &amp;lt;var&amp;gt;REGENERATE&amp;lt;/var&amp;gt; with the following values:&lt;br /&gt;
&amp;lt;blockquote&amp;gt;    &lt;br /&gt;
    0 - Success &amp;lt;br/&amp;gt;&lt;br /&gt;
    1 - No files were processed &amp;lt;br/&amp;gt;&lt;br /&gt;
    2 - At least one file stopped processing &amp;lt;br/&amp;gt;&lt;br /&gt;
    4 - A serious error occurred, REGEN failed &lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Similarly, &amp;lt;var&amp;gt;SETGRC&amp;lt;/var&amp;gt; may be used to get the return code and error message.&lt;br /&gt;
&lt;br /&gt;
==New and changed parameters==&lt;br /&gt;
&lt;br /&gt;
===ECMODS===&lt;br /&gt;
The new minimum value for ECMODS, the allowable number of ECF modules, is 1. Prior to V7.8 the minimum value was 0. This changed was enabled in V7.7 with the application of zap 77z306.&lt;br /&gt;
&lt;br /&gt;
===ECNAMES===&lt;br /&gt;
The new minimum value for ECNAMES, the allowable number of ECF module names, is 1. Prior to V7.8 the minimum value was 0. This changed was enabled in V7.7 with the application of zap 77z306.&lt;br /&gt;
&lt;br /&gt;
===ECPSIZE===&lt;br /&gt;
The new minimum value for ECPSIZE, the initial storage allocation for ECF parameters, is 1024. Prior to V7.8 the minimum value was 0. This changed was enabled in V7.7 with the application of zap 77z306.&lt;br /&gt;
&lt;br /&gt;
===ENQTIME===&lt;br /&gt;
Millisecond duration of automatic record locking retry wait.&lt;br /&gt;
&lt;br /&gt;
Prior to this change, if record locking conflicts occur frequently in a busy online, any user with a non-zero value for &amp;lt;var&amp;gt;[[ENQRETRY parameter|ENQRETRY]]&amp;lt;/var&amp;gt; will wait at least 3 seconds before the conflict is dealt with. This can degrade overall system performance.      &lt;br /&gt;
                                                         &lt;br /&gt;
The &amp;lt;var&amp;gt;[[ENQTIME parameter|ENQTIME]]&amp;lt;/var&amp;gt; parameter specifies the number of milliseconds waited for each record locking retry wait. ENQTIME can be between 1 and 60000, corresponding to a minimum of 1 millisecond and a maximum of 1 minute. The default value of ENQTIME is 3000 (3 seconds).            &lt;br /&gt;
                                                         &lt;br /&gt;
For example, with ENQTIME = 100 and ENQRETRY = 7, after a record locking conflict occurs the thread will retry 7 times with wait intervals of .1 seconds, and so within at most .7 seconds either the lock becomes available or the conflict triggers an On unit or cancels the request.     &lt;br /&gt;
                                                         &lt;br /&gt;
The ENQTIME parameter may also be reset with $ResetN. &lt;br /&gt;
&lt;br /&gt;
This new parameter was enabled in V7.7 with the application of zap 77z299.&lt;br /&gt;
&lt;br /&gt;
===EVALOPT===&lt;br /&gt;
The new &amp;lt;var&amp;gt;EVALOPT&amp;lt;/var&amp;gt; parameter controls the cancellation of a request on truncation of string data. The default value is 0, and currently there is just one setting, 1, which means &amp;quot;cancel a request if truncation of string data occurs.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
For example, with the default of 0 in place, the following code &amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;    %x is string len 1   &lt;br /&gt;
    %y is string len 2   &lt;br /&gt;
    %y = &#039;ab&#039;            &lt;br /&gt;
    %x = %y              &lt;br /&gt;
    printtext {~} = {%x} &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
would cause silent truncation, and give the result&lt;br /&gt;
    &amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;%x = a &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If &amp;lt;var&amp;gt;EVALOPT&amp;lt;/var&amp;gt; is set to 1, then the above code produces the following message:&lt;br /&gt;
    &amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;M204.0552: Variable too small for result &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and the request is cancelled.&lt;br /&gt;
&lt;br /&gt;
===LFSCB===&lt;br /&gt;
LFSCB, the length of the full screen buffer, now has a new minimum value of 8 ( the previous minimum was 0 ). This change has been enabled in v7.7 with the application of zap 77z042, and within V7.6 with the application of zap 76z393.&lt;br /&gt;
&lt;br /&gt;
===MAXPRE, MAXBOUT, MAXSUBT===&lt;br /&gt;
&amp;lt;p&amp;gt;Introduced in zap 77z257.&amp;lt;/p&amp;gt;&lt;br /&gt;
The new &amp;lt;var&amp;gt;MAXPRE&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;MAXBOUT&amp;lt;/var&amp;gt;, and &amp;lt;var&amp;gt;MAXSUBT&amp;lt;/var&amp;gt; parameters can be used to cancel a runaway transaction and prevent it from filling the checkpoint data set. &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;MAXPRE&amp;lt;/var&amp;gt;:  Maximum number of pre-images per transaction.  &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;MAXBOUT&amp;lt;/var&amp;gt;: Maximum number of backout pages per transaction. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;MAXSUBT&amp;lt;/var&amp;gt;: Maximum number of subtransaction checkpoints that a transaction can span.&amp;lt;/li&amp;gt;&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;Each new parameter defaults to unlimited. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;If a parameter value is set, a transaction is cancelled if that value is exceeded, and the following message is displayed:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;M204.0524: Maximum number (&amp;lt;i&amp;gt;num&amp;lt;/i&amp;gt;) of &amp;lt;i&amp;gt;parameter&amp;lt;/i&amp;gt; exceeded.&amp;lt;/p&amp;gt;&lt;br /&gt;
where &amp;lt;i&amp;gt;num&amp;lt;/i&amp;gt; is the value set for &amp;lt;i&amp;gt;parameter&amp;lt;/i&amp;gt; (&amp;lt;var&amp;gt;MAXPRE&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;MAXBOUT&amp;lt;/var&amp;gt;, or &amp;lt;var&amp;gt;MAXSUBT&amp;lt;/var&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
===NLDAPBUF===&lt;br /&gt;
This new parameter allows the number of LDAP buffers allocated during startup to be set in CCAIN. The default value is 2, and the settable value can range from 0 to 65535.&lt;br /&gt;
&lt;br /&gt;
===PUPDTH (new minimum value)===&lt;br /&gt;
If a user sets the &amp;lt;var&amp;gt;[[PUPDTH parameter|PUPDTH]]&amp;lt;/var&amp;gt; parameter to 0, it will now automatically be increased to 1, its minimum value.&lt;br /&gt;
&lt;br /&gt;
===SERV4G===&lt;br /&gt;
This parameter allows testing of server tables that span a 4-gigabyte boundary. For example, if &amp;lt;var&amp;gt;SERV4G&amp;lt;/var&amp;gt; is &amp;lt;code&amp;gt;X&#039;FFFFF000&#039;&amp;lt;/code&amp;gt;, each ATB server will begin at &amp;lt;code&amp;gt;XX_FFFFF000&amp;lt;/code&amp;gt;. If SERV4G is &amp;lt;code&amp;gt;X&#039;FFFF0000&#039;&amp;lt;/code&amp;gt;, each ATB server will begin at &amp;lt;code&amp;gt;XX_FFFF0000&amp;lt;/code&amp;gt;. &amp;lt;code&amp;gt;XX&amp;lt;/code&amp;gt; is determined by the storage available on the system. The parameter is set in CCAIN.&lt;br /&gt;
&lt;br /&gt;
The contents of the ATB server are specified by using the &amp;lt;var&amp;gt;[[SERVGA parameter|SERVGA]]&amp;lt;/var&amp;gt; parameter.&lt;br /&gt;
&lt;br /&gt;
For example, if you want VTBL to span the 4G boundary, you can use these settings: &amp;lt;code&amp;gt;SERV4G=X&#039;FFFFF000&#039;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;SERVGA=X&#039;00040000&#039;&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;LVTBL=200 (6400 bytes, X&#039;1900&#039;)&amp;lt;/code&amp;gt;. This will force each server&#039;s VTBL to begin at &amp;lt;code&amp;gt;XX_FFFFF000&amp;lt;/code&amp;gt; and end at &amp;lt;code&amp;gt;XX+1_00000900&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===WEBDFLT===&lt;br /&gt;
At V7.7, the default access rule for non-SSL ports was changed from ALLOW * to DISALLOW *, meaning that unless any ALLOW rules were in place resulting in a login/password prompt, the port couldn&#039;t be accessed. The new &amp;lt;var&amp;gt;[[WEBDFLT_parameter|WEBDFLT]]&amp;lt;/var&amp;gt; parameter may be set to 1 for reversion to the old default of ALLOW *. Under V7.7, this new parameter was enabled with the application of zap 77z090. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;var&amp;gt;RESET WEBDFLT&amp;lt;/var&amp;gt; requires system administrator privileges. It is recommended to reset the 1 bit of &amp;lt;var&amp;gt;WEBDFLT&amp;lt;/var&amp;gt; to zero after issuing a series of &amp;lt;var&amp;gt;JANUS DEFINE&amp;lt;/var&amp;gt; commands which need WEBDFLT=1, as in the CCAIN input stream.&lt;br /&gt;
&lt;br /&gt;
==New and changed statistics==&lt;br /&gt;
===MPR, MBO, MCP, and RCV===&lt;br /&gt;
Introduced in zap 77z257.&lt;br /&gt;
&amp;lt;p&amp;gt;These statistics provide high water mark transaction information. (Since-last values will not be available until V78 GA.)&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;They are useful in conjunction with the &amp;lt;var&amp;gt;MAXPRE&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;MAXBOUT&amp;lt;/var&amp;gt;, and &amp;lt;var&amp;gt;MAXSUBT&amp;lt;/var&amp;gt; parameters. &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
User/system statistics:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;MPR: High water mark of transaction pre-images. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;MBO: High water mark of transaction backout pages. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;MCP: High water mark of transaction chkpoint spans. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
System statistics: &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;RCV: Number of blocks needed for subtransaction recovery &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt; &lt;br /&gt;
&amp;lt;p class=&amp;quot;note&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Notes:&amp;lt;/b&amp;gt; M204.0843 now displays the RCV statistic for subtransaction checkpoints.&lt;br /&gt;
The size of recovery checkpoint must be greater than the sum of the last RCV value plus the number of records in [[System_and_media_recovery#RESTART_recovery_considerations_for_sub-transaction_checkpoints|RESTART and RESTARTS]].&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
===DKWTS and DKWTMICS===&lt;br /&gt;
Introduced in zap 77z7289.&lt;br /&gt;
&amp;lt;p&amp;gt;The new system statistics DKWTS (DisK WaiTs) and DKWTMICS (DisK WaiT MICroSeconds) collect data to provide rough disk I/O service time numbers.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
DKWTS shows the number of disk I/O waits. DKWTMICS shows the total wait time for those waits in microseconds. Dividing the difference in DKWTMICS by the difference in DKWTS over an interval provides the average disk I/O wait time in microseconds.              &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;note&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Notes:&amp;lt;/b&amp;gt; &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The wait time does include internal Model 204 scheduler delays, so on a CPU bound Model 204 system, the service times calculated from DKWTS and DKWTMICS are likely to be an overestimate of actual service times.&amp;lt;/li&amp;gt;  &lt;br /&gt;
                                                                    &lt;br /&gt;
&amp;lt;li&amp;gt;DKWTS and DKWTMICS are not available in SirMon; use [[MONITOR_command|MONITOR]] SYSTEM STATISTICS to view these statistics.&amp;lt;/li&amp;gt;&amp;lt;/ul&amp;gt;  &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Compatibility issues==&lt;br /&gt;
===&amp;lt;b id=&amp;quot;listNewInit&amp;quot;&amp;gt;&amp;lt;/b&amp;gt;$ListNew cannot be used in Initial clause===&lt;br /&gt;
It is now a compilation error if &amp;lt;var&amp;gt;$ListNew&amp;lt;/var&amp;gt; is attempted to be used in the &amp;lt;var&amp;gt;Initial&amp;lt;/var&amp;gt; clause of a &lt;br /&gt;
[[Using_variables_and_values_in_computation#Declare_statements_for_.25variables|declaration statement]].&lt;br /&gt;
&amp;lt;p&amp;gt;This change is propagated by zap maintenance to versions 7.5 (zap 75Z487), 7.6 (zap 76Z514), and 7.7 (zap 77z281) of Model 204.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote class=&amp;quot;note&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Note:&amp;lt;/b&amp;gt; Strictly speaking, this would not be considered a compilation error, because previously although &amp;lt;code&amp;gt;..&amp;amp;nbsp;Initial($ListNew)&amp;lt;/code&amp;gt; did not produce a compilation error, in almost all circumstances it would produce a snap if the initialized %variable were used with some other &amp;lt;var&amp;gt;$List&amp;lt;i&amp;gt;xxx&amp;lt;/i&amp;gt;&amp;lt;/var&amp;gt; invocation.&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Restricting the use of the CUSTOM=38 setting===&lt;br /&gt;
The [[CUSTOM parameter|CUSTOM=38]] parameter setting, introduced at V7.5, inadvertently provided System Manager privileges to all users via the RESET command. This CUSTOM setting is now restricted to the RESETting of the LAUDIT parameter.&lt;br /&gt;
&lt;br /&gt;
===Disabling of Closure support===&lt;br /&gt;
Due to a number of bugs related to Closure support, introduced at V7.7, this feature, which can best be described as exposed methods assigned to method variables, has been disabled in this release. This change was also made to V7.7 with application of zap 77z119.&lt;br /&gt;
&lt;br /&gt;
===Password delimiter enforced===&lt;br /&gt;
When using &amp;lt;var&amp;gt;IFSTRTN&amp;lt;/var&amp;gt; to log on to a Model 204 online from an IFAM2 application, both the logonid and password must be followed by a semicolon, which is the delimiter. For example:      &lt;br /&gt;
                                      &lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;CALL IFSTRTN(RC,&#039;logonid;password;&#039;...)&amp;lt;/p&amp;gt;&lt;br /&gt;
                 &lt;br /&gt;
If a semicolon does not follow the password string, the following message will now be issued:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;M204.2964: Password missing or too long &amp;lt;/p&amp;gt;                 &lt;br /&gt;
                                                         &lt;br /&gt;
Previously, a semicolon following the password was not required and the first blank served as a password delimiter.  However, as of V7.7, embedded blanks are valid password characters and a semicolon is now required to delimit the password.&lt;br /&gt;
&lt;br /&gt;
This change has also been enabled in V7.7 with the application of zap 77z231.&lt;br /&gt;
&lt;br /&gt;
===PAGESZ parameter validated===&lt;br /&gt;
Previously it was possible to set the PAGESZ parameter to any value, although Model 204 internally supports one page size of 6184, and any deviation from this value would have led to problems during file creation. The value of this parameter is now controlled, such that setting it to any value other than 6184 will generate an M204.1149 message with the parameter being reset to 6184.&lt;br /&gt;
&lt;br /&gt;
===ECPRIV and the IDCAMS facility===&lt;br /&gt;
At V7.7 a security loophole was closed, whereby all ECF modules were run under external-authorizer profile of the calling user. Previously any ECF tasks were run under the owning job&#039;s external-authorizer profile, and in order for certain sites to retain that ability, a new setting of ECPRIV, value 4, was introduced to retain the ability to run ECF tasks using the job&#039;s security profile. &lt;br /&gt;
&lt;br /&gt;
The ECPRIV 4 setting potentially introduced a security loophole when calling the IDCAMS interface, based upon what the IDCAMS utility is able to do at a system level. Consequently as of this release, the ECPRIV 4 setting will be ignored when calling the IDCAMS facility via ECF, and such IDCAMS processes will always use the calling user&#039;s security profile. Any existing jobs that use ECF to call the IDCAMS utility with the ECFPRIV 4 bit set should be checked to ensure that the calling user&#039;s security profile still satisfies the job&#039;s requirements.&lt;br /&gt;
&lt;br /&gt;
===TCPOPTS is view-only===&lt;br /&gt;
In previous versions the &amp;lt;var&amp;gt;TCPOPTS&amp;lt;/var&amp;gt; parameter, which identifies the type of IP addressing in use (v4 or v6), was resetable, although it was always documented as a view-only parameter. The parameter is now handled as a view-only parameter, and any attempts to reset the parameter will result in the following message:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;gt;   M204.1123: Parameter TCPOPTS not reset&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===ZHPF command can only be issued by a system manager===&lt;br /&gt;
In previous versions it was possible to issue the ZHPF command without being logged on. From this release onwards, a user would have to be logged on with system manager privileges to be able to issue this command.&lt;br /&gt;
&lt;br /&gt;
Additionally, the command output will now only  display results for currently open files.&lt;br /&gt;
&lt;br /&gt;
This changes has been enabled in v7.7 with the application of zap 77z264.&lt;br /&gt;
&lt;br /&gt;
===Terminal MODEL reset failure===&lt;br /&gt;
If a reset of the terminal MODEL parameter fails due to an undersized output page buffer, then in addition to the existing messages that inform the user of this failure:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;gt;    M204.1875 UNABLE TO RESET MODEL TO %C &lt;br /&gt;
    M204.1123: Parameter MODEL not reset&amp;lt;/p&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
the following message will now be issued:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;gt;    M204.1008: LOUTPB must be increased to at least &amp;lt;number&amp;gt; &amp;lt;/p&amp;gt;&lt;br /&gt;
                                                         &lt;br /&gt;
where &amp;lt;number&amp;gt; is the minimum value of LOUTPB necessary to support the terminal model.&lt;br /&gt;
&lt;br /&gt;
This change is enabled in V7.7 with the application of zap 77z309.&lt;br /&gt;
&lt;br /&gt;
==Notes for system manager and installer==&lt;br /&gt;
===CRAM SVC installation is deprecated===&lt;br /&gt;
The CRAM SVC installation has been deprecated as of version 7.5. &amp;lt;br /&amp;gt;Installation of CRAM-XDM is described as part of the [[Model 204 installation]].&lt;br /&gt;
===Authorization and maintenance zaps===&lt;br /&gt;
When you download Rocket M204 product object files, all relevant authorization keys and all current maintenance zaps are pre-applied to the object files as part of the download process.&lt;br /&gt;
&lt;br /&gt;
==New and changed messages==&lt;br /&gt;
&lt;br /&gt;
See [[New and updated messages in Model 204 version 7.8|New and updated messages in Model 204 version 7.8]] for details.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category: Release notes]]&lt;/div&gt;</summary>
		<author><name>ELowell</name></author>
	</entry>
	<entry>
		<id>https://m204wiki.rocketsoftware.com/index.php?title=Release_notes_for_Model_204_version_7.8&amp;diff=117722</id>
		<title>Release notes for Model 204 version 7.8</title>
		<link rel="alternate" type="text/html" href="https://m204wiki.rocketsoftware.com/index.php?title=Release_notes_for_Model_204_version_7.8&amp;diff=117722"/>
		<updated>2019-12-07T00:10:39Z</updated>

		<summary type="html">&lt;p&gt;ELowell: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
These release notes list the enhancements and other changes contained in Model 204 version 7.8. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;&amp;lt;b&amp;gt;******THIS IS A DRAFT DOCUMENT.******&amp;lt;/b&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
These release notes list the enhancements and other changes contained in Model 204 version 7.8, &amp;lt;b&amp;gt;&amp;lt;i&amp;gt;which is still in development&amp;lt;/i&amp;gt;&amp;lt;/b&amp;gt;. Until the commercial release of the software, Rocket reserves the right to add to, remove, or change anything described herein. &lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
These release notes contain installation and features information for the Rocket Model 204 version 7.8 release.&lt;br /&gt;
Before beginning your installation, please read through this information about product installation and changes.&lt;br /&gt;
&lt;br /&gt;
==SOUL enhancements==&lt;br /&gt;
===AmIndependent method===&lt;br /&gt;
The &amp;lt;var&amp;gt;AmIndependent&amp;lt;/var&amp;gt; method returns TRUE for daemons spawned by &amp;lt;var&amp;gt;[[RunIndependently_(Daemon_subroutine)|RunIndependently]]&amp;lt;/var&amp;gt;. (The action of &amp;lt;var&amp;gt;[[AmDaemon_(Daemon_property)|AmDaemon]]&amp;lt;/var&amp;gt; remains unchanged.)&lt;br /&gt;
&lt;br /&gt;
The following table shows the values returned by &amp;lt;var&amp;gt;AmIndependent&amp;lt;/var&amp;gt; versus &amp;lt;var&amp;gt;AmDaemon&amp;lt;/var&amp;gt; for different daemon types:&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Type&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;AmDaemon&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;AmIndependent&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;$COMBG&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;False&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;False&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Independent daemon&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;False&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;True&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Other daemon&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;True&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;False&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Web, etc.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;False&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;False&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===$ProcOpn===&lt;br /&gt;
&amp;lt;var&amp;gt;[[$ProcOpn|$ProcOpn]]&amp;lt;/var&amp;gt; now supports the opening of a procedure with an all-numeric name, and including a leading zero, such as:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;%result = $procOpn(&#039;0123&#039;, &#039;MYFILE&#039;)&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Support for such procedure names was initially introduced at V7.7, and this feature of &amp;lt;var&amp;gt;$ProcOpn&amp;lt;/var&amp;gt; is also enabled in V7.7 with the application of zap 77z054.&lt;br /&gt;
&lt;br /&gt;
===Allow parentheses to surround a boolean enumeration object===&lt;br /&gt;
The following sample code:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;   begin                                       &lt;br /&gt;
   variables are undefined                  &lt;br /&gt;
   %isValid is boolean initial (True)       &lt;br /&gt;
   if (%isValid) then                  &lt;br /&gt;
      print &#039;in IF&#039;                            &lt;br /&gt;
   end if                                   &lt;br /&gt;
   end   &amp;lt;/p&amp;gt;      &lt;br /&gt;
&lt;br /&gt;
will now compile and run successfully, since this syntax: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;if (%isValid) then &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
is logically equivalent to this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;if %isValid then &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Prior to V7.8 the presence of parentheses surrounding the boolean enumeration object would have caused a compilation error. This change is enabled in V7.7 with the application of zap 77z370.&lt;br /&gt;
&lt;br /&gt;
===Support for copying Object class objects===&lt;br /&gt;
The Object class now supports the copy and deepCopy methods. For example, an Object object can be copied as follows:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;   begin               &lt;br /&gt;
   %x is object object &lt;br /&gt;
   %y is object object &lt;br /&gt;
   %y = new            &lt;br /&gt;
   %x = %y:copy        &lt;br /&gt;
   end &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This change is enabled in v7.7 with the application of zap 77z076, and within V7.6 with the application of zap 76z412.&lt;br /&gt;
&lt;br /&gt;
===Assignment of enumeration values to method variables===&lt;br /&gt;
Enumerations values can now be assigned to method variables whose result is an enumeration. So, for example, the following code:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;   begin                                               &lt;br /&gt;
   enumeration colour                                  &lt;br /&gt;
      public                                           &lt;br /&gt;
         value red                                     &lt;br /&gt;
         value white                                   &lt;br /&gt;
         value blue                                    &lt;br /&gt;
      end public                                       &lt;br /&gt;
   end enumeration                                     &lt;br /&gt;
   %func    is function getColour is enumeration colour&lt;br /&gt;
   local function getColour is enumeration colour      &lt;br /&gt;
      return blue                                      &lt;br /&gt;
   end function                                        &lt;br /&gt;
   %func    = getColour                                &lt;br /&gt;
   %func    = (colour):red                             &lt;br /&gt;
   printText {~=%(Local):(%func)}                      &lt;br /&gt;
   end  &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
will produce this result:&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt; %(Local):(%func)=red &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
whereas previously this line:   &lt;br /&gt;
&lt;br /&gt;
  &amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt; %func    = (colour):red &amp;lt;/p&amp;gt;   &lt;br /&gt;
&lt;br /&gt;
would have been rejected with this message:&lt;br /&gt;
&lt;br /&gt;
   &amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;MSIR.0993: Assignment invalid: mismatch between method and method variable &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This change is enabled in V7.7 with the application of zap 77z128.&lt;br /&gt;
&lt;br /&gt;
===Optional output method parameters===&lt;br /&gt;
Prior to this release output parameters could not be optional or have default values. In this release output parameters can be specified as &amp;lt;var&amp;gt;Optional&amp;lt;/var&amp;gt;, and a default value can be specified with &amp;lt;var&amp;gt;Default&amp;lt;/var&amp;gt;. One related change is that if a &amp;lt;var&amp;gt;Len&amp;lt;/var&amp;gt; value is specified with &amp;lt;var&amp;gt;Optional&amp;lt;/var&amp;gt; or &amp;lt;var&amp;gt;Default&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;Output&amp;lt;/var&amp;gt;, it indicates the length of the hidden target for the output parameter if none was passed. For all other &amp;lt;var&amp;gt;Output&amp;lt;/var&amp;gt; parameters, &amp;lt;var&amp;gt;Len&amp;lt;/var&amp;gt; is meaningless, just as it was before Model 204 V7.8. The following is an example of the use of an optional output parameter:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;function getRemote( -&lt;br /&gt;
   %target is string len 32, %errorReason is string len 80 optional output -&lt;br /&gt;
) is float&lt;br /&gt;
  ...&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
In this example, if &amp;lt;code&amp;gt;%errorReason&amp;lt;/code&amp;gt; is not specified in a call and then set to a value longer than 80 bytes it wil be truncated to 80 bytes. However, if a string of a different length is passed, the length of that string determines truncation behavior.&lt;br /&gt;
&lt;br /&gt;
==External Call Facility enhancements==&lt;br /&gt;
===Managing ECF tables more efficiently===&lt;br /&gt;
The are two new features to help manage ECF tables more efficiently, avoid conditions where the table can fill, and prevent the definition of further entities.&lt;br /&gt;
&lt;br /&gt;
The first feature is the new &amp;lt;var&amp;gt;DISPLAY ECF&amp;lt;/var&amp;gt; command, which displays the contents of ECF tables and also the current status of users accessing ECF modules. See more details of the &amp;lt;var&amp;gt;[[#DISPLAY ECF|DISPLAY ECF]]&amp;lt;/var&amp;gt; command below.&lt;br /&gt;
&lt;br /&gt;
The second feature is a new &amp;lt;var&amp;gt;EXTERNAL REMOVE&amp;lt;/var&amp;gt; statement with the following syntax:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;EXTERNAL REMOVE &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;modulename&amp;lt;/span&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This statement causes the entry for the named module to be removed from the module table. The table entry is then placed on a free chain of entries and can be reused by issuing the &amp;lt;var&amp;gt;EXTERNAL MODULE&amp;lt;/var&amp;gt; statement. This allows the module table to be managed with redundant entries removed, without having to recycle the ONLINE.&lt;br /&gt;
&lt;br /&gt;
An &amp;lt;var&amp;gt;EXTERNAL REMOVE&amp;lt;/var&amp;gt; statement will return &amp;lt;code&amp;gt;$status/$statusd&amp;lt;/code&amp;gt; values of &amp;lt;code&amp;gt;0/0&amp;lt;/code&amp;gt;, and most other status values that can be returned by the &amp;lt;var&amp;gt;EXTERNAL REMOVE&amp;lt;/var&amp;gt; statement are already documented in the ECF return codes table. If an &amp;lt;var&amp;gt;EXTERNAL REMOVE&amp;lt;/var&amp;gt; is attempted against a module that is currently being called (in use), then &amp;lt;code&amp;gt;$status/$statusd&amp;lt;/code&amp;gt; will return the values &amp;lt;code&amp;gt;20/1&amp;lt;/code&amp;gt; (module unavailable).&lt;br /&gt;
&lt;br /&gt;
==System enhancements==&lt;br /&gt;
&lt;br /&gt;
===New wait types for daemon/master waits===&lt;br /&gt;
&lt;br /&gt;
Two new wait types, viewable on the &amp;lt;var&amp;gt;[[MONITOR_command|MONITOR]] USERS&amp;lt;/var&amp;gt; command output, have been implemented as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;57&amp;lt;/code&amp;gt; - Means a daemon thread waiting for its master thread  &amp;lt;br /&amp;gt;     &lt;br /&gt;
&amp;lt;code&amp;gt;58&amp;lt;/code&amp;gt; - Means a master thread waiting for one of its daemon threads&lt;br /&gt;
&lt;br /&gt;
This change is enabled in V7.7 with the application of zap 77z410.&lt;br /&gt;
&lt;br /&gt;
===Snap formatting changes===&lt;br /&gt;
Date/time stamps in the page headers of snaps will now be shown in normal format, rather than in julian format as in previous versions. So in the following example, a particular snap header under v7.7 or previous versions would show as: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;SNAPID    1   19226.060155  M204.0022: Bug .. nnnnn               PAGE     1 &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
whereas the same snap header under v7.8 would show as: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;SNAPID    1  2019/08/14 06:01:06   M204.0022: Bug .. nnnnn        PAGE     1 &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Also, due to improvements in handling trailing blanks in snap output, a snap generated under v7.8 should be marginally smaller than the same snap generated under previous versions, assuming the same SNAPCTL settings.&lt;br /&gt;
&lt;br /&gt;
===Call stack trace for problem diagnosis===&lt;br /&gt;
A  call stack trace is now provided to help diagnose and resolve common errors. To enable the stack trace, do either of the following: &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Set the &amp;lt;var&amp;gt;[[SIRFACT parameter|SIRFACT]] X&#039;01&#039;&amp;lt;/var&amp;gt; bit.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Set the &amp;lt;var&amp;gt;[[DEBUGUL parameter|DEBUGL]]&amp;lt;/var&amp;gt; parameter. Note that the &amp;lt;var&amp;gt;DEBUGUL&amp;lt;/var&amp;gt; approach will introduce extra QTBL overhead. &amp;lt;p&amp;gt;(&amp;lt;var&amp;gt;DEBUGUL&amp;lt;/var&amp;gt; provides a similar facility with an include trace of procedures leading to the error, but this might not be potentially as useful as the call trace.)&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt; &lt;br /&gt;
&lt;br /&gt;
The call stack trace can assist in diagnosing run-time errors that might occur, as illustrated by the following &amp;quot;Variable too small for result&amp;quot; and &amp;quot;MBSCAN exceeded&amp;quot; examples.&lt;br /&gt;
&lt;br /&gt;
====Variable too small for result====&lt;br /&gt;
When the stack trace is enabled, a &amp;quot;variable too small&amp;quot; error results in the following message:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;M204.2966: Error at line n, procedure &#039;&#039;procname&#039;&#039; in file &#039;&#039;procfile&#039;&#039;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
which identifies the line within a procedure where the error is occurring, in addition to the usual message:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;M204.0552: Variable too small for result&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Any subsequent M204.2966 messages indicate the point in the code from where the code in error was called. For example, a stack of three subroutine calls leading to a &amp;quot;variable too small&amp;quot; error might result in the following messaging:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;   M204.0552: Variable too small for result                             &lt;br /&gt;
   M204.2966: Error at line 9, procedure MYPROC.LEVEL4 in file MYPROC   &lt;br /&gt;
   M204.2966: Called from line 5, procedure MYPROC.LEVEL3 in file MYPROC&lt;br /&gt;
   M204.2966: Called from line 5, procedure MYPROC.LEVEL2 in file MYPROC&lt;br /&gt;
   M204.2966: Called from line 5, procedure MYPROC.LEVEL1 in file MYPROC &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This information should help in diagnosing the problem. &lt;br /&gt;
&lt;br /&gt;
If the error occurs within a command level program rather than a procedure, then the M204.2966 message is replaced by an M204.2967 message, and a similar error condition to the above with a preceding call stack might be audited as follows:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;   M204.0552: Variable too small for result              &lt;br /&gt;
   M204.2967: Error at line 14 of command level program  &lt;br /&gt;
   M204.2967: Called from line 5 of command level program&lt;br /&gt;
   M204.2967: Called from line 3 of command level program &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If neither &amp;lt;var&amp;gt;SIRFACT X&#039;01&#039;&amp;lt;/var&amp;gt; nor &amp;lt;var&amp;gt;DEBUGUL&amp;lt;/var&amp;gt; is set, then the &amp;quot;variable too small&amp;quot; error produces the following messages:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;   M204.0552: Variable too small for result &lt;br /&gt;
   M204.2968: Error: no debug info &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====MBSCAN exceeded====&lt;br /&gt;
Similarly to the handling of the &amp;quot;variable too small for result&amp;quot; error, the call stack can also be used to diagnose errors where the value of &amp;lt;var&amp;gt;[[MBSCAN parameter|MBSCAN]]&amp;lt;/var&amp;gt; is exceeded as a result of a direct search of Table B records. &lt;br /&gt;
&amp;lt;p&amp;gt;Again, under V7.8, with either the &amp;lt;var&amp;gt;SIRFACT X&#039;01&#039;&amp;lt;/var&amp;gt; bit set or &amp;lt;var&amp;gt;DEBUGUL&amp;lt;/var&amp;gt; set, if a long request occurs as a result of exceeding &amp;lt;var&amp;gt;MBSCAN&amp;lt;/var&amp;gt;, then initially the following message is produced, as before:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;M204.0569: File &#039;&#039;filename&#039;&#039;, Find: Table B records to be searched = &#039;&#039;nnnn&#039;&#039;&amp;lt;/p&amp;gt;&lt;br /&gt;
followed by a DYRWT prompt message. If the user replies &#039;N&#039; to the prompt, or if the request is run in an environment (such as a batch job) where the default response is &#039;N&#039;, the following message is produced after the M204.0569 message:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;Cancelling request: M204.2969: MBSCAN (&#039;&#039;mm&#039;&#039;) exceeded, records to be searched = &#039;&#039;nnnn&#039;&#039;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
where &#039;&#039;mm&#039;&#039; is the current setting of &amp;lt;var&amp;gt;MBSCAN&amp;lt;/var&amp;gt;. The M204.2969 message is followed by M204.2966 messages displaying the call stack trace. Thus, if the following code is run from procedure MYPROC.MBSCAN against the demo database, with an &amp;lt;var&amp;gt;MBSCAN&amp;lt;/var&amp;gt; setting of 10:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;   b                           &lt;br /&gt;
   call sub1                   &lt;br /&gt;
   sub1: subroutine            &lt;br /&gt;
   fd1:                        &lt;br /&gt;
      in clients fd city = ONTARIO&lt;br /&gt;
              end find         &lt;br /&gt;
      fr fd1                      &lt;br /&gt;
         pai                      &lt;br /&gt;
         print                    &lt;br /&gt;
      end for                     &lt;br /&gt;
   end subroutine              &lt;br /&gt;
   end &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
then the following messages are produced, assuming any prompts are responded to with an &#039;N&#039;:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;   M204.0569: File CLIENTS, Find: Table B records to be searched = 3415&lt;br /&gt;
   Cancelling request: M204.2969: MBSCAN (10) exceeded, records to be searched = 3415  &lt;br /&gt;
   M204.2966: Error at line 6, procedure MYPROC.MBSCAN in file MYPROC&lt;br /&gt;
   M204.2966: Called from line 3, procedure MYPROC.MBSCAN in file MYPROC  &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===appendJournalData===&lt;br /&gt;
The &amp;lt;var&amp;gt;[[AppendJournalData_(Stringlist_function)|AppendJournalData]]&amp;lt;/var&amp;gt; function is now more tolerant of an outstanding BUMP request. Previously, if &amp;lt;var&amp;gt;AppendJournalData&amp;lt;/var&amp;gt; was called to inadvertently retrieve a large amount of journal data, typically when called implicitly from within SirScan, then any outstanding BUMP request wouldn&#039;t be honored until all of the data had been retrieved, at which point the BUMP request would be completed, and all data would be lost.&lt;br /&gt;
&lt;br /&gt;
Now, the &amp;lt;var&amp;gt;AppendJournalData&amp;lt;/var&amp;gt; process checks for outstanding BUMP requests before each track I/O is executed, thus avoiding excessive I/Os against the journal and long waits for the BUMP of such a process to complete.&lt;br /&gt;
&lt;br /&gt;
==AUDIT204 enhancements==&lt;br /&gt;
===FORMAT command===&lt;br /&gt;
TIMEHH is a new parameter used with the FORMAT command of the [[Tracking_system_activity_(CCAJRNL,_CCAAUDIT,_CCAJLOG)#AUDIT204_utility|AUDIT204]] utility.  It indicates that timestamps, printed at the beginning of each line of output, should include hundredths of a second. Requires no other arguments.&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;b&amp;gt;NOTE:&amp;lt;/b&amp;gt; This parameter and the 78 version (or later) of AUDIT204 may be used against a 77 (or later) CCAJRNL.&amp;lt;/p&amp;gt;&lt;br /&gt;
For example:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;//CCAIN DD *&lt;br /&gt;
FORMAT YEARFORM 4&lt;br /&gt;
TIMEHH&lt;br /&gt;
TYPE ER MS LI&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Recovery enhancements==&lt;br /&gt;
===Media Recovery in a multi-user environment===&lt;br /&gt;
It is now possible to perform media recovery by issuing the &amp;lt;var&amp;gt;REGENERATE&amp;lt;/var&amp;gt; command to roll forward selected files in a multi-user environment, with the media recovery being carried out by different users with system manager privileges. The new USING option allows for the specification of a ddname for the input journal stream to be used by the &amp;lt;var&amp;gt;REGENERATE&amp;lt;/var&amp;gt; command. Previously media recovery was restricted to single user batch jobs, using the CCAGEN ddname for the input journal. For more details, see the &amp;lt;var&amp;gt;[[#REGENERATE|REGENERATE]]&amp;lt;/var&amp;gt; command below.&lt;br /&gt;
&lt;br /&gt;
==Security enhancements==&lt;br /&gt;
===CA-Top Secret can disallow CCASTAT logins===&lt;br /&gt;
The [[CA-Top_Secret_interface|CA-Top Secret]] interface now recognizes the &amp;lt;code&amp;gt;DEFACID=&amp;lt;/code&amp;gt;, setting and does not allow CCASTAT logins in the online if &amp;lt;code&amp;gt;DEFACID&amp;lt;/code&amp;gt; is set to null. (There is no attempt to log on M204USR.) Therefore, to disallow CCASTAT logons, set DEFACID=, in [[CA-Top_Secret_interface#Preparing_a_TOPSPARM_parameter_module_with_TOPSGEN|TOPSPARM]]. CCASTAT will be opened because it contains file and group passwords, but it will not be used for logons if CCASTAT logons are not allowed.&lt;br /&gt;
&lt;br /&gt;
===CUSTOM=11 and mixed cased input===&lt;br /&gt;
The &amp;lt;var&amp;gt;[[CUSTOM_parameter|CUSTOM]]&amp;lt;/var&amp;gt; parameter CUSTOM=11 setting no longer requires that a *LOWER command be issued prior to a LOGCTL command (to add or change a  password) to preserve mixed case input. Prior to this release, with CUSTOM=11 in place, *LOWER had to be issued before a LOGCTL command, otherwise any mixed case password strings would automatically be translated into uppercase. This change is enabled in V7.7 with the application of zap 77z108.&lt;br /&gt;
&lt;br /&gt;
===DEFUSER can specify a jobname not authorized to access M204===&lt;br /&gt;
When specifying DEFUSER=JOBNAME and VALIDAT=LOGON in the RACFGEN parms for an ONLINE, if the specified jobname ( the owning id for the ONLINE job ) isn&#039;t authorized to use Model 204 via RACF, any LOGIN commands specifying no userid will now succeed ( previously such a LOGON would have failed ). This enables users to submit jobs with USE $JOB, whereby the string USER=jobname  will be added to the submitted JCL, and this in turn is useful if the specified jobname has dataset access privileges to datasets required by the submitted jobs, even if the jobname itself isn&#039;t authorized to use M204.&lt;br /&gt;
&lt;br /&gt;
==Janus product enhancements==&lt;br /&gt;
&lt;br /&gt;
===Janus Web Server access rule===&lt;br /&gt;
The automatic &amp;lt;var&amp;gt;[[JANUS WEB ALLOW]]&amp;lt;/var&amp;gt; rule, which allowed any user to access the port without requiring a login, is changed &amp;lt;i&amp;gt;for non-SSL ports&amp;lt;/i&amp;gt; to the following:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;JANUS WEB &amp;lt;i&amp;gt;portname&amp;lt;/i&amp;gt; DISALLOW *&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
This rule requires a system administrator to explicitly define &amp;lt;var&amp;gt;ALLOW&amp;lt;/var&amp;gt; rules to enable users to access non-SSL ports.&lt;br /&gt;
The rule applies unless overridden by user-added rules. &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;blockquote class=&amp;quot;note&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;b&amp;gt;Note:&amp;lt;/b&amp;gt; To revert from this change in the JANUS DEFINE default and make the default &lt;br /&gt;
 non-SSL &amp;lt;var&amp;gt;ALLOW&amp;lt;/var&amp;gt; rule as it was in version 7.5 and earlier (&amp;lt;code&amp;gt;ALLOW *&amp;lt;/code&amp;gt;), turn on the 1 bit of the &amp;lt;var&amp;gt;[[WEBDFLT parameter|WEBDFLT]]&amp;lt;/var&amp;gt; parameter: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;RESET WEBDFLT=1&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Increase in pending accepts for Janus BPX ports===&lt;br /&gt;
The default number of pending accepts for Janus BPX server ports has been increased from 3 to 12, thus reducing the likelihood that a pending accept may fail with the message&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;MSIR.0019 Connection request rejected for port (port), MAXCON exceeded&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The actual number of pending accepts to be supported on the port can be set with the new parameter MAXPEND, set on the &amp;lt;var&amp;gt;[[JANUS_DEFINE|JANUS DEFINE]]&amp;lt;/var&amp;gt; command, where MAXPEND can vary from 3 up to a maximum value of 32. The change to the default value was enabled in V7.7 with the application of zap 77z269.&lt;br /&gt;
&lt;br /&gt;
===TCP listen backlog increased===&lt;br /&gt;
&lt;br /&gt;
The [[Program_Communication_facilities#LISTEN_call|TCP listen]] backlog has been increased from 16 to 1024 under z/OS.&lt;br /&gt;
&lt;br /&gt;
This update tells the TCP stack to queue up to 1024 of such requests up before dropping them, thus reducing, or in most cases eliminating, the likelihood of a connection request drop, other than in exceptional circumstances, such as a denial of service attack. This change was enabled in V7.7 with the application of zap 77z340.&lt;br /&gt;
&lt;br /&gt;
===Defer the freeing of XMLSCREEN input XML===&lt;br /&gt;
&lt;br /&gt;
The freeing of [[XMLSCREEN_and_NOXMLSCREEN_(JANUS_DEFINE_parameters)|XMLSCREEN]] input XML is now deferred until the next Read Screen or session termination. This means that if an application error is detected, the input XML can be retrieved with [[$Web_Input_Content|$Web_Input_Content]] and then logged for problem analysis. &lt;br /&gt;
&lt;br /&gt;
Prior to this release the XML received from the client is freed immediately after being used to set the input data for a Read Screen, rendering it unavailable for problem determination.&lt;br /&gt;
&lt;br /&gt;
This change is enabled in V7.7 with the application of zap 77z368.&lt;br /&gt;
&lt;br /&gt;
===XMLSCREEN and Janus Web Legacy blank stripping===&lt;br /&gt;
&lt;br /&gt;
xmlScreens and Janus Web Legacy screens now adhere to the same standard as standard screen processing in terms of stripping leading blanks from input fields defined as [[Full-screen_feature#DEBLANK_or_NODEBLANK_option|DEBLANK]] (either explicitly or implicitly).&lt;br /&gt;
&lt;br /&gt;
This change is enabled in V7.7 with the application of zap 77z400.&lt;br /&gt;
&lt;br /&gt;
===SSL input buffer size===&lt;br /&gt;
&lt;br /&gt;
The default value of [[SSLIBSIZE_(JANUS_DEFINE_parameter)|SSLIBSIZE]] has been increased to 16384 + 128, or 16512. This size should ensure correct communication with all TLS spec compliant applications. It is the maximum size allowed unless you use [[CUSTOM_parameter#Using_CUSTOM.3D.2818.29|CUSTOM=18]].    &lt;br /&gt;
&lt;br /&gt;
This changed is enabled in V7.7 with the application of zap 77z415.&lt;br /&gt;
&lt;br /&gt;
===Increasing LDAP buffers===&lt;br /&gt;
&lt;br /&gt;
The number of LDAP buffers allocated at startup can now be changed by setting the NLDAPBUF parameter in CCAIN. See below for details on [[#NLDAPBUF|NLDAPBUF]].&lt;br /&gt;
&lt;br /&gt;
===Increase URL length returned with $web_form_action===&lt;br /&gt;
With this release the maximum Janus Web Server incoming URL that can be handled by &amp;lt;var&amp;gt;$web_form_action&amp;lt;/var&amp;gt; is increased from 512 bytes to 1024 bytes. This change is enabled in V7.7 with the application of zap 77z424.&lt;br /&gt;
&lt;br /&gt;
===Maximum RBSIZE setting increased===&lt;br /&gt;
The maximum value for RBSIZE, set on the &amp;lt;var&amp;gt;[[JANUS DEFINE|JANUS DEFINE]]&amp;lt;/var&amp;gt; command, is now increased to 16777215 (previously the maximum was 65534). RBSIZE specifies the RPC or Request Buffer size.  On a Web port, the Janus request buffer holds browser request information such as header data, cookies, and form data. On other port types, it holds RPC input and output parameters. This change is enabled in V7.7 with the application of zap 77z427.&lt;br /&gt;
&lt;br /&gt;
==Debugger enhancements==&lt;br /&gt;
&lt;br /&gt;
===Access to exposed variables===&lt;br /&gt;
The debuggers can now view or watch the values of variables exposed to local routines/methods. Previously, any attempts to access an exposed variable would have displayed &amp;quot;%varname has no value&amp;quot; in the debugger session. (This feature is enabled in V7.7 with the application of zap 77z363.)&lt;br /&gt;
&lt;br /&gt;
==Performance enhancements==&lt;br /&gt;
&lt;br /&gt;
===MP/204 offload improvements===&lt;br /&gt;
Application code issuing the following SOUL statements will now now be fully offloadable:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;File Records In/On&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Remember&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt; &lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Position&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Sort Values&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;                                             &lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Reset Header/Trailer&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Find and Print Count&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Find All Values&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;For Each Value&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
the above improvements are also enabled in V7.7 with the application of zaps 77z419 and 77z420.&lt;br /&gt;
&lt;br /&gt;
===X3270OUT exit offloadable===&lt;br /&gt;
When running MP/204 (AMPSUBS&amp;gt;0) and using the [[Coding_SNA_Communications_Server_conversion_exit_routines#X3270OUT_.28convert_output_from_3270_format.29|X3270OUT]] exit to convert a 3270 output data stream to the appropriate device protocol, the exit can now run in parallel mode to improve performance. This change was enabled in V7.7 with the application of zap 77z313.&lt;br /&gt;
&lt;br /&gt;
The X3270OUT exit must be written to be re-entrant.&lt;br /&gt;
&lt;br /&gt;
==New and changed commands==&lt;br /&gt;
===DISPLAY ECF===&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;DISPLAY ECF {{ M | N | U } like ?} &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This new command displays details from ECF tables, or the current status of users accessing ECF modules.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;syntax&amp;quot;&amp;gt;D ECF M&amp;lt;/span&amp;gt; displays the contents of the module table. For example:&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;    D ECF M &lt;br /&gt;
    Module   Loadlib  Address:Length     Loaded@      Lastused@   #Calls  Flags &lt;br /&gt;
    QATUM13C PROGLIB 2FB91FB8:00000028 19023:121506 19023:121506 00000001 &lt;br /&gt;
    QATUM13B PROGLIB 2FE65000:00009C18 19023:121506 19023:121506 00000001 &lt;br /&gt;
    QATUM13A PROGLIB 2FE6EC18:00001CD8 19023:121506 19023:121506 00000001  &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
(flags may be D=deleted; S=shared; H=halted; I=Idle)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;syntax&amp;quot;&amp;gt;D ECF N&amp;lt;/span&amp;gt; displays contents of the name table. For example: &amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;    D ECF N&lt;br /&gt;
    Module   Logical-call-name &lt;br /&gt;
    QATUM13C MOD_QATUM13C &lt;br /&gt;
    QATUM13B MOD_QATUM13B &lt;br /&gt;
    QATUM13A MOD_QATUM13A &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;syntax&amp;quot;&amp;gt;D ECF U&amp;lt;/span&amp;gt; displays details of users currently accessing ECF modules. This is also the default option, and so &amp;lt;span class=&amp;quot;syntax&amp;quot;&amp;gt;D ECF&amp;lt;/span&amp;gt; will display the same output as &amp;lt;span class=&amp;quot;syntax&amp;quot;&amp;gt;D ECF U&amp;lt;/span&amp;gt;. For example:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;    D ECF U                           &lt;br /&gt;
    User# Userid     Module   Parmlen &lt;br /&gt;
    00002 ADMIN      --none--         &lt;br /&gt;
    00003 ADMIN      COBSAMP1 00000002&lt;br /&gt;
    00004 ADMIN      COBSAMP1 00000002 &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;syntax&amp;quot;&amp;gt;D ECF &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;function&amp;lt;/var&amp;gt; LIKE &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;?&amp;lt;/var&amp;gt; &amp;lt;/span&amp;gt; (where &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;?&amp;lt;/var&amp;gt; is a valid pattern) displays details for entities that match the specified pattern. The function is either M (modules), N (names), or U (users), and it defaults to U. So for example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;D ECF U L A&amp;lt;/p&amp;gt;&lt;br /&gt;
or&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;D ECF U L A*&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
displays details of ECF users whose names begin with A.&lt;br /&gt;
&lt;br /&gt;
===REGENERATE===&lt;br /&gt;
The &amp;lt;var&amp;gt;REGENERATE&amp;lt;/var&amp;gt; command can now be run in a multi-user environment by multiple users with system manager privileges. A new option USING is provided to specify the ddname of the input journal, so that the full syntax is now as follows:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;  REGENERATE [USING ddname] FILE filename [FROM dumpname | IGNORE]&lt;br /&gt;
  [TO {LAST UPDATE [BEFORE yy.ddd hh:mm:ss.th] | LAST CHECKPOINT [BEFORE yy.dd hh:mm:ss.th] &lt;br /&gt;
  | UPDATE number OF yy.ddd hh:mm:ss.th | CHECKPOINT yy.ddd hh:mm:ss.th} ]&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The default for the using ddname is CCAGEN, but any ddname may be used to allocate an input journal and used. For example:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;  ALLOCATE REGEN1 WITH SCOPE=SYSTEM DSN=PROD1.GDGJ OLD SEQUENTIAL GEN=+2&lt;br /&gt;
  REGENERATE USING REGEN1 FILE TEST&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It is the user&#039;s responsibility to ensure that the file being regenerated is not in use, and so prior to usage, &amp;lt;var&amp;gt;BUMP FILE&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;STOP FILE&amp;lt;/var&amp;gt; should be used to isolate usage against the file. If the file is in use, the REGEN will fail with these messages:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;  M204.1430: Failed to open file TEST&lt;br /&gt;
  M204.1436: Stopped processing file TEST  &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
$STATUS will now be set for &amp;lt;var&amp;gt;REGENERATE&amp;lt;/var&amp;gt; with the following values:&lt;br /&gt;
&amp;lt;blockquote&amp;gt;    &lt;br /&gt;
    0 - Success &amp;lt;br/&amp;gt;&lt;br /&gt;
    1 - No files were processed &amp;lt;br/&amp;gt;&lt;br /&gt;
    2 - At least one file stopped processing &amp;lt;br/&amp;gt;&lt;br /&gt;
    4 - A serious error occurred, REGEN failed &lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Similarly, &amp;lt;var&amp;gt;SETGRC&amp;lt;/var&amp;gt; may be used to get the return code and error message.&lt;br /&gt;
&lt;br /&gt;
==New and changed parameters==&lt;br /&gt;
&lt;br /&gt;
===ECMODS===&lt;br /&gt;
The new minimum value for ECMODS, the allowable number of ECF modules, is 1. Prior to V7.8 the minimum value was 0. This changed was enabled in V7.7 with the application of zap 77z306.&lt;br /&gt;
&lt;br /&gt;
===ECNAMES===&lt;br /&gt;
The new minimum value for ECNAMES, the allowable number of ECF module names, is 1. Prior to V7.8 the minimum value was 0. This changed was enabled in V7.7 with the application of zap 77z306.&lt;br /&gt;
&lt;br /&gt;
===ECPSIZE===&lt;br /&gt;
The new minimum value for ECPSIZE, the initial storage allocation for ECF parameters, is 1024. Prior to V7.8 the minimum value was 0. This changed was enabled in V7.7 with the application of zap 77z306.&lt;br /&gt;
&lt;br /&gt;
===ENQTIME===&lt;br /&gt;
Millisecond duration of automatic record locking retry wait.&lt;br /&gt;
&lt;br /&gt;
Prior to this change, if record locking conflicts occur frequently in a busy online, any user with a non-zero value for &amp;lt;var&amp;gt;[[ENQRETRY parameter|ENQRETRY]]&amp;lt;/var&amp;gt; will wait at least 3 seconds before the conflict is dealt with. This can degrade overall system performance.      &lt;br /&gt;
                                                         &lt;br /&gt;
The &amp;lt;var&amp;gt;[[ENQTIME parameter|ENQTIME]]&amp;lt;/var&amp;gt; parameter specifies the number of milliseconds waited for each record locking retry wait. ENQTIME can be between 1 and 60000, corresponding to a minimum of 1 millisecond and a maximum of 1 minute. The default value of ENQTIME is 3000 (3 seconds).            &lt;br /&gt;
                                                         &lt;br /&gt;
For example, with ENQTIME = 100 and ENQRETRY = 7, after a record locking conflict occurs the thread will retry 7 times with wait intervals of .1 seconds, and so within at most .7 seconds either the lock becomes available or the conflict triggers an On unit or cancels the request.     &lt;br /&gt;
                                                         &lt;br /&gt;
The ENQTIME parameter may also be reset with $ResetN. &lt;br /&gt;
&lt;br /&gt;
This new parameter was enabled in V7.7 with the application of zap 77z299.&lt;br /&gt;
&lt;br /&gt;
===EVALOPT===&lt;br /&gt;
The new &amp;lt;var&amp;gt;EVALOPT&amp;lt;/var&amp;gt; parameter controls the cancellation of a request on truncation of string data. The default value is 0, and currently there is just one setting, 1, which means &amp;quot;cancel a request if truncation of string data occurs.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
For example, with the default of 0 in place, the following code &amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;    %x is string len 1   &lt;br /&gt;
    %y is string len 2   &lt;br /&gt;
    %y = &#039;ab&#039;            &lt;br /&gt;
    %x = %y              &lt;br /&gt;
    printtext {~} = {%x} &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
would cause silent truncation, and give the result&lt;br /&gt;
    &amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;%x = a &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If &amp;lt;var&amp;gt;EVALOPT&amp;lt;/var&amp;gt; is set to 1, then the above code produces the following message:&lt;br /&gt;
    &amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;M204.0552: Variable too small for result &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and the request is cancelled.&lt;br /&gt;
&lt;br /&gt;
===LFSCB===&lt;br /&gt;
LFSCB, the length of the full screen buffer, now has a new minimum value of 8 ( the previous minimum was 0 ). This change has been enabled in v7.7 with the application of zap 77z042, and within V7.6 with the application of zap 76z393.&lt;br /&gt;
&lt;br /&gt;
===MAXPRE, MAXBOUT, MAXSUBT===&lt;br /&gt;
&amp;lt;p&amp;gt;Introduced in zap 77z257.&amp;lt;/p&amp;gt;&lt;br /&gt;
The new &amp;lt;var&amp;gt;MAXPRE&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;MAXBOUT&amp;lt;/var&amp;gt;, and &amp;lt;var&amp;gt;MAXSUBT&amp;lt;/var&amp;gt; parameters can be used to cancel a runaway transaction and prevent it from filling the checkpoint data set. &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;MAXPRE&amp;lt;/var&amp;gt;:  Maximum number of pre-images per transaction.  &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;MAXBOUT&amp;lt;/var&amp;gt;: Maximum number of backout pages per transaction. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;MAXSUBT&amp;lt;/var&amp;gt;: Maximum number of subtransaction checkpoints that a transaction can span.&amp;lt;/li&amp;gt;&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;Each new parameter defaults to unlimited. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;If a parameter value is set, a transaction is cancelled if that value is exceeded, and the following message is displayed:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;code&amp;gt;M204.0524: Maximum number (&amp;lt;i&amp;gt;num&amp;lt;/i&amp;gt;) of &amp;lt;i&amp;gt;parameter&amp;lt;/i&amp;gt; exceeded.&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
where &amp;lt;i&amp;gt;num&amp;lt;/i&amp;gt; is the value set for &amp;lt;i&amp;gt;parameter&amp;lt;/i&amp;gt; (&amp;lt;var&amp;gt;MAXPRE&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;MAXBOUT&amp;lt;/var&amp;gt;, or &amp;lt;var&amp;gt;MAXSUBT&amp;lt;/var&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
===NLDAPBUF===&lt;br /&gt;
This new parameter allows the number of LDAP buffers allocated during startup to be set in CCAIN. The default value is 2, and the settable value can range from 0 to 65535.&lt;br /&gt;
&lt;br /&gt;
===PUPDTH (new minimum value)===&lt;br /&gt;
If a user sets the &amp;lt;var&amp;gt;[[PUPDTH parameter|PUPDTH]]&amp;lt;/var&amp;gt; parameter to 0, it will now automatically be increased to 1, its minimum value.&lt;br /&gt;
&lt;br /&gt;
===SERV4G===&lt;br /&gt;
This parameter allows testing of server tables that span a 4-gigabyte boundary. For example, if SERV4G is X&#039;FFFFF000&#039;, each ATB server will begin at XX_FFFFF000. If SERV4G is X&#039;FFFF0000&#039;, each ATB server will begin at XX_FFFF0000. XX is determined by the storage available on the system. The parameter is set in CCAIN.&lt;br /&gt;
&lt;br /&gt;
The contents of the ATB server are specified by using the SERVGA parameter.&lt;br /&gt;
&lt;br /&gt;
For example. if you want VTBL to span the 4G boundary, you can use these settings: SERV4G=X&#039;FFFFF000&#039;, SERVGA=X&#039;00040000&#039;, and LVTBL=200 (6400 bytes, X&#039;1900&#039;). This will force each server&#039;s VTBL to begin at XX_FFFFF000 and end at XX+1_00000900.&lt;br /&gt;
&lt;br /&gt;
===WEBDFLT===&lt;br /&gt;
At V7.7, the default access rule for non-SSL ports was changed from ALLOW * to DISALLOW *, meaning that unless any ALLOW rules were in place resulting in a login/password prompt, the port couldn&#039;t be accessed. The new &amp;lt;var&amp;gt;[[WEBDFLT_parameter|WEBDFLT]]&amp;lt;/var&amp;gt; parameter may be set to 1 for reversion to the old default of ALLOW *. Under V7.7, this new parameter was enabled with the application of zap 77z090. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;var&amp;gt;RESET WEBDFLT&amp;lt;/var&amp;gt; requires system administrator privileges. It is recommended to reset the 1 bit of &amp;lt;var&amp;gt;WEBDFLT&amp;lt;/var&amp;gt; to zero after issuing a series of &amp;lt;var&amp;gt;JANUS DEFINE&amp;lt;/var&amp;gt; commands which need WEBDFLT=1, as in the CCAIN input stream.&lt;br /&gt;
&lt;br /&gt;
==New and changed statistics==&lt;br /&gt;
===MPR, MBO, MCP, and RCV===&lt;br /&gt;
Introduced in zap 77z257.&lt;br /&gt;
&amp;lt;p&amp;gt;These statistics provide high water mark transaction information. (Since-last values will not be available until V78 GA.)&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;They are useful in conjunction with the &amp;lt;var&amp;gt;MAXPRE&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;MAXBOUT&amp;lt;/var&amp;gt;, and &amp;lt;var&amp;gt;MAXSUBT&amp;lt;/var&amp;gt; parameters. &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
User/system statistics:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;MPR: High water mark of transaction pre-images. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;MBO: High water mark of transaction backout pages. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;MCP: High water mark of transaction chkpoint spans. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
System statistics: &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;RCV: Number of blocks needed for subtransaction recovery &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt; &lt;br /&gt;
&amp;lt;p class=&amp;quot;note&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Notes:&amp;lt;/b&amp;gt; M204.0843 now displays the RCV statistic for subtransaction checkpoints.&lt;br /&gt;
The size of recovery checkpoint must be greater than the sum of the last RCV value plus the number of records in [[System_and_media_recovery#RESTART_recovery_considerations_for_sub-transaction_checkpoints|RESTART and RESTARTS]].&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
===DKWTS and DKWTMICS===&lt;br /&gt;
Introduced in zap 77z7289.&lt;br /&gt;
&amp;lt;p&amp;gt;The new system statistics DKWTS (DisK WaiTs) and DKWTMICS (DisK WaiT MICroSeconds) collect data to provide rough disk I/O service time numbers.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
DKWTS shows the number of disk I/O waits. DKWTMICS shows the total wait time for those waits in microseconds. Dividing the difference in DKWTMICS by the difference in DKWTS over an interval provides the average disk I/O wait time in microseconds.              &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;note&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Notes:&amp;lt;/b&amp;gt; &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The wait time does include internal Model 204 scheduler delays, so on a CPU bound Model 204 system, the service times calculated from DKWTS and DKWTMICS are likely to be an overestimate of actual service times.&amp;lt;/li&amp;gt;  &lt;br /&gt;
                                                                    &lt;br /&gt;
&amp;lt;li&amp;gt;DKWTS and DKWTMICS are not available in SirMon; use [[MONITOR_command|MONITOR]] SYSTEM STATISTICS to view these statistics.&amp;lt;/li&amp;gt;&amp;lt;/ul&amp;gt;  &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Compatibility issues==&lt;br /&gt;
===&amp;lt;b id=&amp;quot;listNewInit&amp;quot;&amp;gt;&amp;lt;/b&amp;gt;$ListNew cannot be used in Initial clause===&lt;br /&gt;
It is now a compilation error if &amp;lt;var&amp;gt;$ListNew&amp;lt;/var&amp;gt; is attempted to be used in the &amp;lt;var&amp;gt;Initial&amp;lt;/var&amp;gt; clause of a &lt;br /&gt;
[[Using_variables_and_values_in_computation#Declare_statements_for_.25variables|declaration statement]].&lt;br /&gt;
&amp;lt;p&amp;gt;This change is propagated by zap maintenance to versions 7.5 (zap 75Z487), 7.6 (zap 76Z514), and 7.7 (zap 77z281) of Model 204.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote class=&amp;quot;note&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Note:&amp;lt;/b&amp;gt; Strictly speaking, this would not be considered a compilation error, because previously although &amp;lt;code&amp;gt;..&amp;amp;nbsp;Initial($ListNew)&amp;lt;/code&amp;gt; did not produce a compilation error, in almost all circumstances it would produce a snap if the initialized %variable were used with some other &amp;lt;var&amp;gt;$List&amp;lt;i&amp;gt;xxx&amp;lt;/i&amp;gt;&amp;lt;/var&amp;gt; invocation.&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Restricting the use of the CUSTOM=38 setting===&lt;br /&gt;
The [[CUSTOM parameter|CUSTOM=38]] parameter setting, introduced at V7.5, inadvertently provided System Manager privileges to all users via the RESET command. This CUSTOM setting is now restricted to the RESETting of the LAUDIT parameter.&lt;br /&gt;
&lt;br /&gt;
===Disabling of Closure support===&lt;br /&gt;
Due to a number of bugs related to Closure support, introduced at V7.7, this feature, which can best be described as exposed methods assigned to method variables, has been disabled in this release. This change was also made to V7.7 with application of zap 77z119.&lt;br /&gt;
&lt;br /&gt;
===Password delimiter enforced===&lt;br /&gt;
When using &amp;lt;var&amp;gt;IFSTRTN&amp;lt;/var&amp;gt; to log on to a Model 204 online from an IFAM2 application, both the logonid and password must be followed by a semicolon, which is the delimiter. For example:      &lt;br /&gt;
                                      &lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;CALL IFSTRTN(RC,&#039;logonid;password;&#039;...)&amp;lt;/p&amp;gt;&lt;br /&gt;
                 &lt;br /&gt;
If a semicolon does not follow the password string, the following message will now be issued:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;M204.2964: Password missing or too long &amp;lt;/p&amp;gt;                 &lt;br /&gt;
                                                         &lt;br /&gt;
Previously, a semicolon following the password was not required and the first blank served as a password delimiter.  However, as of V7.7, embedded blanks are valid password characters and a semicolon is now required to delimit the password.&lt;br /&gt;
&lt;br /&gt;
This change has also been enabled in V7.7 with the application of zap 77z231.&lt;br /&gt;
&lt;br /&gt;
===PAGESZ parameter validated===&lt;br /&gt;
Previously it was possible to set the PAGESZ parameter to any value, although Model 204 internally supports one page size of 6184, and any deviation from this value would have led to problems during file creation. The value of this parameter is now controlled, such that setting it to any value other than 6184 will generate an M204.1149 message with the parameter being reset to 6184.&lt;br /&gt;
&lt;br /&gt;
===ECPRIV and the IDCAMS facility===&lt;br /&gt;
At V7.7 a security loophole was closed, whereby all ECF modules were run under external-authorizer profile of the calling user. Previously any ECF tasks were run under the owning job&#039;s external-authorizer profile, and in order for certain sites to retain that ability, a new setting of ECPRIV, value 4, was introduced to retain the ability to run ECF tasks using the job&#039;s security profile. &lt;br /&gt;
&lt;br /&gt;
The ECPRIV 4 setting potentially introduced a security loophole when calling the IDCAMS interface, based upon what the IDCAMS utility is able to do at a system level. Consequently as of this release, the ECPRIV 4 setting will be ignored when calling the IDCAMS facility via ECF, and such IDCAMS processes will always use the calling user&#039;s security profile. Any existing jobs that use ECF to call the IDCAMS utility with the ECFPRIV 4 bit set should be checked to ensure that the calling user&#039;s security profile still satisfies the job&#039;s requirements.&lt;br /&gt;
&lt;br /&gt;
===TCPOPTS is view-only===&lt;br /&gt;
In previous versions the &amp;lt;var&amp;gt;TCPOPTS&amp;lt;/var&amp;gt; parameter, which identifies the type of IP addressing in use (v4 or v6), was resetable, although it was always documented as a view-only parameter. The parameter is now handled as a view-only parameter, and any attempts to reset the parameter will result in the following message:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;gt;   M204.1123: Parameter TCPOPTS not reset&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===ZHPF command can only be issued by a system manager===&lt;br /&gt;
In previous versions it was possible to issue the ZHPF command without being logged on. From this release onwards, a user would have to be logged on with system manager privileges to be able to issue this command.&lt;br /&gt;
&lt;br /&gt;
Additionally, the command output will now only  display results for currently open files.&lt;br /&gt;
&lt;br /&gt;
This changes has been enabled in v7.7 with the application of zap 77z264.&lt;br /&gt;
&lt;br /&gt;
===Terminal MODEL reset failure===&lt;br /&gt;
If a reset of the terminal MODEL parameter fails due to an undersized output page buffer, then in addition to the existing messages that inform the user of this failure:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;gt;    M204.1875 UNABLE TO RESET MODEL TO %C &lt;br /&gt;
    M204.1123: Parameter MODEL not reset&amp;lt;/p&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
the following message will now be issued:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;gt;    M204.1008: LOUTPB must be increased to at least &amp;lt;number&amp;gt; &amp;lt;/p&amp;gt;&lt;br /&gt;
                                                         &lt;br /&gt;
where &amp;lt;number&amp;gt; is the minimum value of LOUTPB necessary to support the terminal model.&lt;br /&gt;
&lt;br /&gt;
This change is enabled in V7.7 with the application of zap 77z309.&lt;br /&gt;
&lt;br /&gt;
==Notes for system manager and installer==&lt;br /&gt;
===CRAM SVC installation is deprecated===&lt;br /&gt;
The CRAM SVC installation has been deprecated as of version 7.5. &amp;lt;br /&amp;gt;Installation of CRAM-XDM is described as part of the [[Model 204 installation]].&lt;br /&gt;
===Authorization and maintenance zaps===&lt;br /&gt;
When you download Rocket M204 product object files, all relevant authorization keys and all current maintenance zaps are pre-applied to the object files as part of the download process.&lt;br /&gt;
&lt;br /&gt;
==New and changed messages==&lt;br /&gt;
&lt;br /&gt;
See [[New and updated messages in Model 204 version 7.8|New and updated messages in Model 204 version 7.8]] for details.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category: Release notes]]&lt;/div&gt;</summary>
		<author><name>ELowell</name></author>
	</entry>
	<entry>
		<id>https://m204wiki.rocketsoftware.com/index.php?title=Release_notes_for_Model_204_version_7.8&amp;diff=117721</id>
		<title>Release notes for Model 204 version 7.8</title>
		<link rel="alternate" type="text/html" href="https://m204wiki.rocketsoftware.com/index.php?title=Release_notes_for_Model_204_version_7.8&amp;diff=117721"/>
		<updated>2019-12-07T00:06:39Z</updated>

		<summary type="html">&lt;p&gt;ELowell: /* Password delimiter enforced */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
These release notes list the enhancements and other changes contained in Model 204 version 7.8. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;&amp;lt;b&amp;gt;******THIS IS A DRAFT DOCUMENT.******&amp;lt;/b&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
These release notes list the enhancements and other changes contained in Model 204 version 7.8, &amp;lt;b&amp;gt;&amp;lt;i&amp;gt;which is still in development&amp;lt;/i&amp;gt;&amp;lt;/b&amp;gt;. Until the commercial release of the software, Rocket reserves the right to add to, remove, or change anything described herein. &lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
These release notes contain installation and features information for the Rocket Model 204 version 7.8 release.&lt;br /&gt;
Before beginning your installation, please read through this information about product installation and changes.&lt;br /&gt;
&lt;br /&gt;
==SOUL enhancements==&lt;br /&gt;
===AmIndependent method===&lt;br /&gt;
The &amp;lt;var&amp;gt;AmIndependent&amp;lt;/var&amp;gt; method returns TRUE for daemons spawned by &amp;lt;var&amp;gt;[[RunIndependently_(Daemon_subroutine)|RunIndependently]]&amp;lt;/var&amp;gt;. (The action of &amp;lt;var&amp;gt;[[AmDaemon_(Daemon_property)|AmDaemon]]&amp;lt;/var&amp;gt; remains unchanged.)&lt;br /&gt;
&lt;br /&gt;
The following table shows the values returned by &amp;lt;var&amp;gt;AmIndependent&amp;lt;/var&amp;gt; versus &amp;lt;var&amp;gt;AmDaemon&amp;lt;/var&amp;gt; for different daemon types:&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Type&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;AmDaemon&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;AmIndependent&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;$COMBG&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;False&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;False&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Independent daemon&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;False&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;True&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Other daemon&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;True&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;False&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Web, etc.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;False&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;False&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===$ProcOpn===&lt;br /&gt;
&amp;lt;var&amp;gt;[[$ProcOpn|$ProcOpn]]&amp;lt;/var&amp;gt; now supports the opening of a procedure with an all-numeric name, and including a leading zero, such as:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;%result = $procOpn(&#039;0123&#039;, &#039;MYFILE&#039;)&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Support for such procedure names was initially introduced at V7.7, and this feature of &amp;lt;var&amp;gt;$ProcOpn&amp;lt;/var&amp;gt; is also enabled in V7.7 with the application of zap 77z054.&lt;br /&gt;
&lt;br /&gt;
===Allow parentheses to surround a boolean enumeration object===&lt;br /&gt;
The following sample code:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;   begin                                       &lt;br /&gt;
   variables are undefined                  &lt;br /&gt;
   %isValid is boolean initial (True)       &lt;br /&gt;
   if (%isValid) then                  &lt;br /&gt;
      print &#039;in IF&#039;                            &lt;br /&gt;
   end if                                   &lt;br /&gt;
   end   &amp;lt;/p&amp;gt;      &lt;br /&gt;
&lt;br /&gt;
will now compile and run successfully, since this syntax: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;if (%isValid) then &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
is logically equivalent to this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;if %isValid then &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Prior to V7.8 the presence of parentheses surrounding the boolean enumeration object would have caused a compilation error. This change is enabled in V7.7 with the application of zap 77z370.&lt;br /&gt;
&lt;br /&gt;
===Support for copying Object class objects===&lt;br /&gt;
The Object class now supports the copy and deepCopy methods. For example, an Object object can be copied as follows:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;   begin               &lt;br /&gt;
   %x is object object &lt;br /&gt;
   %y is object object &lt;br /&gt;
   %y = new            &lt;br /&gt;
   %x = %y:copy        &lt;br /&gt;
   end &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This change is enabled in v7.7 with the application of zap 77z076, and within V7.6 with the application of zap 76z412.&lt;br /&gt;
&lt;br /&gt;
===Assignment of enumeration values to method variables===&lt;br /&gt;
Enumerations values can now be assigned to method variables whose result is an enumeration. So, for example, the following code:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;   begin                                               &lt;br /&gt;
   enumeration colour                                  &lt;br /&gt;
      public                                           &lt;br /&gt;
         value red                                     &lt;br /&gt;
         value white                                   &lt;br /&gt;
         value blue                                    &lt;br /&gt;
      end public                                       &lt;br /&gt;
   end enumeration                                     &lt;br /&gt;
   %func    is function getColour is enumeration colour&lt;br /&gt;
   local function getColour is enumeration colour      &lt;br /&gt;
      return blue                                      &lt;br /&gt;
   end function                                        &lt;br /&gt;
   %func    = getColour                                &lt;br /&gt;
   %func    = (colour):red                             &lt;br /&gt;
   printText {~=%(Local):(%func)}                      &lt;br /&gt;
   end  &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
will produce this result:&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt; %(Local):(%func)=red &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
whereas previously this line:   &lt;br /&gt;
&lt;br /&gt;
  &amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt; %func    = (colour):red &amp;lt;/p&amp;gt;   &lt;br /&gt;
&lt;br /&gt;
would have been rejected with this message:&lt;br /&gt;
&lt;br /&gt;
   &amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;MSIR.0993: Assignment invalid: mismatch between method and method variable &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This change is enabled in V7.7 with the application of zap 77z128.&lt;br /&gt;
&lt;br /&gt;
===Optional output method parameters===&lt;br /&gt;
Prior to this release output parameters could not be optional or have default values. In this release output parameters can be specified as &amp;lt;var&amp;gt;Optional&amp;lt;/var&amp;gt;, and a default value can be specified with &amp;lt;var&amp;gt;Default&amp;lt;/var&amp;gt;. One related change is that if a &amp;lt;var&amp;gt;Len&amp;lt;/var&amp;gt; value is specified with &amp;lt;var&amp;gt;Optional&amp;lt;/var&amp;gt; or &amp;lt;var&amp;gt;Default&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;Output&amp;lt;/var&amp;gt;, it indicates the length of the hidden target for the output parameter if none was passed. For all other &amp;lt;var&amp;gt;Output&amp;lt;/var&amp;gt; parameters, &amp;lt;var&amp;gt;Len&amp;lt;/var&amp;gt; is meaningless, just as it was before Model 204 V7.8. The following is an example of the use of an optional output parameter:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;function getRemote( -&lt;br /&gt;
   %target is string len 32, %errorReason is string len 80 optional output -&lt;br /&gt;
) is float&lt;br /&gt;
  ...&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
In this example, if &amp;lt;code&amp;gt;%errorReason&amp;lt;/code&amp;gt; is not specified in a call and then set to a value longer than 80 bytes it wil be truncated to 80 bytes. However, if a string of a different length is passed, the length of that string determines truncation behavior.&lt;br /&gt;
&lt;br /&gt;
==External Call Facility enhancements==&lt;br /&gt;
===Managing ECF tables more efficiently===&lt;br /&gt;
The are two new features to help manage ECF tables more efficiently, avoid conditions where the table can fill, and prevent the definition of further entities.&lt;br /&gt;
&lt;br /&gt;
The first feature is the new &amp;lt;var&amp;gt;DISPLAY ECF&amp;lt;/var&amp;gt; command, which displays the contents of ECF tables and also the current status of users accessing ECF modules. See more details of the &amp;lt;var&amp;gt;[[#DISPLAY ECF|DISPLAY ECF]]&amp;lt;/var&amp;gt; command below.&lt;br /&gt;
&lt;br /&gt;
The second feature is a new &amp;lt;var&amp;gt;EXTERNAL REMOVE&amp;lt;/var&amp;gt; statement with the following syntax:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;EXTERNAL REMOVE &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;modulename&amp;lt;/span&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This statement causes the entry for the named module to be removed from the module table. The table entry is then placed on a free chain of entries and can be reused by issuing the &amp;lt;var&amp;gt;EXTERNAL MODULE&amp;lt;/var&amp;gt; statement. This allows the module table to be managed with redundant entries removed, without having to recycle the ONLINE.&lt;br /&gt;
&lt;br /&gt;
An &amp;lt;var&amp;gt;EXTERNAL REMOVE&amp;lt;/var&amp;gt; statement will return &amp;lt;code&amp;gt;$status/$statusd&amp;lt;/code&amp;gt; values of &amp;lt;code&amp;gt;0/0&amp;lt;/code&amp;gt;, and most other status values that can be returned by the &amp;lt;var&amp;gt;EXTERNAL REMOVE&amp;lt;/var&amp;gt; statement are already documented in the ECF return codes table. If an &amp;lt;var&amp;gt;EXTERNAL REMOVE&amp;lt;/var&amp;gt; is attempted against a module that is currently being called (in use), then &amp;lt;code&amp;gt;$status/$statusd&amp;lt;/code&amp;gt; will return the values &amp;lt;code&amp;gt;20/1&amp;lt;/code&amp;gt; (module unavailable).&lt;br /&gt;
&lt;br /&gt;
==System enhancements==&lt;br /&gt;
&lt;br /&gt;
===New wait types for daemon/master waits===&lt;br /&gt;
&lt;br /&gt;
Two new wait types, viewable on the &amp;lt;var&amp;gt;[[MONITOR_command|MONITOR]] USERS&amp;lt;/var&amp;gt; command output, have been implemented as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;57&amp;lt;/code&amp;gt; - Means a daemon thread waiting for its master thread  &amp;lt;br /&amp;gt;     &lt;br /&gt;
&amp;lt;code&amp;gt;58&amp;lt;/code&amp;gt; - Means a master thread waiting for one of its daemon threads&lt;br /&gt;
&lt;br /&gt;
This change is enabled in V7.7 with the application of zap 77z410.&lt;br /&gt;
&lt;br /&gt;
===Snap formatting changes===&lt;br /&gt;
Date/time stamps in the page headers of snaps will now be shown in normal format, rather than in julian format as in previous versions. So in the following example, a particular snap header under v7.7 or previous versions would show as: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;SNAPID    1   19226.060155  M204.0022: Bug .. nnnnn               PAGE     1 &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
whereas the same snap header under v7.8 would show as: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;SNAPID    1  2019/08/14 06:01:06   M204.0022: Bug .. nnnnn        PAGE     1 &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Also, due to improvements in handling trailing blanks in snap output, a snap generated under v7.8 should be marginally smaller than the same snap generated under previous versions, assuming the same SNAPCTL settings.&lt;br /&gt;
&lt;br /&gt;
===Call stack trace for problem diagnosis===&lt;br /&gt;
A  call stack trace is now provided to help diagnose and resolve common errors. To enable the stack trace, do either of the following: &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Set the &amp;lt;var&amp;gt;[[SIRFACT parameter|SIRFACT]] X&#039;01&#039;&amp;lt;/var&amp;gt; bit.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Set the &amp;lt;var&amp;gt;[[DEBUGUL parameter|DEBUGL]]&amp;lt;/var&amp;gt; parameter. Note that the &amp;lt;var&amp;gt;DEBUGUL&amp;lt;/var&amp;gt; approach will introduce extra QTBL overhead. &amp;lt;p&amp;gt;(&amp;lt;var&amp;gt;DEBUGUL&amp;lt;/var&amp;gt; provides a similar facility with an include trace of procedures leading to the error, but this might not be potentially as useful as the call trace.)&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt; &lt;br /&gt;
&lt;br /&gt;
The call stack trace can assist in diagnosing run-time errors that might occur, as illustrated by the following &amp;quot;Variable too small for result&amp;quot; and &amp;quot;MBSCAN exceeded&amp;quot; examples.&lt;br /&gt;
&lt;br /&gt;
====Variable too small for result====&lt;br /&gt;
When the stack trace is enabled, a &amp;quot;variable too small&amp;quot; error results in the following message:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;M204.2966: Error at line n, procedure &#039;&#039;procname&#039;&#039; in file &#039;&#039;procfile&#039;&#039;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
which identifies the line within a procedure where the error is occurring, in addition to the usual message:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;M204.0552: Variable too small for result&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Any subsequent M204.2966 messages indicate the point in the code from where the code in error was called. For example, a stack of three subroutine calls leading to a &amp;quot;variable too small&amp;quot; error might result in the following messaging:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;   M204.0552: Variable too small for result                             &lt;br /&gt;
   M204.2966: Error at line 9, procedure MYPROC.LEVEL4 in file MYPROC   &lt;br /&gt;
   M204.2966: Called from line 5, procedure MYPROC.LEVEL3 in file MYPROC&lt;br /&gt;
   M204.2966: Called from line 5, procedure MYPROC.LEVEL2 in file MYPROC&lt;br /&gt;
   M204.2966: Called from line 5, procedure MYPROC.LEVEL1 in file MYPROC &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This information should help in diagnosing the problem. &lt;br /&gt;
&lt;br /&gt;
If the error occurs within a command level program rather than a procedure, then the M204.2966 message is replaced by an M204.2967 message, and a similar error condition to the above with a preceding call stack might be audited as follows:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;   M204.0552: Variable too small for result              &lt;br /&gt;
   M204.2967: Error at line 14 of command level program  &lt;br /&gt;
   M204.2967: Called from line 5 of command level program&lt;br /&gt;
   M204.2967: Called from line 3 of command level program &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If neither &amp;lt;var&amp;gt;SIRFACT X&#039;01&#039;&amp;lt;/var&amp;gt; nor &amp;lt;var&amp;gt;DEBUGUL&amp;lt;/var&amp;gt; is set, then the &amp;quot;variable too small&amp;quot; error produces the following messages:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;   M204.0552: Variable too small for result &lt;br /&gt;
   M204.2968: Error: no debug info &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====MBSCAN exceeded====&lt;br /&gt;
Similarly to the handling of the &amp;quot;variable too small for result&amp;quot; error, the call stack can also be used to diagnose errors where the value of &amp;lt;var&amp;gt;[[MBSCAN parameter|MBSCAN]]&amp;lt;/var&amp;gt; is exceeded as a result of a direct search of Table B records. &lt;br /&gt;
&amp;lt;p&amp;gt;Again, under V7.8, with either the &amp;lt;var&amp;gt;SIRFACT X&#039;01&#039;&amp;lt;/var&amp;gt; bit set or &amp;lt;var&amp;gt;DEBUGUL&amp;lt;/var&amp;gt; set, if a long request occurs as a result of exceeding &amp;lt;var&amp;gt;MBSCAN&amp;lt;/var&amp;gt;, then initially the following message is produced, as before:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;M204.0569: File &#039;&#039;filename&#039;&#039;, Find: Table B records to be searched = &#039;&#039;nnnn&#039;&#039;&amp;lt;/p&amp;gt;&lt;br /&gt;
followed by a DYRWT prompt message. If the user replies &#039;N&#039; to the prompt, or if the request is run in an environment (such as a batch job) where the default response is &#039;N&#039;, the following message is produced after the M204.0569 message:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;Cancelling request: M204.2969: MBSCAN (&#039;&#039;mm&#039;&#039;) exceeded, records to be searched = &#039;&#039;nnnn&#039;&#039;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
where &#039;&#039;mm&#039;&#039; is the current setting of &amp;lt;var&amp;gt;MBSCAN&amp;lt;/var&amp;gt;. The M204.2969 message is followed by M204.2966 messages displaying the call stack trace. Thus, if the following code is run from procedure MYPROC.MBSCAN against the demo database, with an &amp;lt;var&amp;gt;MBSCAN&amp;lt;/var&amp;gt; setting of 10:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;   b                           &lt;br /&gt;
   call sub1                   &lt;br /&gt;
   sub1: subroutine            &lt;br /&gt;
   fd1:                        &lt;br /&gt;
      in clients fd city = ONTARIO&lt;br /&gt;
              end find         &lt;br /&gt;
      fr fd1                      &lt;br /&gt;
         pai                      &lt;br /&gt;
         print                    &lt;br /&gt;
      end for                     &lt;br /&gt;
   end subroutine              &lt;br /&gt;
   end &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
then the following messages are produced, assuming any prompts are responded to with an &#039;N&#039;:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;   M204.0569: File CLIENTS, Find: Table B records to be searched = 3415&lt;br /&gt;
   Cancelling request: M204.2969: MBSCAN (10) exceeded, records to be searched = 3415  &lt;br /&gt;
   M204.2966: Error at line 6, procedure MYPROC.MBSCAN in file MYPROC&lt;br /&gt;
   M204.2966: Called from line 3, procedure MYPROC.MBSCAN in file MYPROC  &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===appendJournalData===&lt;br /&gt;
The &amp;lt;var&amp;gt;[[AppendJournalData_(Stringlist_function)|AppendJournalData]]&amp;lt;/var&amp;gt; function is now more tolerant of an outstanding BUMP request. Previously, if &amp;lt;var&amp;gt;AppendJournalData&amp;lt;/var&amp;gt; was called to inadvertently retrieve a large amount of journal data, typically when called implicitly from within SirScan, then any outstanding BUMP request wouldn&#039;t be honored until all of the data had been retrieved, at which point the BUMP request would be completed, and all data would be lost.&lt;br /&gt;
&lt;br /&gt;
Now, the &amp;lt;var&amp;gt;AppendJournalData&amp;lt;/var&amp;gt; process checks for outstanding BUMP requests before each track I/O is executed, thus avoiding excessive I/Os against the journal and long waits for the BUMP of such a process to complete.&lt;br /&gt;
&lt;br /&gt;
==AUDIT204 enhancements==&lt;br /&gt;
===FORMAT command===&lt;br /&gt;
TIMEHH is a new parameter used with the FORMAT command of the [[Tracking_system_activity_(CCAJRNL,_CCAAUDIT,_CCAJLOG)#AUDIT204_utility|AUDIT204]] utility.  It indicates that timestamps, printed at the beginning of each line of output, should include hundredths of a second. Requires no other arguments.&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;b&amp;gt;NOTE:&amp;lt;/b&amp;gt; This parameter and the 78 version (or later) of AUDIT204 may be used against a 77 (or later) CCAJRNL.&amp;lt;/p&amp;gt;&lt;br /&gt;
For example:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;//CCAIN DD *&lt;br /&gt;
FORMAT YEARFORM 4&lt;br /&gt;
TIMEHH&lt;br /&gt;
TYPE ER MS LI&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Recovery enhancements==&lt;br /&gt;
===Media Recovery in a multi-user environment===&lt;br /&gt;
It is now possible to perform media recovery by issuing the &amp;lt;var&amp;gt;REGENERATE&amp;lt;/var&amp;gt; command to roll forward selected files in a multi-user environment, with the media recovery being carried out by different users with system manager privileges. The new USING option allows for the specification of a ddname for the input journal stream to be used by the &amp;lt;var&amp;gt;REGENERATE&amp;lt;/var&amp;gt; command. Previously media recovery was restricted to single user batch jobs, using the CCAGEN ddname for the input journal. For more details, see the &amp;lt;var&amp;gt;[[#REGENERATE|REGENERATE]]&amp;lt;/var&amp;gt; command below.&lt;br /&gt;
&lt;br /&gt;
==Security enhancements==&lt;br /&gt;
===CA-Top Secret can disallow CCASTAT logins===&lt;br /&gt;
The [[CA-Top_Secret_interface|CA-Top Secret]] interface now recognizes the &amp;lt;code&amp;gt;DEFACID=&amp;lt;/code&amp;gt;, setting and does not allow CCASTAT logins in the online if &amp;lt;code&amp;gt;DEFACID&amp;lt;/code&amp;gt; is set to null. (There is no attempt to log on M204USR.) Therefore, to disallow CCASTAT logons, set DEFACID=, in [[CA-Top_Secret_interface#Preparing_a_TOPSPARM_parameter_module_with_TOPSGEN|TOPSPARM]]. CCASTAT will be opened because it contains file and group passwords, but it will not be used for logons if CCASTAT logons are not allowed.&lt;br /&gt;
&lt;br /&gt;
===CUSTOM=11 and mixed cased input===&lt;br /&gt;
The &amp;lt;var&amp;gt;[[CUSTOM_parameter|CUSTOM]]&amp;lt;/var&amp;gt; parameter CUSTOM=11 setting no longer requires that a *LOWER command be issued prior to a LOGCTL command (to add or change a  password) to preserve mixed case input. Prior to this release, with CUSTOM=11 in place, *LOWER had to be issued before a LOGCTL command, otherwise any mixed case password strings would automatically be translated into uppercase. This change is enabled in V7.7 with the application of zap 77z108.&lt;br /&gt;
&lt;br /&gt;
===DEFUSER can specify a jobname not authorized to access M204===&lt;br /&gt;
When specifying DEFUSER=JOBNAME and VALIDAT=LOGON in the RACFGEN parms for an ONLINE, if the specified jobname ( the owning id for the ONLINE job ) isn&#039;t authorized to use Model 204 via RACF, any LOGIN commands specifying no userid will now succeed ( previously such a LOGON would have failed ). This enables users to submit jobs with USE $JOB, whereby the string USER=jobname  will be added to the submitted JCL, and this in turn is useful if the specified jobname has dataset access privileges to datasets required by the submitted jobs, even if the jobname itself isn&#039;t authorized to use M204.&lt;br /&gt;
&lt;br /&gt;
==Janus product enhancements==&lt;br /&gt;
&lt;br /&gt;
===Janus Web Server access rule===&lt;br /&gt;
The automatic &amp;lt;var&amp;gt;[[JANUS WEB ALLOW]]&amp;lt;/var&amp;gt; rule, which allowed any user to access the port without requiring a login, is changed &amp;lt;i&amp;gt;for non-SSL ports&amp;lt;/i&amp;gt; to the following:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;JANUS WEB &amp;lt;i&amp;gt;portname&amp;lt;/i&amp;gt; DISALLOW *&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
This rule requires a system administrator to explicitly define &amp;lt;var&amp;gt;ALLOW&amp;lt;/var&amp;gt; rules to enable users to access non-SSL ports.&lt;br /&gt;
The rule applies unless overridden by user-added rules. &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;blockquote class=&amp;quot;note&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;b&amp;gt;Note:&amp;lt;/b&amp;gt; To revert from this change in the JANUS DEFINE default and make the default &lt;br /&gt;
 non-SSL &amp;lt;var&amp;gt;ALLOW&amp;lt;/var&amp;gt; rule as it was in version 7.5 and earlier (&amp;lt;code&amp;gt;ALLOW *&amp;lt;/code&amp;gt;), turn on the 1 bit of the &amp;lt;var&amp;gt;[[WEBDFLT parameter|WEBDFLT]]&amp;lt;/var&amp;gt; parameter: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;RESET WEBDFLT=1&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Increase in pending accepts for Janus BPX ports===&lt;br /&gt;
The default number of pending accepts for Janus BPX server ports has been increased from 3 to 12, thus reducing the likelihood that a pending accept may fail with the message&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;MSIR.0019 Connection request rejected for port (port), MAXCON exceeded&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The actual number of pending accepts to be supported on the port can be set with the new parameter MAXPEND, set on the &amp;lt;var&amp;gt;[[JANUS_DEFINE|JANUS DEFINE]]&amp;lt;/var&amp;gt; command, where MAXPEND can vary from 3 up to a maximum value of 32. The change to the default value was enabled in V7.7 with the application of zap 77z269.&lt;br /&gt;
&lt;br /&gt;
===TCP listen backlog increased===&lt;br /&gt;
&lt;br /&gt;
The [[Program_Communication_facilities#LISTEN_call|TCP listen]] backlog has been increased from 16 to 1024 under z/OS.&lt;br /&gt;
&lt;br /&gt;
This update tells the TCP stack to queue up to 1024 of such requests up before dropping them, thus reducing, or in most cases eliminating, the likelihood of a connection request drop, other than in exceptional circumstances, such as a denial of service attack. This change was enabled in V7.7 with the application of zap 77z340.&lt;br /&gt;
&lt;br /&gt;
===Defer the freeing of XMLSCREEN input XML===&lt;br /&gt;
&lt;br /&gt;
The freeing of [[XMLSCREEN_and_NOXMLSCREEN_(JANUS_DEFINE_parameters)|XMLSCREEN]] input XML is now deferred until the next Read Screen or session termination. This means that if an application error is detected, the input XML can be retrieved with [[$Web_Input_Content|$Web_Input_Content]] and then logged for problem analysis. &lt;br /&gt;
&lt;br /&gt;
Prior to this release the XML received from the client is freed immediately after being used to set the input data for a Read Screen, rendering it unavailable for problem determination.&lt;br /&gt;
&lt;br /&gt;
This change is enabled in V7.7 with the application of zap 77z368.&lt;br /&gt;
&lt;br /&gt;
===XMLSCREEN and Janus Web Legacy blank stripping===&lt;br /&gt;
&lt;br /&gt;
xmlScreens and Janus Web Legacy screens now adhere to the same standard as standard screen processing in terms of stripping leading blanks from input fields defined as [[Full-screen_feature#DEBLANK_or_NODEBLANK_option|DEBLANK]] (either explicitly or implicitly).&lt;br /&gt;
&lt;br /&gt;
This change is enabled in V7.7 with the application of zap 77z400.&lt;br /&gt;
&lt;br /&gt;
===SSL input buffer size===&lt;br /&gt;
&lt;br /&gt;
The default value of [[SSLIBSIZE_(JANUS_DEFINE_parameter)|SSLIBSIZE]] has been increased to 16384 + 128, or 16512. This size should ensure correct communication with all TLS spec compliant applications. It is the maximum size allowed unless you use [[CUSTOM_parameter#Using_CUSTOM.3D.2818.29|CUSTOM=18]].    &lt;br /&gt;
&lt;br /&gt;
This changed is enabled in V7.7 with the application of zap 77z415.&lt;br /&gt;
&lt;br /&gt;
===Increasing LDAP buffers===&lt;br /&gt;
&lt;br /&gt;
The number of LDAP buffers allocated at startup can now be changed by setting the NLDAPBUF parameter in CCAIN. See below for details on [[#NLDAPBUF|NLDAPBUF]].&lt;br /&gt;
&lt;br /&gt;
===Increase URL length returned with $web_form_action===&lt;br /&gt;
With this release the maximum Janus Web Server incoming URL that can be handled by &amp;lt;var&amp;gt;$web_form_action&amp;lt;/var&amp;gt; is increased from 512 bytes to 1024 bytes. This change is enabled in V7.7 with the application of zap 77z424.&lt;br /&gt;
&lt;br /&gt;
===Maximum RBSIZE setting increased===&lt;br /&gt;
The maximum value for RBSIZE, set on the &amp;lt;var&amp;gt;[[JANUS DEFINE|JANUS DEFINE]]&amp;lt;/var&amp;gt; command, is now increased to 16777215 (previously the maximum was 65534). RBSIZE specifies the RPC or Request Buffer size.  On a Web port, the Janus request buffer holds browser request information such as header data, cookies, and form data. On other port types, it holds RPC input and output parameters. This change is enabled in V7.7 with the application of zap 77z427.&lt;br /&gt;
&lt;br /&gt;
==Debugger enhancements==&lt;br /&gt;
&lt;br /&gt;
===Access to exposed variables===&lt;br /&gt;
The debuggers can now view or watch the values of variables exposed to local routines/methods. Previously, any attempts to access an exposed variable would have displayed &amp;quot;%varname has no value&amp;quot; in the debugger session. (This feature is enabled in V7.7 with the application of zap 77z363.)&lt;br /&gt;
&lt;br /&gt;
==Performance enhancements==&lt;br /&gt;
&lt;br /&gt;
===MP/204 offload improvements===&lt;br /&gt;
Application code issuing the following SOUL statements will now now be fully offloadable:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;File Records In/On&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Remember&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt; &lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Position&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Sort Values&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;                                             &lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Reset Header/Trailer&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Find and Print Count&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Find All Values&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;For Each Value&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
the above improvements are also enabled in V7.7 with the application of zaps 77z419 and 77z420.&lt;br /&gt;
&lt;br /&gt;
===X3270OUT exit offloadable===&lt;br /&gt;
When running MP/204 (AMPSUBS&amp;gt;0) and using the [[Coding_SNA_Communications_Server_conversion_exit_routines#X3270OUT_.28convert_output_from_3270_format.29|X3270OUT]] exit to convert a 3270 output data stream to the appropriate device protocol, the exit can now run in parallel mode to improve performance. This change was enabled in V7.7 with the application of zap 77z313.&lt;br /&gt;
&lt;br /&gt;
The X3270OUT exit must be written to be re-entrant.&lt;br /&gt;
&lt;br /&gt;
==New and changed commands==&lt;br /&gt;
===DISPLAY ECF===&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;DISPLAY ECF {{ M | N | U } like ?} &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This new command displays details from ECF tables, or the current status of users accessing ECF modules.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;syntax&amp;quot;&amp;gt;D ECF M&amp;lt;/span&amp;gt; displays the contents of the module table. For example:&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;    D ECF M &lt;br /&gt;
    Module   Loadlib  Address:Length     Loaded@      Lastused@   #Calls  Flags &lt;br /&gt;
    QATUM13C PROGLIB 2FB91FB8:00000028 19023:121506 19023:121506 00000001 &lt;br /&gt;
    QATUM13B PROGLIB 2FE65000:00009C18 19023:121506 19023:121506 00000001 &lt;br /&gt;
    QATUM13A PROGLIB 2FE6EC18:00001CD8 19023:121506 19023:121506 00000001  &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
(flags may be D=deleted; S=shared; H=halted; I=Idle)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;syntax&amp;quot;&amp;gt;D ECF N&amp;lt;/span&amp;gt; displays contents of the name table. For example: &amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;    D ECF N&lt;br /&gt;
    Module   Logical-call-name &lt;br /&gt;
    QATUM13C MOD_QATUM13C &lt;br /&gt;
    QATUM13B MOD_QATUM13B &lt;br /&gt;
    QATUM13A MOD_QATUM13A &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;syntax&amp;quot;&amp;gt;D ECF U&amp;lt;/span&amp;gt; displays details of users currently accessing ECF modules. This is also the default option, and so &amp;lt;span class=&amp;quot;syntax&amp;quot;&amp;gt;D ECF&amp;lt;/span&amp;gt; will display the same output as &amp;lt;span class=&amp;quot;syntax&amp;quot;&amp;gt;D ECF U&amp;lt;/span&amp;gt;. For example:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;    D ECF U                           &lt;br /&gt;
    User# Userid     Module   Parmlen &lt;br /&gt;
    00002 ADMIN      --none--         &lt;br /&gt;
    00003 ADMIN      COBSAMP1 00000002&lt;br /&gt;
    00004 ADMIN      COBSAMP1 00000002 &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;syntax&amp;quot;&amp;gt;D ECF &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;function&amp;lt;/var&amp;gt; LIKE &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;?&amp;lt;/var&amp;gt; &amp;lt;/span&amp;gt; (where &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;?&amp;lt;/var&amp;gt; is a valid pattern) displays details for entities that match the specified pattern. The function is either M (modules), N (names), or U (users), and it defaults to U. So for example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;D ECF U L A&amp;lt;/p&amp;gt;&lt;br /&gt;
or&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;D ECF U L A*&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
displays details of ECF users whose names begin with A.&lt;br /&gt;
&lt;br /&gt;
===REGENERATE===&lt;br /&gt;
The &amp;lt;var&amp;gt;REGENERATE&amp;lt;/var&amp;gt; command can now be run in a multi-user environment by multiple users with system manager privileges. A new option USING is provided to specify the ddname of the input journal, so that the full syntax is now as follows:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;  REGENERATE [USING ddname] FILE filename [FROM dumpname | IGNORE]&lt;br /&gt;
  [TO {LAST UPDATE [BEFORE yy.ddd hh:mm:ss.th] | LAST CHECKPOINT [BEFORE yy.dd hh:mm:ss.th] &lt;br /&gt;
  | UPDATE number OF yy.ddd hh:mm:ss.th | CHECKPOINT yy.ddd hh:mm:ss.th} ]&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The default for the using ddname is CCAGEN, but any ddname may be used to allocate an input journal and used. For example:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;  ALLOCATE REGEN1 WITH SCOPE=SYSTEM DSN=PROD1.GDGJ OLD SEQUENTIAL GEN=+2&lt;br /&gt;
  REGENERATE USING REGEN1 FILE TEST&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It is the user&#039;s responsibility to ensure that the file being regenerated is not in use, and so prior to usage, &amp;lt;var&amp;gt;BUMP FILE&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;STOP FILE&amp;lt;/var&amp;gt; should be used to isolate usage against the file. If the file is in use, the REGEN will fail with these messages:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;  M204.1430: Failed to open file TEST&lt;br /&gt;
  M204.1436: Stopped processing file TEST  &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
$STATUS will now be set for &amp;lt;var&amp;gt;REGENERATE&amp;lt;/var&amp;gt; with the following values:&lt;br /&gt;
&amp;lt;blockquote&amp;gt;    &lt;br /&gt;
    0 - Success &amp;lt;br/&amp;gt;&lt;br /&gt;
    1 - No files were processed &amp;lt;br/&amp;gt;&lt;br /&gt;
    2 - At least one file stopped processing &amp;lt;br/&amp;gt;&lt;br /&gt;
    4 - A serious error occurred, REGEN failed &lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Similarly, &amp;lt;var&amp;gt;SETGRC&amp;lt;/var&amp;gt; may be used to get the return code and error message.&lt;br /&gt;
&lt;br /&gt;
==New and changed parameters==&lt;br /&gt;
&lt;br /&gt;
===ECMODS===&lt;br /&gt;
The new minimum value for ECMODS, the allowable number of ECF modules, is 1. Prior to V7.8 the minimum value was 0. This changed was enabled in V7.7 with the application of zap 77z306.&lt;br /&gt;
&lt;br /&gt;
===ECNAMES===&lt;br /&gt;
The new minimum value for ECNAMES, the allowable number of ECF module names, is 1. Prior to V7.8 the minimum value was 0. This changed was enabled in V7.7 with the application of zap 77z306.&lt;br /&gt;
&lt;br /&gt;
===ECPSIZE===&lt;br /&gt;
The new minimum value for ECPSIZE, the initial storage allocation for ECF parameters, is 1024. Prior to V7.8 the minimum value was 0. This changed was enabled in V7.7 with the application of zap 77z306.&lt;br /&gt;
&lt;br /&gt;
===ENQTIME===&lt;br /&gt;
Millisecond duration of automatic record locking retry wait.&lt;br /&gt;
&lt;br /&gt;
Prior to this change, if record locking conflicts occur frequently in a busy online, any user with a non-zero value for &amp;lt;var&amp;gt;[[ENQRETRY parameter|ENQRETRY]]&amp;lt;/var&amp;gt; will wait at least 3 seconds before the conflict is dealt with. This can degrade overall system performance.      &lt;br /&gt;
                                                         &lt;br /&gt;
The &amp;lt;var&amp;gt;[[ENQTIME parameter|ENQTIME]]&amp;lt;/var&amp;gt; parameter specifies the number of milliseconds waited for each record locking retry wait. ENQTIME can be between 1 and 60000, corresponding to a minimum of 1 millisecond and a maximum of 1 minute. The default value of ENQTIME is 3000 (3 seconds).            &lt;br /&gt;
                                                         &lt;br /&gt;
For example, with ENQTIME = 100 and ENQRETRY = 7, after a record locking conflict occurs the thread will retry 7 times with wait intervals of .1 seconds, and so within at most .7 seconds either the lock becomes available or the conflict triggers an On unit or cancels the request.     &lt;br /&gt;
                                                         &lt;br /&gt;
The ENQTIME parameter may also be reset with $ResetN. &lt;br /&gt;
&lt;br /&gt;
This new parameter was enabled in V7.7 with the application of zap 77z299.&lt;br /&gt;
&lt;br /&gt;
===EVALOPT===&lt;br /&gt;
The new &amp;lt;var&amp;gt;EVALOPT&amp;lt;/var&amp;gt; parameter controls the cancellation of a request on truncation of string data. The default value is 0, and currently there is just one setting, 1, which means &amp;quot;cancel a request if truncation of string data occurs.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
For example, with the default of 0 in place, the following code &amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;    %x is string len 1   &lt;br /&gt;
    %y is string len 2   &lt;br /&gt;
    %y = &#039;ab&#039;            &lt;br /&gt;
    %x = %y              &lt;br /&gt;
    printtext {~} = {%x} &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
would cause silent truncation, and give the result&lt;br /&gt;
    &amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;%x = a &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If &amp;lt;var&amp;gt;EVALOPT&amp;lt;/var&amp;gt; is set to 1, then the above code produces the following message:&lt;br /&gt;
    &amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;M204.0552: Variable too small for result &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and the request is cancelled.&lt;br /&gt;
&lt;br /&gt;
===LFSCB===&lt;br /&gt;
LFSCB, the length of the full screen buffer, now has a new minimum value of 8 ( the previous minimum was 0 ). This change has been enabled in v7.7 with the application of zap 77z042, and within V7.6 with the application of zap 76z393.&lt;br /&gt;
&lt;br /&gt;
===MAXPRE, MAXBOUT, MAXSUBT===&lt;br /&gt;
&amp;lt;p&amp;gt;Introduced in zap 77z257.&amp;lt;/p&amp;gt;&lt;br /&gt;
The new &amp;lt;var&amp;gt;MAXPRE&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;MAXBOUT&amp;lt;/var&amp;gt;, and &amp;lt;var&amp;gt;MAXSUBT&amp;lt;/var&amp;gt; parameters can be used to cancel a runaway transaction and prevent it from filling the checkpoint data set. &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;MAXPRE&amp;lt;/var&amp;gt;:  Maximum number of pre-images per transaction.  &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;MAXBOUT&amp;lt;/var&amp;gt;: Maximum number of backout pages per transaction. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;MAXSUBT&amp;lt;/var&amp;gt;: Maximum number of subtransaction checkpoints that a transaction can span.&amp;lt;/li&amp;gt;&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;Each new parameter defaults to unlimited. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;If a parameter value is set, a transaction is cancelled if that value is exceeded, and the following message is displayed:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;code&amp;gt;M204.0524: Maximum number (&amp;lt;i&amp;gt;num&amp;lt;/i&amp;gt;) of &amp;lt;i&amp;gt;parameter&amp;lt;/i&amp;gt; exceeded.&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
where &amp;lt;i&amp;gt;num&amp;lt;/i&amp;gt; is the value set for &amp;lt;i&amp;gt;parameter&amp;lt;/i&amp;gt; (&amp;lt;var&amp;gt;MAXPRE&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;MAXBOUT&amp;lt;/var&amp;gt;, or &amp;lt;var&amp;gt;MAXSUBT&amp;lt;/var&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
===NLDAPBUF===&lt;br /&gt;
This new parameter allows the number of LDAP buffers allocated during startup to be set in CCAIN. The default value is 2, and the settable value can range from 0 to 65535.&lt;br /&gt;
&lt;br /&gt;
===PUPDTH (new minimum value)===&lt;br /&gt;
If a user sets the &amp;lt;var&amp;gt;[[PUPDTH parameter|PUPDTH]]&amp;lt;/var&amp;gt; parameter to 0, it will now automatically be increased to 1, its minimum value.&lt;br /&gt;
&lt;br /&gt;
===SERV4G===&lt;br /&gt;
This parameter allows testing of server tables that span a 4-gigabyte boundary. For example, if SERV4G is X&#039;FFFFF000&#039;, each ATB server will begin at XX_FFFFF000. If SERV4G is X&#039;FFFF0000&#039;, each ATB server will begin at XX_FFFF0000. XX is determined by the storage available on the system. The parameter is set in CCAIN.&lt;br /&gt;
&lt;br /&gt;
The contents of the ATB server are specified by using the SERVGA parameter.&lt;br /&gt;
&lt;br /&gt;
For example. if you want VTBL to span the 4G boundary, you can use these settings: SERV4G=X&#039;FFFFF000&#039;, SERVGA=X&#039;00040000&#039;, and LVTBL=200 (6400 bytes, X&#039;1900&#039;). This will force each server&#039;s VTBL to begin at XX_FFFFF000 and end at XX+1_00000900.&lt;br /&gt;
&lt;br /&gt;
===WEBDFLT===&lt;br /&gt;
At V7.7, the default access rule for non-SSL ports was changed from ALLOW * to DISALLOW *, meaning that unless any ALLOW rules were in place resulting in a login/password prompt, the port couldn&#039;t be accessed. The new &amp;lt;var&amp;gt;[[WEBDFLT_parameter|WEBDFLT]]&amp;lt;/var&amp;gt; parameter may be set to 1 for reversion to the old default of ALLOW *. Under V7.7, this new parameter was enabled with the application of zap 77z090. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;var&amp;gt;RESET WEBDFLT&amp;lt;/var&amp;gt; requires system administrator privileges. It is recommended to reset the 1 bit of &amp;lt;var&amp;gt;WEBDFLT&amp;lt;/var&amp;gt; to zero after issuing a series of &amp;lt;var&amp;gt;JANUS DEFINE&amp;lt;/var&amp;gt; commands which need WEBDFLT=1, as in the CCAIN input stream.&lt;br /&gt;
&lt;br /&gt;
==New and changed statistics==&lt;br /&gt;
===MPR, MBO, MCP, and RCV===&lt;br /&gt;
Introduced in zap 77z257.&lt;br /&gt;
&amp;lt;p&amp;gt;These statistics provide high water mark transaction information. (Since-last values will not be available until V78 GA.)&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;They are useful in conjunction with the &amp;lt;var&amp;gt;MAXPRE&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;MAXBOUT&amp;lt;/var&amp;gt;, and &amp;lt;var&amp;gt;MAXSUBT&amp;lt;/var&amp;gt; parameters. &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
User/system statistics:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;MPR: High water mark of transaction pre-images. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;MBO: High water mark of transaction backout pages. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;MCP: High water mark of transaction chkpoint spans. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
System statistics: &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;RCV: Number of blocks needed for subtransaction recovery &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt; &lt;br /&gt;
&amp;lt;p class=&amp;quot;note&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Notes:&amp;lt;/b&amp;gt; M204.0843 now displays the RCV statistic for subtransaction checkpoints.&lt;br /&gt;
The size of recovery checkpoint must be greater than the sum of the last RCV value plus the number of records in [[System_and_media_recovery#RESTART_recovery_considerations_for_sub-transaction_checkpoints|RESTART and RESTARTS]].&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
===DKWTS and DKWTMICS===&lt;br /&gt;
Introduced in zap 77z7289.&lt;br /&gt;
&amp;lt;p&amp;gt;The new system statistics DKWTS (DisK WaiTs) and DKWTMICS (DisK WaiT MICroSeconds) collect data to provide rough disk I/O service time numbers.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
DKWTS shows the number of disk I/O waits. DKWTMICS shows the total wait time for those waits in microseconds. Dividing the difference in DKWTMICS by the difference in DKWTS over an interval provides the average disk I/O wait time in microseconds.              &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;note&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Notes:&amp;lt;/b&amp;gt; &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The wait time does include internal Model 204 scheduler delays, so on a CPU bound Model 204 system, the service times calculated from DKWTS and DKWTMICS are likely to be an overestimate of actual service times.&amp;lt;/li&amp;gt;  &lt;br /&gt;
                                                                    &lt;br /&gt;
&amp;lt;li&amp;gt;DKWTS and DKWTMICS are not available in SirMon; use [[MONITOR_command|MONITOR]] SYSTEM STATISTICS to view these statistics.&amp;lt;/li&amp;gt;&amp;lt;/ul&amp;gt;  &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Compatibility issues==&lt;br /&gt;
===&amp;lt;b id=&amp;quot;listNewInit&amp;quot;&amp;gt;&amp;lt;/b&amp;gt;$ListNew cannot be used in Initial clause===&lt;br /&gt;
It is now a compilation error if &amp;lt;var&amp;gt;$ListNew&amp;lt;/var&amp;gt; is attempted to be used in the &amp;lt;var&amp;gt;Initial&amp;lt;/var&amp;gt; clause of a &lt;br /&gt;
[[Using_variables_and_values_in_computation#Declare_statements_for_.25variables|declaration statement]].&lt;br /&gt;
&amp;lt;p&amp;gt;This change is propagated by zap maintenance to versions 7.5 (zap 75Z487), 7.6 (zap 76Z514), and 7.7 (zap 77z281) of Model 204.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote class=&amp;quot;note&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Note:&amp;lt;/b&amp;gt; Strictly speaking, this would not be considered a compilation error, because previously although &amp;lt;code&amp;gt;..&amp;amp;nbsp;Initial($ListNew)&amp;lt;/code&amp;gt; did not produce a compilation error, in almost all circumstances it would produce a snap if the initialized %variable were used with some other &amp;lt;var&amp;gt;$List&amp;lt;i&amp;gt;xxx&amp;lt;/i&amp;gt;&amp;lt;/var&amp;gt; invocation.&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Restricting the use of the CUSTOM=38 setting===&lt;br /&gt;
The [[CUSTOM parameter|CUSTOM=38]] parameter setting, introduced at V7.5, inadvertently provided System Manager privileges to all users via the RESET command. This CUSTOM setting is now restricted to the RESETting of the LAUDIT parameter.&lt;br /&gt;
&lt;br /&gt;
===Disabling of Closure support===&lt;br /&gt;
Due to a number of bugs related to Closure support, introduced at V7.7, this feature, which can best be described as exposed methods assigned to method variables, has been disabled in this release. This change was also made to V7.7 with application of zap 77z119.&lt;br /&gt;
&lt;br /&gt;
===Password delimiter enforced===&lt;br /&gt;
When using &amp;lt;var&amp;gt;IFSTRTN&amp;lt;/var&amp;gt; to log on to a Model 204 online from an IFAM2 application, both the logonid and password must be followed by a semicolon, which is the delimiter. For example:      &lt;br /&gt;
                                      &lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;CALL IFSTRTN(RC,&#039;logonid;password;&#039;...)&amp;lt;/p&amp;gt;&lt;br /&gt;
                 &lt;br /&gt;
If a semicolon does not follow the password string, the following message will now be issued:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;M204.2964: Password missing or too long &amp;lt;/p&amp;gt;                 &lt;br /&gt;
                                                         &lt;br /&gt;
Previously, a semicolon following the password was not required and the first blank served as a password delimiter.  However, as of V7.7, embedded blanks are valid password characters and a semicolon is now required to delimit the password.&lt;br /&gt;
&lt;br /&gt;
This change has also been enabled in V7.7 with the application of zap 77z231.&lt;br /&gt;
&lt;br /&gt;
===PAGESZ parameter validated===&lt;br /&gt;
Previously it was possible to set the PAGESZ parameter to any value, although Model 204 internally supports one page size of 6184, and any deviation from this value would have led to problems during file creation. The value of this parameter is now controlled, such that setting it to any value other than 6184 will generate an M204.1149 message with the parameter being reset to 6184.&lt;br /&gt;
&lt;br /&gt;
===ECPRIV and the IDCAMS facility===&lt;br /&gt;
At V7.7 a security loophole was closed, whereby all ECF modules were run under external-authorizer profile of the calling user. Previously any ECF tasks were run under the owning job&#039;s external-authorizer profile, and in order for certain sites to retain that ability, a new setting of ECPRIV, value 4, was introduced to retain the ability to run ECF tasks using the job&#039;s security profile. &lt;br /&gt;
&lt;br /&gt;
The ECPRIV 4 setting potentially introduced a security loophole when calling the IDCAMS interface, based upon what the IDCAMS utility is able to do at a system level. Consequently as of this release, the ECPRIV 4 setting will be ignored when calling the IDCAMS facility via ECF, and such IDCAMS processes will always use the calling user&#039;s security profile. Any existing jobs that use ECF to call the IDCAMS utility with the ECFPRIV 4 bit set should be checked to ensure that the calling user&#039;s security profile still satisfies the job&#039;s requirements.&lt;br /&gt;
&lt;br /&gt;
===TCPOPTS is view only===&lt;br /&gt;
In previous versions the TCPOPTS parameter, which identifies the type of IP addressing in use ( v4 or v6 ), was resetable, although it was always documented as a view-only parameter. The parameter is now handled as a view-only parameter, and any attempts to reset the parameter will result in&lt;br /&gt;
&lt;br /&gt;
   M204.1123: Parameter TCPOPTS not reset&lt;br /&gt;
&lt;br /&gt;
===ZHPF command can only be issued by a system manager===&lt;br /&gt;
In previous versions it was possible to issue the ZHPF command without being logged on. From this release onwards, a user would have to be logged on with system manager privileges to be able to issue this command.&lt;br /&gt;
&lt;br /&gt;
Additionally, the command output will now only  display results for currently open files.&lt;br /&gt;
&lt;br /&gt;
This changes has been enabled in v7.7 with the application of zap 77z264.&lt;br /&gt;
&lt;br /&gt;
===Terminal MODEL reset failure===&lt;br /&gt;
If a reset of the terminal MODEL parameter fails due to an under sized output page buffer, then in addition to the existing messages that inform the user of this failure&lt;br /&gt;
&lt;br /&gt;
    M204.1875 UNABLE TO RESET MODEL TO %C &lt;br /&gt;
    M204.1123: Parameter MODEL not reset  &lt;br /&gt;
&lt;br /&gt;
the following message will now be issued&lt;br /&gt;
&lt;br /&gt;
    M204.1008: LOUTPB must be increased to at least &amp;lt;number&amp;gt; &lt;br /&gt;
                                                         &lt;br /&gt;
where &amp;lt;number&amp;gt; is the minimum value of LOUTPB necessary to support the terminal model.&lt;br /&gt;
&lt;br /&gt;
This change is enabled in V7.7 with the application of zap 77z309.&lt;br /&gt;
&lt;br /&gt;
==Notes for system manager and installer==&lt;br /&gt;
===CRAM SVC installation is deprecated===&lt;br /&gt;
The CRAM SVC installation has been deprecated as of version 7.5. &amp;lt;br /&amp;gt;Installation of CRAM-XDM is described as part of the [[Model 204 installation]].&lt;br /&gt;
===Authorization and maintenance zaps===&lt;br /&gt;
When you download Rocket M204 product object files, all relevant authorization keys and all current maintenance zaps are pre-applied to the object files as part of the download process.&lt;br /&gt;
&lt;br /&gt;
==New and changed messages==&lt;br /&gt;
&lt;br /&gt;
See [[New and updated messages in Model 204 version 7.8|New and updated messages in Model 204 version 7.8]] for details.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category: Release notes]]&lt;/div&gt;</summary>
		<author><name>ELowell</name></author>
	</entry>
	<entry>
		<id>https://m204wiki.rocketsoftware.com/index.php?title=Release_notes_for_Model_204_version_7.8&amp;diff=117720</id>
		<title>Release notes for Model 204 version 7.8</title>
		<link rel="alternate" type="text/html" href="https://m204wiki.rocketsoftware.com/index.php?title=Release_notes_for_Model_204_version_7.8&amp;diff=117720"/>
		<updated>2019-12-06T23:14:11Z</updated>

		<summary type="html">&lt;p&gt;ELowell: /* New and changed messages */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
These release notes list the enhancements and other changes contained in Model 204 version 7.8. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;&amp;lt;b&amp;gt;******THIS IS A DRAFT DOCUMENT.******&amp;lt;/b&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
These release notes list the enhancements and other changes contained in Model 204 version 7.8, &amp;lt;b&amp;gt;&amp;lt;i&amp;gt;which is still in development&amp;lt;/i&amp;gt;&amp;lt;/b&amp;gt;. Until the commercial release of the software, Rocket reserves the right to add to, remove, or change anything described herein. &lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
These release notes contain installation and features information for the Rocket Model 204 version 7.8 release.&lt;br /&gt;
Before beginning your installation, please read through this information about product installation and changes.&lt;br /&gt;
&lt;br /&gt;
==SOUL enhancements==&lt;br /&gt;
===AmIndependent method===&lt;br /&gt;
The &amp;lt;var&amp;gt;AmIndependent&amp;lt;/var&amp;gt; method returns TRUE for daemons spawned by &amp;lt;var&amp;gt;[[RunIndependently_(Daemon_subroutine)|RunIndependently]]&amp;lt;/var&amp;gt;. (The action of &amp;lt;var&amp;gt;[[AmDaemon_(Daemon_property)|AmDaemon]]&amp;lt;/var&amp;gt; remains unchanged.)&lt;br /&gt;
&lt;br /&gt;
The following table shows the values returned by &amp;lt;var&amp;gt;AmIndependent&amp;lt;/var&amp;gt; versus &amp;lt;var&amp;gt;AmDaemon&amp;lt;/var&amp;gt; for different daemon types:&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Type&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;AmDaemon&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;AmIndependent&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;$COMBG&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;False&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;False&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Independent daemon&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;False&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;True&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Other daemon&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;True&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;False&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Web, etc.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;False&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;False&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===$ProcOpn===&lt;br /&gt;
&amp;lt;var&amp;gt;[[$ProcOpn|$ProcOpn]]&amp;lt;/var&amp;gt; now supports the opening of a procedure with an all-numeric name, and including a leading zero, such as:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;%result = $procOpn(&#039;0123&#039;, &#039;MYFILE&#039;)&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Support for such procedure names was initially introduced at V7.7, and this feature of &amp;lt;var&amp;gt;$ProcOpn&amp;lt;/var&amp;gt; is also enabled in V7.7 with the application of zap 77z054.&lt;br /&gt;
&lt;br /&gt;
===Allow parentheses to surround a boolean enumeration object===&lt;br /&gt;
The following sample code:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;   begin                                       &lt;br /&gt;
   variables are undefined                  &lt;br /&gt;
   %isValid is boolean initial (True)       &lt;br /&gt;
   if (%isValid) then                  &lt;br /&gt;
      print &#039;in IF&#039;                            &lt;br /&gt;
   end if                                   &lt;br /&gt;
   end   &amp;lt;/p&amp;gt;      &lt;br /&gt;
&lt;br /&gt;
will now compile and run successfully, since this syntax: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;if (%isValid) then &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
is logically equivalent to this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;if %isValid then &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Prior to V7.8 the presence of parentheses surrounding the boolean enumeration object would have caused a compilation error. This change is enabled in V7.7 with the application of zap 77z370.&lt;br /&gt;
&lt;br /&gt;
===Support for copying Object class objects===&lt;br /&gt;
The Object class now supports the copy and deepCopy methods. For example, an Object object can be copied as follows:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;   begin               &lt;br /&gt;
   %x is object object &lt;br /&gt;
   %y is object object &lt;br /&gt;
   %y = new            &lt;br /&gt;
   %x = %y:copy        &lt;br /&gt;
   end &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This change is enabled in v7.7 with the application of zap 77z076, and within V7.6 with the application of zap 76z412.&lt;br /&gt;
&lt;br /&gt;
===Assignment of enumeration values to method variables===&lt;br /&gt;
Enumerations values can now be assigned to method variables whose result is an enumeration. So, for example, the following code:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;   begin                                               &lt;br /&gt;
   enumeration colour                                  &lt;br /&gt;
      public                                           &lt;br /&gt;
         value red                                     &lt;br /&gt;
         value white                                   &lt;br /&gt;
         value blue                                    &lt;br /&gt;
      end public                                       &lt;br /&gt;
   end enumeration                                     &lt;br /&gt;
   %func    is function getColour is enumeration colour&lt;br /&gt;
   local function getColour is enumeration colour      &lt;br /&gt;
      return blue                                      &lt;br /&gt;
   end function                                        &lt;br /&gt;
   %func    = getColour                                &lt;br /&gt;
   %func    = (colour):red                             &lt;br /&gt;
   printText {~=%(Local):(%func)}                      &lt;br /&gt;
   end  &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
will produce this result:&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt; %(Local):(%func)=red &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
whereas previously this line:   &lt;br /&gt;
&lt;br /&gt;
  &amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt; %func    = (colour):red &amp;lt;/p&amp;gt;   &lt;br /&gt;
&lt;br /&gt;
would have been rejected with this message:&lt;br /&gt;
&lt;br /&gt;
   &amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;MSIR.0993: Assignment invalid: mismatch between method and method variable &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This change is enabled in V7.7 with the application of zap 77z128.&lt;br /&gt;
&lt;br /&gt;
===Optional output method parameters===&lt;br /&gt;
Prior to this release output parameters could not be optional or have default values. In this release output parameters can be specified as &amp;lt;var&amp;gt;Optional&amp;lt;/var&amp;gt;, and a default value can be specified with &amp;lt;var&amp;gt;Default&amp;lt;/var&amp;gt;. One related change is that if a &amp;lt;var&amp;gt;Len&amp;lt;/var&amp;gt; value is specified with &amp;lt;var&amp;gt;Optional&amp;lt;/var&amp;gt; or &amp;lt;var&amp;gt;Default&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;Output&amp;lt;/var&amp;gt;, it indicates the length of the hidden target for the output parameter if none was passed. For all other &amp;lt;var&amp;gt;Output&amp;lt;/var&amp;gt; parameters, &amp;lt;var&amp;gt;Len&amp;lt;/var&amp;gt; is meaningless, just as it was before Model 204 V7.8. The following is an example of the use of an optional output parameter:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;function getRemote( -&lt;br /&gt;
   %target is string len 32, %errorReason is string len 80 optional output -&lt;br /&gt;
) is float&lt;br /&gt;
  ...&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
In this example, if &amp;lt;code&amp;gt;%errorReason&amp;lt;/code&amp;gt; is not specified in a call and then set to a value longer than 80 bytes it wil be truncated to 80 bytes. However, if a string of a different length is passed, the length of that string determines truncation behavior.&lt;br /&gt;
&lt;br /&gt;
==External Call Facility enhancements==&lt;br /&gt;
===Managing ECF tables more efficiently===&lt;br /&gt;
The are two new features to help manage ECF tables more efficiently, avoid conditions where the table can fill, and prevent the definition of further entities.&lt;br /&gt;
&lt;br /&gt;
The first feature is the new &amp;lt;var&amp;gt;DISPLAY ECF&amp;lt;/var&amp;gt; command, which displays the contents of ECF tables and also the current status of users accessing ECF modules. See more details of the &amp;lt;var&amp;gt;[[#DISPLAY ECF|DISPLAY ECF]]&amp;lt;/var&amp;gt; command below.&lt;br /&gt;
&lt;br /&gt;
The second feature is a new &amp;lt;var&amp;gt;EXTERNAL REMOVE&amp;lt;/var&amp;gt; statement with the following syntax:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;EXTERNAL REMOVE &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;modulename&amp;lt;/span&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This statement causes the entry for the named module to be removed from the module table. The table entry is then placed on a free chain of entries and can be reused by issuing the &amp;lt;var&amp;gt;EXTERNAL MODULE&amp;lt;/var&amp;gt; statement. This allows the module table to be managed with redundant entries removed, without having to recycle the ONLINE.&lt;br /&gt;
&lt;br /&gt;
An &amp;lt;var&amp;gt;EXTERNAL REMOVE&amp;lt;/var&amp;gt; statement will return &amp;lt;code&amp;gt;$status/$statusd&amp;lt;/code&amp;gt; values of &amp;lt;code&amp;gt;0/0&amp;lt;/code&amp;gt;, and most other status values that can be returned by the &amp;lt;var&amp;gt;EXTERNAL REMOVE&amp;lt;/var&amp;gt; statement are already documented in the ECF return codes table. If an &amp;lt;var&amp;gt;EXTERNAL REMOVE&amp;lt;/var&amp;gt; is attempted against a module that is currently being called (in use), then &amp;lt;code&amp;gt;$status/$statusd&amp;lt;/code&amp;gt; will return the values &amp;lt;code&amp;gt;20/1&amp;lt;/code&amp;gt; (module unavailable).&lt;br /&gt;
&lt;br /&gt;
==System enhancements==&lt;br /&gt;
&lt;br /&gt;
===New wait types for daemon/master waits===&lt;br /&gt;
&lt;br /&gt;
Two new wait types, viewable on the &amp;lt;var&amp;gt;[[MONITOR_command|MONITOR]] USERS&amp;lt;/var&amp;gt; command output, have been implemented as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;57&amp;lt;/code&amp;gt; - Means a daemon thread waiting for its master thread  &amp;lt;br /&amp;gt;     &lt;br /&gt;
&amp;lt;code&amp;gt;58&amp;lt;/code&amp;gt; - Means a master thread waiting for one of its daemon threads&lt;br /&gt;
&lt;br /&gt;
This change is enabled in V7.7 with the application of zap 77z410.&lt;br /&gt;
&lt;br /&gt;
===Snap formatting changes===&lt;br /&gt;
Date/time stamps in the page headers of snaps will now be shown in normal format, rather than in julian format as in previous versions. So in the following example, a particular snap header under v7.7 or previous versions would show as: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;SNAPID    1   19226.060155  M204.0022: Bug .. nnnnn               PAGE     1 &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
whereas the same snap header under v7.8 would show as: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;SNAPID    1  2019/08/14 06:01:06   M204.0022: Bug .. nnnnn        PAGE     1 &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Also, due to improvements in handling trailing blanks in snap output, a snap generated under v7.8 should be marginally smaller than the same snap generated under previous versions, assuming the same SNAPCTL settings.&lt;br /&gt;
&lt;br /&gt;
===Call stack trace for problem diagnosis===&lt;br /&gt;
A  call stack trace is now provided to help diagnose and resolve common errors. To enable the stack trace, do either of the following: &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Set the &amp;lt;var&amp;gt;[[SIRFACT parameter|SIRFACT]] X&#039;01&#039;&amp;lt;/var&amp;gt; bit.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Set the &amp;lt;var&amp;gt;[[DEBUGUL parameter|DEBUGL]]&amp;lt;/var&amp;gt; parameter. Note that the &amp;lt;var&amp;gt;DEBUGUL&amp;lt;/var&amp;gt; approach will introduce extra QTBL overhead. &amp;lt;p&amp;gt;(&amp;lt;var&amp;gt;DEBUGUL&amp;lt;/var&amp;gt; provides a similar facility with an include trace of procedures leading to the error, but this might not be potentially as useful as the call trace.)&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt; &lt;br /&gt;
&lt;br /&gt;
The call stack trace can assist in diagnosing run-time errors that might occur, as illustrated by the following &amp;quot;Variable too small for result&amp;quot; and &amp;quot;MBSCAN exceeded&amp;quot; examples.&lt;br /&gt;
&lt;br /&gt;
====Variable too small for result====&lt;br /&gt;
When the stack trace is enabled, a &amp;quot;variable too small&amp;quot; error results in the following message:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;M204.2966: Error at line n, procedure &#039;&#039;procname&#039;&#039; in file &#039;&#039;procfile&#039;&#039;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
which identifies the line within a procedure where the error is occurring, in addition to the usual message:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;M204.0552: Variable too small for result&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Any subsequent M204.2966 messages indicate the point in the code from where the code in error was called. For example, a stack of three subroutine calls leading to a &amp;quot;variable too small&amp;quot; error might result in the following messaging:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;   M204.0552: Variable too small for result                             &lt;br /&gt;
   M204.2966: Error at line 9, procedure MYPROC.LEVEL4 in file MYPROC   &lt;br /&gt;
   M204.2966: Called from line 5, procedure MYPROC.LEVEL3 in file MYPROC&lt;br /&gt;
   M204.2966: Called from line 5, procedure MYPROC.LEVEL2 in file MYPROC&lt;br /&gt;
   M204.2966: Called from line 5, procedure MYPROC.LEVEL1 in file MYPROC &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This information should help in diagnosing the problem. &lt;br /&gt;
&lt;br /&gt;
If the error occurs within a command level program rather than a procedure, then the M204.2966 message is replaced by an M204.2967 message, and a similar error condition to the above with a preceding call stack might be audited as follows:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;   M204.0552: Variable too small for result              &lt;br /&gt;
   M204.2967: Error at line 14 of command level program  &lt;br /&gt;
   M204.2967: Called from line 5 of command level program&lt;br /&gt;
   M204.2967: Called from line 3 of command level program &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If neither &amp;lt;var&amp;gt;SIRFACT X&#039;01&#039;&amp;lt;/var&amp;gt; nor &amp;lt;var&amp;gt;DEBUGUL&amp;lt;/var&amp;gt; is set, then the &amp;quot;variable too small&amp;quot; error produces the following messages:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;   M204.0552: Variable too small for result &lt;br /&gt;
   M204.2968: Error: no debug info &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====MBSCAN exceeded====&lt;br /&gt;
Similarly to the handling of the &amp;quot;variable too small for result&amp;quot; error, the call stack can also be used to diagnose errors where the value of &amp;lt;var&amp;gt;[[MBSCAN parameter|MBSCAN]]&amp;lt;/var&amp;gt; is exceeded as a result of a direct search of Table B records. &lt;br /&gt;
&amp;lt;p&amp;gt;Again, under V7.8, with either the &amp;lt;var&amp;gt;SIRFACT X&#039;01&#039;&amp;lt;/var&amp;gt; bit set or &amp;lt;var&amp;gt;DEBUGUL&amp;lt;/var&amp;gt; set, if a long request occurs as a result of exceeding &amp;lt;var&amp;gt;MBSCAN&amp;lt;/var&amp;gt;, then initially the following message is produced, as before:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;M204.0569: File &#039;&#039;filename&#039;&#039;, Find: Table B records to be searched = &#039;&#039;nnnn&#039;&#039;&amp;lt;/p&amp;gt;&lt;br /&gt;
followed by a DYRWT prompt message. If the user replies &#039;N&#039; to the prompt, or if the request is run in an environment (such as a batch job) where the default response is &#039;N&#039;, the following message is produced after the M204.0569 message:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;Cancelling request: M204.2969: MBSCAN (&#039;&#039;mm&#039;&#039;) exceeded, records to be searched = &#039;&#039;nnnn&#039;&#039;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
where &#039;&#039;mm&#039;&#039; is the current setting of &amp;lt;var&amp;gt;MBSCAN&amp;lt;/var&amp;gt;. The M204.2969 message is followed by M204.2966 messages displaying the call stack trace. Thus, if the following code is run from procedure MYPROC.MBSCAN against the demo database, with an &amp;lt;var&amp;gt;MBSCAN&amp;lt;/var&amp;gt; setting of 10:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;   b                           &lt;br /&gt;
   call sub1                   &lt;br /&gt;
   sub1: subroutine            &lt;br /&gt;
   fd1:                        &lt;br /&gt;
      in clients fd city = ONTARIO&lt;br /&gt;
              end find         &lt;br /&gt;
      fr fd1                      &lt;br /&gt;
         pai                      &lt;br /&gt;
         print                    &lt;br /&gt;
      end for                     &lt;br /&gt;
   end subroutine              &lt;br /&gt;
   end &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
then the following messages are produced, assuming any prompts are responded to with an &#039;N&#039;:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;   M204.0569: File CLIENTS, Find: Table B records to be searched = 3415&lt;br /&gt;
   Cancelling request: M204.2969: MBSCAN (10) exceeded, records to be searched = 3415  &lt;br /&gt;
   M204.2966: Error at line 6, procedure MYPROC.MBSCAN in file MYPROC&lt;br /&gt;
   M204.2966: Called from line 3, procedure MYPROC.MBSCAN in file MYPROC  &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===appendJournalData===&lt;br /&gt;
The &amp;lt;var&amp;gt;[[AppendJournalData_(Stringlist_function)|AppendJournalData]]&amp;lt;/var&amp;gt; function is now more tolerant of an outstanding BUMP request. Previously, if &amp;lt;var&amp;gt;AppendJournalData&amp;lt;/var&amp;gt; was called to inadvertently retrieve a large amount of journal data, typically when called implicitly from within SirScan, then any outstanding BUMP request wouldn&#039;t be honored until all of the data had been retrieved, at which point the BUMP request would be completed, and all data would be lost.&lt;br /&gt;
&lt;br /&gt;
Now, the &amp;lt;var&amp;gt;AppendJournalData&amp;lt;/var&amp;gt; process checks for outstanding BUMP requests before each track I/O is executed, thus avoiding excessive I/Os against the journal and long waits for the BUMP of such a process to complete.&lt;br /&gt;
&lt;br /&gt;
==AUDIT204 enhancements==&lt;br /&gt;
===FORMAT command===&lt;br /&gt;
TIMEHH is a new parameter used with the FORMAT command of the [[Tracking_system_activity_(CCAJRNL,_CCAAUDIT,_CCAJLOG)#AUDIT204_utility|AUDIT204]] utility.  It indicates that timestamps, printed at the beginning of each line of output, should include hundredths of a second. Requires no other arguments.&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;b&amp;gt;NOTE:&amp;lt;/b&amp;gt; This parameter and the 78 version (or later) of AUDIT204 may be used against a 77 (or later) CCAJRNL.&amp;lt;/p&amp;gt;&lt;br /&gt;
For example:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;//CCAIN DD *&lt;br /&gt;
FORMAT YEARFORM 4&lt;br /&gt;
TIMEHH&lt;br /&gt;
TYPE ER MS LI&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Recovery enhancements==&lt;br /&gt;
===Media Recovery in a multi-user environment===&lt;br /&gt;
It is now possible to perform media recovery by issuing the &amp;lt;var&amp;gt;REGENERATE&amp;lt;/var&amp;gt; command to roll forward selected files in a multi-user environment, with the media recovery being carried out by different users with system manager privileges. The new USING option allows for the specification of a ddname for the input journal stream to be used by the &amp;lt;var&amp;gt;REGENERATE&amp;lt;/var&amp;gt; command. Previously media recovery was restricted to single user batch jobs, using the CCAGEN ddname for the input journal. For more details, see the &amp;lt;var&amp;gt;[[#REGENERATE|REGENERATE]]&amp;lt;/var&amp;gt; command below.&lt;br /&gt;
&lt;br /&gt;
==Security enhancements==&lt;br /&gt;
===CA-Top Secret can disallow CCASTAT logins===&lt;br /&gt;
The [[CA-Top_Secret_interface|CA-Top Secret]] interface now recognizes the &amp;lt;code&amp;gt;DEFACID=&amp;lt;/code&amp;gt;, setting and does not allow CCASTAT logins in the online if &amp;lt;code&amp;gt;DEFACID&amp;lt;/code&amp;gt; is set to null. (There is no attempt to log on M204USR.) Therefore, to disallow CCASTAT logons, set DEFACID=, in [[CA-Top_Secret_interface#Preparing_a_TOPSPARM_parameter_module_with_TOPSGEN|TOPSPARM]]. CCASTAT will be opened because it contains file and group passwords, but it will not be used for logons if CCASTAT logons are not allowed.&lt;br /&gt;
&lt;br /&gt;
===CUSTOM=11 and mixed cased input===&lt;br /&gt;
The &amp;lt;var&amp;gt;[[CUSTOM_parameter|CUSTOM]]&amp;lt;/var&amp;gt; parameter CUSTOM=11 setting no longer requires that a *LOWER command be issued prior to a LOGCTL command (to add or change a  password) to preserve mixed case input. Prior to this release, with CUSTOM=11 in place, *LOWER had to be issued before a LOGCTL command, otherwise any mixed case password strings would automatically be translated into uppercase. This change is enabled in V7.7 with the application of zap 77z108.&lt;br /&gt;
&lt;br /&gt;
===DEFUSER can specify a jobname not authorized to access M204===&lt;br /&gt;
When specifying DEFUSER=JOBNAME and VALIDAT=LOGON in the RACFGEN parms for an ONLINE, if the specified jobname ( the owning id for the ONLINE job ) isn&#039;t authorized to use Model 204 via RACF, any LOGIN commands specifying no userid will now succeed ( previously such a LOGON would have failed ). This enables users to submit jobs with USE $JOB, whereby the string USER=jobname  will be added to the submitted JCL, and this in turn is useful if the specified jobname has dataset access privileges to datasets required by the submitted jobs, even if the jobname itself isn&#039;t authorized to use M204.&lt;br /&gt;
&lt;br /&gt;
==Janus product enhancements==&lt;br /&gt;
&lt;br /&gt;
===Janus Web Server access rule===&lt;br /&gt;
The automatic &amp;lt;var&amp;gt;[[JANUS WEB ALLOW]]&amp;lt;/var&amp;gt; rule, which allowed any user to access the port without requiring a login, is changed &amp;lt;i&amp;gt;for non-SSL ports&amp;lt;/i&amp;gt; to the following:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;JANUS WEB &amp;lt;i&amp;gt;portname&amp;lt;/i&amp;gt; DISALLOW *&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
This rule requires a system administrator to explicitly define &amp;lt;var&amp;gt;ALLOW&amp;lt;/var&amp;gt; rules to enable users to access non-SSL ports.&lt;br /&gt;
The rule applies unless overridden by user-added rules. &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;blockquote class=&amp;quot;note&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;b&amp;gt;Note:&amp;lt;/b&amp;gt; To revert from this change in the JANUS DEFINE default and make the default &lt;br /&gt;
 non-SSL &amp;lt;var&amp;gt;ALLOW&amp;lt;/var&amp;gt; rule as it was in version 7.5 and earlier (&amp;lt;code&amp;gt;ALLOW *&amp;lt;/code&amp;gt;), turn on the 1 bit of the &amp;lt;var&amp;gt;[[WEBDFLT parameter|WEBDFLT]]&amp;lt;/var&amp;gt; parameter: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;RESET WEBDFLT=1&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Increase in pending accepts for Janus BPX ports===&lt;br /&gt;
The default number of pending accepts for Janus BPX server ports has been increased from 3 to 12, thus reducing the likelihood that a pending accept may fail with the message&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;MSIR.0019 Connection request rejected for port (port), MAXCON exceeded&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The actual number of pending accepts to be supported on the port can be set with the new parameter MAXPEND, set on the &amp;lt;var&amp;gt;[[JANUS_DEFINE|JANUS DEFINE]]&amp;lt;/var&amp;gt; command, where MAXPEND can vary from 3 up to a maximum value of 32. The change to the default value was enabled in V7.7 with the application of zap 77z269.&lt;br /&gt;
&lt;br /&gt;
===TCP listen backlog increased===&lt;br /&gt;
&lt;br /&gt;
The [[Program_Communication_facilities#LISTEN_call|TCP listen]] backlog has been increased from 16 to 1024 under z/OS.&lt;br /&gt;
&lt;br /&gt;
This update tells the TCP stack to queue up to 1024 of such requests up before dropping them, thus reducing, or in most cases eliminating, the likelihood of a connection request drop, other than in exceptional circumstances, such as a denial of service attack. This change was enabled in V7.7 with the application of zap 77z340.&lt;br /&gt;
&lt;br /&gt;
===Defer the freeing of XMLSCREEN input XML===&lt;br /&gt;
&lt;br /&gt;
The freeing of [[XMLSCREEN_and_NOXMLSCREEN_(JANUS_DEFINE_parameters)|XMLSCREEN]] input XML is now deferred until the next Read Screen or session termination. This means that if an application error is detected, the input XML can be retrieved with [[$Web_Input_Content|$Web_Input_Content]] and then logged for problem analysis. &lt;br /&gt;
&lt;br /&gt;
Prior to this release the XML received from the client is freed immediately after being used to set the input data for a Read Screen, rendering it unavailable for problem determination.&lt;br /&gt;
&lt;br /&gt;
This change is enabled in V7.7 with the application of zap 77z368.&lt;br /&gt;
&lt;br /&gt;
===XMLSCREEN and Janus Web Legacy blank stripping===&lt;br /&gt;
&lt;br /&gt;
xmlScreens and Janus Web Legacy screens now adhere to the same standard as standard screen processing in terms of stripping leading blanks from input fields defined as [[Full-screen_feature#DEBLANK_or_NODEBLANK_option|DEBLANK]] (either explicitly or implicitly).&lt;br /&gt;
&lt;br /&gt;
This change is enabled in V7.7 with the application of zap 77z400.&lt;br /&gt;
&lt;br /&gt;
===SSL input buffer size===&lt;br /&gt;
&lt;br /&gt;
The default value of [[SSLIBSIZE_(JANUS_DEFINE_parameter)|SSLIBSIZE]] has been increased to 16384 + 128, or 16512. This size should ensure correct communication with all TLS spec compliant applications. It is the maximum size allowed unless you use [[CUSTOM_parameter#Using_CUSTOM.3D.2818.29|CUSTOM=18]].    &lt;br /&gt;
&lt;br /&gt;
This changed is enabled in V7.7 with the application of zap 77z415.&lt;br /&gt;
&lt;br /&gt;
===Increasing LDAP buffers===&lt;br /&gt;
&lt;br /&gt;
The number of LDAP buffers allocated at startup can now be changed by setting the NLDAPBUF parameter in CCAIN. See below for details on [[#NLDAPBUF|NLDAPBUF]].&lt;br /&gt;
&lt;br /&gt;
===Increase URL length returned with $web_form_action===&lt;br /&gt;
With this release the maximum Janus Web Server incoming URL that can be handled by &amp;lt;var&amp;gt;$web_form_action&amp;lt;/var&amp;gt; is increased from 512 bytes to 1024 bytes. This change is enabled in V7.7 with the application of zap 77z424.&lt;br /&gt;
&lt;br /&gt;
===Maximum RBSIZE setting increased===&lt;br /&gt;
The maximum value for RBSIZE, set on the &amp;lt;var&amp;gt;[[JANUS DEFINE|JANUS DEFINE]]&amp;lt;/var&amp;gt; command, is now increased to 16777215 (previously the maximum was 65534). RBSIZE specifies the RPC or Request Buffer size.  On a Web port, the Janus request buffer holds browser request information such as header data, cookies, and form data. On other port types, it holds RPC input and output parameters. This change is enabled in V7.7 with the application of zap 77z427.&lt;br /&gt;
&lt;br /&gt;
==Debugger enhancements==&lt;br /&gt;
&lt;br /&gt;
===Access to exposed variables===&lt;br /&gt;
The debuggers can now view or watch the values of variables exposed to local routines/methods. Previously, any attempts to access an exposed variable would have displayed &amp;quot;%varname has no value&amp;quot; in the debugger session. (This feature is enabled in V7.7 with the application of zap 77z363.)&lt;br /&gt;
&lt;br /&gt;
==Performance enhancements==&lt;br /&gt;
&lt;br /&gt;
===MP/204 offload improvements===&lt;br /&gt;
Application code issuing the following SOUL statements will now now be fully offloadable:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;File Records In/On&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Remember&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt; &lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Position&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Sort Values&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;                                             &lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Reset Header/Trailer&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Find and Print Count&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Find All Values&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;For Each Value&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
the above improvements are also enabled in V7.7 with the application of zaps 77z419 and 77z420.&lt;br /&gt;
&lt;br /&gt;
===X3270OUT exit offloadable===&lt;br /&gt;
When running MP/204 (AMPSUBS&amp;gt;0) and using the [[Coding_SNA_Communications_Server_conversion_exit_routines#X3270OUT_.28convert_output_from_3270_format.29|X3270OUT]] exit to convert a 3270 output data stream to the appropriate device protocol, the exit can now run in parallel mode to improve performance. This change was enabled in V7.7 with the application of zap 77z313.&lt;br /&gt;
&lt;br /&gt;
The X3270OUT exit must be written to be re-entrant.&lt;br /&gt;
&lt;br /&gt;
==New and changed commands==&lt;br /&gt;
===DISPLAY ECF===&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;DISPLAY ECF {{ M | N | U } like ?} &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This new command displays details from ECF tables, or the current status of users accessing ECF modules.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;syntax&amp;quot;&amp;gt;D ECF M&amp;lt;/span&amp;gt; displays the contents of the module table. For example:&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;    D ECF M &lt;br /&gt;
    Module   Loadlib  Address:Length     Loaded@      Lastused@   #Calls  Flags &lt;br /&gt;
    QATUM13C PROGLIB 2FB91FB8:00000028 19023:121506 19023:121506 00000001 &lt;br /&gt;
    QATUM13B PROGLIB 2FE65000:00009C18 19023:121506 19023:121506 00000001 &lt;br /&gt;
    QATUM13A PROGLIB 2FE6EC18:00001CD8 19023:121506 19023:121506 00000001  &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
(flags may be D=deleted; S=shared; H=halted; I=Idle)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;syntax&amp;quot;&amp;gt;D ECF N&amp;lt;/span&amp;gt; displays contents of the name table. For example: &amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;    D ECF N&lt;br /&gt;
    Module   Logical-call-name &lt;br /&gt;
    QATUM13C MOD_QATUM13C &lt;br /&gt;
    QATUM13B MOD_QATUM13B &lt;br /&gt;
    QATUM13A MOD_QATUM13A &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;syntax&amp;quot;&amp;gt;D ECF U&amp;lt;/span&amp;gt; displays details of users currently accessing ECF modules. This is also the default option, and so &amp;lt;span class=&amp;quot;syntax&amp;quot;&amp;gt;D ECF&amp;lt;/span&amp;gt; will display the same output as &amp;lt;span class=&amp;quot;syntax&amp;quot;&amp;gt;D ECF U&amp;lt;/span&amp;gt;. For example:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;    D ECF U                           &lt;br /&gt;
    User# Userid     Module   Parmlen &lt;br /&gt;
    00002 ADMIN      --none--         &lt;br /&gt;
    00003 ADMIN      COBSAMP1 00000002&lt;br /&gt;
    00004 ADMIN      COBSAMP1 00000002 &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;syntax&amp;quot;&amp;gt;D ECF &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;function&amp;lt;/var&amp;gt; LIKE &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;?&amp;lt;/var&amp;gt; &amp;lt;/span&amp;gt; (where &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;?&amp;lt;/var&amp;gt; is a valid pattern) displays details for entities that match the specified pattern. The function is either M (modules), N (names), or U (users), and it defaults to U. So for example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;D ECF U L A&amp;lt;/p&amp;gt;&lt;br /&gt;
or&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;D ECF U L A*&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
displays details of ECF users whose names begin with A.&lt;br /&gt;
&lt;br /&gt;
===REGENERATE===&lt;br /&gt;
The &amp;lt;var&amp;gt;REGENERATE&amp;lt;/var&amp;gt; command can now be run in a multi-user environment by multiple users with system manager privileges. A new option USING is provided to specify the ddname of the input journal, so that the full syntax is now as follows:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;  REGENERATE [USING ddname] FILE filename [FROM dumpname | IGNORE]&lt;br /&gt;
  [TO {LAST UPDATE [BEFORE yy.ddd hh:mm:ss.th] | LAST CHECKPOINT [BEFORE yy.dd hh:mm:ss.th] &lt;br /&gt;
  | UPDATE number OF yy.ddd hh:mm:ss.th | CHECKPOINT yy.ddd hh:mm:ss.th} ]&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The default for the using ddname is CCAGEN, but any ddname may be used to allocate an input journal and used. For example:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;  ALLOCATE REGEN1 WITH SCOPE=SYSTEM DSN=PROD1.GDGJ OLD SEQUENTIAL GEN=+2&lt;br /&gt;
  REGENERATE USING REGEN1 FILE TEST&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It is the user&#039;s responsibility to ensure that the file being regenerated is not in use, and so prior to usage, &amp;lt;var&amp;gt;BUMP FILE&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;STOP FILE&amp;lt;/var&amp;gt; should be used to isolate usage against the file. If the file is in use, the REGEN will fail with these messages:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;  M204.1430: Failed to open file TEST&lt;br /&gt;
  M204.1436: Stopped processing file TEST  &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
$STATUS will now be set for &amp;lt;var&amp;gt;REGENERATE&amp;lt;/var&amp;gt; with the following values:&lt;br /&gt;
&amp;lt;blockquote&amp;gt;    &lt;br /&gt;
    0 - Success &amp;lt;br/&amp;gt;&lt;br /&gt;
    1 - No files were processed &amp;lt;br/&amp;gt;&lt;br /&gt;
    2 - At least one file stopped processing &amp;lt;br/&amp;gt;&lt;br /&gt;
    4 - A serious error occurred, REGEN failed &lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Similarly, &amp;lt;var&amp;gt;SETGRC&amp;lt;/var&amp;gt; may be used to get the return code and error message.&lt;br /&gt;
&lt;br /&gt;
==New and changed parameters==&lt;br /&gt;
&lt;br /&gt;
===ECMODS===&lt;br /&gt;
The new minimum value for ECMODS, the allowable number of ECF modules, is 1. Prior to V7.8 the minimum value was 0. This changed was enabled in V7.7 with the application of zap 77z306.&lt;br /&gt;
&lt;br /&gt;
===ECNAMES===&lt;br /&gt;
The new minimum value for ECNAMES, the allowable number of ECF module names, is 1. Prior to V7.8 the minimum value was 0. This changed was enabled in V7.7 with the application of zap 77z306.&lt;br /&gt;
&lt;br /&gt;
===ECPSIZE===&lt;br /&gt;
The new minimum value for ECPSIZE, the initial storage allocation for ECF parameters, is 1024. Prior to V7.8 the minimum value was 0. This changed was enabled in V7.7 with the application of zap 77z306.&lt;br /&gt;
&lt;br /&gt;
===ENQTIME===&lt;br /&gt;
Millisecond duration of automatic record locking retry wait.&lt;br /&gt;
&lt;br /&gt;
Prior to this change, if record locking conflicts occur frequently in a busy online, any user with a non-zero value for &amp;lt;var&amp;gt;[[ENQRETRY parameter|ENQRETRY]]&amp;lt;/var&amp;gt; will wait at least 3 seconds before the conflict is dealt with. This can degrade overall system performance.      &lt;br /&gt;
                                                         &lt;br /&gt;
The &amp;lt;var&amp;gt;[[ENQTIME parameter|ENQTIME]]&amp;lt;/var&amp;gt; parameter specifies the number of milliseconds waited for each record locking retry wait. ENQTIME can be between 1 and 60000, corresponding to a minimum of 1 millisecond and a maximum of 1 minute. The default value of ENQTIME is 3000 (3 seconds).            &lt;br /&gt;
                                                         &lt;br /&gt;
For example, with ENQTIME = 100 and ENQRETRY = 7, after a record locking conflict occurs the thread will retry 7 times with wait intervals of .1 seconds, and so within at most .7 seconds either the lock becomes available or the conflict triggers an On unit or cancels the request.     &lt;br /&gt;
                                                         &lt;br /&gt;
The ENQTIME parameter may also be reset with $ResetN. &lt;br /&gt;
&lt;br /&gt;
This new parameter was enabled in V7.7 with the application of zap 77z299.&lt;br /&gt;
&lt;br /&gt;
===EVALOPT===&lt;br /&gt;
The new &amp;lt;var&amp;gt;EVALOPT&amp;lt;/var&amp;gt; parameter controls the cancellation of a request on truncation of string data. The default value is 0, and currently there is just one setting, 1, which means &amp;quot;cancel a request if truncation of string data occurs.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
For example, with the default of 0 in place, the following code &amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;    %x is string len 1   &lt;br /&gt;
    %y is string len 2   &lt;br /&gt;
    %y = &#039;ab&#039;            &lt;br /&gt;
    %x = %y              &lt;br /&gt;
    printtext {~} = {%x} &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
would cause silent truncation, and give the result&lt;br /&gt;
    &amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;%x = a &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If &amp;lt;var&amp;gt;EVALOPT&amp;lt;/var&amp;gt; is set to 1, then the above code produces the following message:&lt;br /&gt;
    &amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;M204.0552: Variable too small for result &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and the request is cancelled.&lt;br /&gt;
&lt;br /&gt;
===LFSCB===&lt;br /&gt;
LFSCB, the length of the full screen buffer, now has a new minimum value of 8 ( the previous minimum was 0 ). This change has been enabled in v7.7 with the application of zap 77z042, and within V7.6 with the application of zap 76z393.&lt;br /&gt;
&lt;br /&gt;
===MAXPRE, MAXBOUT, MAXSUBT===&lt;br /&gt;
&amp;lt;p&amp;gt;Introduced in zap 77z257.&amp;lt;/p&amp;gt;&lt;br /&gt;
The new &amp;lt;var&amp;gt;MAXPRE&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;MAXBOUT&amp;lt;/var&amp;gt;, and &amp;lt;var&amp;gt;MAXSUBT&amp;lt;/var&amp;gt; parameters can be used to cancel a runaway transaction and prevent it from filling the checkpoint data set. &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;MAXPRE&amp;lt;/var&amp;gt;:  Maximum number of pre-images per transaction.  &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;MAXBOUT&amp;lt;/var&amp;gt;: Maximum number of backout pages per transaction. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;MAXSUBT&amp;lt;/var&amp;gt;: Maximum number of subtransaction checkpoints that a transaction can span.&amp;lt;/li&amp;gt;&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;Each new parameter defaults to unlimited. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;If a parameter value is set, a transaction is cancelled if that value is exceeded, and the following message is displayed:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;code&amp;gt;M204.0524: Maximum number (&amp;lt;i&amp;gt;num&amp;lt;/i&amp;gt;) of &amp;lt;i&amp;gt;parameter&amp;lt;/i&amp;gt; exceeded.&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
where &amp;lt;i&amp;gt;num&amp;lt;/i&amp;gt; is the value set for &amp;lt;i&amp;gt;parameter&amp;lt;/i&amp;gt; (&amp;lt;var&amp;gt;MAXPRE&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;MAXBOUT&amp;lt;/var&amp;gt;, or &amp;lt;var&amp;gt;MAXSUBT&amp;lt;/var&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
===NLDAPBUF===&lt;br /&gt;
This new parameter allows the number of LDAP buffers allocated during startup to be set in CCAIN. The default value is 2, and the settable value can range from 0 to 65535.&lt;br /&gt;
&lt;br /&gt;
===PUPDTH (new minimum value)===&lt;br /&gt;
If a user sets the &amp;lt;var&amp;gt;[[PUPDTH parameter|PUPDTH]]&amp;lt;/var&amp;gt; parameter to 0, it will now automatically be increased to 1, its minimum value.&lt;br /&gt;
&lt;br /&gt;
===SERV4G===&lt;br /&gt;
This parameter allows testing of server tables that span a 4-gigabyte boundary. For example, if SERV4G is X&#039;FFFFF000&#039;, each ATB server will begin at XX_FFFFF000. If SERV4G is X&#039;FFFF0000&#039;, each ATB server will begin at XX_FFFF0000. XX is determined by the storage available on the system. The parameter is set in CCAIN.&lt;br /&gt;
&lt;br /&gt;
The contents of the ATB server are specified by using the SERVGA parameter.&lt;br /&gt;
&lt;br /&gt;
For example. if you want VTBL to span the 4G boundary, you can use these settings: SERV4G=X&#039;FFFFF000&#039;, SERVGA=X&#039;00040000&#039;, and LVTBL=200 (6400 bytes, X&#039;1900&#039;). This will force each server&#039;s VTBL to begin at XX_FFFFF000 and end at XX+1_00000900.&lt;br /&gt;
&lt;br /&gt;
===WEBDFLT===&lt;br /&gt;
At V7.7, the default access rule for non-SSL ports was changed from ALLOW * to DISALLOW *, meaning that unless any ALLOW rules were in place resulting in a login/password prompt, the port couldn&#039;t be accessed. The new &amp;lt;var&amp;gt;[[WEBDFLT_parameter|WEBDFLT]]&amp;lt;/var&amp;gt; parameter may be set to 1 for reversion to the old default of ALLOW *. Under V7.7, this new parameter was enabled with the application of zap 77z090. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;var&amp;gt;RESET WEBDFLT&amp;lt;/var&amp;gt; requires system administrator privileges. It is recommended to reset the 1 bit of &amp;lt;var&amp;gt;WEBDFLT&amp;lt;/var&amp;gt; to zero after issuing a series of &amp;lt;var&amp;gt;JANUS DEFINE&amp;lt;/var&amp;gt; commands which need WEBDFLT=1, as in the CCAIN input stream.&lt;br /&gt;
&lt;br /&gt;
==New and changed statistics==&lt;br /&gt;
===MPR, MBO, MCP, and RCV===&lt;br /&gt;
Introduced in zap 77z257.&lt;br /&gt;
&amp;lt;p&amp;gt;These statistics provide high water mark transaction information. (Since-last values will not be available until V78 GA.)&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;They are useful in conjunction with the &amp;lt;var&amp;gt;MAXPRE&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;MAXBOUT&amp;lt;/var&amp;gt;, and &amp;lt;var&amp;gt;MAXSUBT&amp;lt;/var&amp;gt; parameters. &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
User/system statistics:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;MPR: High water mark of transaction pre-images. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;MBO: High water mark of transaction backout pages. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;MCP: High water mark of transaction chkpoint spans. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
System statistics: &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;RCV: Number of blocks needed for subtransaction recovery &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt; &lt;br /&gt;
&amp;lt;p class=&amp;quot;note&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Notes:&amp;lt;/b&amp;gt; M204.0843 now displays the RCV statistic for subtransaction checkpoints.&lt;br /&gt;
The size of recovery checkpoint must be greater than the sum of the last RCV value plus the number of records in [[System_and_media_recovery#RESTART_recovery_considerations_for_sub-transaction_checkpoints|RESTART and RESTARTS]].&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
===DKWTS and DKWTMICS===&lt;br /&gt;
Introduced in zap 77z7289.&lt;br /&gt;
&amp;lt;p&amp;gt;The new system statistics DKWTS (DisK WaiTs) and DKWTMICS (DisK WaiT MICroSeconds) collect data to provide rough disk I/O service time numbers.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
DKWTS shows the number of disk I/O waits. DKWTMICS shows the total wait time for those waits in microseconds. Dividing the difference in DKWTMICS by the difference in DKWTS over an interval provides the average disk I/O wait time in microseconds.              &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;note&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Notes:&amp;lt;/b&amp;gt; &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The wait time does include internal Model 204 scheduler delays, so on a CPU bound Model 204 system, the service times calculated from DKWTS and DKWTMICS are likely to be an overestimate of actual service times.&amp;lt;/li&amp;gt;  &lt;br /&gt;
                                                                    &lt;br /&gt;
&amp;lt;li&amp;gt;DKWTS and DKWTMICS are not available in SirMon; use [[MONITOR_command|MONITOR]] SYSTEM STATISTICS to view these statistics.&amp;lt;/li&amp;gt;&amp;lt;/ul&amp;gt;  &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Compatibility issues==&lt;br /&gt;
===&amp;lt;b id=&amp;quot;listNewInit&amp;quot;&amp;gt;&amp;lt;/b&amp;gt;$ListNew cannot be used in Initial clause===&lt;br /&gt;
It is now a compilation error if &amp;lt;var&amp;gt;$ListNew&amp;lt;/var&amp;gt; is attempted to be used in the &amp;lt;var&amp;gt;Initial&amp;lt;/var&amp;gt; clause of a &lt;br /&gt;
[[Using_variables_and_values_in_computation#Declare_statements_for_.25variables|declaration statement]].&lt;br /&gt;
&amp;lt;p&amp;gt;This change is propagated by zap maintenance to versions 7.5 (zap 75Z487), 7.6 (zap 76Z514), and 7.7 (zap 77z281) of Model 204.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote class=&amp;quot;note&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Note:&amp;lt;/b&amp;gt; Strictly speaking, this would not be considered a compilation error, because previously although &amp;lt;code&amp;gt;..&amp;amp;nbsp;Initial($ListNew)&amp;lt;/code&amp;gt; did not produce a compilation error, in almost all circumstances it would produce a snap if the initialized %variable were used with some other &amp;lt;var&amp;gt;$List&amp;lt;i&amp;gt;xxx&amp;lt;/i&amp;gt;&amp;lt;/var&amp;gt; invocation.&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Restricting the use of the CUSTOM=38 setting===&lt;br /&gt;
The [[CUSTOM parameter|CUSTOM=38]] parameter setting, introduced at V7.5, inadvertently provided System Manager privileges to all users via the RESET command. This CUSTOM setting is now restricted to the RESETting of the LAUDIT parameter.&lt;br /&gt;
&lt;br /&gt;
===Disabling of Closure support===&lt;br /&gt;
Due to a number of bugs related to Closure support, introduced at V7.7, this feature, which can best be described as exposed methods assigned to method variables, has been disabled in this release. This change was also made to V7.7 with application of zap 77z119.&lt;br /&gt;
&lt;br /&gt;
===Password delimiter enforced===&lt;br /&gt;
When using IFSTRTN to logon to a Model 204 online from an IFAM2 application, both the logonid and password must be followed by a semicolon - the delimiter.             &lt;br /&gt;
For example:      &lt;br /&gt;
                                      &lt;br /&gt;
CALL IFSTRTN(RC,&#039;logonid;password;&#039;...)&lt;br /&gt;
                 &lt;br /&gt;
If a semicolon does not follow the password string, the following message will now be issued&lt;br /&gt;
&lt;br /&gt;
M204.2964: Password missing or too long                  &lt;br /&gt;
                                                         &lt;br /&gt;
Previously, a semicolon following the password was not required and the first blank served as a password delimiter.  However, as of V7.7, embedded blanks are valid password characters and a semicolon is now required to delimit the password.&lt;br /&gt;
&lt;br /&gt;
This change has also been enabled in V7.7 with the application of zap 77z231.&lt;br /&gt;
&lt;br /&gt;
===PAGESZ parameter validated===&lt;br /&gt;
Previously it was possible to set the PAGESZ parameter to any value, although Model 204 internally supports one page size of 6184, and any deviation from this value would have led to problems during file creation. The value of this parameter is now controlled, such that setting it to any value other than 6184 will generate an M204.1149 message with the parameter being reset to 6184.&lt;br /&gt;
&lt;br /&gt;
===ECPRIV and the IDCAMS facility===&lt;br /&gt;
At V7.7 a security loophole was closed, whereby all ECF modules were run under external-authorizer profile of the calling user. Previously any ECF tasks were run under the owning job&#039;s external-authorizer profile, and in order for certain sites to retain that ability, a new setting of ECPRIV, value 4, was introduced to retain the ability to run ECF tasks using the job&#039;s security profile. &lt;br /&gt;
&lt;br /&gt;
The ECPRIV 4 setting potentially introduced a security loophole when calling the IDCAMS interface, based upon what the IDCAMS utility is able to do at a system level. Consequently as of this release, the ECPRIV 4 setting will be ignored when calling the IDCAMS facility via ECF, and such IDCAMS processes will always use the calling user&#039;s security profile. Any existing jobs that use ECF to call the IDCAMS utility with the ECFPRIV 4 bit set should be checked to ensure that the calling user&#039;s security profile still satisfies the job&#039;s requirements.&lt;br /&gt;
&lt;br /&gt;
===TCPOPTS is view only===&lt;br /&gt;
In previous versions the TCPOPTS parameter, which identifies the type of IP addressing in use ( v4 or v6 ), was resetable, although it was always documented as a view-only parameter. The parameter is now handled as a view-only parameter, and any attempts to reset the parameter will result in&lt;br /&gt;
&lt;br /&gt;
   M204.1123: Parameter TCPOPTS not reset&lt;br /&gt;
&lt;br /&gt;
===ZHPF command can only be issued by a system manager===&lt;br /&gt;
In previous versions it was possible to issue the ZHPF command without being logged on. From this release onwards, a user would have to be logged on with system manager privileges to be able to issue this command.&lt;br /&gt;
&lt;br /&gt;
Additionally, the command output will now only  display results for currently open files.&lt;br /&gt;
&lt;br /&gt;
This changes has been enabled in v7.7 with the application of zap 77z264.&lt;br /&gt;
&lt;br /&gt;
===Terminal MODEL reset failure===&lt;br /&gt;
If a reset of the terminal MODEL parameter fails due to an under sized output page buffer, then in addition to the existing messages that inform the user of this failure&lt;br /&gt;
&lt;br /&gt;
    M204.1875 UNABLE TO RESET MODEL TO %C &lt;br /&gt;
    M204.1123: Parameter MODEL not reset  &lt;br /&gt;
&lt;br /&gt;
the following message will now be issued&lt;br /&gt;
&lt;br /&gt;
    M204.1008: LOUTPB must be increased to at least &amp;lt;number&amp;gt; &lt;br /&gt;
                                                         &lt;br /&gt;
where &amp;lt;number&amp;gt; is the minimum value of LOUTPB necessary to support the terminal model.&lt;br /&gt;
&lt;br /&gt;
This change is enabled in V7.7 with the application of zap 77z309.&lt;br /&gt;
&lt;br /&gt;
==Notes for system manager and installer==&lt;br /&gt;
===CRAM SVC installation is deprecated===&lt;br /&gt;
The CRAM SVC installation has been deprecated as of version 7.5. &amp;lt;br /&amp;gt;Installation of CRAM-XDM is described as part of the [[Model 204 installation]].&lt;br /&gt;
===Authorization and maintenance zaps===&lt;br /&gt;
When you download Rocket M204 product object files, all relevant authorization keys and all current maintenance zaps are pre-applied to the object files as part of the download process.&lt;br /&gt;
&lt;br /&gt;
==New and changed messages==&lt;br /&gt;
&lt;br /&gt;
See [[New and updated messages in Model 204 version 7.8|New and updated messages in Model 204 version 7.8]] for details.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category: Release notes]]&lt;/div&gt;</summary>
		<author><name>ELowell</name></author>
	</entry>
	<entry>
		<id>https://m204wiki.rocketsoftware.com/index.php?title=Files,_groups,_and_reference_context&amp;diff=117719</id>
		<title>Files, groups, and reference context</title>
		<link rel="alternate" type="text/html" href="https://m204wiki.rocketsoftware.com/index.php?title=Files,_groups,_and_reference_context&amp;diff=117719"/>
		<updated>2019-11-11T17:56:21Z</updated>

		<summary type="html">&lt;p&gt;ELowell: /* Two ways to open files and groups */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div class=&amp;quot;toclimit-3&amp;quot;&amp;gt;&lt;br /&gt;
==Overview==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
A &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; file consists of a collection of records and their associated index pointers. See [[Introduction to User Language#Files|Files]] for a discussion of the composition of a &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; file. A file group is a collection of &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; files that &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; treats as a logical single file. A group can be permanent, temporary, or ad hoc. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
A file or group must be opened before it can be processed by &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt;. Several files or groups can be opened by a terminal user during a single &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; session. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can refer to any open files or groups within a single request and can cross-reference any records contained in these files or groups.&lt;br /&gt;
(Cross-referencing is discussed in [[Record loops#Cross-referencing|Cross-referencing]] and also in [[#Cross-referencing|Cross-referencing]].)&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The file and group commands discussed in this topic are described in detail in&lt;br /&gt;
[[List of Model 204 parameters]] and [[List of Model 204 commands]].&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Parallel Query Option/204===&lt;br /&gt;
Parallel Query Option/204 (PQO) is a &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; distributed processing facility that allows the sharing of data between two or more copies of &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt;. &lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
In addition to the information provided here, Parallel Query Option/204 is described in detail in [[PQO: Overview of Parallel Query Option/204]] and the information it references. &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Remote files===&lt;br /&gt;
Parallel Query Option/204 provides to &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;SOUL&amp;lt;/var&amp;gt; applications the potential for accessing data stored in remote files. A single &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;SOUL&amp;lt;/var&amp;gt; request can read and/or update multiple remote files.&lt;br /&gt;
 &lt;br /&gt;
===Scattered groups===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Parallel Query Option/204 also supports file groups consisting of files residing on different nodes. A group that contains one or more remote files is a scattered group. A scattered group is a local entity &amp;amp;mdash; you cannot create a group for a remote node, and you cannot refer to a group defined on a remote node.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
As for all &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; groups, you define a scattered group with the &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;SOUL&amp;lt;/var&amp;gt; IN clause or the CREATE GROUP command. The authority required to define a scattered group is no different from that required for a non-scattered &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; group. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Ad hoc, temporary, and permanent groups can be scattered groups. With no additional requirements, ad hoc groups allow remote file synonyms and remote file specifications. With some additional parameter requirements, temporary and permanent groups allow remote file synonyms and remote file specifications.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Scattered group members are optional or mandatory. If a mandatory member is unavailable, the group cannot open. You specify whether members are optional or mandatory in the group definition. Availability, a file status that concerns scattered groups, refers to whether a group member can be opened and, if not, whether the group can be opened. These terms are discussed in more detail in [[PQO: Managing files and groups]].&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===DML limitations===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Not all &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; commands, statements and retrieval conditions can be used with Parallel Query Option/204. [[#Using Model 204 file and group commands|Using Model 204 file and group commands]] lists the file and group specification commands that you can use with remote files and groups. [[DML statements in Parallel Query Option/204#DML statements in Parallel Query Option/204|DML statements in Parallel Query Option/204]] contains listings of supported and non-supported &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;SOUL&amp;lt;/var&amp;gt; statements and retrieval conditions.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
==Using Model 204 file and group commands==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The following &amp;quot;Commands for files and groups&amp;quot; table lists file and group commands, their corresponding meanings, and what type of user can issue the command. This list comprises the only commands that support remote file specification.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;caption&amp;gt;Commands for files and groups&amp;lt;/caption&amp;gt;&lt;br /&gt;
&amp;lt;tr class=&amp;quot;head&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Command&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Meaning&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Type of user&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;CLOSE (file or group)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Closes a group.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Any user&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;CREATE PERM GROUP&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Creates a permanent group.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;System manager&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;CREATE TEMP GROUP&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Creates a temporary group.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Any user&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;DEFAULT&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Specifies a new default, which can be either a &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; file or group&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Any user&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;DEFINE FILE&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Creates a file synonym, defined locally, for the actual name of a local or remote file and its location.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;System manager or User 0&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;DELETE PERM GROUP&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Deletes a permanent group.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;System manager&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;DELETE TEMP GROUP&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Deletes a temporary group.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Any user&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;DISABLE SUBSYSTEM&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Marks a service subsystem file or group as disabled, making it unavailable to users who try to access it through the subsystem.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;System manager&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;DISPLAY&lt;br /&gt;
(field, group, or record)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Displays information about one or more objects.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Any user&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;ENABLE SUBSYSTEM&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Enables a disabled subsystem remote file or group.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;System manager&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td nowrap&amp;gt;MONITOR SUBSYSTEM&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Displays information about Parallel Query Option/204 service subsystem files and groups.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Any user&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;OPEN[C] FILE&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Opens a file. Multiple files can be open simultaneously during a &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; session. OPEN changes the existing default. OPENC does not.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Any user&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;OPEN[C] GROUP&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Opens a group. Multiple groups can be open simultaneously during a &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; session. OPEN changes the existing default. OPENC does not.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Any user&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;START (file or group)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Reverses the effect of the STOP command.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;System manager&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;STATUS&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Displays recovery information about remote &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; files that were opened during an online run.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Any user&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;STOP (file or group)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Prevents a remote file or permanent scattered group from being opened. The STOPped file or group cannot be opened until it is STARTed. STOP and START cannot be used with temporary groups.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;System manager&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;VIEW&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Displays the current settings of &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; parameters.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Any user&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Also supported in PQO are the BUMP, LOGWHO, and MONITOR commands, as well as network control and definition commands and subsystem control commands.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The OPEN[C] FILE, OPEN[C] GROUP, CLOSE, DEFAULT, and DELETE GROUP commands are discussed in this page. For more information on the other commands in the &amp;quot;Commands for files and groups&amp;quot; table, see:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[[List of Model 204 parameters]] and [[List of Model 204 commands]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;[[PQO: Managing files and groups]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==File groups==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
This section describes the composition and advantages of using &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; file groups, then discusses how you create, access, and manipulate file groups.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Composition of a Model 204 group===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
A file group is a collection of &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; files that &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; treats logically as a single file. File groups do not contain data and pointers, but rather a list of files, each of which contains its own data and pointers. When a group is defined, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; creates an entry in an internal table. This entry contains the names of the files that make up the group.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Commands and statements that refer to a group actually cause operations to be performed on each member file. An individual file can be a member of several different groups and a group can contain up to 256 &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; files.    &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
File groups are particularly helpful in working with cyclic data and in organizing independent but similar files. File groups also provide an alias facility.    &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Using a group to work with cyclic data===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Suppose that the file group WEEK consists of the files SUNDAY, MONDAY, TUESDAY, WEDNSDAY (maximum eight letters), THURSDAY, FRIDAY, and SATURDAY. While the union of these seven files is available under the name WEEK, each daily file continues to be accessible as an individual file. The data is not duplicated; an internal table relates WEEK to its member files. WEEK can be defined to include member files that do not yet exist, but it cannot be opened until all member files have been created.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Suppose you want the group WEEK to always contain data from the most recent seven-day period. The conventional approach to this problem is to perform an expensive daily update, adding the newest day&#039;s data to a file and deleting the oldest day&#039;s data. However, the group facility provides a more efficient and convenient alternative. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Each time a new daily file is created, the older daily file (of the same name) is taken off line and archived. If the files must be preserved in chronological order, the definition of the group is modified to reflect the seven most recent daily files. This approach does not require data deletion, file reorganization, or program changes. The archived daily files can be saved permanently in their &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; format and can be restored easily to operating status.     &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Using groups to work with independent but similar data===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Data concerning individual states or similar subdivisions is often kept in separate files. However, users sometimes require reports by various regional groupings or by an entire country. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
With file groups, one user can select a report to be run against a single file, for example, OHIO, while another user can generate a report from the regional collection, for example, OHIO, INDIANA, and ILLINOIS. A third user&#039;s report might take into account all 50 states (a group can contain as many as 256 files). &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
All three of these reports can be generated by the same &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;SOUL&amp;lt;/var&amp;gt; request, using a different group definition or by specifying an alternative OPEN command.        &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Using groups as file aliases===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
A group can consist of only one file, and can have the same name as an existing file. These two facts allow a group name to act as an alias for a &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; file. This allows for the possibility of users addressing a single file by many different names. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Suppose several application programs have been written to operate on a file named FILEA. This file is subsequently merged with FILEB, and the new combined file named FILEC. None of the field names in the combined file have been changed, so application programs could continue to run with the new file. However, those programs open the file named FILEA, not the combined file named FILEC.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The file group feature provides a technique that enables application programs to access the correct file without undergoing a program change. The system manager can define a permanent file group named FILEA that is made up only of the file named FILEC. The application programs need not be changed. When they run, they automatically access the FILEA group.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
A similar strategy can be helpful when testing programs with test files that have different names from those that are used during production.      &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Types of groups===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
There are three types of groups:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Permanent groups are created by the system manager with CREATE. The group name and member list are stored permanently in a &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; file until explicitly deleted by the system manager. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Any user can open a permanent group, unless the group requires a password, in which case the user must know the password. See the discussion about group passwords in [[#File and group passwords|File and group passwords]].&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Temporary groups are created by an individual user with the CREATE command and can be referenced only by that user. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Temporary group names exist only during the current login session and are deleted automatically when you log out, unless you delete them during the session.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Ad hoc groups have no name and are created within a &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;SOUL&amp;lt;/var&amp;gt; request by prefacing a statement with the clause:     &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;IN file1 [,file2 ...]&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Ad hoc groups exist only for the current request. They allow record retrieval from many files at once without defining a group in advance. As in any IN clause, all of the files in an ad hoc group must be opened before the group is mentioned. Ad hoc groups are discussed in more detail in [[#Ad hoc groups|Ad hoc groups]].         &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Creating groups===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The CREATE command is used to create both permanent and temporary file groups. Only the system manager can create a permanent group. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Any user can create a temporary group by entering:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;CREATE [TEMP] GROUP groupname FROM filename [,filename ...]&lt;br /&gt;
[PARAMETER parameter list]&lt;br /&gt;
   .&lt;br /&gt;
   .&lt;br /&gt;
   .&lt;br /&gt;
END&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
At least one file name is required. The following parameters can be included in the list. They are discussed in the description of the CREATE command, in [[CREATE command: Temporary group]] and [[CREATE command: Permanent group]]. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;UPDTFILE &amp;amp;mdash; Defines the group&#039;s update file.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;PROCFILE &amp;amp;mdash; Defines the group&#039;s procedure file.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;BLDGFT &amp;amp;mdash; Creates a group&#039;s field table. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Specifying PROCFILE = * creates a group in which any files can contain procedures. &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Deleting groups===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The DELETE command is used to delete both permanent and temporary groups (only the system manager can delete a permanent group): &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;DELETE [PERM | TEMP] [GROUP] name&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You must close a group before you can delete it. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Examples====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The following example shows the creation of a temporary group.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;CREATE GROUP REGION FROM DELAWARE, MARYLAND, -&lt;br /&gt;
  VIRGINIA&lt;br /&gt;
PARAMETER PROCFILE = VIRGINIA, BLDGFT = NO&lt;br /&gt;
END&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The following example creates a permanent group with multiple procedure files:    &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;CREATE PERM GROUP REGION FROM DELAWARE, MARYLAND, -&lt;br /&gt;
  VIRGINIA&lt;br /&gt;
PARAMETER PROCFILE = *, BLDGFT = NO&lt;br /&gt;
END&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
==Opening and closing Model 204 files and groups==&lt;br /&gt;
 &lt;br /&gt;
===Two ways to open files and groups===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
OPEN/OPENC can be used as either a command or statement to open &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; files and groups. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;For a discussion of OPEN/OPENC as a statement, see [[#OPEN or OPENC statement|OPEN or OPENC statement]]. For a discussion of error handling, see [[#Error handling|Handling errors in file/group open statements]].&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;For a discussion of OPEN/OPENC as a command, see the [[List of Model 204 commands]].&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Using OPEN/OPENC as a command====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When used as a command, OPEN/OPENC opens a file or group and allows retrievals or other references to fields or data records for the file or group in the same request. It also allows updates to a file to be deferred. As a command, OPEN/OPENC can be used within a procedure but must be outside of the request (outside the BEGIN and END statements).               &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Using OPEN[C] as a statement====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When used as a statement, OPEN/OPENC opens a file or group but does not allow retrievals or other references to fields or data records for the file or group in the same request. It does not allow updates to a file to be deferred. As a statement, OPEN/OPENC must appear within the request (between the BEGIN and END statements). &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Opening multiple files or groups===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can open two or more &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; files or groups concurrently. When multiple files and/or groups are open, you can let &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; operate on the default file or group, or direct &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; to operate on a specific file or group. Within a single request, you can refer to any open files or groups and can cross-reference records contained in them. Each of these remains open until you issue a &amp;lt;var&amp;gt;[[CLOSE command|CLOSE]]&amp;lt;/var&amp;gt; command or the &amp;lt;var&amp;gt;[[$Close]]&amp;lt;/var&amp;gt; function for it, or issue the &amp;lt;code&amp;gt;CLOSE ALL&amp;lt;/code&amp;gt; command. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Opening a remote file===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You open a remote file by issuing the OPEN FILE command using either the AT location clause or a file synonym. You can also use an OPEN GROUP command if the file is a member of a scattered group.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====File context====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can open a file in single file context or in permanent group context. A file open as a member of a temporary group is considered open in single file context. You can open in a different context an already open file. Therefore, a remote file can be open in any or all of the following contexts at the same time: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Single file &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Permanent group &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Multiple permanent group &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====File locking behavior====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The locking behavior of the OPEN FILE command for a remote file is identical to that for a local file with regard to: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Shared direct access storage devices (DASD)&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;System level resources&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Application subsystems   &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
See [[Defining the runtime environment (CCAIN)#Resource locking|Resource locking]] for information about resource locking.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Field definition is restricted====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When the OPEN FILE command is successfully executed and a remote file is opened, the status of the file is open. The remote file&#039;s Table A is stored on the client system for as long as the file remains open.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
While a remote file is open to any remote user, the fields cannot be redefined, deleted, or renamed on the server. Server online users receive a message that the file is in use. New fields, however, can be defined. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Opening deferred update data sets&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
A file that is not in deferred update mode can be opened remotely.   &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
A file that is in deferred update mode can be opened remotely only when the file is a member of a service application subsystem. If a remote deferred update data set is specified in the OPEN FILE command, the open is rejected. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Opening a scattered group===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You open a remote file that is a member of a scattered group by issuing the OPEN GROUP command. OPEN GROUP for scattered temporary and permanent groups has the same syntax as for non-scattered groups. Password requirements and privileges for member files are also the same for scattered and non-scattered groups. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
In scattered group context, OPEN GROUP causes &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; to allocate conversations with each of the nodes that contain members of the scattered group (if such conversations do not already exist).&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If scattered groups are defined to allow update privileges, all member files are opened with the indicated privileges when the group is successfully opened. For each remote file opened in group context, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; displays a confirmation message with the file&#039;s name (non-synonym) and location, stating whether updates are allowed. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Opening non-Model 204 files===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Non-&amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; files can be opened within a request by using the form of the OPEN statement described in [[Images#OPEN statement|OPEN statement]].&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===File and group passwords===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Whether you must enter a password when you open a files or permanent group depends on which of the following access types was assigned to it:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Public&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Semipublic&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Private           &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;tr class=&amp;quot;head&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;If file or permanent&lt;br /&gt;
group is... &amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;&lt;br /&gt;
Model 204...&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Public &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Opens it without asking for a file password when the OPEN command is issued. &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Semipublic or private &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Asks you to enter a password during the OPEN operation. For:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Private file or permanent group, you must enter a password in order to open it. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Semipublic files and permanent groups, the password is optional.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Passwords are specified differently for temporary file groups. Opening a temporary group is functionally equivalent to opening a series of files. As each file is opened, you are prompted for the file password, if one is required. The temporary group is opened only after all the files have been opened.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===File and group privileges===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The file manager determines the privileges associated with each password associated with a file or permanent group. The assigned privileges determine which operations you can perform on the data and procedures stored in the file or group. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The file manager also determines the default privileges that are granted for public and semipublic files and permanent groups. The system manager must enter all file passwords and privileges into the system.    &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The privileges for a temporary group are the most restrictive combination of member file privileges. This combination is defined through a logical AND of the privileges of the individual files in the group.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
For an explanation of how the granting of privileges depends on the reference context of a command or a statement, see [[#Privileges according to reference context|Privileges according to reference context]]. See [[Model 204 security features#File security|File security]] for details. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Displaying file and group information===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can display information about one or more open files or groups with the &amp;lt;var&amp;gt;[[DISPLAY command|DISPLAY]]&amp;lt;/var&amp;gt; command:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;DISPLAY [FILE | [PERM | TEMP] GROUP] &lt;br /&gt;
  [(option [, option ...])] &lt;br /&gt;
  {ALL | name [, name ...]}&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If you enter:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;DISPLAY FILE ALL&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
&amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; displays the file name and file parameters for all files that you currently have open. If the DISPLAY command is issued by a file manager, the display includes file data set names. You can also use DISPLAY to display selected or abbreviated file parameters for files, by specifying them as display options. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If you enter:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;DISPLAY GROUP ALL&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
&amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; displays the group name, status (permanent or temporary), member files, and group parameters for all permanent groups and for your temporary groups. You can request that the command display only a list of group names and their status.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Closing files and groups===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
During a single &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; session, you can open several files and/or groups. These remain open until you issue a CLOSE command, as follows:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;CLOSE [ALL | [FILE | [PERM | TEMP] GROUP] name [AT location]]&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Closing a permanent group closes each file in the group that was opened by a group OPEN. But it does not close files that were opened as individual files or as members of other groups. Closing a temporary group does not close the files in the group. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
You can also close a file or group (with some restrictions) within a &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;SOUL&amp;lt;/var&amp;gt; request using the &amp;lt;var&amp;gt;[[$Close]]&amp;lt;/var&amp;gt; function.&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;div id=&amp;quot;openAndOpenC&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;OPEN statement and OPENC statement&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;OPEN or OPENC statement&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;  &amp;lt;!--This was the original section name, there may be links to it--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Open statement and OpenC statement===&lt;br /&gt;
&amp;lt;!--Caution: &amp;lt;div&amp;gt;s above--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The &amp;lt;var&amp;gt;Open&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;OpenC&amp;lt;/var&amp;gt; statements are useful for opening a file, either for subsequent requests, or&lt;br /&gt;
to allow the request to take actions based on the file parameters of the file.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The effect of executing the &amp;lt;var&amp;gt;Open&amp;lt;/var&amp;gt;[&amp;lt;var&amp;gt;C&amp;lt;/var&amp;gt;] statement, like any SOUL statement, takes place during evaluation of&lt;br /&gt;
the request.  Therefore, if the file was not open during compilation, most SOUL statements, such as DML statements&lt;br /&gt;
(&amp;lt;var&amp;gt;Find&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;For&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;Store Record&amp;lt;/var&amp;gt;, etc.) cannot refer to the file within the request.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Some SOUL operations, such as obtaining file parameters,&lt;br /&gt;
do not require a file to be opened during compilation.&lt;br /&gt;
Thus, after an &amp;lt;var&amp;gt;Open&amp;lt;/var&amp;gt;[&amp;lt;var&amp;gt;C&amp;lt;/var&amp;gt;] statement, the request can&lt;br /&gt;
obtain the status of the file by using the &amp;lt;var&amp;gt;[[$View|$View]]&amp;lt;/var&amp;gt; function to return&lt;br /&gt;
the value of the &amp;lt;var&amp;gt;[[FISTAT parameter|FISTAT]]&amp;lt;/var&amp;gt; parameter.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;p&amp;gt;After a &amp;lt;var&amp;gt;Open&amp;lt;/var&amp;gt;[&amp;lt;var&amp;gt;C&amp;lt;/var&amp;gt;] statement, a &amp;lt;b&amp;gt;subsequent&amp;lt;/b&amp;gt; request may access the data in the file.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The &amp;lt;var&amp;gt;Open&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;OpenC&amp;lt;/var&amp;gt; statements are supported in remote context. The use of filename&lt;br /&gt;
synonyms is fully supported.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Syntax====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The format of the &amp;lt;var&amp;gt;Open&amp;lt;/var&amp;gt; or &amp;lt;var&amp;gt;OpenC&amp;lt;/var&amp;gt; statement is:&amp;lt;/p&amp;gt;&lt;br /&gt;
{{Template:Open and OpenC statements syntax}}&lt;br /&gt;
Where:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Open&amp;lt;/var&amp;gt; specifies that the specified file or group becomes the new default file or group context.&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;var&amp;gt;OpenC&amp;lt;/var&amp;gt; specifies that the previous default file or group is preserved when the specified file or group is opened.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Default files and groups are discussed later in this page.&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;The &amp;lt;var&amp;gt;File&amp;lt;/var&amp;gt; keyword specifies that the file to be opened is a &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; file. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;The &amp;lt;var&amp;gt;Perm&amp;lt;/var&amp;gt; keyword specifies that the group to be opened is a &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; permanent group.      &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;The &amp;lt;var&amp;gt;Temp&amp;lt;/var&amp;gt; keyword specifies that the group to be opened is a &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; temporary group.    &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;The &amp;lt;var&amp;gt;Group&amp;lt;/var&amp;gt; keyword specifies that the file to be opened is a &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; group.     &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;i&amp;gt;name&amp;lt;/i&amp;gt; is the name of the &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; file or group to be opened. The file or group name&lt;br /&gt;
can be provided in a %variable or as a quoted or unquoted string.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;The &amp;lt;var&amp;gt;At&amp;lt;/var&amp;gt; keyword specifies that the file to be opened is a remote file. Only individual files (or group members) can be specified using the &amp;lt;var&amp;gt;At&amp;lt;/var&amp;gt; keyword. An entire group cannot be treated as a remote object. Thus none of the keywords &amp;lt;var&amp;gt;Perm&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;Temp&amp;lt;/var&amp;gt;, or &amp;lt;var&amp;gt;Group&amp;lt;/var&amp;gt; can be used with &amp;lt;var&amp;gt;At&amp;lt;/var&amp;gt;.&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
A remote file can also be opened using a file synonym (without the &amp;lt;var&amp;gt;At&amp;lt;/var&amp;gt; clause) or by opening a scattered group of which the file is a member.&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;i&amp;gt;location&amp;lt;/i&amp;gt; is the name of the remote node where the file is located. The location can be provided in a %variable.&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The equal sign (=) directs &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; to open a local file. Since it is possible for two files at different nodes to have identical file names, the equals sign gives you the ability to explicitly use the local file instead of the remote file with the same name.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;The &amp;lt;var&amp;gt;Password&amp;lt;/var&amp;gt; clause specifies a valid password for the file or group to be opened.  The password value can be provided in a %variable or as a quoted or unquoted string.     &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Usage notes====&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;If the &amp;lt;var&amp;gt;Group&amp;lt;/var&amp;gt; keyword is specified without a &amp;lt;var&amp;gt;Perm&amp;lt;/var&amp;gt; or &amp;lt;var&amp;gt;Temp&amp;lt;/var&amp;gt; keyword, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; searches for the name first among temporary groups, then among permanent groups. If no keyword is specified, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; searches for the name among temporary groups first, then permanent groups, and finally &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; files.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;The following message is produced for a &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;SOUL&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;Open&amp;lt;/var&amp;gt;[&amp;lt;var&amp;gt;C&amp;lt;/var&amp;gt;]&lt;br /&gt;
statement if the &amp;lt;var&amp;gt;Open&amp;lt;/var&amp;gt; fails:&lt;br /&gt;
&amp;lt;p class=&amp;quot;output&amp;quot;&amp;gt;&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;*** M204.1521: &amp;lt;i&amp;gt;fileOrGroupName&amp;lt;/i&amp;gt; does not exist or requested access not authorized&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Message 1521 is a counting error and when encountered during APSY processing invokes the APSY error procedure.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;b id=&amp;quot;filGrpOpenErr&amp;quot;&amp;gt;&amp;lt;/b&amp;gt;&amp;lt;b id=&amp;quot;Error handling&amp;quot;&amp;gt;&amp;lt;/b&amp;gt;Handling errors in file/group open statements===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Error conditions encountered during the processing of the OPEN or OPENC statement generate &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; error messages that are not displayed on the terminal. The request should check for errors after the execution of each OPEN or OPENC statement by using the $Status function. The text of the most recently issued error message can then be retrieved by the &amp;lt;var&amp;gt;[[$ErrMsg]]&amp;lt;/var&amp;gt; function.    &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The values that can be returned by the $Status function for the OPEN or OPENC statement are listed in the following table:    &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;tr class=&amp;quot;head&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Value&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Meaning&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt;0&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;The operation was successful. A return code of 0 also clears the message buffer; therefore, the $Errmsg function, if called returns a null string.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt;2&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;A serious error occurred. The error can be retrieved by using the $Errmsg function to receive the last counting or cancellation message produced by &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt;. &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If OPEN GROUP is issued as a &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;SOUL&amp;lt;/var&amp;gt; statement (from within a request), the result of the open operation is indicated with one of three $Status values:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;tr class=&amp;quot;head&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;[[$Status]]&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Description&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt;0&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;All members of the group were successfully opened.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt;1 &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;One or more optional members could not be opened.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt;2&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;A mandatory member could not be opened, MAXFAIL members could not be opened, or all members are missing. &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Example====&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;BEGIN&lt;br /&gt;
    .&lt;br /&gt;
    .&lt;br /&gt;
    .&lt;br /&gt;
OPEN PERM GROUP REGISTERED.AUTOS&lt;br /&gt;
 &lt;br /&gt;
      IF $Status NE 0 THEN&lt;br /&gt;
        PRINT &#039;OPEN ERROR ON AUTO FILE&#039;&lt;br /&gt;
        PRINT $ERRMSG&lt;br /&gt;
        STOP&lt;br /&gt;
    ELSE&lt;br /&gt;
    .&lt;br /&gt;
    .&lt;br /&gt;
    .&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
For more information about $Status, see [[Horizon conversation interface]]. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If the DDNAME of the file to be opened is greater than eight characters, the command is rejected and the following message is issued:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;M204.1903: %C EXCEEDS 8 CHARACTERS IN LENGTH&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Error conditions relating to remote files===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Using the AT keyword with the PERM, TEMP, or GROUP keywords (or with the OPEN DATASET, OPEN EXTERNAL, or OPEN [EXTERNAL] TERMINAL statements) causes the following error message:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;M204.1497: REMOTE SPECIFICATION CONFLICTS WITH OPEN TYPE&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If, when attempting to open a remote file, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; cannot establish a conversation with the remote node, the following error message displays:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;M204.1984: COMMUNICATION ERROR ON REMOTE NODE&lt;br /&gt;
PROCESSING FILE filename AT location&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If a %variable is used to indicate the location of a remote file, and its value is found to be null, the value of the $Status function is set to 2 and the following error message is generated:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;M204.2003: LOCATION MISSING FOR REMOTE FILE&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Error conditions relating to scattered groups===&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;If a mandatory member of a scattered group cannot be opened, the OPEN operation fails for the entire group. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;If an optional member of the group cannot be opened, an error message is issued stating that the file is unavailable. The OPEN operation continues as if the file were not included in the group definition. Storage is still allocated in various internal data structures, however.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;If the CREATE GROUP command MAXFAIL parameter value is exceeded, the group open fails and any successfully opened files are closed. An error message is issued stating that more than MAXFAIL optional files cannot be opened.    &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If all a scattered group&#039;s files are optional and unavailable, a group open fails, even if MAXFAIL is not exceeded. An error message is issued stating that the open failed because all group members are missing. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Closing a remote file===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can close a remote file by issuing the CLOSE command using the AT location clause or a file synonym, using CLOSE ALL, or, if the remote file is the default file, using CLOSE by itself. If the file is a member of a permanent scattered group, you can close the files in the group with CLOSE GROUP. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When a CLOSE command for a remote file is successful, the file is closed on the server node on which the file resides. &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; displays a message confirming the close to the user on the client node. The message identifies the file name and location. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If the file being closed is your last open file on the server node, the conversation with the server is terminated.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
A loss of communications with a remote node during or just prior to your attempt to close a remote file results in the following:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The file is closed on your local node, and you receive a communications error message. The service thread is restarted, which closes the file on the server. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;If the file is a member of a scattered group and you issue CLOSE GROUP, the file is closed on your local node, and &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; attempts to close as usual the rest of the files in the group.   &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;If the file was disabled for you prior to the CLOSE, the file is closed only on your local node.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Using DEFAULT and DELETE GROUP===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; DEFAULT command, which establishes the current default file or group, applies to remote file synonyms, remote file specifications, and scattered groups.   &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; DELETE GROUP command, which deletes an existing permanent or temporary group, applies to scattered groups. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
==Reference context==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The reference context of a statement or command is the file or group in which the statement or command is to operate. If the reference context is a file, the context also involves the way in which the file was opened. The file or group on which a command or a &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;SOUL&amp;lt;/var&amp;gt; statement operates is known as the current file or group.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When many files and groups are open, you must establish a single file or group context for commands and &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;SOUL&amp;lt;/var&amp;gt; statements. You can specify a file or group or can allow the system to operate on the default file or group.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
This section discusses how you specify the file or group reference context, how the reference context affects the privileges that accompany an OPEN of a file or group and the results of a CLOSE command, and procedure file and update file references. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
For additional information about features relating to setting the reference context, refer to:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[[#IN clause|IN clause]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[[#IN GROUP MEMBER clause|IN GROUP MEMBER clause]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[[#$CURFILE and $UPDATE functions|$CURFILE and $UPDATE functions]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Establishing the default file or group===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Unless the user refers to a specific file or group in a command or a &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;SOUL&amp;lt;/var&amp;gt; statement, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; operates on the default. Only one default can be in effect at any one time. The default can be either a file or a group.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can establish the default in one of the following ways:                        &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;&amp;lt;var&amp;gt;OPEN&amp;lt;/var&amp;gt; command.&amp;lt;/b&amp;gt; The &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; file or group opened in the most recent OPEN command becomes the default. &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;However, the default file context is updated only after the request containing the OPEN statement has been evaluated. Therefore, the new default is in place only for subsequent requests.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;If OPENC is issued instead of OPEN, a new default is not established and the previous default is preserved.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;&amp;lt;var&amp;gt;DEFAULT&amp;lt;/var&amp;gt; command.&amp;lt;/b&amp;gt; Using the DEFAULT command, you can specify either a file or a group.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;&amp;lt;var&amp;gt;IN&amp;lt;/var&amp;gt; clause.&amp;lt;/b&amp;gt; The default file/group context during compilation of a request is used, throughout the request, as the file/group context for statements that do not have their own context specification. An IN clause on a &amp;lt;var&amp;gt;BEGIN&amp;lt;/var&amp;gt; or &amp;lt;var&amp;gt;MORE&amp;lt;/var&amp;gt; command sets a default context that remains in effect only for compilation of that request.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Explicitly specifying the reference context===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can specify the file or group context of a &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;SOUL&amp;lt;/var&amp;gt; statement in these ways:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Explicitly referring to a FIND or SORT statement or to a list&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Using the IN clause   &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Placing a statement within a record loop &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Statements that do not fall into one of these categories operate on the default file or group established for the request. This can be established either by default or by an IN clause on the BEGIN or MORE command. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===File and group OPENs and CLOSEs===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
A file can be an individual file, a member of a permanent group, a member of a temporary group, or any combination of these. When a file is referenced in a command or in a &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;SOUL&amp;lt;/var&amp;gt; statement, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; determines whether the file also is a member of an open group. The privileges available for a file can change along with its group membership.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If an OPEN command has been issued for a file or for a temporary group that contains the file, the privileges for that file are the same as those previously established for that file, regardless of whether the file also is a member of a permanent group. However, if a permanent group is opened, but no individual OPEN has been specified for a particular file in that group, the privileges available for that file, when an IN file reference is specified, are the same as those associated with the permanent group. The discussion on privileges and reference context on the next page lists all of the possible file/group combinations.          &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When a file or group is closed with the CLOSE command, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; determines which OPENs have been issued for the file or group, as follows:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;tr class=&amp;quot;head&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;A CLOSE for... &amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Closes...&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Individual file &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Individual file. If the file also was opened as a permanent group member, it is still available for reference as a group member or in an IN file clause.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td nowrap&amp;gt;Permanent group &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;All files in that group, except those that have been opened as individual files or that also are members of other groups.    &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Temporary group &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;None of the files in the group. &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Privileges according to reference context===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The privileges associated with individual files and groups can be granted and combined in different ways, depending upon the reference context:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;tr class=&amp;quot;head&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;When you reference... &amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Your set of privileges are...&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Individual file &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Those granted by &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; when the file was opened. These are privileges associated with the specified file password or, if the password was not required or was specified incorrectly, the default file privileges. With application subsystems, user privileges are those associated with the user class or are the default file privileges.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Temporary or ad hoc group &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Derived from the logical intersection of the individual privileges associated with the files that make up the group. &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; combines the privileges of all of the member files. You are granted only the privileges common to all the files in the group.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Permanent group &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Those granted by &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; when the group was opened. These are the privileges associated with the specified group password or, if the password was not required or was specified incorrectly, the default group privileges.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;File that is concurrently a member of two permanent groups and has not been opened as an individual file &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Derived from the logical union of the privileges associated with the groups. &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; appends the privileges of each of the open groups of which the file is a member. A privilege granted to any of the groups is granted to the file.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;File that has been opened both as an individual file and as a member of a permanent group &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Those associated with the file, not the group. An open group has no effect on the file privileges.    &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When a file that is a member of a permanent group is not opened individually, its privileges are the same as those granted for the group. It still can be referenced individually in a command or in a &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;SOUL&amp;lt;/var&amp;gt; statement. A file that is a member of a permanent group can also be opened individually.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Procedure file and update file references===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When operating on a group, certain commands and &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;SOUL&amp;lt;/var&amp;gt; statements refer to the procedure file or the update file associated with the group. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The group procedure file is the file in which procedures for the group are stored and from which procedures are retrieved or deleted. If an explicit procedure file is not defined with the PROCFILE parameter in the CREATE GROUP command, the procedure file can be specified in an IN clause. The IN clause also can be used to override the group procedure file specification.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The group update file is the file in which records for the group are stored with the &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;SOUL&amp;lt;/var&amp;gt; STORE RECORD statement. If an explicit update file is not defined in the UPDTFILE parameter in the CREATE GROUP command, an update file can be specified in an IN clause. The IN clause also can be used to override the group update file specification.   &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Example====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
This request illustrates the various methods of context specification:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;OPEN CLIENTS&lt;br /&gt;
OPENC CLAIMS90&lt;br /&gt;
BEGIN&lt;br /&gt;
GET.RECS:   FIND ALL RECORDS FOR WHICH&lt;br /&gt;
                SETTLEMENT DATE IS LESS THAN 900401&lt;br /&gt;
            END FIND&lt;br /&gt;
PROCESS:    FOR EACH RECORD IN GET.RECS&lt;br /&gt;
DRIVER:         %DRIVER = DRIVER INVOLVED&lt;br /&gt;
MATCH.REC:      IN CLAIMS90 FIND ALL RECORDS FOR WHICH&lt;br /&gt;
                    DRIVER ID = %DRIVER&lt;br /&gt;
                END FIND&lt;br /&gt;
COMPUTE:        FOR EACH RECORD IN MATCH.REC&lt;br /&gt;
                    IF STATE EQ &#039;FLORIDA&#039; THEN&lt;br /&gt;
                        %TOT = %TOT + 1&lt;br /&gt;
                    END IF&lt;br /&gt;
                END FOR&lt;br /&gt;
            END FOR PROCESS&lt;br /&gt;
            PRINT &#039;1ST QUARTER, 1990: &#039; WITH %TOT -&lt;br /&gt;
                &#039; FLORIDA DRIVERS INVOLVED IN ACCIDENTS&#039;&lt;br /&gt;
END&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
In the preceding request, the OPEN command opens the CLIENTS file or group. The OPENC command also opens a file or group, in this case CLAIMS90. However, the OPENC command does not establish a new default. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The GET.RECS (default) and PROCESS (explicit reference) statements operate on CLIENTS. The DRIVER statement operates on CLIENTS because it is within the record loop for records from CLIENTS. The MATCH.REC (IN clause) and COMPUTE (explicit reference) statements operate on CLAIMS90.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
==IN clause==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The IN clause precedes &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;SOUL&amp;lt;/var&amp;gt; statements to override the default file or group. A special form also creates ad hoc groups. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
A variation of the IN clause, IN GROUP MEMBER, restricts &amp;lt;var&amp;gt;Clear List&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;Find&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;For Record Number&amp;lt;/var&amp;gt;, and &amp;lt;var&amp;gt;Store Record&amp;lt;/var&amp;gt; statements to one member file in a group context. See [[#IN GROUP MEMBER clause|IN GROUP MEMBER clause]] for more information.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Syntax&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The basic form of the IN clause is:   &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;IN [FILE | [PERM | TEMP] GROUP] {filename | groupname} &lt;br /&gt;
   MEMBER %member [AT {location | =}] &lt;br /&gt;
   statement-clause&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If no FILE or GROUP option is specified, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; searches for the name among open temporary groups first, then open permanent groups, and finally open files.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Specifying a remote file===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
A statement or command that references a file using the AT clause is called a remote file specification. The AT clause is valid only for single remote files or remote members of a scattered group explicitly referenced by an IN GROUP MEMBER clause (see [[#IN GROUP MEMBER clause|IN GROUP MEMBER clause]]). Use an unquoted equal sign to instruct &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; to look for the file locally.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;note&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Note:&amp;lt;/b&amp;gt; The &amp;lt;var&amp;gt;For Record Number&amp;lt;/var&amp;gt; statement does not support remote files.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The location names of remote nodes are established with the DEFINE PROCESS command.&lt;br /&gt;
See [[PQO: Remote files and scattered groups]] for more on creating location names.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The location name in the AT clause can be coded as a dummy string inside a &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;SOUL&amp;lt;/var&amp;gt; procedure. Using a dummy string allows the application programmer to code a single file reference in the procedure. Then, at run time, the user can enter a valid remote node name or an equal sign (=) to access different versions of the same file (having the same name), either remotely or locally. See [[Procedures#Procedures|Procedures]] for a detailed discussion of dummy strings.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
A remote file can also be specified using a file synonym. A file synonym is a symbolic name for a remote file that references both the actual file name and the location name. Therefore, when using a file synonym, you do not use the AT clause. Even though a file synonym has been defined, you can still use the full remote file specification, as described above.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
File synonyms are discussed in detail in [[PQO: Managing files and groups]].&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Ad hoc groups===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The form of the IN clause shown below creates an ad hoc group:     &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;IN file1[,file2] ...&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
This form can be used with FIND, FIND AND PRINT COUNT, FIND AND RESERVE, CLEAR LIST, and FOR EACH VALUE statements. The group consists of the listed files, which must already be open. The ad hoc group has no name and exists only for the duration of the request and any request continuations. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Remote files which are members of ad hoc groups can be specified OPTIONAL or MANDATORY. These keywords can be abbreviated OPT and MAN, respectively, as in this example:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;IN file1 (OPT), file2 (MAN) ...&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If you want to refer to an ad hoc group you created earlier in a request, you must repeat the earlier IN clause. If all of the required conditions for duplicate ad hoc groups are met, repetition of the IN clause does not create a second, identical ad hoc group. It only calls on the original ad hoc group definition stored in FTBL.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Duplicate ad hoc groups&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
&amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; considers two ad hoc groups as duplicates if all the following are true:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Their IN clauses contain the same set of files.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Their IN clauses list the files in the same order.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Corresponding files in their IN clauses are both optional or both mandatory.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Duplicate groups do not require additional server table space or network traffic.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Clearing lists===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The CLEAR LIST statement normally clears an existing list; no IN clause is required. When CLEAR LIST appears in a request before the first reference to the list, an IN clause might be necessary to create the list in the same context as the later references. References to an existing set of records in the CLEAR LIST or FIND statement override the IN clause.   &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==IN GROUP MEMBER clause==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The IN GROUP MEMBER clause can be used with CLEAR LIST, FIND ALL RECORDS (and its variants), FIND ALL VALUES, For Record Number (or FRN), and STORE RECORD statements; they are restricted to one member file in a group context.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Syntax====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The format of the IN GROUP MEMBER clause is:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;IN [TEMPORARY | PERMANENT] GROUP groupname &lt;br /&gt;
   MEMBER {%member | filename [AT {location | =] &lt;br /&gt;
   statement&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
Where:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;groupname is the name of the file group&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;%member is a valid %variable, image, or screen item that indicates the group member for the CLEAR LIST, FIND, For Record Number (FRN), or STORE RECORD statement. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;filename specifies the name of a file where location indicates a valid remote node name or the equal sign (=) indicates that you want &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; to look for the named file only locally.&lt;br /&gt;
&amp;lt;p class=&amp;quot;note&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Note:&amp;lt;/b&amp;gt; The &amp;lt;var&amp;gt;For Record Number&amp;lt;/var&amp;gt; option does not support remote files.&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;statement is one of the following:&lt;br /&gt;
&lt;br /&gt;
:CLEAR LIST&lt;br /&gt;
:FIND ALL RECORDS&lt;br /&gt;
:FIND ALL VALUES&lt;br /&gt;
:For Record Number (FRN)&lt;br /&gt;
:STORE RECORD &lt;br /&gt;
&amp;lt;/li&amp;gt;&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Examples====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Suppose, for example, that the group &amp;lt;code&amp;gt;JANSALES&amp;lt;/code&amp;gt; consists of several files corresponding to sales regions. The following statement retrieves a set of records for a single region. The file to be searched has been specified by screen input.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;FDREG: IN GROUP JANSALES MEMBER %SSCREEN:REGION  -&lt;br /&gt;
       FIND ALL RECORDS FOR WHICH TOT GT 500&lt;br /&gt;
       END FIND&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The following example illustrates using a &amp;lt;var&amp;gt;For Record Number&amp;lt;/var&amp;gt; (&amp;lt;var&amp;gt;FRN&amp;lt;/var&amp;gt;) option:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;BEGIN&lt;br /&gt;
%GRPMEMBER=&#039;AUGUST&#039;&lt;br /&gt;
FD: IN GROUP YR2001 MEMBER %GRPMEMBER FRN 164&lt;br /&gt;
PRINT FULLNAME WITH DOB AT 35 WITH SSN AT 50&lt;br /&gt;
END FOR&lt;br /&gt;
END&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Uses for the IN GROUP MEMBER clause===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The most common use of the IN GROUP MEMBER clause is to improve the efficiency of FIND statements when it is known in advance that some group members contain no records that meet the FIND criteria. For example, if Red Sox caps are only sold in the Northeast, the FIND statement labeled &#039;GETNE&#039; below avoids a search through all the regional files.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Another possible use of the IN GROUP MEMBER clause is to build a list by processing one file at a time. Suppose, for example, that a department store chain wants to analyze sales of Boston Red Sox caps in regions other than the Northeast. The selective IN syntax could be used to create the appropriate list by subtraction, as follows:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;GETCAPS: IN GROUP JANSALES FIND ALL RECORDS -&lt;br /&gt;
         FOR WHICH ITEM = &#039;SOXCAP&#039;&lt;br /&gt;
CAPLIST: PLACE RECORDS IN GETCAPS ON LIST FARFANS&lt;br /&gt;
         %X = &#039;NOREAST&#039;&lt;br /&gt;
GETNE:   IN GROUP JANSALES MEMBER %X        -&lt;br /&gt;
         FIND ALL RECORDS FOR WHICH ITEM = &#039;SOXCAP&#039;&lt;br /&gt;
FARLIST: REMOVE RECORDS IN GETNE FROM LIST FARFANS&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Use with lists===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Lists can be created from the results of group FINDs. Records from a group FIND (not using the IN GROUP MEMBER clause) cannot be placed on a list created by an individual file FIND, even if the file is a member of the group, and vice versa.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
However, records found using the IN GROUP MEMBER clause can be added to or removed from the same list as records from group FINDs that do not involve using the IN GROUP MEMBER clause.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Use with $CURFILE and $UPDATE===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You cannot use an IN clause that includes both MEMBER and $CURFILE or $UPDATE.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
==$Curfile and $Update functions==&lt;br /&gt;
 &lt;br /&gt;
===Use with IN clause===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The IN clause also can be specified as shown here:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;IN {$CURFILE | $UPDATE}&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
$Curfile and $Update are the only functions that can be used outside of normal function syntax. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;$Update can be used to satisfy the IN clause requirements of INCLUDE and STORE RECORD. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;$Curfile can be used to satisfy the IN clause requirements for STORE RECORD only.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===$Curfile function===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The $Curfile function returns the name of the current file in a record loop. The current file is defined as the file from which the current record has been selected when the record loop refers to a group. You can use an IN $Curfile clause only within a record loop.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
An IN $Curfile clause can add records to a file based on other data in that file, without regard for the actual file name. The file need not be a member of a group.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===$Update function===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The $Update function returns the name of the update file in the current group or, if a current group does not exist, the name of the current file. If no update file for the current group was specified, an IN $Update clause elicits an error message. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Restrictions for $Curfile and $Update===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You cannot use an IN clause that includes both MEMBER and $Curfile or $Update.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Example 1====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
This sequence illustrates the use of a temporary group with an update file:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;CREATE TEMP GROUP FISCAL FROM FY89, FY90, FY91&lt;br /&gt;
PARAMETER UPDTFILE = FY91, PROCFILE = FY89&lt;br /&gt;
END&lt;br /&gt;
OPEN GROUP FISCAL&lt;br /&gt;
BEGIN&lt;br /&gt;
GET.ACCT.NO:    %A = $READ(&#039;ENTER ACCT NO OR &amp;quot;CR&amp;quot;&#039;)&lt;br /&gt;
                IF %A EQ &amp;quot; THEN&lt;br /&gt;
                    JUMP TO TOT.CT&lt;br /&gt;
                END IF&lt;br /&gt;
                %B = $READ(&#039;ENTER AMOUNT&#039;)&lt;br /&gt;
                IF %B EQ &amp;quot; THEN&lt;br /&gt;
                    JUMP TO TOT.CT&lt;br /&gt;
                END IF&lt;br /&gt;
FIND.ACCT.RECS: IN $UPDATE FIND ALL RECORDS FOR WHICH&lt;br /&gt;
                    ACCT NO = %A&lt;br /&gt;
                END FIND&lt;br /&gt;
CT:             COUNT RECORDS IN FIND.ACCT.RECS&lt;br /&gt;
                IF COUNT IN CT GT 1 THEN&lt;br /&gt;
                    PRINT &#039;ACCT MULTIPLY DEFINED&#039; AND %A&lt;br /&gt;
                    JUMP TO END.REQUEST&lt;br /&gt;
                END IF&lt;br /&gt;
COMPUTE.B:      FOR EACH RECORD IN FIND.ACCT.RECS&lt;br /&gt;
                    %B = %B + AMT&lt;br /&gt;
                    CHANGE AMT TO %B&lt;br /&gt;
                    JUMP TO GET.ACCT.NO&lt;br /&gt;
                END FOR&lt;br /&gt;
ADD.REC:        STORE RECORD&lt;br /&gt;
                    ACCT NO = %A&lt;br /&gt;
                    AMT = %B&lt;br /&gt;
                END STORE&lt;br /&gt;
GET.NEXT:       JUMP TO GET.ACCT.NO&lt;br /&gt;
TOT.CT:         FIND AND PRINT COUNT&lt;br /&gt;
END.REQUEST:&lt;br /&gt;
END&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The request searches the group update file (FY91) for an account number to match the one entered by the user. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;If there is more than one record with that number, the request ends. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;If a single record exists, the amount entered by the user is added to that record. The request then asks for a new account number. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;If no record exists with a particular account number, the FOR loop falls through to the ADD.REC statement. The STORE RECORD statement does not contain an IN clause and thus stores the new record in the update file, FY91.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When the user indicates that updating is finished by pressing a carriage return in response to the first prompt, execution proceeds to the TOT.CT statement. The TOT.CT statement contains neither an explicit reference to another statement nor an IN clause, so the request prints a single combined count of the number of records in the three files in the group.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Example 2====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The next example creates an ad hoc group from the open files HISTORY and FY90. The COMPUTE.TOT statement causes the amount fields from both files to be added to a grand total to be printed at the end of the request. The CHANGE.CAT statement uses the $CURFILE function to limit the budget category change to records in the history file.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;BEGIN&lt;br /&gt;
A.CAT:       IN HISTORY, FY80 FIND ALL RECORDS FOR WHICH&lt;br /&gt;
                 BUDGET CAT = A OR AA&lt;br /&gt;
             END FIND&lt;br /&gt;
             FOR EACH RECORD IN A.CAT&lt;br /&gt;
COMPUTE.TOT:     %TOT = AMT + %TOT&lt;br /&gt;
CHANGE.CAT:      IF $CURFILE EQ &#039;HISTORY&#039; AND -&lt;br /&gt;
                     BUDGET CAT EQ &#039;AA&#039; THEN&lt;br /&gt;
                     CHANGE BUDGET CAT TO &#039;A&#039;&lt;br /&gt;
                 END IF&lt;br /&gt;
             END FOR&lt;br /&gt;
             PRINT &#039;TOTAL DOLLARS THRU 1990: &#039; WITH %TOT&lt;br /&gt;
END&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Context when using statements outside record loops==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Most &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;SOUL&amp;lt;/var&amp;gt; statements that appear outside record loops can operate in either a file or group context. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
A few statements (such as the two listed below) require further specification in group context. Sometimes the specification appears in the group definition; in other cases, an IN clause is used to override a group default.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;INCLUDE requires a group procedure file or an IN clause.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;STORE RECORD requires a group update file or an IN clause.   &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
==Groups with multiple procedure files==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If you specify &amp;quot;PROCFILE = *&amp;quot; when a group is created, then that group can contain more than one procedure file. When a procedure is included, search order is determined by the order in which the files were specified in the CREATE GROUP command.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The use of multiple procedure files in application subsystem development is explained in [[Application Subsystem development]].&lt;br /&gt;
For more information, see &amp;lt;var&amp;gt;[[CREATE command: Temporary group|CREATE GROUP]]&amp;lt;/var&amp;gt; command information.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
==Cross-referencing==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Cross-referencing means using data from one place to determine retrieval or update operations in another. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Example====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
This example illustrates cross-referencing between a group and a file. The temporary group FISCAL is the group defined earlier in this page. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;OPEN FILE HISTORY&lt;br /&gt;
OPEN GROUP FISCAL&lt;br /&gt;
BEGIN&lt;br /&gt;
A.CAT:      FIND ALL RECORDS FOR WHICH&lt;br /&gt;
                BUDGET CAT = A&lt;br /&gt;
            END FIND&lt;br /&gt;
            PLACE RECORDS IN A.CAT ON LIST REMAINDER&lt;br /&gt;
            FOR EACH RECORD ON LIST REMAINDER&lt;br /&gt;
                %ACCT = ACCT NO&lt;br /&gt;
MATCH:          FIND ALL RECORDS ON LIST REMAINDER FOR WHICH&lt;br /&gt;
                    ACCT NO = %ACCT&lt;br /&gt;
                END FIND&lt;br /&gt;
                REMOVE RECORDS IN MATCH FROM LIST REMAINDER&lt;br /&gt;
HIST.MATCH:     IN HISTORY FIND ALL RECORDS FOR WHICH&lt;br /&gt;
                    ACCT NO = %ACCT&lt;br /&gt;
                END FIND&lt;br /&gt;
HIST.CT:        COUNT RECORDS IN HIST.MATCH&lt;br /&gt;
                IF COUNT IN HIST.CT NE 0 THEN&lt;br /&gt;
                    PRINT %ACCT WITH &#039; FOUND IN HISTORY&#039;&lt;br /&gt;
                    JUMP TO NEXT.REC&lt;br /&gt;
                END IF&lt;br /&gt;
                PRINT %ACCT WITH &#039; NOT FOUND IN HISTORY&#039;&lt;br /&gt;
NEXT.REC:       *GO TO NEXT RECORD ON LIST&lt;br /&gt;
            END FOR&lt;br /&gt;
END&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The &amp;lt;code&amp;gt;A.CAT&amp;lt;/code&amp;gt; statement finds a set of records from the default group &amp;lt;code&amp;gt;FISCAL&amp;lt;/code&amp;gt;. Records from the group are placed on a list. As records are processed, other records in the set that have identical account numbers are removed so that each account number is printed only once. Until the &amp;lt;code&amp;gt;HIST.MATCH&amp;lt;/code&amp;gt; statement, all statements refer to &amp;lt;code&amp;gt;FISCAL&amp;lt;/code&amp;gt;. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The &amp;lt;code&amp;gt;HIST.MATCH&amp;lt;/code&amp;gt; statement uses the account number from the current record in &amp;lt;code&amp;gt;FISCAL&amp;lt;/code&amp;gt; to search the single file &amp;lt;code&amp;gt;HISTORY&amp;lt;/code&amp;gt;. The &amp;lt;code&amp;gt;HIST.MATCH&amp;lt;/code&amp;gt; through &amp;lt;code&amp;gt;HIST.CT&amp;lt;/code&amp;gt; statements refer to the &amp;lt;code&amp;gt;HISTORY&amp;lt;/code&amp;gt; file. A message is displayed to indicate whether or not the history file contains records with the current account number.  &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
==Group operations in SOUL==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The following discussion summarizes the ways in which file groups affect the following &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;SOUL&amp;lt;/var&amp;gt; operations:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Find&amp;lt;/var&amp;gt; statement&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Sorted files&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Sort&amp;lt;/var&amp;gt; statement&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Lists&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Record numbers&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;For Each Value&amp;lt;/var&amp;gt; statements&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Field type variations within a group&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;For Each Record&amp;lt;/var&amp;gt; statements&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===FIND statement===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When a FIND, FIND AND PRINT COUNT, or FIND AND RESERVE statement is used in a group context, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; performs a series of individual file FINDs; however, the group FIND results in one set of records instead of several sets. Records in the set are arranged by file in the order in which the members were listed when the group was created. Any record loop statement referring to this set automatically switches files at the appropriate time. Once a record is selected by the loop, operations are performed only on that record and the file that contains it.      &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Sorted files===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Files with sort key organization can be used as members of groups. However, there is no group sort sequence. Therefore, the SFL$ and SFGE$ conditions cannot be used in a group FIND. The IN ORDER clause is not allowed in a &amp;lt;var&amp;gt;For Each Record&amp;lt;/var&amp;gt; statement that refers to a group.                 &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===SORT statement===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The SORT statement can refer to a group FIND or a group list. The entire set of records is sorted across file boundaries to produce a single, temporary set of records. These records then can be processed with a &amp;lt;var&amp;gt;For Each Record&amp;lt;/var&amp;gt; loop. The $CURFILE function can be used to print the original file names of the individual sorted records.        &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Lists===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Lists can be created from the results of group FINDs. Records from a group FIND cannot be placed on a list created by an individual file FIND, even if the file is a member of the group, and vice versa. Records from different groups cannot be placed on a single list.   &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
An individual record within a &amp;lt;var&amp;gt;For Each Record&amp;lt;/var&amp;gt; loop on a group can be added to or removed from a list.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Record numbers===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The $CURREC function and the POINT$ condition of the FIND statement are not recommended for use in a group context. Both $CURREC and POINT$ refer to the internal record numbers of a file; these numbers are assigned to records on a file basis as records are added. At a group level, the record numbers have no meaning because the record numbers are not unique within a group. POINT$ cannot be used as a condition in a group FIND. The $CURREC function can be used, but you must ensure that the number is used only in reference to the file from which the record came.              &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The value form of the &amp;lt;var&amp;gt;For Record Number&amp;lt;/var&amp;gt; statement can be used in group context. When a value is specified and group context is desired, the statement must be preceded by an IN clause in order to indicate the name of the file in which the record number occurs.             &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===FOR EACH VALUE statement===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When the FOR EACH VALUE statement refers to a group, the values are supplied in order. If, in at least one of the group members, the value field is ORDERED NUMERIC, the values are supplied in numerical order. Otherwise, they are supplied in order according to the standard EBCDIC collating sequence.             &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Field type variations within a group===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
It is possible that a given field name might not have the same properties in every file in a group. A field name, for example, can have the NUMERIC RANGE attribute in some files, but not in others. Furthermore, a field that appears in one or more files of a group might not exist in any of the others.       &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====KEY and NON-KEY fields====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Within a group, a field can be defined as KEY in some files and NON-KEY in others. When this occurs in a group FIND condition, the FIND statement performs a key search based on the index in those files in which the field is defined as KEY, and it does a direct search of the data records in the files in which it is defined as NON-KEY. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====NUMERIC RANGE and NON-RANGE fields====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The FIND statement operates in a similar manner when a numeric retrieval is specified for a group in which some files have the field defined as NUMERIC RANGE, and others have it defined as NON-RANGE. Records in files that have the field defined as NUMERIC RANGE are retrieved through the index, and records in the other files are retrieved by a direct search.             &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Absent fields====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When some files in a group do not contain a specified field, records in those files are handled as if they contained the absent fields. If none of the files contain a specified field, any statement referring to that field is rejected.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====PRINT and SORT statements====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Another field type conflict affects PRINT and SORT statements. When specified fields have the INVISIBLE attribute in some files and not in others, records that contain INVISIBLE fields are handled as if the field does not exist. If the field is INVISIBLE in all the files, the PRINT or SORT statement is rejected.                                     &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Processing====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Suppose you attempt to change a field described as LENGTH 3 to the value COLORADO. In group context, this change is rejected during compilation only if it is invalid in all of the files in the group. Otherwise, the reference is accepted during compilation. It is rejected during evaluation only if an attempt is made to change a field that is too short to contain the new value.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
In general, references in group context are rejected during compilation only if they are invalid for every file in the group. Otherwise, all validity checks are made at the file level during evaluation.     &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===FOR EACH RECORD statement===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The &amp;lt;code&amp;gt;For Each Record In Order By&amp;lt;/code&amp;gt; form of the &amp;lt;var&amp;gt;For Each Record&amp;lt;/var&amp;gt; statement is not allowed in group context.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
==Referencing remote files in requests==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Request compilation is initiated when &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; encounters a &amp;lt;var&amp;gt;BEGIN&amp;lt;/var&amp;gt; command. A request that refers to a remote file is compiled on both client and server nodes. &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; initiates compilation on the remote server system when a reference to a remote file is first encountered.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
During compilation, as remote references are encountered, the client system sends data manipulation language (DML) calls to the participating server node, or nodes, to be compiled.     &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Example====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The following example below shows an excerpt from a procedure that references a &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; file (named VEHICLES) residing at a remote location (whose symbolic name is defined as BOSTON).&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Prior to accessing a remote file, the following conditions must be met:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The Parallel Query Option/204 network is defined on both the client and server systems.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The OPEN LINK command is successfully issued by the &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; system manager (or User 0) on both the client and server systems, so that the connection for the Parallel Query Option/204 conversation is enabled.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;DEFINE FILE CARS WITH SCOPE=SYSTEM    -&lt;br /&gt;
  FILENAME=VEHICLES  -&lt;br /&gt;
  LOCATION=BOSTON&lt;br /&gt;
OPEN CARS&lt;br /&gt;
.&lt;br /&gt;
BEGIN&lt;br /&gt;
.&lt;br /&gt;
FD: IN CARS FD&lt;br /&gt;
    MAKE=FORD&lt;br /&gt;
    END FIND&lt;br /&gt;
.&lt;br /&gt;
.&lt;br /&gt;
.&lt;br /&gt;
FR: FR IN FD&lt;br /&gt;
    PAI&lt;br /&gt;
    END FOR&lt;br /&gt;
.&lt;br /&gt;
.&lt;br /&gt;
.&lt;br /&gt;
END&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Input/output operations that involve network transmissions are entailed in using the OPEN, FIND, and FOR statements to reference a remotely located file. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
In the previous example:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;OPEN &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The user request to open a remote file (CARS) initiates activity at the remote location (BOSTON) where the file resides. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The server sends a copy of the &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; file information (Table A) to the user&#039;s (client) node so that compilation can proceed.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;FIND (FD)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The client sends FIND criteria (FORD vehicle records) to the remote location for evaluation. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;FOR EACH RECORD (FR) &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The client processes records using a &amp;lt;var&amp;gt;For Each Record&amp;lt;/var&amp;gt; loop. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The server sends records from the found set to the user&#039;s node, one page of records at a time. Only records in the found set are transmitted.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The previous example shows remote file references using a file synonym. As an alternative, if no DEFINE FILE command is issued on the client system, you can reference the remote file using a remote file specification (AT clause). &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
For example, instead of OPEN CARS, you use:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;OPEN VEHICLES AT BOSTON&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Instead of IN CARS FD, you use:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;FD: IN VEHICLES AT BOSTON FD&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
See [[PQO: Remote files and scattered groups]] for additional information.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Request continuation is not supported===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Remote file reference is not supported in a request continuation.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The MORE command and END MORE statement are not supported if the continued request refers to a remote file.       &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Errors during compilation and evaluation===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Compilation and evaluation errors in Parallel Query Option/204 applications are discussed in separate sections below. Both sections discuss how &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; handles noncommunications errors and communications errors when a remote file is referenced.   &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Compile time error handling====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If a noncommunications error occurs during compilation when a client application references a file on a server node:      &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; prints on the client node the current line in the client procedure and the error message that was generated on the server node.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Compilation continues on the client node only, regardless of the number of errors encountered on server nodes. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If a communications problem occurs during compilation, in any remote file or group context:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The compilation is terminated. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;All files at the referenced node are disabled for the client user.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Evaluation time error handling====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
&amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; begins to execute a &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;SOUL&amp;lt;/var&amp;gt; request even though that request contains a reference to a remote file or group that was already made unavailable to the request prior to evaluation. The action &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; takes depends on the context of the file or group referenced in the request:    &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;tr class=&amp;quot;head&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Context&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Action&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Remote single file&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;ON MISSING FILE unit invoked &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Scattered group&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;ON MISSING FILE unit invoked&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;File member of scattered group&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;ON MISSING MEMBER unit not invoked &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If a noncommunications error occurs on an already opened remote file, the error message generated at the remote node is printed on the client node, and the request is canceled. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If you lose communications during evaluation with an already opened remote file, all files at that node are disabled for you, and &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; makes one of three responses:  &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Takes no further action, if all of the following are true:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;File is in group context &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;File is an optional group member&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;MAXFAIL parameter setting in CREATE GROUP is not exceeded&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Node to which the file belongs has no uncommitted updates&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Invokes one of two ON units:  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;ON MISSING MEMBER &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;ON MISSING FILE &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Invokes the ON ERROR unit (if present) and cancels the request. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Using ON MISSING MEMBER and ON MISSING FILE===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The specific behavior of the ON MISSING MEMBER and the ON MISSING FILE units is described below. For a code example with these ON units, see [[#Using file and group availability $functions|Using file and group availability $functions]]. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Using the ON MISSING MEMBER unit====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
ON MISSING MEMBER handles errors involving the availability of scattered group members. It obeys the same scoping rules as all other ON units. Its format follows: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt; ON MISSING MEMBER&lt;br /&gt;
 .&lt;br /&gt;
 .&lt;br /&gt;
 .&lt;br /&gt;
 END ON&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
ON MISSING MEMBER is invoked whenever the following are all true: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;An operation in group context fails against a remote optional member of the group. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;The member was not previously unavailable to the request. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;The MISSING FILE condition is not raised. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When ON MISSING MEMBER is invoked, these consequences follow for all the user&#039;s member files at that server node: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The group member is made unavailable to the group (both during and after request execution). &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;The group member is considered disabled. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Subsequent references to the group in the same request for files at that server do not invoke ON MISSING MEMBER. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If an operation in group context fails against a remote optional member of a group and no ON MISSING MEMBER unit is active, the member is made unavailable to the group and the operation completes as if the member were not part of the group definition.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When control is passed to an ON MISSING MEMBER unit, you can return control to the request with a RETRY, BYPASS, or JUMP TO statement. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
ON MISSING MEMBER units cannot be nested. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Communications failures during ON MISSING MEMBER====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If a communications failure occurs while communicating with a different node within an ON MISSING MEMBER unit, the ON ERROR unit is invoked or the request is cancelled. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If a communications failure occurs while receiving records from a remote node in a &amp;lt;var&amp;gt;For Each Record&amp;lt;/var&amp;gt; loop in scattered group context, you can use either the CONTINUE statement or the BYPASS statement to instruct &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; how to proceed:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The CONTINUE statement causes the FOR loop to continue processing records from the next available group member. All unavailable files are skipped, but the remaining available files are processed. Note that you cannot use the CONTINUE statement with an ON MISSING MEMBER unit unless the return value of the $MISSTMT function is FOR.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;The BYPASS statement tells &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; to exit the FOR loop, ignoring any unprocessed group members, and continuing request execution with the statement immediately following the END FOR which closes the current FOR loop.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Using the ON MISSING FILE unit====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
ON MISSING FILE handles errors involving the availability of remote files in single file context, and involving mandatory and MAXFAIL conditions of remote files in group context. It obeys the same scoping rules as all other ON units. Its format follows: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt; ON MISSING FILE&lt;br /&gt;
 .&lt;br /&gt;
 .&lt;br /&gt;
 .&lt;br /&gt;
 END ON&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
ON MISSING FILE is invoked for any of the following circumstances:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;An operation in single file context fails against a remote file.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;An operation in group context fails against a remote mandatory member.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;An operation in group context fails against a remote optional group member and the number of missing members is greater than the MAXFAIL parameter (CREATE GROUP).&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When ON MISSING FILE is invoked, these consequences follow: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The file or group is made unavailable to the request. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;The file or group is disabled for the user. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;All future references to the file or group in the same request cause the request to be canceled.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If an operation that normally calls for an ON MISSING FILE unit fails, and no MISSING FILE unit is active, the ON ERROR unit is invoked. If no ON ERROR unit is active, the request is canceled. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When control is passed to an ON MISSING FILE unit, you can return control to the request with a BYPASS or JUMP statement. RETRY is not allowed. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
ON MISSING FILE units cannot be nested. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Communications failures during ON MISSING FILE====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If a communications error failure occurs while communicating with a different node within an ON MISSING FILE unit, the ON ERROR unit is invoked or the request is canceled.   &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Clearing ON MISSING MEMBER and ON MISSING FILE====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Like other ON units, you can clear ON MISSING MEMBER and ON MISSING FILE with the CLEAR ON command, according to the following syntax:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;CLEAR ON [MISSING FILE | MISSING MEMBER}&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
==Using retrieval statements with remote files==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
This section describes the individual &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;SOUL&amp;lt;/var&amp;gt; retrieval statements (and any usage restrictions) that you can use with a remote file or group.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Using the FIND ALL RECORDS statement===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
All forms of the FIND ALL RECORDS statement are supported in remote file and scattered group context. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
A FIND statement in remote context produces a record set on each of the server nodes to which the statement refers.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
All record locks are maintained on the server nodes. If a record locking conflict occurs, partial found sets are dequeued (on several nodes if necessary), and the normal FIND CONFLICT action is taken.   &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
See the discussion of LOCATION$ on [[#Using retrieval conditions|Using retrieval conditions]] for information about restricting group context FIND results.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Using the FOR EACH RECORD statement===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
All forms of the &amp;lt;var&amp;gt;For Each Record&amp;lt;/var&amp;gt; statement are supported in remote file and scattered group context except for the IN ORDER clause, which is not supported in scattered group context. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Except for the following cases, when a FOR statement is executed, it retrieves from each record only the fields that are referred to in the loop. Data is handled differently by the server in the following cases: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;If the FOR loop references a field name variable, such as %%fieldname, or if it contains a PAI statement, the entire record is transmitted from the server node.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;If a subscripted field reference is used in a FOR loop, all occurrences of the field are transmitted from the server node.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
A CODED field is decoded before being transmitted from the server node.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====OPTIMIZING FNV option====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Use the OPTIMIZING FNV option with the &amp;lt;var&amp;gt;For Each Record&amp;lt;/var&amp;gt; statement to optimize retrievals with field name variables. You can abbreviate this option to OPT FNV. OPTIMIZING FNV prevents FOR loop retrievals with field name variables from triggering the retrieval of all fields and all occurrences.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Specify OPT FNV in one of two places:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Before the WHERE or WITH option and after all other options&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;At the end of the FOR statement when the WHERE or WITH option is not present&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When you use OPTIMIZING FNV, only the initial value of the field name variables (%%variables) at the start of the FOR loop are used to select the fields that are retrieved and shipped to the client node. Therefore, the field name variable &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;must&amp;lt;/var&amp;gt; have the proper value at the time the FOR loop is first executed. Each time the FOR loop is entered (after the loop has completed), the field name variable values are reset.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If the field name variable is changed in the FOR loop to the name of another field that was not explicitly referenced, the other field is &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;not&amp;lt;/var&amp;gt; retrieved and a default value of null is used for the field name variable reference. See [[Record loops#Field name variable optimization|Field name variable optimization]].    &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Using the For Record Number statement===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
All forms of the &amp;lt;var&amp;gt;For Record Number&amp;lt;/var&amp;gt; statement are supported in remote file and scattered group context, although &amp;lt;var&amp;gt;For Record Number&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;For Record Number In &amp;lt;i&amp;gt;label&amp;lt;/i&amp;gt;&amp;lt;/var&amp;gt; might have different results if you are working with records that are not locked. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
&amp;lt;var&amp;gt;For Record Number In &amp;lt;i&amp;gt;label&amp;lt;/i&amp;gt;&amp;lt;/var&amp;gt; refers to a preceding &amp;lt;var&amp;gt;For Each Record&amp;lt;/var&amp;gt; statement. In Parallel Query Option/204, the records retrieved for the &amp;lt;var&amp;gt;For Each Record&amp;lt;/var&amp;gt; loop are copied and sent to the client when the &amp;lt;var&amp;gt;For Each Record&amp;lt;/var&amp;gt; statement is evaluated. If the records are not locked after the retrieval, by the time the &amp;lt;var&amp;gt;For Record Number In &amp;lt;i&amp;gt;label&amp;lt;/i&amp;gt;&amp;lt;/var&amp;gt; statement is executed, the record copy to which you are referring might no longer match the record at the server.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
However, if you use &amp;lt;var&amp;gt;For Record Number&amp;lt;/var&amp;gt; without &amp;lt;var&amp;gt;In &amp;lt;i&amp;gt;label&amp;lt;/i&amp;gt;&amp;lt;/var&amp;gt;, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; locks the record to which you are referring and sends a copy to the client during &amp;lt;var&amp;gt;For Record Number&amp;lt;/var&amp;gt; execution. Only the fields referred to by &amp;lt;var&amp;gt;For Record Number&amp;lt;/var&amp;gt; are sent.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can also use the OPTIMIZING FNV option with the &amp;lt;var&amp;gt;For Each Record Number&amp;lt;/var&amp;gt; statement. If you do so, the information provided in [[#Using the FOR EACH RECORD statement|Using the FOR EACH RECORD statement]] is valid, with this exception: you must specify the &amp;lt;var&amp;gt;Opt FNV&amp;lt;/var&amp;gt; option at the end of the statement.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Using the FOR EACH VALUE statement===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
All forms of the &amp;lt;var&amp;gt;For Each value&amp;lt;/var&amp;gt; statement are supported in remote file and scattered group context. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Using the RELEASE statement===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The RELEASE ALL RECORDS and RELEASE RECORDS IN or ON statements are performed on the server system, causing any remotely held found sets to be released.         &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Using the SORT RECORDS statement===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The SORT RECORDS statement is supported in remote file and scattered group context. However, the SORT RECORDS k option is ignored. If you use SORT k RECORDS, all the records referred to, not just the first k records, are sorted. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Sort operations for remote file data are executed on each affected server node and the results are merged. Sort keys can include fields that are not defined in all members of a scattered group. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Using LIST functions===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
List processing functions are supported in remote context. List operations for remote file data are performed on the server node on which the file resides. For scattered groups, a list is created on each node that contains a member of the group. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The following example is commented to show the resulting conversation elements: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;IN PARTS AT DETROIT BEGIN&lt;br /&gt;
CLEAR LIST XYZ            (Send CLEAR LIST function to DETROIT)&lt;br /&gt;
A: FD PTYPE=&#039;XYZ&#039;         (Send FIND function to DETROIT)&lt;br /&gt;
B: FR A                   (Retrieve records)&lt;br /&gt;
   PLACE RECORD ON LIST XYZ  (Send PLACE RECORD function to DETROIT)&lt;br /&gt;
   .&lt;br /&gt;
   .&lt;br /&gt;
   .&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Note that PLACE RECORDS IN A ON LIST XYZ would have the same effect but requires only one network operation.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Using the PRINT statement===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The PRINT *ID statement cannot be used in remote file context. All other forms of the PRINT statement can be used to print field values for remote files, with the exception of Large Object Data stored in Table E. You can print the Large Object Data locator stored in Table B. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Printing preallocated fields with a PAI statement====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
PAI or PAI INTO normally displays preallocated fields first in its output. In Parallel Query Option/204, however, some update operations store new preallocated field values at the end of the record, which is displayed by PAI.   &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
PQO/204 ships a copy of all of the fields that are referenced in the FOR loop to the client node. If you change or add a preallocated field value, this value will be placed at the end of the buffer on the client that contains the copies of the fields from the server Online where the file actually resides and the original updates have been made.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
PAI of this record, for performance reasons, will not ship the fields again, and simply takes the field data from the local buffer, and shows that the preallocated field value is at the end of the record.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
In fact, the record on the remote file has been updated properly with the preallocated fields at the beginning of the record.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Fields in a remote file update are transferred to the local node in the non-preallocated format. Some updates to preallocated fields that take place within a FOR loop (for instance, ADD) store new values at the end of the record. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If preallocated fields are not updated within a FOR loop, the output of the PAI statement is the same as in the non-distributed case.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Using retrieval conditions===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Except as described below for FILE$ and LOCATION$, retrieval conditions act the same in remote context as they do locally. In scattered groups, retrieval conditions can include fields that are not defined in all members of the group. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The following retrieval conditions are supported in remote context: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;FILE$&lt;br /&gt;
FIND$&lt;br /&gt;
LIST$&lt;br /&gt;
LOCATION$&lt;br /&gt;
POINT$&lt;br /&gt;
SFGE$&lt;br /&gt;
SFL$&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Using FILE$====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The FILE$ condition is valid only in group context. It can accept remote file specifications and remote synonyms. For example, the following FIND results are restricted to values in the STUDENTS file whose location is NYC:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;IN GROUP STUDENTS FD FILE$ &#039;STUDENTS&#039; AT NYC AND SEX = &#039;F&#039;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Valid FILE$ argument formats for remote files are: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Literal remote file specifications or file synonyms&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Literal remote file specifications or file synonyms following dummy strings &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;The equality symbol (=) to point to the node on which the request is running&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Invalid FILE$ argument formats for remote files are:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;%Variables&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Remote file specifications enclosed entirely in quotes (&#039;STUDENTS AT NYC&#039; is not valid)    &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Using LOCATION$====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can use the LOCATION$ condition to restrict group context FIND results to a particular node. Used like FILE$, LOCATION$ is valid only in group context. The following FIND results are restricted to files in the STUDENTS group whose location is either MA or VT:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;IN GROUP STUDENTS FD (LOCATION$ MA OR LOCATION$ VT) AND COLOR = &#039;BLUE&#039;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The location referred to by LOCATION$ is the location name used in file synonyms and remote file specifications &amp;amp;mdash;&lt;br /&gt;
the symbolic name specified in the DESTINATION parameter of a client DEFINE PROCESS command&lt;br /&gt;
(described in [[PQO: Defining a PQO network]]).   &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Valid LOCATION$ argument formats are: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Literal location names&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Literal location names following dummy strings &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;The equality symbol (=) to point to the node on which the request is running&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
LOCATION$ arguments cannot be %variables. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If an optional member of a scattered group is unavailable, no records are found for that file and processing continues. &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Using update statements with remote files==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
With Parallel Query Option/204, you can execute single-node updates only; each &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; transaction can update data on only one node.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If the current transaction has updated a node (either local or remote) that is different from the node referred to by another update statement within the transaction, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; displays an error message stating that you violated the single-node update rule. The current transaction is backed out and the request is canceled. This restriction is checked at evaluation time. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
An application program must end the current transaction (either commit it or back it out) before the application can update files on a different node (either remote or local). &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
This section discusses the &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;SOUL&amp;lt;/var&amp;gt; update statements that you can use with a remote file or group and includes a discussion of updating records that are not locked. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Updating unlocked record sets===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
In a typical Parallel Query Option/204 remote update, a client issues a &amp;lt;var&amp;gt;Find&amp;lt;/var&amp;gt; statement to retrieve a set of records from a service node file. A client &amp;lt;var&amp;gt;For Each Record&amp;lt;/var&amp;gt; statement triggers the transfer of a copy of the record set to the client node. The client application loops through and updates the records on the service node and the client node copy. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If the service node records are not locked (for example, you use FIND WITHOUT LOCKS) during the update processing, other users might make changes on the service node to the records in the copied set. Changes that happen after the set is copied and before the update is finished can introduce inconsistencies between the client copy and the actual server data. Such changes make obsolete the client copy of the record set. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
For example, some field-level operations depend on the current state of a record: if there are three occurrences of a field, CHANGE fieldname(6) adds a fourth occurrence. If there are six or more occurrences, the same statement changes the sixth occurrence. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
A client issues this CHANGE anticipating six or more occurrences. Before the CHANGE is processed, users on the server delete all but three occurrences. The CHANGE is processed and the service node file ends up with three occurrences unchanged and four occurrences altogether; the client copy has no deletions and a changed sixth occurrence. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If the client user prints the record information after the CHANGE but within the same &amp;lt;var&amp;gt;For Each Record&amp;lt;/var&amp;gt; loop, the display shows the client&#039;s view of the record. The client does not detect that this view does not match the current server data. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If the print of the record information is after the CHANGE but within a new &amp;lt;var&amp;gt;For Each Record&amp;lt;/var&amp;gt; loop, the display is a refreshed view of the actual current server record. The client can detect at this point that the expected result of the CHANGE did not occur.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Though updates like CHANGE lock a record, they alone do not prevent inconsistencies between the client&#039;s view of the record and the actual state of the record on the server. For unlocked record processing, you need to use &amp;lt;var&amp;gt;For Record Number&amp;lt;/var&amp;gt;. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;blockquote class=&amp;quot;note&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;b&amp;gt;Note:&amp;lt;/b&amp;gt; Always lock a record before updating it. If an unlocked record set or list is being processed, use the &amp;lt;var&amp;gt;For Record Number&amp;lt;/var&amp;gt; statement to lock the record, as shown below: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;%X = $CURREC&lt;br /&gt;
FOR RECORD NUMBER %X &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
&amp;lt;var&amp;gt;For Record Number&amp;lt;/var&amp;gt; locks, copies, and sends the record to the client when the &amp;lt;var&amp;gt;For Record Number&amp;lt;/var&amp;gt; statement is executed. Using &amp;lt;var&amp;gt;For Record Number In &amp;lt;i&amp;gt;label&amp;lt;/i&amp;gt;&amp;lt;/var&amp;gt; is not sufficient, as explained in [[#Using the For Record Number statement|Using the For Record Number statement]]. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Using ON FIELD CONSTRAINT CONFLICT $functions===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If a field constraint violation occurs on a remote node and there is an active ON FIELD CONSTRAINT CONFLICT (ON FCC) unit, clients can issue the $functions that report about the constraint. For more information on the following FCC $functions, refer to [[SOUL_$functions#Summary_of_standard_functions|SOUL functions]]:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;$UNQREC&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;$UPDFILE&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;$UPDFLD&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;$UUPDOVAL&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;$UPDREC&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;$UPDSTAT&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;$UPDSTMT&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;$UPDVAL&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Using ADD, CHANGE, INSERT, and DELETE===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The following update statements are supported in remote file and in scattered group context with the limitation explained below:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;ADD&lt;br /&gt;
CHANGE&lt;br /&gt;
DELETE&lt;br /&gt;
DELETE EACH&lt;br /&gt;
DELETE RECORD&lt;br /&gt;
INSERT&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Using the BACKOUT statement===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The BACKOUT statement backs out a transaction against data on a remote node if the current transaction is remote. In addition to backing out the transaction on the remote node, BACKOUT processing includes backing out the effects of the transaction on the local copy of the remote data. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
A remote transaction is backed out automatically in the same situations in which &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; backs out a local transaction.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Using COMMIT and COMMIT RELEASE statements===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The COMMIT statement commits a transaction on a remote node if the current transaction is remote. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
A remote transaction is committed automatically in the same situations in which &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; automatically commits a local transaction.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The COMMIT RELEASE statement commits a transaction on a remote node and releases found sets on all nodes, local and remote. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Using the DELETE RECORDS statement===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The DELETE RECORDS statement is supported in remote file context and in scattered group context. The functionality of this statement depends on the setting of the PQOOPT parameter, which allows DELETE RECORDS to perform multiple-node updates.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If PQOOPT is not set for multi-node updates, DELETE RECORDS can be used in scattered group context only if either of the following conditions is true:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;All files in the group reside on the same remote node.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;The group found set to which either statement applies is restricted to a single node &amp;amp;mdash; the found set was created by:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;IN GROUP groupname MEMBER %var FIND ...&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
where: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
%var specifies a particular file (%var is not an asterisk (*)). &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Using FILE RECORDS===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The FILE RECORDS statement is supported in remote file context and in scattered group context. The functionality of this statement depends on the setting of the PQOOPT parameter, which allows FILE RECORDS to perform multiple-node updates.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If PQOOPT is not set for multi-node updates, FILE RECORDS can be used in scattered group context only if all group members reside on the same node.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If PQOOPT is set for multiple-node updates and an optional member of a scattered group is unavailable, it is skipped. The records are not filed on that node and the old index entries for the targeted field name = value pair are not deleted, but the statement executes (completes) successfully.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Using STORE RECORD===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
All forms of the STORE RECORD statement are supported in remote file and scattered group context. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Field-value pairs specified by statements that are between STORE RECORD and END STORE are sent to and stored on the remote node. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
After a record is stored on a remote node, you can access it by requests using either &amp;lt;var&amp;gt;Find&amp;lt;/var&amp;gt; or &amp;lt;var&amp;gt;For Record Number&amp;lt;/var&amp;gt; statements. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Using $CURREC, you can extract the record number of the record you most recently stored. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The file in a scattered group in which STORE RECORD stores records cannot be resolved until evaluation time, so the statement might have to be compiled on multiple nodes. For storage files pointed to by the following IN clauses, STORE RECORD is compiled on all nodes in the group; at evaluation time, it is executed on one node only.    &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;IN GROUP groupname MEMBER, in temporary or permanent scattered group context&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;IN $CURFILE, in temporary or permanent scattered group context&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;IN GROUP groupname (where the group update file is the implied storage file), in temporary scattered group context    &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Using UPDATE RECORD===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The UPDATE RECORD statement improves performance when you are executing a set of field-level update operations against the current record. UPDATE RECORD is allowed in remote and non-remote contexts.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Syntax====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The UPDATE RECORD syntax is: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;UPDATE RECORD&lt;br /&gt;
field-level-operation-1&lt;br /&gt;
field-level-operation-2&lt;br /&gt;
.&lt;br /&gt;
.&lt;br /&gt;
.&lt;br /&gt;
field-level-operation-N&lt;br /&gt;
END UPDATE&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
where a field-level operation is one of the following:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;ADD fieldname = value&lt;br /&gt;
 &lt;br /&gt;
CHANGE fieldname [(subscript)] [= value] TO newvalue       &lt;br /&gt;
 &lt;br /&gt;
DELETE fieldname [(subscript)] [= value]&lt;br /&gt;
 &lt;br /&gt;
INSERT fieldname [(subscript)] = value&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
All field-level operations between UPDATE RECORD and END UPDATE are packaged and sent to the remote node in one call. Without UPDATE RECORD, the same set of operations require one call per operation.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If there are no field-level operations between UPDATE RECORD and END UPDATE, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; ignores the UPDATE RECORD statement. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;note&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Note:&amp;lt;/b&amp;gt; DELETE EACH fieldname is not allowed in an UPDATE RECORD statement.    &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Usage====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
&amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; handles errors that occur during UPDATE RECORD the same as those that occur during STORE RECORD. For more information about STORE RECORD error handling, see [[Data maintenance#Storing values in preallocated fields|Storing values in preallocated fields]]. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If a field constraint violation occurs, the entire UPDATE RECORD statement is backed out. The $UPDSTMT function returns the type of statement that caused the conflict: ADD, CHANGE, or INSERT.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If an ON unit is invoked during the execution of UPDATE RECORD and the ON unit is exited with a BYPASS statement, the request execution continues with the statement that follows the END UPDATE statement. &amp;lt;/p&amp;gt; &lt;br /&gt;
 &lt;br /&gt;
==Using $functions with remote files==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Except for the following functions, all file-related $functions that applied to local files or groups apply to remote files and scattered groups as well.        &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;$LSTPROC&lt;br /&gt;
$RDPROC&lt;br /&gt;
$View (works only for certain remote file parameters)&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
$View is valid in remote file context with the following file parameters:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;ASTRPPG       FITRANS&lt;br /&gt;
ATRPG         HASHKEY&lt;br /&gt;
CURLOC        LOCATION&lt;br /&gt;
CURFILE       OPENCTL&lt;br /&gt;
FICREATE      RECSCTY&lt;br /&gt;
FILEORG       SORTKEY&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If $View is issued in remote file context with any other file parameter, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; processes the request but the result of $View is unreliable. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If $LSTPROC or $RDPROC is coded in a &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;SOUL&amp;lt;/var&amp;gt; statement that is in remote context, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; displays an error message at evaluation time. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
This section describes $functions that are new or whose use in Parallel Query Option/204 requires comment. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Using $CURFILE, $RLCFILE, $UPDATE, and $UPDFILE===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The output of the $CURFILE, $RLCFILE, $UPDATE, and $UPDFILE functions issued in remote context is the remote file specification (&amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;filename&amp;lt;/var&amp;gt; At &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;location&amp;lt;/var&amp;gt;). Each of these functions returns the string:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;filename&amp;lt;/span&amp;gt; At &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;location&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
Where:&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
&amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;location&amp;lt;/var&amp;gt; is a name for the node where the remote file resides. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can use $SUBSTR to extract the name or the location. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Using $FDEF and $LSTFLD functions===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can use these $functions in local or remote file context. They recognize the following keywords in the file-name argument string: FILE, AT. You also can use a file synonym. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Using $ITSOPEN function===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The $ITSOPEN function indicates whether the current file or group is open. Its format is:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;$ITSOPEN(&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;name&amp;lt;/span&amp;gt;)&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
where &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;name&amp;lt;/var&amp;gt; is a %variable or literal character string representing a file name, file synonym, or group name. This argument string can include the keywords AT, FILE, GROUP, PERM, or TEMP.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
$ITSOPEN can be issued in any context. It returns 1 if the file or group is open; it returns 0 if the file or group is closed. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Using $ITSREMOTE function===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The $ITSREMOTE function indicates whether the current file or group is remote or scattered. Its format is:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;$ITSREMOTE(&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;name&amp;lt;/span&amp;gt;)&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
where &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;name&amp;lt;/var&amp;gt; is a %variable or literal character string representing a file name, file synonym, or group name. This argument string can include the keywords AT, FILE, GROUP, PERM, or TEMP.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
$ITSREMOTE can be issued in any context. It returns 1 if the context is remote file or scattered group; it returns 0 if the context is local. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Using file and group availability $functions===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The $functions in [[#Using file and group availability $functions|Using file and group availability $functions]] and [[#Using file and group availability $functions|Using file and group availability $functions]] provide information about file and group availability. The $functions in [[#Using file and group availability $functions|Using file and group availability $functions]] report on scattered group members. The $functions in [[#Using file and group availability $functions|Using file and group availability $functions]] are for files or groups but are valid only in an ON MISSING MEMBER or ON MISSING FILE unit.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
An example in which these $functions are used is shown on [[#Using file and group availability $functions|Using file and group availability $functions]]. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The index parameter in some of the $functions in [[#Using file and group availability $functions|Using file and group availability $functions]] and [[#Using file and group availability $functions|Using file and group availability $functions]] is assigned internally by &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; when those $functions are issued. Unavailable files are assigned index numbers in the order in which the files are listed in the CREATE GROUP command. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
For example, if unavailable fileA appears earlier in the CREATE GROUP list of files than unavailable fileB, fileA is assigned a lower index number than fileB. If fileA appears the earliest in the CREATE GROUP list, it always has the index value 1 when it is unavailable. And when fileA is available, another file has 1. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Scattered group $functions====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The $functions in [[#Using file and group availability $functions|Using file and group availability $functions]] are supported only in group context. If you do not use them in group context, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; cancels the request which calls the $function. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can ensure the group context by specifying a group name (groupname in syntax in [[#Using file and group availability $functions|Using file and group availability $functions]]) as an argument of the $function. If you do not specify a group name, the context of the current statement is used. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The index parameter is an integer from one to the value of $GRNMISS. If index is less than one or greater than $GRNMISS, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; cancels the request.    &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;caption&amp;gt;$functions for groups&amp;lt;/caption&amp;gt;&lt;br /&gt;
&amp;lt;tr class=&amp;quot;head&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;$function syntax&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Returns...&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;lt;p class=&amp;quot;codeInTable&amp;quot;&amp;gt;$GRMLOC(&amp;lt;i&amp;gt;index&amp;lt;/i&amp;gt; [,&amp;lt;i&amp;gt;groupname&amp;lt;/i&amp;gt;]) &amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;p&amp;gt;Location of the missing (unavailable) group member identified by the index parameter. &amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;lt;p class=&amp;quot;codeInTable&amp;quot;&amp;gt;$GRMNAME(index [,groupname])&lt;br /&gt;
&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;p&amp;gt;Name of the missing (unavailable) group member represented by the index parameter. &amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;lt;p class=&amp;quot;codeInTable&amp;quot;&amp;gt;$GRNLEFT[(groupname)]&lt;br /&gt;
&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;p&amp;gt;Number of remaining available optional group members that can fail before the MAXFAIL parameter value (CREATE GROUP command) is exceeded. (MAXFAIL specifies the maximum number of optional members that might be unavailable.) &amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;lt;p class=&amp;quot;codeInTable&amp;quot;&amp;gt;$GRNMISS[(groupname)]&lt;br /&gt;
&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;p&amp;gt;Number of optional group members that are unavailable to the request. &amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====ON MISSING unit $functions====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The $functions in [[#Using file and group availability $functions|Using file and group availability $functions]] are valid only in an ON MISSING MEMBER or ON MISSING FILE unit. Any other use of these functions is treated as a compilation error.   &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The index parameter is an integer from one to the value of $MISNUM. If index is less than one or greater than $MISNUM, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; cancels the request.  &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;caption&amp;gt;$functions for ON MISSING units&amp;lt;/caption&amp;gt;&lt;br /&gt;
&amp;lt;tr class=&amp;quot;head&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;$function&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Returns...&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;[[$MisGrup]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;String containing the name of the group, if the error that invoked the ON unit occurred in group context. Otherwise, it returns the null string.     &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;$MisLoc(index) &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;String containing the location of the unavailable file indicated by the index parameter.    &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;$MisName(index) &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Name of the unavailable file identified by the index parameter.    &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;[[$MisNum]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Number of files in the group that are newly unavailable (that have become unavailable since the last time the ON MISSING unit was invoked).   &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;[[$MisStmt]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;String containing the type of &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;SOUL&amp;lt;/var&amp;gt; statement that failed, for example, &#039;DELETE ALL RECORDS&#039;.   &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;ON MISSING FILE unit example&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The following ON MISSING FILE unit example uses the $functions in&lt;br /&gt;
[[#Using file and group availability $functions|Using file and group availability $functions]] and [[#Using file and group availability $functions|Using file and group availability $functions]]. The example works for an ON MISSING MEMBER unit as well. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;ON MISSING FILE&lt;br /&gt;
 %C IS STRING LEN 255&lt;br /&gt;
 %D IS STRING LEN 255&lt;br /&gt;
 %C = $MisGrup&lt;br /&gt;
 IF %C = &amp;amp;apos;&amp;amp;apos; THEN&lt;br /&gt;
 * This is file context because $MisGrup returned nulls  *&lt;br /&gt;
   %C = &#039;MISSING FILE &#039; WITH $MISNAME(1) WITH &#039; AT &#039; WITH $MISLOC(1)&lt;br /&gt;
 PRINT %C&lt;br /&gt;
 ELSE&lt;br /&gt;
   %GROUPNAME = %C&lt;br /&gt;
   %C = &#039;MISSING GROUP &#039; WITH %C WITH &#039; FILES FOLLOW: &#039;&lt;br /&gt;
   FOR %JUNK FROM 1 TO $MISNUM BY 1&lt;br /&gt;
     %C = %C WITH $MISNAME(%JUNK) WITH &#039; AT &#039; WITH $MISLOC(%JUNK)&lt;br /&gt;
   END FOR&lt;br /&gt;
   %C = %C WITH &#039; ON STATEMENT &#039; WITH $MISSTMT&lt;br /&gt;
   PRINT %C&lt;br /&gt;
   %D = &#039;COMPLETE LIST OF MISSING FILES FOR&#039; WITH $MisGrup WITH &#039;: &#039;&lt;br /&gt;
   FOR %INDEX FROM 1 TO $GRNMISS BY 1&lt;br /&gt;
     %D = %D WITH $GRMNAME(%INDEX,%GROUPNAME) WITH &#039; AT &#039;&lt;br /&gt;
     %D = %D WITH $GRMLOC(%INDEX,%GROUPNAME)&lt;br /&gt;
   END FOR&lt;br /&gt;
   PRINT %D&lt;br /&gt;
 END IF&lt;br /&gt;
 BYPASS&lt;br /&gt;
END ON&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;/div&amp;gt; &amp;lt;!-- end of toc limit div --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:SOUL]]&lt;/div&gt;</summary>
		<author><name>ELowell</name></author>
	</entry>
	<entry>
		<id>https://m204wiki.rocketsoftware.com/index.php?title=Files,_groups,_and_reference_context&amp;diff=117718</id>
		<title>Files, groups, and reference context</title>
		<link rel="alternate" type="text/html" href="https://m204wiki.rocketsoftware.com/index.php?title=Files,_groups,_and_reference_context&amp;diff=117718"/>
		<updated>2019-11-11T17:52:07Z</updated>

		<summary type="html">&lt;p&gt;ELowell: /* Two ways to open files and groups */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div class=&amp;quot;toclimit-3&amp;quot;&amp;gt;&lt;br /&gt;
==Overview==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
A &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; file consists of a collection of records and their associated index pointers. See [[Introduction to User Language#Files|Files]] for a discussion of the composition of a &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; file. A file group is a collection of &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; files that &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; treats as a logical single file. A group can be permanent, temporary, or ad hoc. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
A file or group must be opened before it can be processed by &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt;. Several files or groups can be opened by a terminal user during a single &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; session. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can refer to any open files or groups within a single request and can cross-reference any records contained in these files or groups.&lt;br /&gt;
(Cross-referencing is discussed in [[Record loops#Cross-referencing|Cross-referencing]] and also in [[#Cross-referencing|Cross-referencing]].)&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The file and group commands discussed in this topic are described in detail in&lt;br /&gt;
[[List of Model 204 parameters]] and [[List of Model 204 commands]].&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Parallel Query Option/204===&lt;br /&gt;
Parallel Query Option/204 (PQO) is a &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; distributed processing facility that allows the sharing of data between two or more copies of &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt;. &lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
In addition to the information provided here, Parallel Query Option/204 is described in detail in [[PQO: Overview of Parallel Query Option/204]] and the information it references. &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Remote files===&lt;br /&gt;
Parallel Query Option/204 provides to &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;SOUL&amp;lt;/var&amp;gt; applications the potential for accessing data stored in remote files. A single &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;SOUL&amp;lt;/var&amp;gt; request can read and/or update multiple remote files.&lt;br /&gt;
 &lt;br /&gt;
===Scattered groups===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Parallel Query Option/204 also supports file groups consisting of files residing on different nodes. A group that contains one or more remote files is a scattered group. A scattered group is a local entity &amp;amp;mdash; you cannot create a group for a remote node, and you cannot refer to a group defined on a remote node.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
As for all &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; groups, you define a scattered group with the &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;SOUL&amp;lt;/var&amp;gt; IN clause or the CREATE GROUP command. The authority required to define a scattered group is no different from that required for a non-scattered &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; group. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Ad hoc, temporary, and permanent groups can be scattered groups. With no additional requirements, ad hoc groups allow remote file synonyms and remote file specifications. With some additional parameter requirements, temporary and permanent groups allow remote file synonyms and remote file specifications.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Scattered group members are optional or mandatory. If a mandatory member is unavailable, the group cannot open. You specify whether members are optional or mandatory in the group definition. Availability, a file status that concerns scattered groups, refers to whether a group member can be opened and, if not, whether the group can be opened. These terms are discussed in more detail in [[PQO: Managing files and groups]].&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===DML limitations===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Not all &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; commands, statements and retrieval conditions can be used with Parallel Query Option/204. [[#Using Model 204 file and group commands|Using Model 204 file and group commands]] lists the file and group specification commands that you can use with remote files and groups. [[DML statements in Parallel Query Option/204#DML statements in Parallel Query Option/204|DML statements in Parallel Query Option/204]] contains listings of supported and non-supported &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;SOUL&amp;lt;/var&amp;gt; statements and retrieval conditions.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
==Using Model 204 file and group commands==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The following &amp;quot;Commands for files and groups&amp;quot; table lists file and group commands, their corresponding meanings, and what type of user can issue the command. This list comprises the only commands that support remote file specification.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;caption&amp;gt;Commands for files and groups&amp;lt;/caption&amp;gt;&lt;br /&gt;
&amp;lt;tr class=&amp;quot;head&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Command&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Meaning&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Type of user&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;CLOSE (file or group)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Closes a group.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Any user&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;CREATE PERM GROUP&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Creates a permanent group.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;System manager&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;CREATE TEMP GROUP&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Creates a temporary group.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Any user&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;DEFAULT&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Specifies a new default, which can be either a &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; file or group&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Any user&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;DEFINE FILE&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Creates a file synonym, defined locally, for the actual name of a local or remote file and its location.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;System manager or User 0&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;DELETE PERM GROUP&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Deletes a permanent group.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;System manager&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;DELETE TEMP GROUP&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Deletes a temporary group.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Any user&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;DISABLE SUBSYSTEM&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Marks a service subsystem file or group as disabled, making it unavailable to users who try to access it through the subsystem.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;System manager&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;DISPLAY&lt;br /&gt;
(field, group, or record)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Displays information about one or more objects.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Any user&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;ENABLE SUBSYSTEM&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Enables a disabled subsystem remote file or group.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;System manager&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td nowrap&amp;gt;MONITOR SUBSYSTEM&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Displays information about Parallel Query Option/204 service subsystem files and groups.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Any user&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;OPEN[C] FILE&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Opens a file. Multiple files can be open simultaneously during a &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; session. OPEN changes the existing default. OPENC does not.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Any user&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;OPEN[C] GROUP&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Opens a group. Multiple groups can be open simultaneously during a &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; session. OPEN changes the existing default. OPENC does not.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Any user&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;START (file or group)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Reverses the effect of the STOP command.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;System manager&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;STATUS&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Displays recovery information about remote &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; files that were opened during an online run.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Any user&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;STOP (file or group)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Prevents a remote file or permanent scattered group from being opened. The STOPped file or group cannot be opened until it is STARTed. STOP and START cannot be used with temporary groups.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;System manager&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;VIEW&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Displays the current settings of &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; parameters.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Any user&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Also supported in PQO are the BUMP, LOGWHO, and MONITOR commands, as well as network control and definition commands and subsystem control commands.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The OPEN[C] FILE, OPEN[C] GROUP, CLOSE, DEFAULT, and DELETE GROUP commands are discussed in this page. For more information on the other commands in the &amp;quot;Commands for files and groups&amp;quot; table, see:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[[List of Model 204 parameters]] and [[List of Model 204 commands]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;[[PQO: Managing files and groups]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==File groups==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
This section describes the composition and advantages of using &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; file groups, then discusses how you create, access, and manipulate file groups.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Composition of a Model 204 group===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
A file group is a collection of &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; files that &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; treats logically as a single file. File groups do not contain data and pointers, but rather a list of files, each of which contains its own data and pointers. When a group is defined, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; creates an entry in an internal table. This entry contains the names of the files that make up the group.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Commands and statements that refer to a group actually cause operations to be performed on each member file. An individual file can be a member of several different groups and a group can contain up to 256 &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; files.    &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
File groups are particularly helpful in working with cyclic data and in organizing independent but similar files. File groups also provide an alias facility.    &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Using a group to work with cyclic data===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Suppose that the file group WEEK consists of the files SUNDAY, MONDAY, TUESDAY, WEDNSDAY (maximum eight letters), THURSDAY, FRIDAY, and SATURDAY. While the union of these seven files is available under the name WEEK, each daily file continues to be accessible as an individual file. The data is not duplicated; an internal table relates WEEK to its member files. WEEK can be defined to include member files that do not yet exist, but it cannot be opened until all member files have been created.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Suppose you want the group WEEK to always contain data from the most recent seven-day period. The conventional approach to this problem is to perform an expensive daily update, adding the newest day&#039;s data to a file and deleting the oldest day&#039;s data. However, the group facility provides a more efficient and convenient alternative. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Each time a new daily file is created, the older daily file (of the same name) is taken off line and archived. If the files must be preserved in chronological order, the definition of the group is modified to reflect the seven most recent daily files. This approach does not require data deletion, file reorganization, or program changes. The archived daily files can be saved permanently in their &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; format and can be restored easily to operating status.     &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Using groups to work with independent but similar data===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Data concerning individual states or similar subdivisions is often kept in separate files. However, users sometimes require reports by various regional groupings or by an entire country. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
With file groups, one user can select a report to be run against a single file, for example, OHIO, while another user can generate a report from the regional collection, for example, OHIO, INDIANA, and ILLINOIS. A third user&#039;s report might take into account all 50 states (a group can contain as many as 256 files). &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
All three of these reports can be generated by the same &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;SOUL&amp;lt;/var&amp;gt; request, using a different group definition or by specifying an alternative OPEN command.        &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Using groups as file aliases===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
A group can consist of only one file, and can have the same name as an existing file. These two facts allow a group name to act as an alias for a &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; file. This allows for the possibility of users addressing a single file by many different names. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Suppose several application programs have been written to operate on a file named FILEA. This file is subsequently merged with FILEB, and the new combined file named FILEC. None of the field names in the combined file have been changed, so application programs could continue to run with the new file. However, those programs open the file named FILEA, not the combined file named FILEC.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The file group feature provides a technique that enables application programs to access the correct file without undergoing a program change. The system manager can define a permanent file group named FILEA that is made up only of the file named FILEC. The application programs need not be changed. When they run, they automatically access the FILEA group.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
A similar strategy can be helpful when testing programs with test files that have different names from those that are used during production.      &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Types of groups===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
There are three types of groups:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Permanent groups are created by the system manager with CREATE. The group name and member list are stored permanently in a &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; file until explicitly deleted by the system manager. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Any user can open a permanent group, unless the group requires a password, in which case the user must know the password. See the discussion about group passwords in [[#File and group passwords|File and group passwords]].&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Temporary groups are created by an individual user with the CREATE command and can be referenced only by that user. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Temporary group names exist only during the current login session and are deleted automatically when you log out, unless you delete them during the session.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Ad hoc groups have no name and are created within a &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;SOUL&amp;lt;/var&amp;gt; request by prefacing a statement with the clause:     &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;IN file1 [,file2 ...]&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Ad hoc groups exist only for the current request. They allow record retrieval from many files at once without defining a group in advance. As in any IN clause, all of the files in an ad hoc group must be opened before the group is mentioned. Ad hoc groups are discussed in more detail in [[#Ad hoc groups|Ad hoc groups]].         &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Creating groups===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The CREATE command is used to create both permanent and temporary file groups. Only the system manager can create a permanent group. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Any user can create a temporary group by entering:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;CREATE [TEMP] GROUP groupname FROM filename [,filename ...]&lt;br /&gt;
[PARAMETER parameter list]&lt;br /&gt;
   .&lt;br /&gt;
   .&lt;br /&gt;
   .&lt;br /&gt;
END&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
At least one file name is required. The following parameters can be included in the list. They are discussed in the description of the CREATE command, in [[CREATE command: Temporary group]] and [[CREATE command: Permanent group]]. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;UPDTFILE &amp;amp;mdash; Defines the group&#039;s update file.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;PROCFILE &amp;amp;mdash; Defines the group&#039;s procedure file.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;BLDGFT &amp;amp;mdash; Creates a group&#039;s field table. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Specifying PROCFILE = * creates a group in which any files can contain procedures. &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Deleting groups===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The DELETE command is used to delete both permanent and temporary groups (only the system manager can delete a permanent group): &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;DELETE [PERM | TEMP] [GROUP] name&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You must close a group before you can delete it. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Examples====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The following example shows the creation of a temporary group.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;CREATE GROUP REGION FROM DELAWARE, MARYLAND, -&lt;br /&gt;
  VIRGINIA&lt;br /&gt;
PARAMETER PROCFILE = VIRGINIA, BLDGFT = NO&lt;br /&gt;
END&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The following example creates a permanent group with multiple procedure files:    &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;CREATE PERM GROUP REGION FROM DELAWARE, MARYLAND, -&lt;br /&gt;
  VIRGINIA&lt;br /&gt;
PARAMETER PROCFILE = *, BLDGFT = NO&lt;br /&gt;
END&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
==Opening and closing Model 204 files and groups==&lt;br /&gt;
 &lt;br /&gt;
===Two ways to open files and groups===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
OPEN/OPENC can be used as either a command or statement to open &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; files and groups. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;For a discussion of OPEN/OPENC as a statement, see [[#OPEN or OPENC statement|OPEN or OPENC statement]]. For a discussiong of error handling, see [[#Error handling|Handling errors in file/group open statements]].&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;For a discussion of OPEN/OPENC as a command, see the [[List of Model 204 commands]].&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Using OPEN/OPENC as a command====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When used as a command, OPEN/OPENC opens a file or group and allows retrievals or other references to fields or data records for the file or group in the same request. It also allows updates to a file to be deferred. As a command, OPEN/OPENC can be used within a procedure but must be outside of the request (outside the BEGIN and END statements).               &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Using OPEN[C] as a statement====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When used as a statement, OPEN/OPENC opens a file or group but does not allow retrievals or other references to fields or data records for the file or group in the same request. It does not allow updates to a file to be deferred. As a statement, OPEN/OPENC must appear within the request (between the BEGIN and END statements). &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Opening multiple files or groups===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can open two or more &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; files or groups concurrently. When multiple files and/or groups are open, you can let &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; operate on the default file or group, or direct &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; to operate on a specific file or group. Within a single request, you can refer to any open files or groups and can cross-reference records contained in them. Each of these remains open until you issue a &amp;lt;var&amp;gt;[[CLOSE command|CLOSE]]&amp;lt;/var&amp;gt; command or the &amp;lt;var&amp;gt;[[$Close]]&amp;lt;/var&amp;gt; function for it, or issue the &amp;lt;code&amp;gt;CLOSE ALL&amp;lt;/code&amp;gt; command. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Opening a remote file===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You open a remote file by issuing the OPEN FILE command using either the AT location clause or a file synonym. You can also use an OPEN GROUP command if the file is a member of a scattered group.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====File context====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can open a file in single file context or in permanent group context. A file open as a member of a temporary group is considered open in single file context. You can open in a different context an already open file. Therefore, a remote file can be open in any or all of the following contexts at the same time: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Single file &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Permanent group &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Multiple permanent group &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====File locking behavior====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The locking behavior of the OPEN FILE command for a remote file is identical to that for a local file with regard to: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Shared direct access storage devices (DASD)&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;System level resources&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Application subsystems   &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
See [[Defining the runtime environment (CCAIN)#Resource locking|Resource locking]] for information about resource locking.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Field definition is restricted====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When the OPEN FILE command is successfully executed and a remote file is opened, the status of the file is open. The remote file&#039;s Table A is stored on the client system for as long as the file remains open.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
While a remote file is open to any remote user, the fields cannot be redefined, deleted, or renamed on the server. Server online users receive a message that the file is in use. New fields, however, can be defined. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Opening deferred update data sets&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
A file that is not in deferred update mode can be opened remotely.   &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
A file that is in deferred update mode can be opened remotely only when the file is a member of a service application subsystem. If a remote deferred update data set is specified in the OPEN FILE command, the open is rejected. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Opening a scattered group===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You open a remote file that is a member of a scattered group by issuing the OPEN GROUP command. OPEN GROUP for scattered temporary and permanent groups has the same syntax as for non-scattered groups. Password requirements and privileges for member files are also the same for scattered and non-scattered groups. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
In scattered group context, OPEN GROUP causes &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; to allocate conversations with each of the nodes that contain members of the scattered group (if such conversations do not already exist).&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If scattered groups are defined to allow update privileges, all member files are opened with the indicated privileges when the group is successfully opened. For each remote file opened in group context, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; displays a confirmation message with the file&#039;s name (non-synonym) and location, stating whether updates are allowed. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Opening non-Model 204 files===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Non-&amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; files can be opened within a request by using the form of the OPEN statement described in [[Images#OPEN statement|OPEN statement]].&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===File and group passwords===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Whether you must enter a password when you open a files or permanent group depends on which of the following access types was assigned to it:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Public&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Semipublic&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Private           &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;tr class=&amp;quot;head&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;If file or permanent&lt;br /&gt;
group is... &amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;&lt;br /&gt;
Model 204...&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Public &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Opens it without asking for a file password when the OPEN command is issued. &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Semipublic or private &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Asks you to enter a password during the OPEN operation. For:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Private file or permanent group, you must enter a password in order to open it. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Semipublic files and permanent groups, the password is optional.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Passwords are specified differently for temporary file groups. Opening a temporary group is functionally equivalent to opening a series of files. As each file is opened, you are prompted for the file password, if one is required. The temporary group is opened only after all the files have been opened.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===File and group privileges===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The file manager determines the privileges associated with each password associated with a file or permanent group. The assigned privileges determine which operations you can perform on the data and procedures stored in the file or group. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The file manager also determines the default privileges that are granted for public and semipublic files and permanent groups. The system manager must enter all file passwords and privileges into the system.    &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The privileges for a temporary group are the most restrictive combination of member file privileges. This combination is defined through a logical AND of the privileges of the individual files in the group.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
For an explanation of how the granting of privileges depends on the reference context of a command or a statement, see [[#Privileges according to reference context|Privileges according to reference context]]. See [[Model 204 security features#File security|File security]] for details. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Displaying file and group information===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can display information about one or more open files or groups with the &amp;lt;var&amp;gt;[[DISPLAY command|DISPLAY]]&amp;lt;/var&amp;gt; command:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;DISPLAY [FILE | [PERM | TEMP] GROUP] &lt;br /&gt;
  [(option [, option ...])] &lt;br /&gt;
  {ALL | name [, name ...]}&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If you enter:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;DISPLAY FILE ALL&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
&amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; displays the file name and file parameters for all files that you currently have open. If the DISPLAY command is issued by a file manager, the display includes file data set names. You can also use DISPLAY to display selected or abbreviated file parameters for files, by specifying them as display options. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If you enter:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;DISPLAY GROUP ALL&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
&amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; displays the group name, status (permanent or temporary), member files, and group parameters for all permanent groups and for your temporary groups. You can request that the command display only a list of group names and their status.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Closing files and groups===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
During a single &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; session, you can open several files and/or groups. These remain open until you issue a CLOSE command, as follows:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;CLOSE [ALL | [FILE | [PERM | TEMP] GROUP] name [AT location]]&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Closing a permanent group closes each file in the group that was opened by a group OPEN. But it does not close files that were opened as individual files or as members of other groups. Closing a temporary group does not close the files in the group. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
You can also close a file or group (with some restrictions) within a &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;SOUL&amp;lt;/var&amp;gt; request using the &amp;lt;var&amp;gt;[[$Close]]&amp;lt;/var&amp;gt; function.&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;div id=&amp;quot;openAndOpenC&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;OPEN statement and OPENC statement&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;OPEN or OPENC statement&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;  &amp;lt;!--This was the original section name, there may be links to it--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Open statement and OpenC statement===&lt;br /&gt;
&amp;lt;!--Caution: &amp;lt;div&amp;gt;s above--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The &amp;lt;var&amp;gt;Open&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;OpenC&amp;lt;/var&amp;gt; statements are useful for opening a file, either for subsequent requests, or&lt;br /&gt;
to allow the request to take actions based on the file parameters of the file.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The effect of executing the &amp;lt;var&amp;gt;Open&amp;lt;/var&amp;gt;[&amp;lt;var&amp;gt;C&amp;lt;/var&amp;gt;] statement, like any SOUL statement, takes place during evaluation of&lt;br /&gt;
the request.  Therefore, if the file was not open during compilation, most SOUL statements, such as DML statements&lt;br /&gt;
(&amp;lt;var&amp;gt;Find&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;For&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;Store Record&amp;lt;/var&amp;gt;, etc.) cannot refer to the file within the request.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Some SOUL operations, such as obtaining file parameters,&lt;br /&gt;
do not require a file to be opened during compilation.&lt;br /&gt;
Thus, after an &amp;lt;var&amp;gt;Open&amp;lt;/var&amp;gt;[&amp;lt;var&amp;gt;C&amp;lt;/var&amp;gt;] statement, the request can&lt;br /&gt;
obtain the status of the file by using the &amp;lt;var&amp;gt;[[$View|$View]]&amp;lt;/var&amp;gt; function to return&lt;br /&gt;
the value of the &amp;lt;var&amp;gt;[[FISTAT parameter|FISTAT]]&amp;lt;/var&amp;gt; parameter.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;p&amp;gt;After a &amp;lt;var&amp;gt;Open&amp;lt;/var&amp;gt;[&amp;lt;var&amp;gt;C&amp;lt;/var&amp;gt;] statement, a &amp;lt;b&amp;gt;subsequent&amp;lt;/b&amp;gt; request may access the data in the file.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The &amp;lt;var&amp;gt;Open&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;OpenC&amp;lt;/var&amp;gt; statements are supported in remote context. The use of filename&lt;br /&gt;
synonyms is fully supported.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Syntax====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The format of the &amp;lt;var&amp;gt;Open&amp;lt;/var&amp;gt; or &amp;lt;var&amp;gt;OpenC&amp;lt;/var&amp;gt; statement is:&amp;lt;/p&amp;gt;&lt;br /&gt;
{{Template:Open and OpenC statements syntax}}&lt;br /&gt;
Where:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Open&amp;lt;/var&amp;gt; specifies that the specified file or group becomes the new default file or group context.&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;var&amp;gt;OpenC&amp;lt;/var&amp;gt; specifies that the previous default file or group is preserved when the specified file or group is opened.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Default files and groups are discussed later in this page.&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;The &amp;lt;var&amp;gt;File&amp;lt;/var&amp;gt; keyword specifies that the file to be opened is a &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; file. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;The &amp;lt;var&amp;gt;Perm&amp;lt;/var&amp;gt; keyword specifies that the group to be opened is a &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; permanent group.      &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;The &amp;lt;var&amp;gt;Temp&amp;lt;/var&amp;gt; keyword specifies that the group to be opened is a &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; temporary group.    &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;The &amp;lt;var&amp;gt;Group&amp;lt;/var&amp;gt; keyword specifies that the file to be opened is a &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; group.     &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;i&amp;gt;name&amp;lt;/i&amp;gt; is the name of the &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; file or group to be opened. The file or group name&lt;br /&gt;
can be provided in a %variable or as a quoted or unquoted string.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;The &amp;lt;var&amp;gt;At&amp;lt;/var&amp;gt; keyword specifies that the file to be opened is a remote file. Only individual files (or group members) can be specified using the &amp;lt;var&amp;gt;At&amp;lt;/var&amp;gt; keyword. An entire group cannot be treated as a remote object. Thus none of the keywords &amp;lt;var&amp;gt;Perm&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;Temp&amp;lt;/var&amp;gt;, or &amp;lt;var&amp;gt;Group&amp;lt;/var&amp;gt; can be used with &amp;lt;var&amp;gt;At&amp;lt;/var&amp;gt;.&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
A remote file can also be opened using a file synonym (without the &amp;lt;var&amp;gt;At&amp;lt;/var&amp;gt; clause) or by opening a scattered group of which the file is a member.&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;i&amp;gt;location&amp;lt;/i&amp;gt; is the name of the remote node where the file is located. The location can be provided in a %variable.&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The equal sign (=) directs &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; to open a local file. Since it is possible for two files at different nodes to have identical file names, the equals sign gives you the ability to explicitly use the local file instead of the remote file with the same name.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;The &amp;lt;var&amp;gt;Password&amp;lt;/var&amp;gt; clause specifies a valid password for the file or group to be opened.  The password value can be provided in a %variable or as a quoted or unquoted string.     &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Usage notes====&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;If the &amp;lt;var&amp;gt;Group&amp;lt;/var&amp;gt; keyword is specified without a &amp;lt;var&amp;gt;Perm&amp;lt;/var&amp;gt; or &amp;lt;var&amp;gt;Temp&amp;lt;/var&amp;gt; keyword, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; searches for the name first among temporary groups, then among permanent groups. If no keyword is specified, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; searches for the name among temporary groups first, then permanent groups, and finally &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; files.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;The following message is produced for a &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;SOUL&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;Open&amp;lt;/var&amp;gt;[&amp;lt;var&amp;gt;C&amp;lt;/var&amp;gt;]&lt;br /&gt;
statement if the &amp;lt;var&amp;gt;Open&amp;lt;/var&amp;gt; fails:&lt;br /&gt;
&amp;lt;p class=&amp;quot;output&amp;quot;&amp;gt;&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;*** M204.1521: &amp;lt;i&amp;gt;fileOrGroupName&amp;lt;/i&amp;gt; does not exist or requested access not authorized&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Message 1521 is a counting error and when encountered during APSY processing invokes the APSY error procedure.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;b id=&amp;quot;filGrpOpenErr&amp;quot;&amp;gt;&amp;lt;/b&amp;gt;&amp;lt;b id=&amp;quot;Error handling&amp;quot;&amp;gt;&amp;lt;/b&amp;gt;Handling errors in file/group open statements===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Error conditions encountered during the processing of the OPEN or OPENC statement generate &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; error messages that are not displayed on the terminal. The request should check for errors after the execution of each OPEN or OPENC statement by using the $Status function. The text of the most recently issued error message can then be retrieved by the &amp;lt;var&amp;gt;[[$ErrMsg]]&amp;lt;/var&amp;gt; function.    &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The values that can be returned by the $Status function for the OPEN or OPENC statement are listed in the following table:    &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;tr class=&amp;quot;head&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Value&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Meaning&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt;0&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;The operation was successful. A return code of 0 also clears the message buffer; therefore, the $Errmsg function, if called returns a null string.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt;2&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;A serious error occurred. The error can be retrieved by using the $Errmsg function to receive the last counting or cancellation message produced by &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt;. &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If OPEN GROUP is issued as a &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;SOUL&amp;lt;/var&amp;gt; statement (from within a request), the result of the open operation is indicated with one of three $Status values:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;tr class=&amp;quot;head&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;[[$Status]]&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Description&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt;0&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;All members of the group were successfully opened.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt;1 &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;One or more optional members could not be opened.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt;2&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;A mandatory member could not be opened, MAXFAIL members could not be opened, or all members are missing. &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Example====&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;BEGIN&lt;br /&gt;
    .&lt;br /&gt;
    .&lt;br /&gt;
    .&lt;br /&gt;
OPEN PERM GROUP REGISTERED.AUTOS&lt;br /&gt;
 &lt;br /&gt;
      IF $Status NE 0 THEN&lt;br /&gt;
        PRINT &#039;OPEN ERROR ON AUTO FILE&#039;&lt;br /&gt;
        PRINT $ERRMSG&lt;br /&gt;
        STOP&lt;br /&gt;
    ELSE&lt;br /&gt;
    .&lt;br /&gt;
    .&lt;br /&gt;
    .&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
For more information about $Status, see [[Horizon conversation interface]]. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If the DDNAME of the file to be opened is greater than eight characters, the command is rejected and the following message is issued:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;M204.1903: %C EXCEEDS 8 CHARACTERS IN LENGTH&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Error conditions relating to remote files===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Using the AT keyword with the PERM, TEMP, or GROUP keywords (or with the OPEN DATASET, OPEN EXTERNAL, or OPEN [EXTERNAL] TERMINAL statements) causes the following error message:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;M204.1497: REMOTE SPECIFICATION CONFLICTS WITH OPEN TYPE&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If, when attempting to open a remote file, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; cannot establish a conversation with the remote node, the following error message displays:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;M204.1984: COMMUNICATION ERROR ON REMOTE NODE&lt;br /&gt;
PROCESSING FILE filename AT location&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If a %variable is used to indicate the location of a remote file, and its value is found to be null, the value of the $Status function is set to 2 and the following error message is generated:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;M204.2003: LOCATION MISSING FOR REMOTE FILE&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Error conditions relating to scattered groups===&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;If a mandatory member of a scattered group cannot be opened, the OPEN operation fails for the entire group. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;If an optional member of the group cannot be opened, an error message is issued stating that the file is unavailable. The OPEN operation continues as if the file were not included in the group definition. Storage is still allocated in various internal data structures, however.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;If the CREATE GROUP command MAXFAIL parameter value is exceeded, the group open fails and any successfully opened files are closed. An error message is issued stating that more than MAXFAIL optional files cannot be opened.    &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If all a scattered group&#039;s files are optional and unavailable, a group open fails, even if MAXFAIL is not exceeded. An error message is issued stating that the open failed because all group members are missing. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Closing a remote file===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can close a remote file by issuing the CLOSE command using the AT location clause or a file synonym, using CLOSE ALL, or, if the remote file is the default file, using CLOSE by itself. If the file is a member of a permanent scattered group, you can close the files in the group with CLOSE GROUP. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When a CLOSE command for a remote file is successful, the file is closed on the server node on which the file resides. &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; displays a message confirming the close to the user on the client node. The message identifies the file name and location. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If the file being closed is your last open file on the server node, the conversation with the server is terminated.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
A loss of communications with a remote node during or just prior to your attempt to close a remote file results in the following:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The file is closed on your local node, and you receive a communications error message. The service thread is restarted, which closes the file on the server. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;If the file is a member of a scattered group and you issue CLOSE GROUP, the file is closed on your local node, and &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; attempts to close as usual the rest of the files in the group.   &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;If the file was disabled for you prior to the CLOSE, the file is closed only on your local node.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Using DEFAULT and DELETE GROUP===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; DEFAULT command, which establishes the current default file or group, applies to remote file synonyms, remote file specifications, and scattered groups.   &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; DELETE GROUP command, which deletes an existing permanent or temporary group, applies to scattered groups. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
==Reference context==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The reference context of a statement or command is the file or group in which the statement or command is to operate. If the reference context is a file, the context also involves the way in which the file was opened. The file or group on which a command or a &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;SOUL&amp;lt;/var&amp;gt; statement operates is known as the current file or group.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When many files and groups are open, you must establish a single file or group context for commands and &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;SOUL&amp;lt;/var&amp;gt; statements. You can specify a file or group or can allow the system to operate on the default file or group.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
This section discusses how you specify the file or group reference context, how the reference context affects the privileges that accompany an OPEN of a file or group and the results of a CLOSE command, and procedure file and update file references. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
For additional information about features relating to setting the reference context, refer to:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[[#IN clause|IN clause]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[[#IN GROUP MEMBER clause|IN GROUP MEMBER clause]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[[#$CURFILE and $UPDATE functions|$CURFILE and $UPDATE functions]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Establishing the default file or group===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Unless the user refers to a specific file or group in a command or a &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;SOUL&amp;lt;/var&amp;gt; statement, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; operates on the default. Only one default can be in effect at any one time. The default can be either a file or a group.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can establish the default in one of the following ways:                        &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;&amp;lt;var&amp;gt;OPEN&amp;lt;/var&amp;gt; command.&amp;lt;/b&amp;gt; The &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; file or group opened in the most recent OPEN command becomes the default. &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;However, the default file context is updated only after the request containing the OPEN statement has been evaluated. Therefore, the new default is in place only for subsequent requests.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;If OPENC is issued instead of OPEN, a new default is not established and the previous default is preserved.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;&amp;lt;var&amp;gt;DEFAULT&amp;lt;/var&amp;gt; command.&amp;lt;/b&amp;gt; Using the DEFAULT command, you can specify either a file or a group.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;&amp;lt;var&amp;gt;IN&amp;lt;/var&amp;gt; clause.&amp;lt;/b&amp;gt; The default file/group context during compilation of a request is used, throughout the request, as the file/group context for statements that do not have their own context specification. An IN clause on a &amp;lt;var&amp;gt;BEGIN&amp;lt;/var&amp;gt; or &amp;lt;var&amp;gt;MORE&amp;lt;/var&amp;gt; command sets a default context that remains in effect only for compilation of that request.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Explicitly specifying the reference context===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can specify the file or group context of a &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;SOUL&amp;lt;/var&amp;gt; statement in these ways:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Explicitly referring to a FIND or SORT statement or to a list&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Using the IN clause   &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Placing a statement within a record loop &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Statements that do not fall into one of these categories operate on the default file or group established for the request. This can be established either by default or by an IN clause on the BEGIN or MORE command. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===File and group OPENs and CLOSEs===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
A file can be an individual file, a member of a permanent group, a member of a temporary group, or any combination of these. When a file is referenced in a command or in a &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;SOUL&amp;lt;/var&amp;gt; statement, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; determines whether the file also is a member of an open group. The privileges available for a file can change along with its group membership.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If an OPEN command has been issued for a file or for a temporary group that contains the file, the privileges for that file are the same as those previously established for that file, regardless of whether the file also is a member of a permanent group. However, if a permanent group is opened, but no individual OPEN has been specified for a particular file in that group, the privileges available for that file, when an IN file reference is specified, are the same as those associated with the permanent group. The discussion on privileges and reference context on the next page lists all of the possible file/group combinations.          &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When a file or group is closed with the CLOSE command, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; determines which OPENs have been issued for the file or group, as follows:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;tr class=&amp;quot;head&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;A CLOSE for... &amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Closes...&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Individual file &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Individual file. If the file also was opened as a permanent group member, it is still available for reference as a group member or in an IN file clause.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td nowrap&amp;gt;Permanent group &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;All files in that group, except those that have been opened as individual files or that also are members of other groups.    &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Temporary group &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;None of the files in the group. &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Privileges according to reference context===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The privileges associated with individual files and groups can be granted and combined in different ways, depending upon the reference context:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;tr class=&amp;quot;head&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;When you reference... &amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Your set of privileges are...&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Individual file &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Those granted by &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; when the file was opened. These are privileges associated with the specified file password or, if the password was not required or was specified incorrectly, the default file privileges. With application subsystems, user privileges are those associated with the user class or are the default file privileges.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Temporary or ad hoc group &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Derived from the logical intersection of the individual privileges associated with the files that make up the group. &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; combines the privileges of all of the member files. You are granted only the privileges common to all the files in the group.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Permanent group &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Those granted by &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; when the group was opened. These are the privileges associated with the specified group password or, if the password was not required or was specified incorrectly, the default group privileges.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;File that is concurrently a member of two permanent groups and has not been opened as an individual file &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Derived from the logical union of the privileges associated with the groups. &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; appends the privileges of each of the open groups of which the file is a member. A privilege granted to any of the groups is granted to the file.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;File that has been opened both as an individual file and as a member of a permanent group &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Those associated with the file, not the group. An open group has no effect on the file privileges.    &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When a file that is a member of a permanent group is not opened individually, its privileges are the same as those granted for the group. It still can be referenced individually in a command or in a &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;SOUL&amp;lt;/var&amp;gt; statement. A file that is a member of a permanent group can also be opened individually.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Procedure file and update file references===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When operating on a group, certain commands and &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;SOUL&amp;lt;/var&amp;gt; statements refer to the procedure file or the update file associated with the group. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The group procedure file is the file in which procedures for the group are stored and from which procedures are retrieved or deleted. If an explicit procedure file is not defined with the PROCFILE parameter in the CREATE GROUP command, the procedure file can be specified in an IN clause. The IN clause also can be used to override the group procedure file specification.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The group update file is the file in which records for the group are stored with the &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;SOUL&amp;lt;/var&amp;gt; STORE RECORD statement. If an explicit update file is not defined in the UPDTFILE parameter in the CREATE GROUP command, an update file can be specified in an IN clause. The IN clause also can be used to override the group update file specification.   &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Example====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
This request illustrates the various methods of context specification:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;OPEN CLIENTS&lt;br /&gt;
OPENC CLAIMS90&lt;br /&gt;
BEGIN&lt;br /&gt;
GET.RECS:   FIND ALL RECORDS FOR WHICH&lt;br /&gt;
                SETTLEMENT DATE IS LESS THAN 900401&lt;br /&gt;
            END FIND&lt;br /&gt;
PROCESS:    FOR EACH RECORD IN GET.RECS&lt;br /&gt;
DRIVER:         %DRIVER = DRIVER INVOLVED&lt;br /&gt;
MATCH.REC:      IN CLAIMS90 FIND ALL RECORDS FOR WHICH&lt;br /&gt;
                    DRIVER ID = %DRIVER&lt;br /&gt;
                END FIND&lt;br /&gt;
COMPUTE:        FOR EACH RECORD IN MATCH.REC&lt;br /&gt;
                    IF STATE EQ &#039;FLORIDA&#039; THEN&lt;br /&gt;
                        %TOT = %TOT + 1&lt;br /&gt;
                    END IF&lt;br /&gt;
                END FOR&lt;br /&gt;
            END FOR PROCESS&lt;br /&gt;
            PRINT &#039;1ST QUARTER, 1990: &#039; WITH %TOT -&lt;br /&gt;
                &#039; FLORIDA DRIVERS INVOLVED IN ACCIDENTS&#039;&lt;br /&gt;
END&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
In the preceding request, the OPEN command opens the CLIENTS file or group. The OPENC command also opens a file or group, in this case CLAIMS90. However, the OPENC command does not establish a new default. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The GET.RECS (default) and PROCESS (explicit reference) statements operate on CLIENTS. The DRIVER statement operates on CLIENTS because it is within the record loop for records from CLIENTS. The MATCH.REC (IN clause) and COMPUTE (explicit reference) statements operate on CLAIMS90.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
==IN clause==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The IN clause precedes &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;SOUL&amp;lt;/var&amp;gt; statements to override the default file or group. A special form also creates ad hoc groups. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
A variation of the IN clause, IN GROUP MEMBER, restricts &amp;lt;var&amp;gt;Clear List&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;Find&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;For Record Number&amp;lt;/var&amp;gt;, and &amp;lt;var&amp;gt;Store Record&amp;lt;/var&amp;gt; statements to one member file in a group context. See [[#IN GROUP MEMBER clause|IN GROUP MEMBER clause]] for more information.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Syntax&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The basic form of the IN clause is:   &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;IN [FILE | [PERM | TEMP] GROUP] {filename | groupname} &lt;br /&gt;
   MEMBER %member [AT {location | =}] &lt;br /&gt;
   statement-clause&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If no FILE or GROUP option is specified, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; searches for the name among open temporary groups first, then open permanent groups, and finally open files.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Specifying a remote file===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
A statement or command that references a file using the AT clause is called a remote file specification. The AT clause is valid only for single remote files or remote members of a scattered group explicitly referenced by an IN GROUP MEMBER clause (see [[#IN GROUP MEMBER clause|IN GROUP MEMBER clause]]). Use an unquoted equal sign to instruct &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; to look for the file locally.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;note&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Note:&amp;lt;/b&amp;gt; The &amp;lt;var&amp;gt;For Record Number&amp;lt;/var&amp;gt; statement does not support remote files.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The location names of remote nodes are established with the DEFINE PROCESS command.&lt;br /&gt;
See [[PQO: Remote files and scattered groups]] for more on creating location names.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The location name in the AT clause can be coded as a dummy string inside a &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;SOUL&amp;lt;/var&amp;gt; procedure. Using a dummy string allows the application programmer to code a single file reference in the procedure. Then, at run time, the user can enter a valid remote node name or an equal sign (=) to access different versions of the same file (having the same name), either remotely or locally. See [[Procedures#Procedures|Procedures]] for a detailed discussion of dummy strings.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
A remote file can also be specified using a file synonym. A file synonym is a symbolic name for a remote file that references both the actual file name and the location name. Therefore, when using a file synonym, you do not use the AT clause. Even though a file synonym has been defined, you can still use the full remote file specification, as described above.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
File synonyms are discussed in detail in [[PQO: Managing files and groups]].&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Ad hoc groups===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The form of the IN clause shown below creates an ad hoc group:     &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;IN file1[,file2] ...&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
This form can be used with FIND, FIND AND PRINT COUNT, FIND AND RESERVE, CLEAR LIST, and FOR EACH VALUE statements. The group consists of the listed files, which must already be open. The ad hoc group has no name and exists only for the duration of the request and any request continuations. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Remote files which are members of ad hoc groups can be specified OPTIONAL or MANDATORY. These keywords can be abbreviated OPT and MAN, respectively, as in this example:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;IN file1 (OPT), file2 (MAN) ...&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If you want to refer to an ad hoc group you created earlier in a request, you must repeat the earlier IN clause. If all of the required conditions for duplicate ad hoc groups are met, repetition of the IN clause does not create a second, identical ad hoc group. It only calls on the original ad hoc group definition stored in FTBL.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Duplicate ad hoc groups&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
&amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; considers two ad hoc groups as duplicates if all the following are true:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Their IN clauses contain the same set of files.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Their IN clauses list the files in the same order.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Corresponding files in their IN clauses are both optional or both mandatory.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Duplicate groups do not require additional server table space or network traffic.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Clearing lists===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The CLEAR LIST statement normally clears an existing list; no IN clause is required. When CLEAR LIST appears in a request before the first reference to the list, an IN clause might be necessary to create the list in the same context as the later references. References to an existing set of records in the CLEAR LIST or FIND statement override the IN clause.   &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==IN GROUP MEMBER clause==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The IN GROUP MEMBER clause can be used with CLEAR LIST, FIND ALL RECORDS (and its variants), FIND ALL VALUES, For Record Number (or FRN), and STORE RECORD statements; they are restricted to one member file in a group context.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Syntax====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The format of the IN GROUP MEMBER clause is:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;IN [TEMPORARY | PERMANENT] GROUP groupname &lt;br /&gt;
   MEMBER {%member | filename [AT {location | =] &lt;br /&gt;
   statement&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
Where:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;groupname is the name of the file group&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;%member is a valid %variable, image, or screen item that indicates the group member for the CLEAR LIST, FIND, For Record Number (FRN), or STORE RECORD statement. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;filename specifies the name of a file where location indicates a valid remote node name or the equal sign (=) indicates that you want &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; to look for the named file only locally.&lt;br /&gt;
&amp;lt;p class=&amp;quot;note&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Note:&amp;lt;/b&amp;gt; The &amp;lt;var&amp;gt;For Record Number&amp;lt;/var&amp;gt; option does not support remote files.&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;statement is one of the following:&lt;br /&gt;
&lt;br /&gt;
:CLEAR LIST&lt;br /&gt;
:FIND ALL RECORDS&lt;br /&gt;
:FIND ALL VALUES&lt;br /&gt;
:For Record Number (FRN)&lt;br /&gt;
:STORE RECORD &lt;br /&gt;
&amp;lt;/li&amp;gt;&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Examples====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Suppose, for example, that the group &amp;lt;code&amp;gt;JANSALES&amp;lt;/code&amp;gt; consists of several files corresponding to sales regions. The following statement retrieves a set of records for a single region. The file to be searched has been specified by screen input.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;FDREG: IN GROUP JANSALES MEMBER %SSCREEN:REGION  -&lt;br /&gt;
       FIND ALL RECORDS FOR WHICH TOT GT 500&lt;br /&gt;
       END FIND&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The following example illustrates using a &amp;lt;var&amp;gt;For Record Number&amp;lt;/var&amp;gt; (&amp;lt;var&amp;gt;FRN&amp;lt;/var&amp;gt;) option:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;BEGIN&lt;br /&gt;
%GRPMEMBER=&#039;AUGUST&#039;&lt;br /&gt;
FD: IN GROUP YR2001 MEMBER %GRPMEMBER FRN 164&lt;br /&gt;
PRINT FULLNAME WITH DOB AT 35 WITH SSN AT 50&lt;br /&gt;
END FOR&lt;br /&gt;
END&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Uses for the IN GROUP MEMBER clause===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The most common use of the IN GROUP MEMBER clause is to improve the efficiency of FIND statements when it is known in advance that some group members contain no records that meet the FIND criteria. For example, if Red Sox caps are only sold in the Northeast, the FIND statement labeled &#039;GETNE&#039; below avoids a search through all the regional files.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Another possible use of the IN GROUP MEMBER clause is to build a list by processing one file at a time. Suppose, for example, that a department store chain wants to analyze sales of Boston Red Sox caps in regions other than the Northeast. The selective IN syntax could be used to create the appropriate list by subtraction, as follows:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;GETCAPS: IN GROUP JANSALES FIND ALL RECORDS -&lt;br /&gt;
         FOR WHICH ITEM = &#039;SOXCAP&#039;&lt;br /&gt;
CAPLIST: PLACE RECORDS IN GETCAPS ON LIST FARFANS&lt;br /&gt;
         %X = &#039;NOREAST&#039;&lt;br /&gt;
GETNE:   IN GROUP JANSALES MEMBER %X        -&lt;br /&gt;
         FIND ALL RECORDS FOR WHICH ITEM = &#039;SOXCAP&#039;&lt;br /&gt;
FARLIST: REMOVE RECORDS IN GETNE FROM LIST FARFANS&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Use with lists===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Lists can be created from the results of group FINDs. Records from a group FIND (not using the IN GROUP MEMBER clause) cannot be placed on a list created by an individual file FIND, even if the file is a member of the group, and vice versa.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
However, records found using the IN GROUP MEMBER clause can be added to or removed from the same list as records from group FINDs that do not involve using the IN GROUP MEMBER clause.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Use with $CURFILE and $UPDATE===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You cannot use an IN clause that includes both MEMBER and $CURFILE or $UPDATE.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
==$Curfile and $Update functions==&lt;br /&gt;
 &lt;br /&gt;
===Use with IN clause===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The IN clause also can be specified as shown here:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;IN {$CURFILE | $UPDATE}&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
$Curfile and $Update are the only functions that can be used outside of normal function syntax. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;$Update can be used to satisfy the IN clause requirements of INCLUDE and STORE RECORD. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;$Curfile can be used to satisfy the IN clause requirements for STORE RECORD only.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===$Curfile function===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The $Curfile function returns the name of the current file in a record loop. The current file is defined as the file from which the current record has been selected when the record loop refers to a group. You can use an IN $Curfile clause only within a record loop.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
An IN $Curfile clause can add records to a file based on other data in that file, without regard for the actual file name. The file need not be a member of a group.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===$Update function===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The $Update function returns the name of the update file in the current group or, if a current group does not exist, the name of the current file. If no update file for the current group was specified, an IN $Update clause elicits an error message. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Restrictions for $Curfile and $Update===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You cannot use an IN clause that includes both MEMBER and $Curfile or $Update.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Example 1====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
This sequence illustrates the use of a temporary group with an update file:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;CREATE TEMP GROUP FISCAL FROM FY89, FY90, FY91&lt;br /&gt;
PARAMETER UPDTFILE = FY91, PROCFILE = FY89&lt;br /&gt;
END&lt;br /&gt;
OPEN GROUP FISCAL&lt;br /&gt;
BEGIN&lt;br /&gt;
GET.ACCT.NO:    %A = $READ(&#039;ENTER ACCT NO OR &amp;quot;CR&amp;quot;&#039;)&lt;br /&gt;
                IF %A EQ &amp;quot; THEN&lt;br /&gt;
                    JUMP TO TOT.CT&lt;br /&gt;
                END IF&lt;br /&gt;
                %B = $READ(&#039;ENTER AMOUNT&#039;)&lt;br /&gt;
                IF %B EQ &amp;quot; THEN&lt;br /&gt;
                    JUMP TO TOT.CT&lt;br /&gt;
                END IF&lt;br /&gt;
FIND.ACCT.RECS: IN $UPDATE FIND ALL RECORDS FOR WHICH&lt;br /&gt;
                    ACCT NO = %A&lt;br /&gt;
                END FIND&lt;br /&gt;
CT:             COUNT RECORDS IN FIND.ACCT.RECS&lt;br /&gt;
                IF COUNT IN CT GT 1 THEN&lt;br /&gt;
                    PRINT &#039;ACCT MULTIPLY DEFINED&#039; AND %A&lt;br /&gt;
                    JUMP TO END.REQUEST&lt;br /&gt;
                END IF&lt;br /&gt;
COMPUTE.B:      FOR EACH RECORD IN FIND.ACCT.RECS&lt;br /&gt;
                    %B = %B + AMT&lt;br /&gt;
                    CHANGE AMT TO %B&lt;br /&gt;
                    JUMP TO GET.ACCT.NO&lt;br /&gt;
                END FOR&lt;br /&gt;
ADD.REC:        STORE RECORD&lt;br /&gt;
                    ACCT NO = %A&lt;br /&gt;
                    AMT = %B&lt;br /&gt;
                END STORE&lt;br /&gt;
GET.NEXT:       JUMP TO GET.ACCT.NO&lt;br /&gt;
TOT.CT:         FIND AND PRINT COUNT&lt;br /&gt;
END.REQUEST:&lt;br /&gt;
END&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The request searches the group update file (FY91) for an account number to match the one entered by the user. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;If there is more than one record with that number, the request ends. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;If a single record exists, the amount entered by the user is added to that record. The request then asks for a new account number. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;If no record exists with a particular account number, the FOR loop falls through to the ADD.REC statement. The STORE RECORD statement does not contain an IN clause and thus stores the new record in the update file, FY91.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When the user indicates that updating is finished by pressing a carriage return in response to the first prompt, execution proceeds to the TOT.CT statement. The TOT.CT statement contains neither an explicit reference to another statement nor an IN clause, so the request prints a single combined count of the number of records in the three files in the group.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Example 2====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The next example creates an ad hoc group from the open files HISTORY and FY90. The COMPUTE.TOT statement causes the amount fields from both files to be added to a grand total to be printed at the end of the request. The CHANGE.CAT statement uses the $CURFILE function to limit the budget category change to records in the history file.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;BEGIN&lt;br /&gt;
A.CAT:       IN HISTORY, FY80 FIND ALL RECORDS FOR WHICH&lt;br /&gt;
                 BUDGET CAT = A OR AA&lt;br /&gt;
             END FIND&lt;br /&gt;
             FOR EACH RECORD IN A.CAT&lt;br /&gt;
COMPUTE.TOT:     %TOT = AMT + %TOT&lt;br /&gt;
CHANGE.CAT:      IF $CURFILE EQ &#039;HISTORY&#039; AND -&lt;br /&gt;
                     BUDGET CAT EQ &#039;AA&#039; THEN&lt;br /&gt;
                     CHANGE BUDGET CAT TO &#039;A&#039;&lt;br /&gt;
                 END IF&lt;br /&gt;
             END FOR&lt;br /&gt;
             PRINT &#039;TOTAL DOLLARS THRU 1990: &#039; WITH %TOT&lt;br /&gt;
END&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Context when using statements outside record loops==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Most &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;SOUL&amp;lt;/var&amp;gt; statements that appear outside record loops can operate in either a file or group context. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
A few statements (such as the two listed below) require further specification in group context. Sometimes the specification appears in the group definition; in other cases, an IN clause is used to override a group default.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;INCLUDE requires a group procedure file or an IN clause.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;STORE RECORD requires a group update file or an IN clause.   &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
==Groups with multiple procedure files==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If you specify &amp;quot;PROCFILE = *&amp;quot; when a group is created, then that group can contain more than one procedure file. When a procedure is included, search order is determined by the order in which the files were specified in the CREATE GROUP command.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The use of multiple procedure files in application subsystem development is explained in [[Application Subsystem development]].&lt;br /&gt;
For more information, see &amp;lt;var&amp;gt;[[CREATE command: Temporary group|CREATE GROUP]]&amp;lt;/var&amp;gt; command information.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
==Cross-referencing==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Cross-referencing means using data from one place to determine retrieval or update operations in another. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Example====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
This example illustrates cross-referencing between a group and a file. The temporary group FISCAL is the group defined earlier in this page. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;OPEN FILE HISTORY&lt;br /&gt;
OPEN GROUP FISCAL&lt;br /&gt;
BEGIN&lt;br /&gt;
A.CAT:      FIND ALL RECORDS FOR WHICH&lt;br /&gt;
                BUDGET CAT = A&lt;br /&gt;
            END FIND&lt;br /&gt;
            PLACE RECORDS IN A.CAT ON LIST REMAINDER&lt;br /&gt;
            FOR EACH RECORD ON LIST REMAINDER&lt;br /&gt;
                %ACCT = ACCT NO&lt;br /&gt;
MATCH:          FIND ALL RECORDS ON LIST REMAINDER FOR WHICH&lt;br /&gt;
                    ACCT NO = %ACCT&lt;br /&gt;
                END FIND&lt;br /&gt;
                REMOVE RECORDS IN MATCH FROM LIST REMAINDER&lt;br /&gt;
HIST.MATCH:     IN HISTORY FIND ALL RECORDS FOR WHICH&lt;br /&gt;
                    ACCT NO = %ACCT&lt;br /&gt;
                END FIND&lt;br /&gt;
HIST.CT:        COUNT RECORDS IN HIST.MATCH&lt;br /&gt;
                IF COUNT IN HIST.CT NE 0 THEN&lt;br /&gt;
                    PRINT %ACCT WITH &#039; FOUND IN HISTORY&#039;&lt;br /&gt;
                    JUMP TO NEXT.REC&lt;br /&gt;
                END IF&lt;br /&gt;
                PRINT %ACCT WITH &#039; NOT FOUND IN HISTORY&#039;&lt;br /&gt;
NEXT.REC:       *GO TO NEXT RECORD ON LIST&lt;br /&gt;
            END FOR&lt;br /&gt;
END&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The &amp;lt;code&amp;gt;A.CAT&amp;lt;/code&amp;gt; statement finds a set of records from the default group &amp;lt;code&amp;gt;FISCAL&amp;lt;/code&amp;gt;. Records from the group are placed on a list. As records are processed, other records in the set that have identical account numbers are removed so that each account number is printed only once. Until the &amp;lt;code&amp;gt;HIST.MATCH&amp;lt;/code&amp;gt; statement, all statements refer to &amp;lt;code&amp;gt;FISCAL&amp;lt;/code&amp;gt;. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The &amp;lt;code&amp;gt;HIST.MATCH&amp;lt;/code&amp;gt; statement uses the account number from the current record in &amp;lt;code&amp;gt;FISCAL&amp;lt;/code&amp;gt; to search the single file &amp;lt;code&amp;gt;HISTORY&amp;lt;/code&amp;gt;. The &amp;lt;code&amp;gt;HIST.MATCH&amp;lt;/code&amp;gt; through &amp;lt;code&amp;gt;HIST.CT&amp;lt;/code&amp;gt; statements refer to the &amp;lt;code&amp;gt;HISTORY&amp;lt;/code&amp;gt; file. A message is displayed to indicate whether or not the history file contains records with the current account number.  &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
==Group operations in SOUL==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The following discussion summarizes the ways in which file groups affect the following &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;SOUL&amp;lt;/var&amp;gt; operations:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Find&amp;lt;/var&amp;gt; statement&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Sorted files&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Sort&amp;lt;/var&amp;gt; statement&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Lists&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Record numbers&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;For Each Value&amp;lt;/var&amp;gt; statements&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Field type variations within a group&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;For Each Record&amp;lt;/var&amp;gt; statements&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===FIND statement===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When a FIND, FIND AND PRINT COUNT, or FIND AND RESERVE statement is used in a group context, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; performs a series of individual file FINDs; however, the group FIND results in one set of records instead of several sets. Records in the set are arranged by file in the order in which the members were listed when the group was created. Any record loop statement referring to this set automatically switches files at the appropriate time. Once a record is selected by the loop, operations are performed only on that record and the file that contains it.      &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Sorted files===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Files with sort key organization can be used as members of groups. However, there is no group sort sequence. Therefore, the SFL$ and SFGE$ conditions cannot be used in a group FIND. The IN ORDER clause is not allowed in a &amp;lt;var&amp;gt;For Each Record&amp;lt;/var&amp;gt; statement that refers to a group.                 &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===SORT statement===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The SORT statement can refer to a group FIND or a group list. The entire set of records is sorted across file boundaries to produce a single, temporary set of records. These records then can be processed with a &amp;lt;var&amp;gt;For Each Record&amp;lt;/var&amp;gt; loop. The $CURFILE function can be used to print the original file names of the individual sorted records.        &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Lists===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Lists can be created from the results of group FINDs. Records from a group FIND cannot be placed on a list created by an individual file FIND, even if the file is a member of the group, and vice versa. Records from different groups cannot be placed on a single list.   &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
An individual record within a &amp;lt;var&amp;gt;For Each Record&amp;lt;/var&amp;gt; loop on a group can be added to or removed from a list.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Record numbers===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The $CURREC function and the POINT$ condition of the FIND statement are not recommended for use in a group context. Both $CURREC and POINT$ refer to the internal record numbers of a file; these numbers are assigned to records on a file basis as records are added. At a group level, the record numbers have no meaning because the record numbers are not unique within a group. POINT$ cannot be used as a condition in a group FIND. The $CURREC function can be used, but you must ensure that the number is used only in reference to the file from which the record came.              &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The value form of the &amp;lt;var&amp;gt;For Record Number&amp;lt;/var&amp;gt; statement can be used in group context. When a value is specified and group context is desired, the statement must be preceded by an IN clause in order to indicate the name of the file in which the record number occurs.             &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===FOR EACH VALUE statement===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When the FOR EACH VALUE statement refers to a group, the values are supplied in order. If, in at least one of the group members, the value field is ORDERED NUMERIC, the values are supplied in numerical order. Otherwise, they are supplied in order according to the standard EBCDIC collating sequence.             &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Field type variations within a group===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
It is possible that a given field name might not have the same properties in every file in a group. A field name, for example, can have the NUMERIC RANGE attribute in some files, but not in others. Furthermore, a field that appears in one or more files of a group might not exist in any of the others.       &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====KEY and NON-KEY fields====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Within a group, a field can be defined as KEY in some files and NON-KEY in others. When this occurs in a group FIND condition, the FIND statement performs a key search based on the index in those files in which the field is defined as KEY, and it does a direct search of the data records in the files in which it is defined as NON-KEY. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====NUMERIC RANGE and NON-RANGE fields====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The FIND statement operates in a similar manner when a numeric retrieval is specified for a group in which some files have the field defined as NUMERIC RANGE, and others have it defined as NON-RANGE. Records in files that have the field defined as NUMERIC RANGE are retrieved through the index, and records in the other files are retrieved by a direct search.             &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Absent fields====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When some files in a group do not contain a specified field, records in those files are handled as if they contained the absent fields. If none of the files contain a specified field, any statement referring to that field is rejected.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====PRINT and SORT statements====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Another field type conflict affects PRINT and SORT statements. When specified fields have the INVISIBLE attribute in some files and not in others, records that contain INVISIBLE fields are handled as if the field does not exist. If the field is INVISIBLE in all the files, the PRINT or SORT statement is rejected.                                     &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Processing====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Suppose you attempt to change a field described as LENGTH 3 to the value COLORADO. In group context, this change is rejected during compilation only if it is invalid in all of the files in the group. Otherwise, the reference is accepted during compilation. It is rejected during evaluation only if an attempt is made to change a field that is too short to contain the new value.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
In general, references in group context are rejected during compilation only if they are invalid for every file in the group. Otherwise, all validity checks are made at the file level during evaluation.     &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===FOR EACH RECORD statement===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The &amp;lt;code&amp;gt;For Each Record In Order By&amp;lt;/code&amp;gt; form of the &amp;lt;var&amp;gt;For Each Record&amp;lt;/var&amp;gt; statement is not allowed in group context.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
==Referencing remote files in requests==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Request compilation is initiated when &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; encounters a &amp;lt;var&amp;gt;BEGIN&amp;lt;/var&amp;gt; command. A request that refers to a remote file is compiled on both client and server nodes. &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; initiates compilation on the remote server system when a reference to a remote file is first encountered.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
During compilation, as remote references are encountered, the client system sends data manipulation language (DML) calls to the participating server node, or nodes, to be compiled.     &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Example====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The following example below shows an excerpt from a procedure that references a &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; file (named VEHICLES) residing at a remote location (whose symbolic name is defined as BOSTON).&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Prior to accessing a remote file, the following conditions must be met:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The Parallel Query Option/204 network is defined on both the client and server systems.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The OPEN LINK command is successfully issued by the &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; system manager (or User 0) on both the client and server systems, so that the connection for the Parallel Query Option/204 conversation is enabled.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;DEFINE FILE CARS WITH SCOPE=SYSTEM    -&lt;br /&gt;
  FILENAME=VEHICLES  -&lt;br /&gt;
  LOCATION=BOSTON&lt;br /&gt;
OPEN CARS&lt;br /&gt;
.&lt;br /&gt;
BEGIN&lt;br /&gt;
.&lt;br /&gt;
FD: IN CARS FD&lt;br /&gt;
    MAKE=FORD&lt;br /&gt;
    END FIND&lt;br /&gt;
.&lt;br /&gt;
.&lt;br /&gt;
.&lt;br /&gt;
FR: FR IN FD&lt;br /&gt;
    PAI&lt;br /&gt;
    END FOR&lt;br /&gt;
.&lt;br /&gt;
.&lt;br /&gt;
.&lt;br /&gt;
END&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Input/output operations that involve network transmissions are entailed in using the OPEN, FIND, and FOR statements to reference a remotely located file. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
In the previous example:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;OPEN &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The user request to open a remote file (CARS) initiates activity at the remote location (BOSTON) where the file resides. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The server sends a copy of the &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; file information (Table A) to the user&#039;s (client) node so that compilation can proceed.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;FIND (FD)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The client sends FIND criteria (FORD vehicle records) to the remote location for evaluation. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;FOR EACH RECORD (FR) &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The client processes records using a &amp;lt;var&amp;gt;For Each Record&amp;lt;/var&amp;gt; loop. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The server sends records from the found set to the user&#039;s node, one page of records at a time. Only records in the found set are transmitted.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The previous example shows remote file references using a file synonym. As an alternative, if no DEFINE FILE command is issued on the client system, you can reference the remote file using a remote file specification (AT clause). &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
For example, instead of OPEN CARS, you use:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;OPEN VEHICLES AT BOSTON&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Instead of IN CARS FD, you use:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;FD: IN VEHICLES AT BOSTON FD&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
See [[PQO: Remote files and scattered groups]] for additional information.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Request continuation is not supported===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Remote file reference is not supported in a request continuation.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The MORE command and END MORE statement are not supported if the continued request refers to a remote file.       &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Errors during compilation and evaluation===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Compilation and evaluation errors in Parallel Query Option/204 applications are discussed in separate sections below. Both sections discuss how &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; handles noncommunications errors and communications errors when a remote file is referenced.   &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Compile time error handling====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If a noncommunications error occurs during compilation when a client application references a file on a server node:      &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; prints on the client node the current line in the client procedure and the error message that was generated on the server node.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Compilation continues on the client node only, regardless of the number of errors encountered on server nodes. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If a communications problem occurs during compilation, in any remote file or group context:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The compilation is terminated. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;All files at the referenced node are disabled for the client user.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Evaluation time error handling====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
&amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; begins to execute a &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;SOUL&amp;lt;/var&amp;gt; request even though that request contains a reference to a remote file or group that was already made unavailable to the request prior to evaluation. The action &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; takes depends on the context of the file or group referenced in the request:    &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;tr class=&amp;quot;head&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Context&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Action&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Remote single file&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;ON MISSING FILE unit invoked &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Scattered group&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;ON MISSING FILE unit invoked&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;File member of scattered group&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;ON MISSING MEMBER unit not invoked &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If a noncommunications error occurs on an already opened remote file, the error message generated at the remote node is printed on the client node, and the request is canceled. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If you lose communications during evaluation with an already opened remote file, all files at that node are disabled for you, and &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; makes one of three responses:  &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Takes no further action, if all of the following are true:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;File is in group context &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;File is an optional group member&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;MAXFAIL parameter setting in CREATE GROUP is not exceeded&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Node to which the file belongs has no uncommitted updates&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Invokes one of two ON units:  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;ON MISSING MEMBER &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;ON MISSING FILE &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Invokes the ON ERROR unit (if present) and cancels the request. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Using ON MISSING MEMBER and ON MISSING FILE===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The specific behavior of the ON MISSING MEMBER and the ON MISSING FILE units is described below. For a code example with these ON units, see [[#Using file and group availability $functions|Using file and group availability $functions]]. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Using the ON MISSING MEMBER unit====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
ON MISSING MEMBER handles errors involving the availability of scattered group members. It obeys the same scoping rules as all other ON units. Its format follows: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt; ON MISSING MEMBER&lt;br /&gt;
 .&lt;br /&gt;
 .&lt;br /&gt;
 .&lt;br /&gt;
 END ON&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
ON MISSING MEMBER is invoked whenever the following are all true: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;An operation in group context fails against a remote optional member of the group. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;The member was not previously unavailable to the request. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;The MISSING FILE condition is not raised. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When ON MISSING MEMBER is invoked, these consequences follow for all the user&#039;s member files at that server node: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The group member is made unavailable to the group (both during and after request execution). &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;The group member is considered disabled. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Subsequent references to the group in the same request for files at that server do not invoke ON MISSING MEMBER. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If an operation in group context fails against a remote optional member of a group and no ON MISSING MEMBER unit is active, the member is made unavailable to the group and the operation completes as if the member were not part of the group definition.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When control is passed to an ON MISSING MEMBER unit, you can return control to the request with a RETRY, BYPASS, or JUMP TO statement. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
ON MISSING MEMBER units cannot be nested. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Communications failures during ON MISSING MEMBER====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If a communications failure occurs while communicating with a different node within an ON MISSING MEMBER unit, the ON ERROR unit is invoked or the request is cancelled. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If a communications failure occurs while receiving records from a remote node in a &amp;lt;var&amp;gt;For Each Record&amp;lt;/var&amp;gt; loop in scattered group context, you can use either the CONTINUE statement or the BYPASS statement to instruct &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; how to proceed:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The CONTINUE statement causes the FOR loop to continue processing records from the next available group member. All unavailable files are skipped, but the remaining available files are processed. Note that you cannot use the CONTINUE statement with an ON MISSING MEMBER unit unless the return value of the $MISSTMT function is FOR.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;The BYPASS statement tells &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; to exit the FOR loop, ignoring any unprocessed group members, and continuing request execution with the statement immediately following the END FOR which closes the current FOR loop.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Using the ON MISSING FILE unit====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
ON MISSING FILE handles errors involving the availability of remote files in single file context, and involving mandatory and MAXFAIL conditions of remote files in group context. It obeys the same scoping rules as all other ON units. Its format follows: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt; ON MISSING FILE&lt;br /&gt;
 .&lt;br /&gt;
 .&lt;br /&gt;
 .&lt;br /&gt;
 END ON&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
ON MISSING FILE is invoked for any of the following circumstances:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;An operation in single file context fails against a remote file.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;An operation in group context fails against a remote mandatory member.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;An operation in group context fails against a remote optional group member and the number of missing members is greater than the MAXFAIL parameter (CREATE GROUP).&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When ON MISSING FILE is invoked, these consequences follow: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The file or group is made unavailable to the request. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;The file or group is disabled for the user. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;All future references to the file or group in the same request cause the request to be canceled.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If an operation that normally calls for an ON MISSING FILE unit fails, and no MISSING FILE unit is active, the ON ERROR unit is invoked. If no ON ERROR unit is active, the request is canceled. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When control is passed to an ON MISSING FILE unit, you can return control to the request with a BYPASS or JUMP statement. RETRY is not allowed. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
ON MISSING FILE units cannot be nested. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Communications failures during ON MISSING FILE====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If a communications error failure occurs while communicating with a different node within an ON MISSING FILE unit, the ON ERROR unit is invoked or the request is canceled.   &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Clearing ON MISSING MEMBER and ON MISSING FILE====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Like other ON units, you can clear ON MISSING MEMBER and ON MISSING FILE with the CLEAR ON command, according to the following syntax:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;CLEAR ON [MISSING FILE | MISSING MEMBER}&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
==Using retrieval statements with remote files==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
This section describes the individual &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;SOUL&amp;lt;/var&amp;gt; retrieval statements (and any usage restrictions) that you can use with a remote file or group.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Using the FIND ALL RECORDS statement===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
All forms of the FIND ALL RECORDS statement are supported in remote file and scattered group context. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
A FIND statement in remote context produces a record set on each of the server nodes to which the statement refers.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
All record locks are maintained on the server nodes. If a record locking conflict occurs, partial found sets are dequeued (on several nodes if necessary), and the normal FIND CONFLICT action is taken.   &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
See the discussion of LOCATION$ on [[#Using retrieval conditions|Using retrieval conditions]] for information about restricting group context FIND results.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Using the FOR EACH RECORD statement===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
All forms of the &amp;lt;var&amp;gt;For Each Record&amp;lt;/var&amp;gt; statement are supported in remote file and scattered group context except for the IN ORDER clause, which is not supported in scattered group context. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Except for the following cases, when a FOR statement is executed, it retrieves from each record only the fields that are referred to in the loop. Data is handled differently by the server in the following cases: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;If the FOR loop references a field name variable, such as %%fieldname, or if it contains a PAI statement, the entire record is transmitted from the server node.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;If a subscripted field reference is used in a FOR loop, all occurrences of the field are transmitted from the server node.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
A CODED field is decoded before being transmitted from the server node.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====OPTIMIZING FNV option====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Use the OPTIMIZING FNV option with the &amp;lt;var&amp;gt;For Each Record&amp;lt;/var&amp;gt; statement to optimize retrievals with field name variables. You can abbreviate this option to OPT FNV. OPTIMIZING FNV prevents FOR loop retrievals with field name variables from triggering the retrieval of all fields and all occurrences.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Specify OPT FNV in one of two places:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Before the WHERE or WITH option and after all other options&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;At the end of the FOR statement when the WHERE or WITH option is not present&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When you use OPTIMIZING FNV, only the initial value of the field name variables (%%variables) at the start of the FOR loop are used to select the fields that are retrieved and shipped to the client node. Therefore, the field name variable &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;must&amp;lt;/var&amp;gt; have the proper value at the time the FOR loop is first executed. Each time the FOR loop is entered (after the loop has completed), the field name variable values are reset.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If the field name variable is changed in the FOR loop to the name of another field that was not explicitly referenced, the other field is &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;not&amp;lt;/var&amp;gt; retrieved and a default value of null is used for the field name variable reference. See [[Record loops#Field name variable optimization|Field name variable optimization]].    &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Using the For Record Number statement===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
All forms of the &amp;lt;var&amp;gt;For Record Number&amp;lt;/var&amp;gt; statement are supported in remote file and scattered group context, although &amp;lt;var&amp;gt;For Record Number&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;For Record Number In &amp;lt;i&amp;gt;label&amp;lt;/i&amp;gt;&amp;lt;/var&amp;gt; might have different results if you are working with records that are not locked. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
&amp;lt;var&amp;gt;For Record Number In &amp;lt;i&amp;gt;label&amp;lt;/i&amp;gt;&amp;lt;/var&amp;gt; refers to a preceding &amp;lt;var&amp;gt;For Each Record&amp;lt;/var&amp;gt; statement. In Parallel Query Option/204, the records retrieved for the &amp;lt;var&amp;gt;For Each Record&amp;lt;/var&amp;gt; loop are copied and sent to the client when the &amp;lt;var&amp;gt;For Each Record&amp;lt;/var&amp;gt; statement is evaluated. If the records are not locked after the retrieval, by the time the &amp;lt;var&amp;gt;For Record Number In &amp;lt;i&amp;gt;label&amp;lt;/i&amp;gt;&amp;lt;/var&amp;gt; statement is executed, the record copy to which you are referring might no longer match the record at the server.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
However, if you use &amp;lt;var&amp;gt;For Record Number&amp;lt;/var&amp;gt; without &amp;lt;var&amp;gt;In &amp;lt;i&amp;gt;label&amp;lt;/i&amp;gt;&amp;lt;/var&amp;gt;, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; locks the record to which you are referring and sends a copy to the client during &amp;lt;var&amp;gt;For Record Number&amp;lt;/var&amp;gt; execution. Only the fields referred to by &amp;lt;var&amp;gt;For Record Number&amp;lt;/var&amp;gt; are sent.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can also use the OPTIMIZING FNV option with the &amp;lt;var&amp;gt;For Each Record Number&amp;lt;/var&amp;gt; statement. If you do so, the information provided in [[#Using the FOR EACH RECORD statement|Using the FOR EACH RECORD statement]] is valid, with this exception: you must specify the &amp;lt;var&amp;gt;Opt FNV&amp;lt;/var&amp;gt; option at the end of the statement.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Using the FOR EACH VALUE statement===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
All forms of the &amp;lt;var&amp;gt;For Each value&amp;lt;/var&amp;gt; statement are supported in remote file and scattered group context. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Using the RELEASE statement===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The RELEASE ALL RECORDS and RELEASE RECORDS IN or ON statements are performed on the server system, causing any remotely held found sets to be released.         &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Using the SORT RECORDS statement===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The SORT RECORDS statement is supported in remote file and scattered group context. However, the SORT RECORDS k option is ignored. If you use SORT k RECORDS, all the records referred to, not just the first k records, are sorted. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Sort operations for remote file data are executed on each affected server node and the results are merged. Sort keys can include fields that are not defined in all members of a scattered group. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Using LIST functions===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
List processing functions are supported in remote context. List operations for remote file data are performed on the server node on which the file resides. For scattered groups, a list is created on each node that contains a member of the group. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The following example is commented to show the resulting conversation elements: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;IN PARTS AT DETROIT BEGIN&lt;br /&gt;
CLEAR LIST XYZ            (Send CLEAR LIST function to DETROIT)&lt;br /&gt;
A: FD PTYPE=&#039;XYZ&#039;         (Send FIND function to DETROIT)&lt;br /&gt;
B: FR A                   (Retrieve records)&lt;br /&gt;
   PLACE RECORD ON LIST XYZ  (Send PLACE RECORD function to DETROIT)&lt;br /&gt;
   .&lt;br /&gt;
   .&lt;br /&gt;
   .&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Note that PLACE RECORDS IN A ON LIST XYZ would have the same effect but requires only one network operation.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Using the PRINT statement===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The PRINT *ID statement cannot be used in remote file context. All other forms of the PRINT statement can be used to print field values for remote files, with the exception of Large Object Data stored in Table E. You can print the Large Object Data locator stored in Table B. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Printing preallocated fields with a PAI statement====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
PAI or PAI INTO normally displays preallocated fields first in its output. In Parallel Query Option/204, however, some update operations store new preallocated field values at the end of the record, which is displayed by PAI.   &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
PQO/204 ships a copy of all of the fields that are referenced in the FOR loop to the client node. If you change or add a preallocated field value, this value will be placed at the end of the buffer on the client that contains the copies of the fields from the server Online where the file actually resides and the original updates have been made.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
PAI of this record, for performance reasons, will not ship the fields again, and simply takes the field data from the local buffer, and shows that the preallocated field value is at the end of the record.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
In fact, the record on the remote file has been updated properly with the preallocated fields at the beginning of the record.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Fields in a remote file update are transferred to the local node in the non-preallocated format. Some updates to preallocated fields that take place within a FOR loop (for instance, ADD) store new values at the end of the record. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If preallocated fields are not updated within a FOR loop, the output of the PAI statement is the same as in the non-distributed case.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Using retrieval conditions===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Except as described below for FILE$ and LOCATION$, retrieval conditions act the same in remote context as they do locally. In scattered groups, retrieval conditions can include fields that are not defined in all members of the group. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The following retrieval conditions are supported in remote context: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;FILE$&lt;br /&gt;
FIND$&lt;br /&gt;
LIST$&lt;br /&gt;
LOCATION$&lt;br /&gt;
POINT$&lt;br /&gt;
SFGE$&lt;br /&gt;
SFL$&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Using FILE$====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The FILE$ condition is valid only in group context. It can accept remote file specifications and remote synonyms. For example, the following FIND results are restricted to values in the STUDENTS file whose location is NYC:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;IN GROUP STUDENTS FD FILE$ &#039;STUDENTS&#039; AT NYC AND SEX = &#039;F&#039;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Valid FILE$ argument formats for remote files are: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Literal remote file specifications or file synonyms&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Literal remote file specifications or file synonyms following dummy strings &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;The equality symbol (=) to point to the node on which the request is running&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Invalid FILE$ argument formats for remote files are:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;%Variables&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Remote file specifications enclosed entirely in quotes (&#039;STUDENTS AT NYC&#039; is not valid)    &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Using LOCATION$====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can use the LOCATION$ condition to restrict group context FIND results to a particular node. Used like FILE$, LOCATION$ is valid only in group context. The following FIND results are restricted to files in the STUDENTS group whose location is either MA or VT:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;IN GROUP STUDENTS FD (LOCATION$ MA OR LOCATION$ VT) AND COLOR = &#039;BLUE&#039;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The location referred to by LOCATION$ is the location name used in file synonyms and remote file specifications &amp;amp;mdash;&lt;br /&gt;
the symbolic name specified in the DESTINATION parameter of a client DEFINE PROCESS command&lt;br /&gt;
(described in [[PQO: Defining a PQO network]]).   &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Valid LOCATION$ argument formats are: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Literal location names&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Literal location names following dummy strings &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;The equality symbol (=) to point to the node on which the request is running&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
LOCATION$ arguments cannot be %variables. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If an optional member of a scattered group is unavailable, no records are found for that file and processing continues. &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Using update statements with remote files==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
With Parallel Query Option/204, you can execute single-node updates only; each &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; transaction can update data on only one node.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If the current transaction has updated a node (either local or remote) that is different from the node referred to by another update statement within the transaction, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; displays an error message stating that you violated the single-node update rule. The current transaction is backed out and the request is canceled. This restriction is checked at evaluation time. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
An application program must end the current transaction (either commit it or back it out) before the application can update files on a different node (either remote or local). &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
This section discusses the &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;SOUL&amp;lt;/var&amp;gt; update statements that you can use with a remote file or group and includes a discussion of updating records that are not locked. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Updating unlocked record sets===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
In a typical Parallel Query Option/204 remote update, a client issues a &amp;lt;var&amp;gt;Find&amp;lt;/var&amp;gt; statement to retrieve a set of records from a service node file. A client &amp;lt;var&amp;gt;For Each Record&amp;lt;/var&amp;gt; statement triggers the transfer of a copy of the record set to the client node. The client application loops through and updates the records on the service node and the client node copy. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If the service node records are not locked (for example, you use FIND WITHOUT LOCKS) during the update processing, other users might make changes on the service node to the records in the copied set. Changes that happen after the set is copied and before the update is finished can introduce inconsistencies between the client copy and the actual server data. Such changes make obsolete the client copy of the record set. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
For example, some field-level operations depend on the current state of a record: if there are three occurrences of a field, CHANGE fieldname(6) adds a fourth occurrence. If there are six or more occurrences, the same statement changes the sixth occurrence. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
A client issues this CHANGE anticipating six or more occurrences. Before the CHANGE is processed, users on the server delete all but three occurrences. The CHANGE is processed and the service node file ends up with three occurrences unchanged and four occurrences altogether; the client copy has no deletions and a changed sixth occurrence. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If the client user prints the record information after the CHANGE but within the same &amp;lt;var&amp;gt;For Each Record&amp;lt;/var&amp;gt; loop, the display shows the client&#039;s view of the record. The client does not detect that this view does not match the current server data. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If the print of the record information is after the CHANGE but within a new &amp;lt;var&amp;gt;For Each Record&amp;lt;/var&amp;gt; loop, the display is a refreshed view of the actual current server record. The client can detect at this point that the expected result of the CHANGE did not occur.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Though updates like CHANGE lock a record, they alone do not prevent inconsistencies between the client&#039;s view of the record and the actual state of the record on the server. For unlocked record processing, you need to use &amp;lt;var&amp;gt;For Record Number&amp;lt;/var&amp;gt;. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;blockquote class=&amp;quot;note&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;b&amp;gt;Note:&amp;lt;/b&amp;gt; Always lock a record before updating it. If an unlocked record set or list is being processed, use the &amp;lt;var&amp;gt;For Record Number&amp;lt;/var&amp;gt; statement to lock the record, as shown below: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;%X = $CURREC&lt;br /&gt;
FOR RECORD NUMBER %X &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
&amp;lt;var&amp;gt;For Record Number&amp;lt;/var&amp;gt; locks, copies, and sends the record to the client when the &amp;lt;var&amp;gt;For Record Number&amp;lt;/var&amp;gt; statement is executed. Using &amp;lt;var&amp;gt;For Record Number In &amp;lt;i&amp;gt;label&amp;lt;/i&amp;gt;&amp;lt;/var&amp;gt; is not sufficient, as explained in [[#Using the For Record Number statement|Using the For Record Number statement]]. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Using ON FIELD CONSTRAINT CONFLICT $functions===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If a field constraint violation occurs on a remote node and there is an active ON FIELD CONSTRAINT CONFLICT (ON FCC) unit, clients can issue the $functions that report about the constraint. For more information on the following FCC $functions, refer to [[SOUL_$functions#Summary_of_standard_functions|SOUL functions]]:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;$UNQREC&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;$UPDFILE&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;$UPDFLD&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;$UUPDOVAL&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;$UPDREC&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;$UPDSTAT&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;$UPDSTMT&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;$UPDVAL&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Using ADD, CHANGE, INSERT, and DELETE===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The following update statements are supported in remote file and in scattered group context with the limitation explained below:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;ADD&lt;br /&gt;
CHANGE&lt;br /&gt;
DELETE&lt;br /&gt;
DELETE EACH&lt;br /&gt;
DELETE RECORD&lt;br /&gt;
INSERT&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Using the BACKOUT statement===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The BACKOUT statement backs out a transaction against data on a remote node if the current transaction is remote. In addition to backing out the transaction on the remote node, BACKOUT processing includes backing out the effects of the transaction on the local copy of the remote data. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
A remote transaction is backed out automatically in the same situations in which &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; backs out a local transaction.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Using COMMIT and COMMIT RELEASE statements===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The COMMIT statement commits a transaction on a remote node if the current transaction is remote. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
A remote transaction is committed automatically in the same situations in which &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; automatically commits a local transaction.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The COMMIT RELEASE statement commits a transaction on a remote node and releases found sets on all nodes, local and remote. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Using the DELETE RECORDS statement===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The DELETE RECORDS statement is supported in remote file context and in scattered group context. The functionality of this statement depends on the setting of the PQOOPT parameter, which allows DELETE RECORDS to perform multiple-node updates.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If PQOOPT is not set for multi-node updates, DELETE RECORDS can be used in scattered group context only if either of the following conditions is true:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;All files in the group reside on the same remote node.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;The group found set to which either statement applies is restricted to a single node &amp;amp;mdash; the found set was created by:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;IN GROUP groupname MEMBER %var FIND ...&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
where: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
%var specifies a particular file (%var is not an asterisk (*)). &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Using FILE RECORDS===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The FILE RECORDS statement is supported in remote file context and in scattered group context. The functionality of this statement depends on the setting of the PQOOPT parameter, which allows FILE RECORDS to perform multiple-node updates.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If PQOOPT is not set for multi-node updates, FILE RECORDS can be used in scattered group context only if all group members reside on the same node.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If PQOOPT is set for multiple-node updates and an optional member of a scattered group is unavailable, it is skipped. The records are not filed on that node and the old index entries for the targeted field name = value pair are not deleted, but the statement executes (completes) successfully.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Using STORE RECORD===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
All forms of the STORE RECORD statement are supported in remote file and scattered group context. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Field-value pairs specified by statements that are between STORE RECORD and END STORE are sent to and stored on the remote node. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
After a record is stored on a remote node, you can access it by requests using either &amp;lt;var&amp;gt;Find&amp;lt;/var&amp;gt; or &amp;lt;var&amp;gt;For Record Number&amp;lt;/var&amp;gt; statements. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Using $CURREC, you can extract the record number of the record you most recently stored. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The file in a scattered group in which STORE RECORD stores records cannot be resolved until evaluation time, so the statement might have to be compiled on multiple nodes. For storage files pointed to by the following IN clauses, STORE RECORD is compiled on all nodes in the group; at evaluation time, it is executed on one node only.    &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;IN GROUP groupname MEMBER, in temporary or permanent scattered group context&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;IN $CURFILE, in temporary or permanent scattered group context&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;IN GROUP groupname (where the group update file is the implied storage file), in temporary scattered group context    &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Using UPDATE RECORD===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The UPDATE RECORD statement improves performance when you are executing a set of field-level update operations against the current record. UPDATE RECORD is allowed in remote and non-remote contexts.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Syntax====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The UPDATE RECORD syntax is: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;UPDATE RECORD&lt;br /&gt;
field-level-operation-1&lt;br /&gt;
field-level-operation-2&lt;br /&gt;
.&lt;br /&gt;
.&lt;br /&gt;
.&lt;br /&gt;
field-level-operation-N&lt;br /&gt;
END UPDATE&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
where a field-level operation is one of the following:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;ADD fieldname = value&lt;br /&gt;
 &lt;br /&gt;
CHANGE fieldname [(subscript)] [= value] TO newvalue       &lt;br /&gt;
 &lt;br /&gt;
DELETE fieldname [(subscript)] [= value]&lt;br /&gt;
 &lt;br /&gt;
INSERT fieldname [(subscript)] = value&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
All field-level operations between UPDATE RECORD and END UPDATE are packaged and sent to the remote node in one call. Without UPDATE RECORD, the same set of operations require one call per operation.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If there are no field-level operations between UPDATE RECORD and END UPDATE, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; ignores the UPDATE RECORD statement. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;note&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Note:&amp;lt;/b&amp;gt; DELETE EACH fieldname is not allowed in an UPDATE RECORD statement.    &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Usage====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
&amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; handles errors that occur during UPDATE RECORD the same as those that occur during STORE RECORD. For more information about STORE RECORD error handling, see [[Data maintenance#Storing values in preallocated fields|Storing values in preallocated fields]]. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If a field constraint violation occurs, the entire UPDATE RECORD statement is backed out. The $UPDSTMT function returns the type of statement that caused the conflict: ADD, CHANGE, or INSERT.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If an ON unit is invoked during the execution of UPDATE RECORD and the ON unit is exited with a BYPASS statement, the request execution continues with the statement that follows the END UPDATE statement. &amp;lt;/p&amp;gt; &lt;br /&gt;
 &lt;br /&gt;
==Using $functions with remote files==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Except for the following functions, all file-related $functions that applied to local files or groups apply to remote files and scattered groups as well.        &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;$LSTPROC&lt;br /&gt;
$RDPROC&lt;br /&gt;
$View (works only for certain remote file parameters)&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
$View is valid in remote file context with the following file parameters:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;ASTRPPG       FITRANS&lt;br /&gt;
ATRPG         HASHKEY&lt;br /&gt;
CURLOC        LOCATION&lt;br /&gt;
CURFILE       OPENCTL&lt;br /&gt;
FICREATE      RECSCTY&lt;br /&gt;
FILEORG       SORTKEY&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If $View is issued in remote file context with any other file parameter, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; processes the request but the result of $View is unreliable. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If $LSTPROC or $RDPROC is coded in a &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;SOUL&amp;lt;/var&amp;gt; statement that is in remote context, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; displays an error message at evaluation time. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
This section describes $functions that are new or whose use in Parallel Query Option/204 requires comment. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Using $CURFILE, $RLCFILE, $UPDATE, and $UPDFILE===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The output of the $CURFILE, $RLCFILE, $UPDATE, and $UPDFILE functions issued in remote context is the remote file specification (&amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;filename&amp;lt;/var&amp;gt; At &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;location&amp;lt;/var&amp;gt;). Each of these functions returns the string:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;filename&amp;lt;/span&amp;gt; At &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;location&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
Where:&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
&amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;location&amp;lt;/var&amp;gt; is a name for the node where the remote file resides. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can use $SUBSTR to extract the name or the location. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Using $FDEF and $LSTFLD functions===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can use these $functions in local or remote file context. They recognize the following keywords in the file-name argument string: FILE, AT. You also can use a file synonym. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Using $ITSOPEN function===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The $ITSOPEN function indicates whether the current file or group is open. Its format is:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;$ITSOPEN(&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;name&amp;lt;/span&amp;gt;)&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
where &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;name&amp;lt;/var&amp;gt; is a %variable or literal character string representing a file name, file synonym, or group name. This argument string can include the keywords AT, FILE, GROUP, PERM, or TEMP.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
$ITSOPEN can be issued in any context. It returns 1 if the file or group is open; it returns 0 if the file or group is closed. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Using $ITSREMOTE function===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The $ITSREMOTE function indicates whether the current file or group is remote or scattered. Its format is:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;$ITSREMOTE(&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;name&amp;lt;/span&amp;gt;)&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
where &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;name&amp;lt;/var&amp;gt; is a %variable or literal character string representing a file name, file synonym, or group name. This argument string can include the keywords AT, FILE, GROUP, PERM, or TEMP.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
$ITSREMOTE can be issued in any context. It returns 1 if the context is remote file or scattered group; it returns 0 if the context is local. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Using file and group availability $functions===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The $functions in [[#Using file and group availability $functions|Using file and group availability $functions]] and [[#Using file and group availability $functions|Using file and group availability $functions]] provide information about file and group availability. The $functions in [[#Using file and group availability $functions|Using file and group availability $functions]] report on scattered group members. The $functions in [[#Using file and group availability $functions|Using file and group availability $functions]] are for files or groups but are valid only in an ON MISSING MEMBER or ON MISSING FILE unit.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
An example in which these $functions are used is shown on [[#Using file and group availability $functions|Using file and group availability $functions]]. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The index parameter in some of the $functions in [[#Using file and group availability $functions|Using file and group availability $functions]] and [[#Using file and group availability $functions|Using file and group availability $functions]] is assigned internally by &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; when those $functions are issued. Unavailable files are assigned index numbers in the order in which the files are listed in the CREATE GROUP command. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
For example, if unavailable fileA appears earlier in the CREATE GROUP list of files than unavailable fileB, fileA is assigned a lower index number than fileB. If fileA appears the earliest in the CREATE GROUP list, it always has the index value 1 when it is unavailable. And when fileA is available, another file has 1. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Scattered group $functions====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The $functions in [[#Using file and group availability $functions|Using file and group availability $functions]] are supported only in group context. If you do not use them in group context, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; cancels the request which calls the $function. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can ensure the group context by specifying a group name (groupname in syntax in [[#Using file and group availability $functions|Using file and group availability $functions]]) as an argument of the $function. If you do not specify a group name, the context of the current statement is used. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The index parameter is an integer from one to the value of $GRNMISS. If index is less than one or greater than $GRNMISS, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; cancels the request.    &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;caption&amp;gt;$functions for groups&amp;lt;/caption&amp;gt;&lt;br /&gt;
&amp;lt;tr class=&amp;quot;head&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;$function syntax&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Returns...&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;lt;p class=&amp;quot;codeInTable&amp;quot;&amp;gt;$GRMLOC(&amp;lt;i&amp;gt;index&amp;lt;/i&amp;gt; [,&amp;lt;i&amp;gt;groupname&amp;lt;/i&amp;gt;]) &amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;p&amp;gt;Location of the missing (unavailable) group member identified by the index parameter. &amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;lt;p class=&amp;quot;codeInTable&amp;quot;&amp;gt;$GRMNAME(index [,groupname])&lt;br /&gt;
&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;p&amp;gt;Name of the missing (unavailable) group member represented by the index parameter. &amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;lt;p class=&amp;quot;codeInTable&amp;quot;&amp;gt;$GRNLEFT[(groupname)]&lt;br /&gt;
&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;p&amp;gt;Number of remaining available optional group members that can fail before the MAXFAIL parameter value (CREATE GROUP command) is exceeded. (MAXFAIL specifies the maximum number of optional members that might be unavailable.) &amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;lt;p class=&amp;quot;codeInTable&amp;quot;&amp;gt;$GRNMISS[(groupname)]&lt;br /&gt;
&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;p&amp;gt;Number of optional group members that are unavailable to the request. &amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====ON MISSING unit $functions====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The $functions in [[#Using file and group availability $functions|Using file and group availability $functions]] are valid only in an ON MISSING MEMBER or ON MISSING FILE unit. Any other use of these functions is treated as a compilation error.   &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The index parameter is an integer from one to the value of $MISNUM. If index is less than one or greater than $MISNUM, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; cancels the request.  &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;caption&amp;gt;$functions for ON MISSING units&amp;lt;/caption&amp;gt;&lt;br /&gt;
&amp;lt;tr class=&amp;quot;head&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;$function&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Returns...&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;[[$MisGrup]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;String containing the name of the group, if the error that invoked the ON unit occurred in group context. Otherwise, it returns the null string.     &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;$MisLoc(index) &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;String containing the location of the unavailable file indicated by the index parameter.    &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;$MisName(index) &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Name of the unavailable file identified by the index parameter.    &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;[[$MisNum]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Number of files in the group that are newly unavailable (that have become unavailable since the last time the ON MISSING unit was invoked).   &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;[[$MisStmt]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;String containing the type of &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;SOUL&amp;lt;/var&amp;gt; statement that failed, for example, &#039;DELETE ALL RECORDS&#039;.   &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;ON MISSING FILE unit example&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The following ON MISSING FILE unit example uses the $functions in&lt;br /&gt;
[[#Using file and group availability $functions|Using file and group availability $functions]] and [[#Using file and group availability $functions|Using file and group availability $functions]]. The example works for an ON MISSING MEMBER unit as well. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;ON MISSING FILE&lt;br /&gt;
 %C IS STRING LEN 255&lt;br /&gt;
 %D IS STRING LEN 255&lt;br /&gt;
 %C = $MisGrup&lt;br /&gt;
 IF %C = &amp;amp;apos;&amp;amp;apos; THEN&lt;br /&gt;
 * This is file context because $MisGrup returned nulls  *&lt;br /&gt;
   %C = &#039;MISSING FILE &#039; WITH $MISNAME(1) WITH &#039; AT &#039; WITH $MISLOC(1)&lt;br /&gt;
 PRINT %C&lt;br /&gt;
 ELSE&lt;br /&gt;
   %GROUPNAME = %C&lt;br /&gt;
   %C = &#039;MISSING GROUP &#039; WITH %C WITH &#039; FILES FOLLOW: &#039;&lt;br /&gt;
   FOR %JUNK FROM 1 TO $MISNUM BY 1&lt;br /&gt;
     %C = %C WITH $MISNAME(%JUNK) WITH &#039; AT &#039; WITH $MISLOC(%JUNK)&lt;br /&gt;
   END FOR&lt;br /&gt;
   %C = %C WITH &#039; ON STATEMENT &#039; WITH $MISSTMT&lt;br /&gt;
   PRINT %C&lt;br /&gt;
   %D = &#039;COMPLETE LIST OF MISSING FILES FOR&#039; WITH $MisGrup WITH &#039;: &#039;&lt;br /&gt;
   FOR %INDEX FROM 1 TO $GRNMISS BY 1&lt;br /&gt;
     %D = %D WITH $GRMNAME(%INDEX,%GROUPNAME) WITH &#039; AT &#039;&lt;br /&gt;
     %D = %D WITH $GRMLOC(%INDEX,%GROUPNAME)&lt;br /&gt;
   END FOR&lt;br /&gt;
   PRINT %D&lt;br /&gt;
 END IF&lt;br /&gt;
 BYPASS&lt;br /&gt;
END ON&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;/div&amp;gt; &amp;lt;!-- end of toc limit div --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:SOUL]]&lt;/div&gt;</summary>
		<author><name>ELowell</name></author>
	</entry>
	<entry>
		<id>https://m204wiki.rocketsoftware.com/index.php?title=Release_notes_for_Model_204_version_7.8&amp;diff=117701</id>
		<title>Release notes for Model 204 version 7.8</title>
		<link rel="alternate" type="text/html" href="https://m204wiki.rocketsoftware.com/index.php?title=Release_notes_for_Model_204_version_7.8&amp;diff=117701"/>
		<updated>2019-11-01T22:24:29Z</updated>

		<summary type="html">&lt;p&gt;ELowell: Changed https links to relative links&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
These release notes list the enhancements and other changes contained in Model 204 version 7.8. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;&amp;lt;b&amp;gt;******THIS IS A DRAFT DOCUMENT.******&amp;lt;/b&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
These release notes list the enhancements and other changes contained in Model 204 version 7.8, &amp;lt;b&amp;gt;&amp;lt;i&amp;gt;which is still in development&amp;lt;/i&amp;gt;&amp;lt;/b&amp;gt;. Until the commercial release of the software, Rocket reserves the right to add to, remove, or change anything described herein. &lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
These release notes contain installation and features information for the Rocket Model 204 version 7.8 release.&lt;br /&gt;
Before beginning your installation, please read through this information about product installation and changes.&lt;br /&gt;
&lt;br /&gt;
==SOUL enhancements==&lt;br /&gt;
===AmIndependent method===&lt;br /&gt;
The &amp;lt;var&amp;gt;AmIndependent&amp;lt;/var&amp;gt; method returns TRUE for daemons spawned by &amp;lt;var&amp;gt;[[RunIndependently_(Daemon_subroutine)|RunIndependently]]&amp;lt;/var&amp;gt;. (The action of &amp;lt;var&amp;gt;[[AmDaemon_(Daemon_property)|AmDaemon]]&amp;lt;/var&amp;gt; remains unchanged.)&lt;br /&gt;
&lt;br /&gt;
The following table shows the values returned by &amp;lt;var&amp;gt;AmIndependent&amp;lt;/var&amp;gt; versus &amp;lt;var&amp;gt;AmDaemon&amp;lt;/var&amp;gt; for different daemon types:&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Type&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;AmDaemon&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;AmIndependent&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;$COMBG&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;False&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;False&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Independent daemon&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;False&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;True&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Other daemon&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;True&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;False&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Web, etc.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;False&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;False&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===$ProcOpn===&lt;br /&gt;
&amp;lt;var&amp;gt;[[$ProcOpn|$ProcOpn]]&amp;lt;/var&amp;gt; now supports the opening of a procedure with an all-numeric name, and including a leading zero, such as:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;%result = $procOpn(&#039;0123&#039;, &#039;MYFILE&#039;)&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Support for such procedure names was initially introduced at V7.7, and this feature of &amp;lt;var&amp;gt;$ProcOpn&amp;lt;/var&amp;gt; is also enabled in V7.7 with the application of zap 77z054.&lt;br /&gt;
&lt;br /&gt;
===Allow parentheses to surround a boolean enumeration object===&lt;br /&gt;
The following sample code:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;   begin                                       &lt;br /&gt;
   variables are undefined                  &lt;br /&gt;
   %isValid is boolean initial (True)       &lt;br /&gt;
   if (%isValid) then                  &lt;br /&gt;
      print &#039;in IF&#039;                            &lt;br /&gt;
   end if                                   &lt;br /&gt;
   end   &amp;lt;/p&amp;gt;      &lt;br /&gt;
&lt;br /&gt;
will now compile and run successfully, since this syntax: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;if (%isValid) then &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
is logically equivalent to this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;if %isValid then &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Prior to V7.8 the presence of parentheses surrounding the boolean enumeration object would have caused a compilation error. This change is enabled in V7.7 with the application of zap 77z370.&lt;br /&gt;
&lt;br /&gt;
===Support for copying Object class objects===&lt;br /&gt;
The Object class now supports the copy and deepCopy methods. For example, an Object object can be copied as follows:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;   begin               &lt;br /&gt;
   %x is object object &lt;br /&gt;
   %y is object object &lt;br /&gt;
   %y = new            &lt;br /&gt;
   %x = %y:copy        &lt;br /&gt;
   end &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This change is enabled in v7.7 with the application of zap 77z076, and within V7.6 with the application of zap 76z412.&lt;br /&gt;
&lt;br /&gt;
===Assignment of enumeration values to method variables===&lt;br /&gt;
Enumerations values can now be assigned to method variables whose result is an enumeration. So, for example, the following code:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;   begin                                               &lt;br /&gt;
   enumeration colour                                  &lt;br /&gt;
      public                                           &lt;br /&gt;
         value red                                     &lt;br /&gt;
         value white                                   &lt;br /&gt;
         value blue                                    &lt;br /&gt;
      end public                                       &lt;br /&gt;
   end enumeration                                     &lt;br /&gt;
   %func    is function getColour is enumeration colour&lt;br /&gt;
   local function getColour is enumeration colour      &lt;br /&gt;
      return blue                                      &lt;br /&gt;
   end function                                        &lt;br /&gt;
   %func    = getColour                                &lt;br /&gt;
   %func    = (colour):red                             &lt;br /&gt;
   printText {~=%(Local):(%func)}                      &lt;br /&gt;
   end  &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
will produce this result:&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt; %(Local):(%func)=red &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
whereas previously this line:   &lt;br /&gt;
&lt;br /&gt;
  &amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt; %func    = (colour):red &amp;lt;/p&amp;gt;   &lt;br /&gt;
&lt;br /&gt;
would have been rejected with this message:&lt;br /&gt;
&lt;br /&gt;
   &amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;MSIR.0993: Assignment invalid: mismatch between method and method variable &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This change is enabled in V7.7 with the application of zap 77z128.&lt;br /&gt;
&lt;br /&gt;
==External Call Facility enhancements==&lt;br /&gt;
===Managing ECF tables more efficiently===&lt;br /&gt;
The are two new features to help manage ECF tables more efficiently, avoid conditions where the table can fill, and prevent the definition of further entities.&lt;br /&gt;
&lt;br /&gt;
The first feature is the new &amp;lt;var&amp;gt;DISPLAY ECF&amp;lt;/var&amp;gt; command, which displays the contents of ECF tables and also the current status of users accessing ECF modules. See more details of the &amp;lt;var&amp;gt;[[#DISPLAY ECF|DISPLAY ECF]]&amp;lt;/var&amp;gt; command below.&lt;br /&gt;
&lt;br /&gt;
The second feature is a new &amp;lt;var&amp;gt;EXTERNAL REMOVE&amp;lt;/var&amp;gt; statement with the following syntax:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;EXTERNAL REMOVE &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;modulename&amp;lt;/span&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This statement causes the entry for the named module to be removed from the module table. The table entry is then placed on a free chain of entries and can be reused by issuing the &amp;lt;var&amp;gt;EXTERNAL MODULE&amp;lt;/var&amp;gt; statement. This allows the module table to be managed with redundant entries removed, without having to recycle the ONLINE.&lt;br /&gt;
&lt;br /&gt;
An &amp;lt;var&amp;gt;EXTERNAL REMOVE&amp;lt;/var&amp;gt; statement will return &amp;lt;code&amp;gt;$status/$statusd&amp;lt;/code&amp;gt; values of &amp;lt;code&amp;gt;0/0&amp;lt;/code&amp;gt;, and most other status values that can be returned by the &amp;lt;var&amp;gt;EXTERNAL REMOVE&amp;lt;/var&amp;gt; statement are already documented in the ECF return codes table. If an &amp;lt;var&amp;gt;EXTERNAL REMOVE&amp;lt;/var&amp;gt; is attempted against a module that is currently being called (in use), then &amp;lt;code&amp;gt;$status/$statusd&amp;lt;/code&amp;gt; will return the values &amp;lt;code&amp;gt;20/1&amp;lt;/code&amp;gt; (module unavailable).&lt;br /&gt;
&lt;br /&gt;
==System enhancements==&lt;br /&gt;
&lt;br /&gt;
===New wait types for daemon/master waits===&lt;br /&gt;
&lt;br /&gt;
Two new wait types, viewable on the &amp;lt;var&amp;gt;[[MONITOR_command|MONITOR]] USERS&amp;lt;/var&amp;gt; command output, have been implemented as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;57&amp;lt;/code&amp;gt; - Means a daemon thread waiting for its master thread  &amp;lt;br /&amp;gt;     &lt;br /&gt;
&amp;lt;code&amp;gt;58&amp;lt;/code&amp;gt; - Means a master thread waiting for one of its daemon threads&lt;br /&gt;
&lt;br /&gt;
This change is enabled in V7.7 with the application of zap 77z410.&lt;br /&gt;
&lt;br /&gt;
===Snap formatting changes===&lt;br /&gt;
Date/time stamps in the page headers of snaps will now be shown in normal format, rather than in julian format as in previous versions. So in the following example, a particular snap header under v7.7 or previous versions would show as: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;SNAPID    1   19226.060155  M204.0022: Bug .. nnnnn               PAGE     1 &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
whereas the same snap header under v7.8 would show as: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;SNAPID    1  2019/08/14 06:01:06   M204.0022: Bug .. nnnnn        PAGE     1 &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Also, due to improvements in handling trailing blanks in snap output, a snap generated under v7.8 should be marginally smaller than the same snap generated under previous versions, assuming the same SNAPCTL settings.&lt;br /&gt;
&lt;br /&gt;
===Call stack trace for problem diagnosis===&lt;br /&gt;
A  call stack trace is now provided to help diagnose and resolve common errors. To enable the stack trace, do either of the following: &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Set the &amp;lt;var&amp;gt;[[SIRFACT parameter|SIRFACT]] X&#039;01&#039;&amp;lt;/var&amp;gt; bit.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Set the &amp;lt;var&amp;gt;[[DEBUGUL parameter|DEBUGL]]&amp;lt;/var&amp;gt; parameter. Note that the &amp;lt;var&amp;gt;DEBUGUL&amp;lt;/var&amp;gt; approach will introduce extra QTBL overhead. &amp;lt;p&amp;gt;(&amp;lt;var&amp;gt;DEBUGUL&amp;lt;/var&amp;gt; provides a similar facility with an include trace of procedures leading to the error, but this might not be potentially as useful as the call trace.)&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt; &lt;br /&gt;
&lt;br /&gt;
The call stack trace can assist in diagnosing run-time errors that might occur, as illustrated by the following &amp;quot;Variable too small for result&amp;quot; and &amp;quot;MBSCAN exceeded&amp;quot; examples.&lt;br /&gt;
&lt;br /&gt;
====Variable too small for result====&lt;br /&gt;
When the stack trace is enabled, a &amp;quot;variable too small&amp;quot; error results in the following message:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;M204.2966: Error at line n, procedure &#039;&#039;procname&#039;&#039; in file &#039;&#039;procfile&#039;&#039;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
which identifies the line within a procedure where the error is occurring, in addition to the usual message:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;M204.0552: Variable too small for result&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Any subsequent M204.2966 messages indicate the point in the code from where the code in error was called. For example, a stack of three subroutine calls leading to a &amp;quot;variable too small&amp;quot; error might result in the following messaging:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;   M204.0552: Variable too small for result                             &lt;br /&gt;
   M204.2966: Error at line 9, procedure MYPROC.LEVEL4 in file MYPROC   &lt;br /&gt;
   M204.2966: Called from line 5, procedure MYPROC.LEVEL3 in file MYPROC&lt;br /&gt;
   M204.2966: Called from line 5, procedure MYPROC.LEVEL2 in file MYPROC&lt;br /&gt;
   M204.2966: Called from line 5, procedure MYPROC.LEVEL1 in file MYPROC &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This information should help in diagnosing the problem. &lt;br /&gt;
&lt;br /&gt;
If the error occurs within a command level program rather than a procedure, then the M204.2966 message is replaced by an M204.2967 message, and a similar error condition to the above with a preceding call stack might be audited as follows:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;   M204.0552: Variable too small for result              &lt;br /&gt;
   M204.2967: Error at line 14 of command level program  &lt;br /&gt;
   M204.2967: Called from line 5 of command level program&lt;br /&gt;
   M204.2967: Called from line 3 of command level program &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If neither &amp;lt;var&amp;gt;SIRFACT X&#039;01&#039;&amp;lt;/var&amp;gt; nor &amp;lt;var&amp;gt;DEBUGUL&amp;lt;/var&amp;gt; is set, then the &amp;quot;variable too small&amp;quot; error produces the following messages:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;   M204.0552: Variable too small for result &lt;br /&gt;
   M204.2968: Error: no debug info &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====MBSCAN exceeded====&lt;br /&gt;
Similarly to the handling of the &amp;quot;variable too small for result&amp;quot; error, the call stack can also be used to diagnose errors where the value of &amp;lt;var&amp;gt;[[MBSCAN parameter|MBSCAN]]&amp;lt;/var&amp;gt; is exceeded as a result of a direct search of Table B records. &lt;br /&gt;
&amp;lt;p&amp;gt;Again, under V7.8, with either the &amp;lt;var&amp;gt;SIRFACT X&#039;01&#039;&amp;lt;/var&amp;gt; bit set or &amp;lt;var&amp;gt;DEBUGUL&amp;lt;/var&amp;gt; set, if a long request occurs as a result of exceeding &amp;lt;var&amp;gt;MBSCAN&amp;lt;/var&amp;gt;, then initially the following message is produced, as before:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;M204.0569: File &#039;&#039;filename&#039;&#039;, Find: Table B records to be searched = &#039;&#039;nnnn&#039;&#039;&amp;lt;/p&amp;gt;&lt;br /&gt;
followed by a DYRWT prompt message. If the user replies &#039;N&#039; to the prompt, or if the request is run in an environment (such as a batch job) where the default response is &#039;N&#039;, the following message is produced after the M204.0569 message:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;Cancelling request: M204.2969: MBSCAN (&#039;&#039;mm&#039;&#039;) exceeded, records to be searched = &#039;&#039;nnnn&#039;&#039;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
where &#039;&#039;mm&#039;&#039; is the current setting of &amp;lt;var&amp;gt;MBSCAN&amp;lt;/var&amp;gt;. The M204.2969 message is followed by M204.2966 messages displaying the call stack trace. Thus, if the following code is run from procedure MYPROC.MBSCAN against the demo database, with an &amp;lt;var&amp;gt;MBSCAN&amp;lt;/var&amp;gt; setting of 10:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;   b                           &lt;br /&gt;
   call sub1                   &lt;br /&gt;
   sub1: subroutine            &lt;br /&gt;
   fd1:                        &lt;br /&gt;
      in clients fd city = ONTARIO&lt;br /&gt;
              end find         &lt;br /&gt;
      fr fd1                      &lt;br /&gt;
         pai                      &lt;br /&gt;
         print                    &lt;br /&gt;
      end for                     &lt;br /&gt;
   end subroutine              &lt;br /&gt;
   end &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
then the following messages are produced, assuming any prompts are responded to with an &#039;N&#039;:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;   M204.0569: File CLIENTS, Find: Table B records to be searched = 3415&lt;br /&gt;
   Cancelling request: M204.2969: MBSCAN (10) exceeded, records to be searched = 3415  &lt;br /&gt;
   M204.2966: Error at line 6, procedure MYPROC.MBSCAN in file MYPROC&lt;br /&gt;
   M204.2966: Called from line 3, procedure MYPROC.MBSCAN in file MYPROC  &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===appendJournalData===&lt;br /&gt;
The &amp;lt;var&amp;gt;[[AppendJournalData_(Stringlist_function)|AppendJournalData]]&amp;lt;/var&amp;gt; function is now more tolerant of an outstanding BUMP request. Previously, if &amp;lt;var&amp;gt;AppendJournalData&amp;lt;/var&amp;gt; was called to inadvertently retrieve a large amount of journal data, typically when called implicitly from within SirScan, then any outstanding BUMP request wouldn&#039;t be honored until all of the data had been retrieved, at which point the BUMP request would be completed, and all data would be lost.&lt;br /&gt;
&lt;br /&gt;
Now, the &amp;lt;var&amp;gt;AppendJournalData&amp;lt;/var&amp;gt; process checks for outstanding BUMP requests before each track I/O is executed, thus avoiding excessive I/Os against the journal and long waits for the BUMP of such a process to complete.&lt;br /&gt;
&lt;br /&gt;
==AUDIT204 enhancements==&lt;br /&gt;
===FORMAT command===&lt;br /&gt;
TIMEHH is a new parameter used with the FORMAT command of the [[Tracking_system_activity_(CCAJRNL,_CCAAUDIT,_CCAJLOG)#AUDIT204_utility|AUDIT204]] utility.  It indicates that timestamps, printed at the beginning of each line of output, should include hundredths of a second. Requires no other arguments.&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;b&amp;gt;NOTE:&amp;lt;/b&amp;gt; This parameter and the 78 version (or later) of AUDIT204 may be used against a 77 (or later) CCAJRNL.&amp;lt;/p&amp;gt;&lt;br /&gt;
For example:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;//CCAIN DD *&lt;br /&gt;
FORMAT YEARFORM 4&lt;br /&gt;
TIMEHH&lt;br /&gt;
TYPE ER MS LI&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Recovery enhancements==&lt;br /&gt;
===Media Recovery in a multi-user environment===&lt;br /&gt;
It is now possible to perform media recovery by issuing the &amp;lt;var&amp;gt;REGENERATE&amp;lt;/var&amp;gt; command to roll forward selected files in a multi-user environment, with the media recovery being carried out by different users with system manager privileges. The new USING option allows for the specification of a ddname for the input journal stream to be used by the &amp;lt;var&amp;gt;REGENERATE&amp;lt;/var&amp;gt; command. Previously media recovery was restricted to single user batch jobs, using the CCAGEN ddname for the input journal. For more details, see the &amp;lt;var&amp;gt;[[#REGENERATE|REGENERATE]]&amp;lt;/var&amp;gt; command below.&lt;br /&gt;
&lt;br /&gt;
==Security enhancements==&lt;br /&gt;
===CA-Top Secret can disallow CCASTAT logins===&lt;br /&gt;
The [[CA-Top_Secret_interface|CA-Top Secret]] interface now recognizes the &amp;lt;code&amp;gt;DEFACID=&amp;lt;/code&amp;gt;, setting and does not allow CCASTAT logins in the online if &amp;lt;code&amp;gt;DEFACID&amp;lt;/code&amp;gt; is set to null. (There is no attempt to log on M204USR.) Therefore, to disallow CCASTAT logons, set DEFACID=, in [[CA-Top_Secret_interface#Preparing_a_TOPSPARM_parameter_module_with_TOPSGEN|TOPSPARM]]. CCASTAT will be opened because it contains file and group passwords, but it will not be used for logons if CCASTAT logons are not allowed.&lt;br /&gt;
&lt;br /&gt;
===CUSTOM=11 and mixed cased input===&lt;br /&gt;
The &amp;lt;var&amp;gt;[[CUSTOM_parameter|CUSTOM]]&amp;lt;/var&amp;gt; parameter CUSTOM=11 setting no longer requires that a *LOWER command be issued prior to a LOGCTL command (to add or change a  password) to preserve mixed case input. Prior to this release, with CUSTOM=11 in place, *LOWER had to be issued before a LOGCTL command, otherwise any mixed case password strings would automatically be translated into uppercase. This change is enabled in V7.7 with the application of zap 77z108.&lt;br /&gt;
&lt;br /&gt;
===DEFUSER can specify a jobname not authorized to access M204===&lt;br /&gt;
When specifying DEFUSER=JOBNAME and VALIDAT=LOGON in the RACFGEN parms for an ONLINE, if the specified jobname ( the owning id for the ONLINE job ) isn&#039;t authorized to use Model 204 via RACF, any LOGIN commands specifying no userid will now succeed ( previously such a LOGON would have failed ). This enables users to submit jobs with USE $JOB, whereby the string USER=jobname  will be added to the submitted JCL, and this in turn is useful if the specified jobname has dataset access privileges to datasets required by the submitted jobs, even if the jobname itself isn&#039;t authorized to use M204.&lt;br /&gt;
&lt;br /&gt;
==Janus product enhancements==&lt;br /&gt;
&lt;br /&gt;
===Janus Web Server access rule===&lt;br /&gt;
The automatic &amp;lt;var&amp;gt;[[JANUS WEB ALLOW]]&amp;lt;/var&amp;gt; rule, which allowed any user to access the port without requiring a login, is changed &amp;lt;i&amp;gt;for non-SSL ports&amp;lt;/i&amp;gt; to the following:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;JANUS WEB &amp;lt;i&amp;gt;portname&amp;lt;/i&amp;gt; DISALLOW *&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
This rule requires a system administrator to explicitly define &amp;lt;var&amp;gt;ALLOW&amp;lt;/var&amp;gt; rules to enable users to access non-SSL ports.&lt;br /&gt;
The rule applies unless overridden by user-added rules. &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;blockquote class=&amp;quot;note&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;b&amp;gt;Note:&amp;lt;/b&amp;gt; To revert from this change in the JANUS DEFINE default and make the default &lt;br /&gt;
 non-SSL &amp;lt;var&amp;gt;ALLOW&amp;lt;/var&amp;gt; rule as it was in version 7.5 and earlier (&amp;lt;code&amp;gt;ALLOW *&amp;lt;/code&amp;gt;), turn on the 1 bit of the &amp;lt;var&amp;gt;[[WEBDFLT parameter|WEBDFLT]]&amp;lt;/var&amp;gt; parameter: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;RESET WEBDFLT=1&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Increase in pending accepts for Janus BPX ports===&lt;br /&gt;
The default number of pending accepts for Janus BPX server ports has been increased from 3 to 12, thus reducing the likelihood that a pending accept may fail with the message&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;MSIR.0019 Connection request rejected for port (port), MAXCON exceeded&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The actual number of pending accepts to be supported on the port can be set with the new parameter MAXPEND, set on the &amp;lt;var&amp;gt;[[JANUS_DEFINE|JANUS DEFINE]]&amp;lt;/var&amp;gt; command, where MAXPEND can vary from 3 up to a maximum value of 32. The change to the default value was enabled in V7.7 with the application of zap 77z269.&lt;br /&gt;
&lt;br /&gt;
===TCP listen backlog increased===&lt;br /&gt;
&lt;br /&gt;
The [[Program_Communication_facilities#LISTEN_call|TCP listen]] backlog has been increased from 16 to 1024 under z/OS.&lt;br /&gt;
&lt;br /&gt;
This update tells the TCP stack to queue up to 1024 of such requests up before dropping them, thus reducing, or in most cases eliminating, the likelihood of a connection request drop, other than in exceptional circumstances, such as a denial of service attack. This change was enabled in V7.7 with the application of zap 77z340.&lt;br /&gt;
&lt;br /&gt;
===Defer the freeing of XMLSCREEN input XML===&lt;br /&gt;
&lt;br /&gt;
The freeing of [[XMLSCREEN_and_NOXMLSCREEN_(JANUS_DEFINE_parameters)|XMLSCREEN]] input XML is now deferred until the next Read Screen or session termination. This means that if an application error is detected, the input XML can be retrieved with [[$Web_Input_Content|$Web_Input_Content]] and then logged for problem analysis. &lt;br /&gt;
&lt;br /&gt;
Prior to this release the XML received from the client is freed immediately after being used to set the input data for a Read Screen, rendering it unavailable for problem determination.&lt;br /&gt;
&lt;br /&gt;
This change is enabled in V7.7 with the application of zap 77z368.&lt;br /&gt;
&lt;br /&gt;
===XMLSCREEN and Janus Web Legacy blank stripping===&lt;br /&gt;
&lt;br /&gt;
xmlScreens and Janus Web Legacy screens now adhere to the same standard as standard screen processing in terms of stripping leading blanks from input fields defined as [[Full-screen_feature#DEBLANK_or_NODEBLANK_option|DEBLANK]] (either explicitly or implicitly).&lt;br /&gt;
&lt;br /&gt;
This change is enabled in V7.7 with the application of zap 77z400.&lt;br /&gt;
&lt;br /&gt;
===SSL input buffer size===&lt;br /&gt;
&lt;br /&gt;
The default value of [[SSLIBSIZE_(JANUS_DEFINE_parameter)|SSLIBSIZE]] has been increased to 16384 + 128, or 16512. This size should ensure correct communication with all TLS spec compliant applications. It is the maximum size allowed unless you use [[CUSTOM_parameter#Using_CUSTOM.3D.2818.29|CUSTOM=18]].    &lt;br /&gt;
&lt;br /&gt;
This changed is enabled in V7.7 with the application of zap 77z415.&lt;br /&gt;
&lt;br /&gt;
===Increasing LDAP buffers===&lt;br /&gt;
&lt;br /&gt;
The number of LDAP buffers allocated at startup can now be changed by setting the NLDAPBUF parameter in CCAIN. See below for details on [[#NLDAPBUF|NLDAPBUF]].&lt;br /&gt;
&lt;br /&gt;
===Increase URL length returned with $web_form_action===&lt;br /&gt;
With this release the maximum Janus Web Server incoming URL that can be handled by &amp;lt;var&amp;gt;$web_form_action&amp;lt;/var&amp;gt; is increased from 512 bytes to 1024 bytes. This change is enabled in V7.7 with the application of zap 77z424.&lt;br /&gt;
&lt;br /&gt;
===Maximum RBSIZE setting increased===&lt;br /&gt;
The maximum value for RBSIZE, set on the &amp;lt;var&amp;gt;[[JANUS DEFINE|JANUS DEFINE]]&amp;lt;/var&amp;gt; command, is now increased to 16777215 (previously the maximum was 65534). RBSIZE specifies the RPC or Request Buffer size.  On a Web port, the Janus request buffer holds browser request information such as header data, cookies, and form data. On other port types, it holds RPC input and output parameters. This change is enabled in V7.7 with the application of zap 77z427.&lt;br /&gt;
&lt;br /&gt;
==Debugger enhancements==&lt;br /&gt;
&lt;br /&gt;
===Access to exposed variables===&lt;br /&gt;
The debuggers can now view or watch the values of variables exposed to local routines/methods. Previously, any attempts to access an exposed variable would have displayed &amp;quot;%varname has no value&amp;quot; in the debugger session. (This feature is enabled in V7.7 with the application of zap 77z363.)&lt;br /&gt;
&lt;br /&gt;
==Performance enhancements==&lt;br /&gt;
&lt;br /&gt;
===MP/204 offload improvements===&lt;br /&gt;
Application code issuing the following SOUL statements will now now be fully offloadable:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;File Records In/On&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Remember&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt; &lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Position&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Sort Values&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;                                             &lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Reset Header/Trailer&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Find and Print Count&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Find All Values&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;For Each Value&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
the above improvements are also enabled in V7.7 with the application of zaps 77z419 and 77z420.&lt;br /&gt;
&lt;br /&gt;
===X3270OUT exit offloadable===&lt;br /&gt;
When running MP/204 (AMPSUBS&amp;gt;0) and using the [[Coding_SNA_Communications_Server_conversion_exit_routines#X3270OUT_.28convert_output_from_3270_format.29|X3270OUT]] exit to convert a 3270 output data stream to the appropriate device protocol, the exit can now run in parallel mode to improve performance. This change was enabled in V7.7 with the application of zap 77z313.&lt;br /&gt;
&lt;br /&gt;
The X3270OUT exit must be written to be re-entrant.&lt;br /&gt;
&lt;br /&gt;
==New and changed commands==&lt;br /&gt;
===DISPLAY ECF===&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;DISPLAY ECF {{ M | N | U } like ?} &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This new command displays details from ECF tables, or the current status of users accessing ECF modules.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;syntax&amp;quot;&amp;gt;D ECF M&amp;lt;/span&amp;gt; displays the contents of the module table. For example:&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;    D ECF M &lt;br /&gt;
    Module   Loadlib  Address:Length     Loaded@      Lastused@   #Calls  Flags &lt;br /&gt;
    QATUM13C PROGLIB 2FB91FB8:00000028 19023:121506 19023:121506 00000001 &lt;br /&gt;
    QATUM13B PROGLIB 2FE65000:00009C18 19023:121506 19023:121506 00000001 &lt;br /&gt;
    QATUM13A PROGLIB 2FE6EC18:00001CD8 19023:121506 19023:121506 00000001  &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
(flags may be D=deleted; S=shared; H=halted; I=Idle)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;syntax&amp;quot;&amp;gt;D ECF N&amp;lt;/span&amp;gt; displays contents of the name table. For example: &amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;    D ECF N&lt;br /&gt;
    Module   Logical-call-name &lt;br /&gt;
    QATUM13C MOD_QATUM13C &lt;br /&gt;
    QATUM13B MOD_QATUM13B &lt;br /&gt;
    QATUM13A MOD_QATUM13A &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;syntax&amp;quot;&amp;gt;D ECF U&amp;lt;/span&amp;gt; displays details of users currently accessing ECF modules. This is also the default option, and so &amp;lt;span class=&amp;quot;syntax&amp;quot;&amp;gt;D ECF&amp;lt;/span&amp;gt; will display the same output as &amp;lt;span class=&amp;quot;syntax&amp;quot;&amp;gt;D ECF U&amp;lt;/span&amp;gt;. For example:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;    D ECF U                           &lt;br /&gt;
    User# Userid     Module   Parmlen &lt;br /&gt;
    00002 ADMIN      --none--         &lt;br /&gt;
    00003 ADMIN      COBSAMP1 00000002&lt;br /&gt;
    00004 ADMIN      COBSAMP1 00000002 &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;syntax&amp;quot;&amp;gt;D ECF &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;function&amp;lt;/var&amp;gt; LIKE &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;?&amp;lt;/var&amp;gt; &amp;lt;/span&amp;gt; (where &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;?&amp;lt;/var&amp;gt; is a valid pattern) displays details for entities that match the specified pattern. The function is either M (modules), N (names), or U (users), and it defaults to U. So for example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;D ECF U L A&amp;lt;/p&amp;gt;&lt;br /&gt;
or&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;D ECF U L A*&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
displays details of ECF users whose names begin with A.&lt;br /&gt;
&lt;br /&gt;
===REGENERATE===&lt;br /&gt;
The &amp;lt;var&amp;gt;REGENERATE&amp;lt;/var&amp;gt; command can now be run in a multi-user environment by multiple users with system manager privileges. A new option USING is provided to specify the ddname of the input journal, so that the full syntax is now as follows:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;  REGENERATE [USING ddname] FILE filename [FROM dumpname | IGNORE]&lt;br /&gt;
  [TO {LAST UPDATE [BEFORE yy.ddd hh:mm:ss.th] | LAST CHECKPOINT [BEFORE yy.dd hh:mm:ss.th] &lt;br /&gt;
  | UPDATE number OF yy.ddd hh:mm:ss.th | CHECKPOINT yy.ddd hh:mm:ss.th} ]&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The default for the using ddname is CCAGEN, but any ddname may be used to allocate an input journal and used. For example:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;  ALLOCATE REGEN1 WITH SCOPE=SYSTEM DSN=PROD1.GDGJ OLD SEQUENTIAL GEN=+2&lt;br /&gt;
  REGENERATE USING REGEN1 FILE TEST&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It is the user&#039;s responsibility to ensure that the file being regenerated is not in use, and so prior to usage, &amp;lt;var&amp;gt;BUMP FILE&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;STOP FILE&amp;lt;/var&amp;gt; should be used to isolate usage against the file. If the file is in use, the REGEN will fail with these messages:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;  M204.1430: Failed to open file TEST&lt;br /&gt;
  M204.1436: Stopped processing file TEST  &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
$STATUS will now be set for &amp;lt;var&amp;gt;REGENERATE&amp;lt;/var&amp;gt; with the following values:&lt;br /&gt;
&amp;lt;blockquote&amp;gt;    &lt;br /&gt;
    0 - Success &amp;lt;br/&amp;gt;&lt;br /&gt;
    1 - No files were processed &amp;lt;br/&amp;gt;&lt;br /&gt;
    2 - At least one file stopped processing &amp;lt;br/&amp;gt;&lt;br /&gt;
    4 - A serious error occurred, REGEN failed &lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Similarly, &amp;lt;var&amp;gt;SETGRC&amp;lt;/var&amp;gt; may be used to get the return code and error message.&lt;br /&gt;
&lt;br /&gt;
==New and changed parameters==&lt;br /&gt;
&lt;br /&gt;
===ECMODS===&lt;br /&gt;
The new minimum value for ECMODS, the allowable number of ECF modules, is 1. Prior to V7.8 the minimum value was 0. This changed was enabled in V7.7 with the application of zap 77z306.&lt;br /&gt;
&lt;br /&gt;
===ECNAMES===&lt;br /&gt;
The new minimum value for ECNAMES, the allowable number of ECF module names, is 1. Prior to V7.8 the minimum value was 0. This changed was enabled in V7.7 with the application of zap 77z306.&lt;br /&gt;
&lt;br /&gt;
===ECPSIZE===&lt;br /&gt;
The new minimum value for ECPSIZE, the initial storage allocation for ECF parameters, is 1024. Prior to V7.8 the minimum value was 0. This changed was enabled in V7.7 with the application of zap 77z306.&lt;br /&gt;
&lt;br /&gt;
===ENQTIME===&lt;br /&gt;
Millisecond duration of automatic record locking retry wait.&lt;br /&gt;
&lt;br /&gt;
Prior to this change, if record locking conflicts occur frequently in a busy online, any user with a non-zero value for &amp;lt;var&amp;gt;[[ENQRETRY parameter|ENQRETRY]]&amp;lt;/var&amp;gt; will wait at least 3 seconds before the conflict is dealt with. This can degrade overall system performance.      &lt;br /&gt;
                                                         &lt;br /&gt;
The &amp;lt;var&amp;gt;[[ENQTIME parameter|ENQTIME]]&amp;lt;/var&amp;gt; parameter specifies the number of milliseconds waited for each record locking retry wait. ENQTIME can be between 1 and 60000, corresponding to a minimum of 1 millisecond and a maximum of 1 minute. The default value of ENQTIME is 3000 (3 seconds).            &lt;br /&gt;
                                                         &lt;br /&gt;
For example, with ENQTIME = 100 and ENQRETRY = 7, after a record locking conflict occurs the thread will retry 7 times with wait intervals of .1 seconds, and so within at most .7 seconds either the lock becomes available or the conflict triggers an On unit or cancels the request.     &lt;br /&gt;
                                                         &lt;br /&gt;
The ENQTIME parameter may also be reset with $ResetN. &lt;br /&gt;
&lt;br /&gt;
This new parameter was enabled in V7.7 with the application of zap 77z299.&lt;br /&gt;
&lt;br /&gt;
===EVALOPT===&lt;br /&gt;
The new &amp;lt;var&amp;gt;EVALOPT&amp;lt;/var&amp;gt; parameter controls the cancellation of a request on truncation of string data. The default value is 0, and currently there is just one setting, 1, which means &amp;quot;cancel a request if truncation of string data occurs.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
For example, with the default of 0 in place, the following code &amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;    %x is string len 1   &lt;br /&gt;
    %y is string len 2   &lt;br /&gt;
    %y = &#039;ab&#039;            &lt;br /&gt;
    %x = %y              &lt;br /&gt;
    printtext {~} = {%x} &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
would cause silent truncation, and give the result&lt;br /&gt;
    &amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;%x = a &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If &amp;lt;var&amp;gt;EVALOPT&amp;lt;/var&amp;gt; is set to 1, then the above code produces the following message:&lt;br /&gt;
    &amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;M204.0552: Variable too small for result &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and the request is cancelled.&lt;br /&gt;
&lt;br /&gt;
===LFSCB===&lt;br /&gt;
LFSCB, the length of the full screen buffer, now has a new minimum value of 8 ( the previous minimum was 0 ). This change has been enabled in v7.7 with the application of zap 77z042, and within V7.6 with the application of zap 76z393.&lt;br /&gt;
&lt;br /&gt;
===MAXPRE, MAXBOUT, MAXSUBT===&lt;br /&gt;
&amp;lt;p&amp;gt;Introduced in zap 77z257.&amp;lt;/p&amp;gt;&lt;br /&gt;
The new &amp;lt;var&amp;gt;MAXPRE&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;MAXBOUT&amp;lt;/var&amp;gt;, and &amp;lt;var&amp;gt;MAXSUBT&amp;lt;/var&amp;gt; parameters can be used to cancel a runaway transaction and prevent it from filling the checkpoint data set. &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;MAXPRE&amp;lt;/var&amp;gt;:  Maximum number of pre-images per transaction.  &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;MAXBOUT&amp;lt;/var&amp;gt;: Maximum number of backout pages per transaction. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;MAXSUBT&amp;lt;/var&amp;gt;: Maximum number of subtransaction checkpoints that a transaction can span.&amp;lt;/li&amp;gt;&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;Each new parameter defaults to unlimited. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;If a parameter value is set, a transaction is cancelled if that value is exceeded, and the following message is displayed:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;code&amp;gt;M204.0524: Maximum number (&amp;lt;i&amp;gt;num&amp;lt;/i&amp;gt;) of &amp;lt;i&amp;gt;parameter&amp;lt;/i&amp;gt; exceeded.&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
where &amp;lt;i&amp;gt;num&amp;lt;/i&amp;gt; is the value set for &amp;lt;i&amp;gt;parameter&amp;lt;/i&amp;gt; (&amp;lt;var&amp;gt;MAXPRE&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;MAXBOUT&amp;lt;/var&amp;gt;, or &amp;lt;var&amp;gt;MAXSUBT&amp;lt;/var&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
===NLDAPBUF===&lt;br /&gt;
This new parameter allows the number of LDAP buffers allocated during startup to be set in CCAIN. The default value is 2, and the settable value can range from 0 to 65535.&lt;br /&gt;
&lt;br /&gt;
===PUPDTH (new minimum value)===&lt;br /&gt;
If a user sets the &amp;lt;var&amp;gt;[[PUPDTH parameter|PUPDTH]]&amp;lt;/var&amp;gt; parameter to 0, it will now automatically be increased to 1, its minimum value.&lt;br /&gt;
&lt;br /&gt;
===SERV4G===&lt;br /&gt;
This parameter allows testing of server tables that span a 4-gigabyte boundary. For example, if SERV4G is X&#039;FFFFF000&#039;, each ATB server will begin at XX_FFFFF000. If SERV4G is X&#039;FFFF0000&#039;, each ATB server will begin at XX_FFFF0000. XX is determined by the storage available on the system. The parameter is set in CCAIN.&lt;br /&gt;
&lt;br /&gt;
The contents of the ATB server are specified by using the SERVGA parameter.&lt;br /&gt;
&lt;br /&gt;
For example. if you want VTBL to span the 4G boundary, you can use these settings: SERV4G=X&#039;FFFFF000&#039;, SERVGA=X&#039;00040000&#039;, and LVTBL=200 (6400 bytes, X&#039;1900&#039;). This will force each server&#039;s VTBL to begin at XX_FFFFF000 and end at XX+1_00000900.&lt;br /&gt;
&lt;br /&gt;
===WEBDFLT===&lt;br /&gt;
At V7.7, the default access rule for non-SSL ports was changed from ALLOW * to DISALLOW *, meaning that unless any ALLOW rules were in place resulting in a login/password prompt, the port couldn&#039;t be accessed. The new &amp;lt;var&amp;gt;[[WEBDFLT_parameter|WEBDFLT]]&amp;lt;/var&amp;gt; parameter may be set to 1 for reversion to the old default of ALLOW *. Under V7.7, this new parameter was enabled with the application of zap 77z090. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;var&amp;gt;RESET WEBDFLT&amp;lt;/var&amp;gt; requires system administrator privileges. It is recommended to reset the 1 bit of &amp;lt;var&amp;gt;WEBDFLT&amp;lt;/var&amp;gt; to zero after issuing a series of &amp;lt;var&amp;gt;JANUS DEFINE&amp;lt;/var&amp;gt; commands which need WEBDFLT=1, as in the CCAIN input stream.&lt;br /&gt;
&lt;br /&gt;
==New and changed statistics==&lt;br /&gt;
===MPR, MBO, MCP, and RCV===&lt;br /&gt;
Introduced in zap 77z257.&lt;br /&gt;
&amp;lt;p&amp;gt;These statistics provide high water mark transaction information. (Since-last values will not be available until V78 GA.)&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;They are useful in conjunction with the &amp;lt;var&amp;gt;MAXPRE&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;MAXBOUT&amp;lt;/var&amp;gt;, and &amp;lt;var&amp;gt;MAXSUBT&amp;lt;/var&amp;gt; parameters. &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
User/system statistics:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;MPR: High water mark of transaction pre-images. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;MBO: High water mark of transaction backout pages. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;MCP: High water mark of transaction chkpoint spans. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
System statistics: &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;RCV: Number of blocks needed for subtransaction recovery &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt; &lt;br /&gt;
&amp;lt;p class=&amp;quot;note&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Notes:&amp;lt;/b&amp;gt; M204.0843 now displays the RCV statistic for subtransaction checkpoints.&lt;br /&gt;
The size of recovery checkpoint must be greater than the sum of the last RCV value plus the number of records in [[System_and_media_recovery#RESTART_recovery_considerations_for_sub-transaction_checkpoints|RESTART and RESTARTS]].&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
===DKWTS and DKWTMICS===&lt;br /&gt;
Introduced in zap 77z7289.&lt;br /&gt;
&amp;lt;p&amp;gt;The new system statistics DKWTS (DisK WaiTs) and DKWTMICS (DisK WaiT MICroSeconds) collect data to provide rough disk I/O service time numbers.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
DKWTS shows the number of disk I/O waits. DKWTMICS shows the total wait time for those waits in microseconds. Dividing the difference in DKWTMICS by the difference in DKWTS over an interval provides the average disk I/O wait time in microseconds.              &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;note&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Notes:&amp;lt;/b&amp;gt; &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The wait time does include internal Model 204 scheduler delays, so on a CPU bound Model 204 system, the service times calculated from DKWTS and DKWTMICS are likely to be an overestimate of actual service times.&amp;lt;/li&amp;gt;  &lt;br /&gt;
                                                                    &lt;br /&gt;
&amp;lt;li&amp;gt;DKWTS and DKWTMICS are not available in SirMon; use [[MONITOR_command|MONITOR]] SYSTEM STATISTICS to view these statistics.&amp;lt;/li&amp;gt;&amp;lt;/ul&amp;gt;  &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Compatibility issues==&lt;br /&gt;
===&amp;lt;b id=&amp;quot;listNewInit&amp;quot;&amp;gt;&amp;lt;/b&amp;gt;$ListNew cannot be used in Initial clause===&lt;br /&gt;
It is now a compilation error if &amp;lt;var&amp;gt;$ListNew&amp;lt;/var&amp;gt; is attempted to be used in the &amp;lt;var&amp;gt;Initial&amp;lt;/var&amp;gt; clause of a &lt;br /&gt;
[[Using_variables_and_values_in_computation#Declare_statements_for_.25variables|declaration statement]].&lt;br /&gt;
&amp;lt;p&amp;gt;This change is propagated by zap maintenance to versions 7.5 (zap 75Z487), 7.6 (zap 76Z514), and 7.7 (zap 77z281) of Model 204.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote class=&amp;quot;note&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Note:&amp;lt;/b&amp;gt; Strictly speaking, this would not be considered a compilation error, because previously although &amp;lt;code&amp;gt;..&amp;amp;nbsp;Initial($ListNew)&amp;lt;/code&amp;gt; did not produce a compilation error, in almost all circumstances it would produce a snap if the initialized %variable were used with some other &amp;lt;var&amp;gt;$List&amp;lt;i&amp;gt;xxx&amp;lt;/i&amp;gt;&amp;lt;/var&amp;gt; invocation.&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Restricting the use of the CUSTOM=38 setting===&lt;br /&gt;
The [[CUSTOM parameter|CUSTOM=38]] parameter setting, introduced at V7.5, inadvertently provided System Manager privileges to all users via the RESET command. This CUSTOM setting is now restricted to the RESETting of the LAUDIT parameter.&lt;br /&gt;
&lt;br /&gt;
===Disabling of Closure support===&lt;br /&gt;
Due to a number of bugs related to Closure support, introduced at V7.7, this feature, which can best be described as exposed methods assigned to method variables, has been disabled in this release. This change was also made to V7.7 with application of zap 77z119.&lt;br /&gt;
&lt;br /&gt;
===Password delimiter enforced===&lt;br /&gt;
When using IFSTRTN to logon to a Model 204 online from an IFAM2 application, both the logonid and password must be followed by a semicolon - the delimiter.             &lt;br /&gt;
For example:      &lt;br /&gt;
                                      &lt;br /&gt;
CALL IFSTRTN(RC,&#039;logonid;password;&#039;...)&lt;br /&gt;
                 &lt;br /&gt;
If a semicolon does not follow the password string, the following message will now be issued&lt;br /&gt;
&lt;br /&gt;
M204.2964: Password missing or too long                  &lt;br /&gt;
                                                         &lt;br /&gt;
Previously, a semicolon following the password was not required and the first blank served as a password delimiter.  However, as of V7.7, embedded blanks are valid password characters and a semicolon is now required to delimit the password.&lt;br /&gt;
&lt;br /&gt;
This change has also been enabled in V7.7 with the application of zap 77z231.&lt;br /&gt;
&lt;br /&gt;
===PAGESZ parameter validated===&lt;br /&gt;
Previously it was possible to set the PAGESZ parameter to any value, although Model 204 internally supports one page size of 6184, and any deviation from this value would have led to problems during file creation. The value of this parameter is now controlled, such that setting it to any value other than 6184 will generate an M204.1149 message with the parameter being reset to 6184.&lt;br /&gt;
&lt;br /&gt;
===ECPRIV and the IDCAMS facility===&lt;br /&gt;
At V7.7 a security loophole was closed, whereby all ECF modules were run under external-authorizer profile of the calling user. Previously any ECF tasks were run under the owning job&#039;s external-authorizer profile, and in order for certain sites to retain that ability, a new setting of ECPRIV, value 4, was introduced to retain the ability to run ECF tasks using the job&#039;s security profile. &lt;br /&gt;
&lt;br /&gt;
The ECPRIV 4 setting potentially introduced a security loophole when calling the IDCAMS interface, based upon what the IDCAMS utility is able to do at a system level. Consequently as of this release, the ECPRIV 4 setting will be ignored when calling the IDCAMS facility via ECF, and such IDCAMS processes will always use the calling user&#039;s security profile. Any existing jobs that use ECF to call the IDCAMS utility with the ECFPRIV 4 bit set should be checked to ensure that the calling user&#039;s security profile still satisfies the job&#039;s requirements.&lt;br /&gt;
&lt;br /&gt;
===TCPOPTS is view only===&lt;br /&gt;
In previous versions the TCPOPTS parameter, which identifies the type of IP addressing in use ( v4 or v6 ), was resetable, although it was always documented as a view-only parameter. The parameter is now handled as a view-only parameter, and any attempts to reset the parameter will result in&lt;br /&gt;
&lt;br /&gt;
   M204.1123: Parameter TCPOPTS not reset&lt;br /&gt;
&lt;br /&gt;
===ZHPF command can only be issued by a system manager===&lt;br /&gt;
In previous versions it was possible to issue the ZHPF command without being logged on. From this release onwards, a user would have to be logged on with system manager privileges to be able to issue this command.&lt;br /&gt;
&lt;br /&gt;
Additionally, the command output will now only  display results for currently open files.&lt;br /&gt;
&lt;br /&gt;
This changes has been enabled in v7.7 with the application of zap 77z264.&lt;br /&gt;
&lt;br /&gt;
===Terminal MODEL reset failure===&lt;br /&gt;
If a reset of the terminal MODEL parameter fails due to an under sized output page buffer, then in addition to the existing messages that inform the user of this failure&lt;br /&gt;
&lt;br /&gt;
    M204.1875 UNABLE TO RESET MODEL TO %C &lt;br /&gt;
    M204.1123: Parameter MODEL not reset  &lt;br /&gt;
&lt;br /&gt;
the following message will now be issued&lt;br /&gt;
&lt;br /&gt;
    M204.1008: LOUTPB must be increased to at least &amp;lt;number&amp;gt; &lt;br /&gt;
                                                         &lt;br /&gt;
where &amp;lt;number&amp;gt; is the minimum value of LOUTPB necessary to support the terminal model.&lt;br /&gt;
&lt;br /&gt;
This change is enabled in V7.7 with the application of zap 77z309.&lt;br /&gt;
&lt;br /&gt;
==New and changed messages==&lt;br /&gt;
&lt;br /&gt;
See [[New and updated messages in Model 204 version 7.8|New and updated messages in Model 204 version 7.8]] for details.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category: Release notes]]&lt;/div&gt;</summary>
		<author><name>ELowell</name></author>
	</entry>
	<entry>
		<id>https://m204wiki.rocketsoftware.com/index.php?title=Release_notes_for_Model_204_version_7.8&amp;diff=117700</id>
		<title>Release notes for Model 204 version 7.8</title>
		<link rel="alternate" type="text/html" href="https://m204wiki.rocketsoftware.com/index.php?title=Release_notes_for_Model_204_version_7.8&amp;diff=117700"/>
		<updated>2019-11-01T21:34:24Z</updated>

		<summary type="html">&lt;p&gt;ELowell: /* Managing ECF tables more efficiently */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
These release notes list the enhancements and other changes contained in Model 204 version 7.8. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;&amp;lt;b&amp;gt;******THIS IS A DRAFT DOCUMENT.******&amp;lt;/b&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
These release notes list the enhancements and other changes contained in Model 204 version 7.8, &amp;lt;b&amp;gt;&amp;lt;i&amp;gt;which is still in development&amp;lt;/i&amp;gt;&amp;lt;/b&amp;gt;. Until the commercial release of the software, Rocket reserves the right to add to, remove, or change anything described herein. &lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
These release notes contain installation and features information for the Rocket Model 204 version 7.8 release.&lt;br /&gt;
Before beginning your installation, please read through this information about product installation and changes.&lt;br /&gt;
&lt;br /&gt;
==SOUL enhancements==&lt;br /&gt;
===AmIndependent method===&lt;br /&gt;
The &amp;lt;var&amp;gt;AmIndependent&amp;lt;/var&amp;gt; method returns TRUE for daemons spawned by &amp;lt;var&amp;gt;[http://m204wiki.rocketsoftware.com/index.php/RunIndependently_(Daemon_subroutine) RunIndependently]&amp;lt;/var&amp;gt;. (The action of &amp;lt;var&amp;gt;[https://m204wiki.rocketsoftware.com/index.php/AmDaemon_(Daemon_property) AmDaemon]&amp;lt;/var&amp;gt; remains unchanged.)&lt;br /&gt;
&lt;br /&gt;
The following table shows the values returned by &amp;lt;var&amp;gt;AmIndependent&amp;lt;/var&amp;gt; versus &amp;lt;var&amp;gt;AmDaemon&amp;lt;/var&amp;gt; for different daemon types:&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Type&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;AmDaemon&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;AmIndependent&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;$COMBG&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;False&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;False&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Independent daemon&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;False&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;True&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Other daemon&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;True&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;False&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Web, etc.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;False&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;False&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===$ProcOpn===&lt;br /&gt;
&amp;lt;var&amp;gt;[https://m204wiki.rocketsoftware.com/index.php/$ProcOpn $ProcOpn]&amp;lt;/var&amp;gt; now supports the opening of a procedure with an all-numeric name, and including a leading zero, such as:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;%result = $procOpn(&#039;0123&#039;, &#039;MYFILE&#039;)&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Support for such procedure names was initially introduced at V7.7, and this feature of &amp;lt;var&amp;gt;$ProcOpn&amp;lt;/var&amp;gt; is also enabled in V7.7 with the application of zap 77z054.&lt;br /&gt;
&lt;br /&gt;
===Allow parentheses to surround a boolean enumeration object===&lt;br /&gt;
The following sample code:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;   begin                                       &lt;br /&gt;
   variables are undefined                  &lt;br /&gt;
   %isValid is boolean initial (True)       &lt;br /&gt;
   if (%isValid) then                  &lt;br /&gt;
      print &#039;in IF&#039;                            &lt;br /&gt;
   end if                                   &lt;br /&gt;
   end   &amp;lt;/p&amp;gt;      &lt;br /&gt;
&lt;br /&gt;
will now compile and run successfully, since this syntax: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;if (%isValid) then &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
is logically equivalent to this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;if %isValid then &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Prior to V7.8 the presence of parentheses surrounding the boolean enumeration object would have caused a compilation error. This change is enabled in V7.7 with the application of zap 77z370.&lt;br /&gt;
&lt;br /&gt;
===Support for copying Object class objects===&lt;br /&gt;
The Object class now supports the copy and deepCopy methods. For example, an Object object can be copied as follows:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;   begin               &lt;br /&gt;
   %x is object object &lt;br /&gt;
   %y is object object &lt;br /&gt;
   %y = new            &lt;br /&gt;
   %x = %y:copy        &lt;br /&gt;
   end &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This change is enabled in v7.7 with the application of zap 77z076, and within V7.6 with the application of zap 76z412.&lt;br /&gt;
&lt;br /&gt;
===Assignment of enumeration values to method variables===&lt;br /&gt;
Enumerations values can now be assigned to method variables whose result is an enumeration. So, for example, the following code:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;   begin                                               &lt;br /&gt;
   enumeration colour                                  &lt;br /&gt;
      public                                           &lt;br /&gt;
         value red                                     &lt;br /&gt;
         value white                                   &lt;br /&gt;
         value blue                                    &lt;br /&gt;
      end public                                       &lt;br /&gt;
   end enumeration                                     &lt;br /&gt;
   %func    is function getColour is enumeration colour&lt;br /&gt;
   local function getColour is enumeration colour      &lt;br /&gt;
      return blue                                      &lt;br /&gt;
   end function                                        &lt;br /&gt;
   %func    = getColour                                &lt;br /&gt;
   %func    = (colour):red                             &lt;br /&gt;
   printText {~=%(Local):(%func)}                      &lt;br /&gt;
   end  &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
will produce this result:&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt; %(Local):(%func)=red &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
whereas previously this line:   &lt;br /&gt;
&lt;br /&gt;
  &amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt; %func    = (colour):red &amp;lt;/p&amp;gt;   &lt;br /&gt;
&lt;br /&gt;
would have been rejected with this message:&lt;br /&gt;
&lt;br /&gt;
   &amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;MSIR.0993: Assignment invalid: mismatch between method and method variable &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This change is enabled in V7.7 with the application of zap 77z128.&lt;br /&gt;
&lt;br /&gt;
==External Call Facility enhancements==&lt;br /&gt;
===Managing ECF tables more efficiently===&lt;br /&gt;
The are two new features to help manage ECF tables more efficiently, avoid conditions where the table can fill, and prevent the definition of further entities.&lt;br /&gt;
&lt;br /&gt;
The first feature is the new &amp;lt;var&amp;gt;DISPLAY ECF&amp;lt;/var&amp;gt; command, which displays the contents of ECF tables and also the current status of users accessing ECF modules. See more details of the &amp;lt;var&amp;gt;[[#DISPLAY ECF|DISPLAY ECF]]&amp;lt;/var&amp;gt; command below.&lt;br /&gt;
&lt;br /&gt;
The second feature is a new &amp;lt;var&amp;gt;EXTERNAL REMOVE&amp;lt;/var&amp;gt; statement with the following syntax:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;EXTERNAL REMOVE &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;modulename&amp;lt;/span&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This statement causes the entry for the named module to be removed from the module table. The table entry is then placed on a free chain of entries and can be reused by issuing the &amp;lt;var&amp;gt;EXTERNAL MODULE&amp;lt;/var&amp;gt; statement. This allows the module table to be managed with redundant entries removed, without having to recycle the ONLINE.&lt;br /&gt;
&lt;br /&gt;
An &amp;lt;var&amp;gt;EXTERNAL REMOVE&amp;lt;/var&amp;gt; statement will return &amp;lt;code&amp;gt;$status/$statusd&amp;lt;/code&amp;gt; values of &amp;lt;code&amp;gt;0/0&amp;lt;/code&amp;gt;, and most other status values that can be returned by the &amp;lt;var&amp;gt;EXTERNAL REMOVE&amp;lt;/var&amp;gt; statement are already documented in the ECF return codes table. If an &amp;lt;var&amp;gt;EXTERNAL REMOVE&amp;lt;/var&amp;gt; is attempted against a module that is currently being called (in use), then &amp;lt;code&amp;gt;$status/$statusd&amp;lt;/code&amp;gt; will return the values &amp;lt;code&amp;gt;20/1&amp;lt;/code&amp;gt; (module unavailable).&lt;br /&gt;
&lt;br /&gt;
==System enhancements==&lt;br /&gt;
&lt;br /&gt;
===New wait types for daemon/master waits===&lt;br /&gt;
&lt;br /&gt;
Two new wait types, viewable on the &amp;lt;var&amp;gt;[https://m204wiki.rocketsoftware.com/index.php/MONITOR_command MONITOR] USERS&amp;lt;/var&amp;gt; command output, have been implemented as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;57&amp;lt;/code&amp;gt; - Means a daemon thread waiting for its master thread  &amp;lt;br /&amp;gt;     &lt;br /&gt;
&amp;lt;code&amp;gt;58&amp;lt;/code&amp;gt; - Means a master thread waiting for one of its daemon threads&lt;br /&gt;
&lt;br /&gt;
This change is enabled in V7.7 with the application of zap 77z410.&lt;br /&gt;
&lt;br /&gt;
===Snap formatting changes===&lt;br /&gt;
Date/time stamps in the page headers of snaps will now be shown in normal format, rather than in julian format as in previous versions. So in the following example, a particular snap header under v7.7 or previous versions would show as: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;SNAPID    1   19226.060155  M204.0022: Bug .. nnnnn               PAGE     1 &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
whereas the same snap header under v7.8 would show as: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;SNAPID    1  2019/08/14 06:01:06   M204.0022: Bug .. nnnnn        PAGE     1 &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Also, due to improvements in handling trailing blanks in snap output, a snap generated under v7.8 should be marginally smaller than the same snap generated under previous versions, assuming the same SNAPCTL settings.&lt;br /&gt;
&lt;br /&gt;
===Call stack trace for problem diagnosis===&lt;br /&gt;
A  call stack trace is now provided to help diagnose and resolve common errors. To enable the stack trace, do either of the following: &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Set the &amp;lt;var&amp;gt;[[SIRFACT parameter|SIRFACT]] X&#039;01&#039;&amp;lt;/var&amp;gt; bit.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Set the &amp;lt;var&amp;gt;[[DEBUGUL parameter|DEBUGL]]&amp;lt;/var&amp;gt; parameter. Note that the &amp;lt;var&amp;gt;DEBUGUL&amp;lt;/var&amp;gt; approach will introduce extra QTBL overhead. &amp;lt;p&amp;gt;(&amp;lt;var&amp;gt;DEBUGUL&amp;lt;/var&amp;gt; provides a similar facility with an include trace of procedures leading to the error, but this might not be potentially as useful as the call trace.)&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt; &lt;br /&gt;
&lt;br /&gt;
The call stack trace can assist in diagnosing run-time errors that might occur, as illustrated by the following &amp;quot;Variable too small for result&amp;quot; and &amp;quot;MBSCAN exceeded&amp;quot; examples.&lt;br /&gt;
&lt;br /&gt;
====Variable too small for result====&lt;br /&gt;
When the stack trace is enabled, a &amp;quot;variable too small&amp;quot; error results in the following message:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;M204.2966: Error at line n, procedure &#039;&#039;procname&#039;&#039; in file &#039;&#039;procfile&#039;&#039;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
which identifies the line within a procedure where the error is occurring, in addition to the usual message:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;M204.0552: Variable too small for result&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Any subsequent M204.2966 messages indicate the point in the code from where the code in error was called. For example, a stack of three subroutine calls leading to a &amp;quot;variable too small&amp;quot; error might result in the following messaging:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;   M204.0552: Variable too small for result                             &lt;br /&gt;
   M204.2966: Error at line 9, procedure MYPROC.LEVEL4 in file MYPROC   &lt;br /&gt;
   M204.2966: Called from line 5, procedure MYPROC.LEVEL3 in file MYPROC&lt;br /&gt;
   M204.2966: Called from line 5, procedure MYPROC.LEVEL2 in file MYPROC&lt;br /&gt;
   M204.2966: Called from line 5, procedure MYPROC.LEVEL1 in file MYPROC &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This information should help in diagnosing the problem. &lt;br /&gt;
&lt;br /&gt;
If the error occurs within a command level program rather than a procedure, then the M204.2966 message is replaced by an M204.2967 message, and a similar error condition to the above with a preceding call stack might be audited as follows:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;   M204.0552: Variable too small for result              &lt;br /&gt;
   M204.2967: Error at line 14 of command level program  &lt;br /&gt;
   M204.2967: Called from line 5 of command level program&lt;br /&gt;
   M204.2967: Called from line 3 of command level program &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If neither &amp;lt;var&amp;gt;SIRFACT X&#039;01&#039;&amp;lt;/var&amp;gt; nor &amp;lt;var&amp;gt;DEBUGUL&amp;lt;/var&amp;gt; is set, then the &amp;quot;variable too small&amp;quot; error produces the following messages:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;   M204.0552: Variable too small for result &lt;br /&gt;
   M204.2968: Error: no debug info &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====MBSCAN exceeded====&lt;br /&gt;
Similarly to the handling of the &amp;quot;variable too small for result&amp;quot; error, the call stack can also be used to diagnose errors where the value of &amp;lt;var&amp;gt;[[MBSCAN parameter|MBSCAN]]&amp;lt;/var&amp;gt; is exceeded as a result of a direct search of Table B records. &lt;br /&gt;
&amp;lt;p&amp;gt;Again, under V7.8, with either the &amp;lt;var&amp;gt;SIRFACT X&#039;01&#039;&amp;lt;/var&amp;gt; bit set or &amp;lt;var&amp;gt;DEBUGUL&amp;lt;/var&amp;gt; set, if a long request occurs as a result of exceeding &amp;lt;var&amp;gt;MBSCAN&amp;lt;/var&amp;gt;, then initially the following message is produced, as before:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;M204.0569: File &#039;&#039;filename&#039;&#039;, Find: Table B records to be searched = &#039;&#039;nnnn&#039;&#039;&amp;lt;/p&amp;gt;&lt;br /&gt;
followed by a DYRWT prompt message. If the user replies &#039;N&#039; to the prompt, or if the request is run in an environment (such as a batch job) where the default response is &#039;N&#039;, the following message is produced after the M204.0569 message:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;Cancelling request: M204.2969: MBSCAN (&#039;&#039;mm&#039;&#039;) exceeded, records to be searched = &#039;&#039;nnnn&#039;&#039;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
where &#039;&#039;mm&#039;&#039; is the current setting of &amp;lt;var&amp;gt;MBSCAN&amp;lt;/var&amp;gt;. The M204.2969 message is followed by M204.2966 messages displaying the call stack trace. Thus, if the following code is run from procedure MYPROC.MBSCAN against the demo database, with an &amp;lt;var&amp;gt;MBSCAN&amp;lt;/var&amp;gt; setting of 10:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;   b                           &lt;br /&gt;
   call sub1                   &lt;br /&gt;
   sub1: subroutine            &lt;br /&gt;
   fd1:                        &lt;br /&gt;
      in clients fd city = ONTARIO&lt;br /&gt;
              end find         &lt;br /&gt;
      fr fd1                      &lt;br /&gt;
         pai                      &lt;br /&gt;
         print                    &lt;br /&gt;
      end for                     &lt;br /&gt;
   end subroutine              &lt;br /&gt;
   end &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
then the following messages are produced, assuming any prompts are responded to with an &#039;N&#039;:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;   M204.0569: File CLIENTS, Find: Table B records to be searched = 3415&lt;br /&gt;
   Cancelling request: M204.2969: MBSCAN (10) exceeded, records to be searched = 3415  &lt;br /&gt;
   M204.2966: Error at line 6, procedure MYPROC.MBSCAN in file MYPROC&lt;br /&gt;
   M204.2966: Called from line 3, procedure MYPROC.MBSCAN in file MYPROC  &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===appendJournalData===&lt;br /&gt;
The &amp;lt;var&amp;gt;[[AppendJournalData_(Stringlist_function)|AppendJournalData]]&amp;lt;/var&amp;gt; function is now more tolerant of an outstanding BUMP request. Previously, if &amp;lt;var&amp;gt;AppendJournalData&amp;lt;/var&amp;gt; was called to inadvertently retrieve a large amount of journal data, typically when called implicitly from within SirScan, then any outstanding BUMP request wouldn&#039;t be honored until all of the data had been retrieved, at which point the BUMP request would be completed, and all data would be lost.&lt;br /&gt;
&lt;br /&gt;
Now, the &amp;lt;var&amp;gt;AppendJournalData&amp;lt;/var&amp;gt; process checks for outstanding BUMP requests before each track I/O is executed, thus avoiding excessive I/Os against the journal and long waits for the BUMP of such a process to complete.&lt;br /&gt;
&lt;br /&gt;
==AUDIT204 enhancements==&lt;br /&gt;
===FORMAT command===&lt;br /&gt;
TIMEHH is a new parameter used with the FORMAT command of the [[Tracking_system_activity_(CCAJRNL,_CCAAUDIT,_CCAJLOG)#AUDIT204_utility|AUDIT204]] utility.  It indicates that timestamps, printed at the beginning of each line of output, should include hundredths of a second. Requires no other arguments.&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;b&amp;gt;NOTE:&amp;lt;/b&amp;gt; This parameter and the 78 version (or later) of AUDIT204 may be used against a 77 (or later) CCAJRNL.&amp;lt;/p&amp;gt;&lt;br /&gt;
For example:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;//CCAIN DD *&lt;br /&gt;
FORMAT YEARFORM 4&lt;br /&gt;
TIMEHH&lt;br /&gt;
TYPE ER MS LI&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Recovery enhancements==&lt;br /&gt;
===Media Recovery in a multi-user environment===&lt;br /&gt;
It is now possible to perform media recovery by issuing the &amp;lt;var&amp;gt;REGENERATE&amp;lt;/var&amp;gt; command to roll forward selected files in a multi-user environment, with the media recovery being carried out by different users with system manager privileges. The new USING option allows for the specification of a ddname for the input journal stream to be used by the &amp;lt;var&amp;gt;REGENERATE&amp;lt;/var&amp;gt; command. Previously media recovery was restricted to single user batch jobs, using the CCAGEN ddname for the input journal. For more details, see the &amp;lt;var&amp;gt;[[#REGENERATE|REGENERATE]]&amp;lt;/var&amp;gt; command below.&lt;br /&gt;
&lt;br /&gt;
==Security enhancements==&lt;br /&gt;
===CA-Top Secret can disallow CCASTAT logins===&lt;br /&gt;
The [https://m204wiki.rocketsoftware.com/index.php/CA-Top_Secret_interface CA-Top Secret] interface now recognizes the &amp;lt;code&amp;gt;DEFACID=&amp;lt;/code&amp;gt;, setting and does not allow CCASTAT logins in the online if &amp;lt;code&amp;gt;DEFACID&amp;lt;/code&amp;gt; is set to null. (There is no attempt to log on M204USR.) Therefore, to disallow CCASTAT logons, set DEFACID=, in [https://m204wiki.rocketsoftware.com/index.php/CA-Top_Secret_interface#Preparing_a_TOPSPARM_parameter_module_with_TOPSGEN TOPSPARM]. CCASTAT will be opened because it contains file and group passwords, but it will not be used for logons if CCASTAT logons are not allowed.&lt;br /&gt;
&lt;br /&gt;
===CUSTOM=11 and mixed cased input===&lt;br /&gt;
The &amp;lt;var&amp;gt;[https://m204wiki.rocketsoftware.com/index.php/CUSTOM_parameter CUSTOM]&amp;lt;/var&amp;gt; parameter CUSTOM=11 setting no longer requires that a *LOWER command be issued prior to a LOGCTL command (to add or change a  password) to preserve mixed case input. Prior to this release, with CUSTOM=11 in place, *LOWER had to be issued before a LOGCTL command, otherwise any mixed case password strings would automatically be translated into uppercase. This change is enabled in V7.7 with the application of zap 77z108.&lt;br /&gt;
&lt;br /&gt;
===DEFUSER can specify a jobname not authorized to access M204===&lt;br /&gt;
When specifying DEFUSER=JOBNAME and VALIDAT=LOGON in the RACFGEN parms for an ONLINE, if the specified jobname ( the owning id for the ONLINE job ) isn&#039;t authorized to use Model 204 via RACF, any LOGIN commands specifying no userid will now succeed ( previously such a LOGON would have failed ). This enables users to submit jobs with USE $JOB, whereby the string USER=jobname  will be added to the submitted JCL, and this in turn is useful if the specified jobname has dataset access privileges to datasets required by the submitted jobs, even if the jobname itself isn&#039;t authorized to use M204.&lt;br /&gt;
&lt;br /&gt;
==Janus product enhancements==&lt;br /&gt;
&lt;br /&gt;
===Janus Web Server access rule===&lt;br /&gt;
The automatic &amp;lt;var&amp;gt;[[JANUS WEB ALLOW]]&amp;lt;/var&amp;gt; rule, which allowed any user to access the port without requiring a login, is changed &amp;lt;i&amp;gt;for non-SSL ports&amp;lt;/i&amp;gt; to the following:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;JANUS WEB &amp;lt;i&amp;gt;portname&amp;lt;/i&amp;gt; DISALLOW *&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
This rule requires a system administrator to explicitly define &amp;lt;var&amp;gt;ALLOW&amp;lt;/var&amp;gt; rules to enable users to access non-SSL ports.&lt;br /&gt;
The rule applies unless overridden by user-added rules. &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;blockquote class=&amp;quot;note&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;b&amp;gt;Note:&amp;lt;/b&amp;gt; To revert from this change in the JANUS DEFINE default and make the default &lt;br /&gt;
 non-SSL &amp;lt;var&amp;gt;ALLOW&amp;lt;/var&amp;gt; rule as it was in version 7.5 and earlier (&amp;lt;code&amp;gt;ALLOW *&amp;lt;/code&amp;gt;), turn on the 1 bit of the &amp;lt;var&amp;gt;[[WEBDFLT parameter|WEBDFLT]]&amp;lt;/var&amp;gt; parameter: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;RESET WEBDFLT=1&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Increase in pending accepts for Janus BPX ports===&lt;br /&gt;
The default number of pending accepts for Janus BPX server ports has been increased from 3 to 12, thus reducing the likelihood that a pending accept may fail with the message&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;MSIR.0019 Connection request rejected for port (port), MAXCON exceeded&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The actual number of pending accepts to be supported on the port can be set with the new parameter MAXPEND, set on the &amp;lt;var&amp;gt;[[JANUS_DEFINE|JANUS DEFINE]]&amp;lt;/var&amp;gt; command, where MAXPEND can vary from 3 up to a maximum value of 32. The change to the default value was enabled in V7.7 with the application of zap 77z269.&lt;br /&gt;
&lt;br /&gt;
===TCP listen backlog increased===&lt;br /&gt;
&lt;br /&gt;
The [https://m204wiki.rocketsoftware.com/index.php/Program_Communication_facilities#LISTEN_call TCP_listen] backlog has been increased from 16 to 1024 under z/OS.&lt;br /&gt;
&lt;br /&gt;
This update tells the TCP stack to queue up to 1024 of such requests up before dropping them, thus reducing, or in most cases eliminating, the likelihood of a connection request drop, other than in exceptional circumstances, such as a denial of service attack. This change was enabled in V7.7 with the application of zap 77z340.&lt;br /&gt;
&lt;br /&gt;
===Defer the freeing of XMLSCREEN input XML===&lt;br /&gt;
&lt;br /&gt;
The freeing of [https://m204wiki.rocketsoftware.com/index.php/XMLSCREEN_and_NOXMLSCREEN_(JANUS_DEFINE_parameters) XMLSCREEN] input XML is now deferred until the next Read Screen or session termination. This means that if an application error is detected, the input XML can be retrieved with [https://m204wiki.rocketsoftware.com/index.php/$Web_Input_Content $Web_Input_Content] and then logged for problem analysis. &lt;br /&gt;
&lt;br /&gt;
Prior to this release the XML received from the client is freed immediately after being used to set the input data for a Read Screen, rendering it unavailable for problem determination.&lt;br /&gt;
&lt;br /&gt;
This change is enabled in V7.7 with the application of zap 77z368.&lt;br /&gt;
&lt;br /&gt;
===XMLSCREEN and Janus Web Legacy blank stripping===&lt;br /&gt;
&lt;br /&gt;
xmlScreens and Janus Web Legacy screens now adhere to the same standard as standard screen processing in terms of stripping leading blanks from input fields defined as [https://m204wiki.rocketsoftware.com/index.php/Full-screen_feature#DEBLANK_or_NODEBLANK_option DEBLANK] (either explicitly or implicitly).&lt;br /&gt;
&lt;br /&gt;
This change is enabled in V7.7 with the application of zap 77z400.&lt;br /&gt;
&lt;br /&gt;
===SSL input buffer size===&lt;br /&gt;
&lt;br /&gt;
The default value of [https://m204wiki.rocketsoftware.com/index.php/SSLIBSIZE_(JANUS_DEFINE_parameter) SSLIBSIZE] has been increased to 16384 + 128, or 16512. This size should ensure correct communication with all TLS spec compliant applications. It is the maximum size allowed unless you use [https://m204wiki.rocketsoftware.com/index.php/CUSTOM_parameter#Using_CUSTOM.3D.2818.29 CUSTOM=18].    &lt;br /&gt;
&lt;br /&gt;
This changed is enabled in V7.7 with the application of zap 77z415.&lt;br /&gt;
&lt;br /&gt;
===Increasing LDAP buffers===&lt;br /&gt;
&lt;br /&gt;
The number of LDAP buffers allocated at startup can now be changed by setting the NLDAPBUF parameter in CCAIN. See below for details on [[#NLDAPBUF|NLDAPBUF]].&lt;br /&gt;
&lt;br /&gt;
===Increase URL length returned with $web_form_action===&lt;br /&gt;
With this release the maximum Janus Web Server incoming URL that can be handled by &amp;lt;var&amp;gt;$web_form_action&amp;lt;/var&amp;gt; is increased from 512 bytes to 1024 bytes. This change is enabled in V7.7 with the application of zap 77z424.&lt;br /&gt;
&lt;br /&gt;
===Maximum RBSIZE setting increased===&lt;br /&gt;
The maximum value for RBSIZE, set on the &amp;lt;var&amp;gt;[[JANUS DEFINE|JANUS DEFINE]]&amp;lt;/var&amp;gt; command, is now increased to 16777215 (previously the maximum was 65534). RBSIZE specifies the RPC or Request Buffer size.  On a Web port, the Janus request buffer holds browser request information such as header data, cookies, and form data. On other port types, it holds RPC input and output parameters. This change is enabled in V7.7 with the application of zap 77z427.&lt;br /&gt;
&lt;br /&gt;
==Debugger enhancements==&lt;br /&gt;
&lt;br /&gt;
===Access to exposed variables===&lt;br /&gt;
The debuggers can now view or watch the values of variables exposed to local routines/methods. Previously, any attempts to access an exposed variable would have displayed &amp;quot;%varname has no value&amp;quot; in the debugger session. (This feature is enabled in V7.7 with the application of zap 77z363.)&lt;br /&gt;
&lt;br /&gt;
==Performance enhancements==&lt;br /&gt;
&lt;br /&gt;
===MP/204 offload improvements===&lt;br /&gt;
Application code issuing the following SOUL statements will now now be fully offloadable:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;File Records In/On&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Remember&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt; &lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Position&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Sort Values&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;                                             &lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Reset Header/Trailer&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Find and Print Count&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Find All Values&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;For Each Value&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
the above improvements are also enabled in V7.7 with the application of zaps 77z419 and 77z420.&lt;br /&gt;
&lt;br /&gt;
===X3270OUT exit offloadable===&lt;br /&gt;
When running MP/204 (AMPSUBS&amp;gt;0) and using the [https://m204wiki.rocketsoftware.com/index.php/Coding_SNA_Communications_Server_conversion_exit_routines#X3270OUT_.28convert_output_from_3270_format.29 X3270OUT] exit to convert a 3270 output data stream to the appropriate device protocol, the exit can now run in parallel mode to improve performance. This change was enabled in V7.7 with the application of zap 77z313.&lt;br /&gt;
&lt;br /&gt;
The X3270OUT exit must be written to be re-entrant.&lt;br /&gt;
&lt;br /&gt;
==New and changed commands==&lt;br /&gt;
===DISPLAY ECF===&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;DISPLAY ECF {{ M | N | U } like ?} &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This new command displays details from ECF tables, or the current status of users accessing ECF modules.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;syntax&amp;quot;&amp;gt;D ECF M&amp;lt;/span&amp;gt; displays the contents of the module table. For example:&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;    D ECF M &lt;br /&gt;
    Module   Loadlib  Address:Length     Loaded@      Lastused@   #Calls  Flags &lt;br /&gt;
    QATUM13C PROGLIB 2FB91FB8:00000028 19023:121506 19023:121506 00000001 &lt;br /&gt;
    QATUM13B PROGLIB 2FE65000:00009C18 19023:121506 19023:121506 00000001 &lt;br /&gt;
    QATUM13A PROGLIB 2FE6EC18:00001CD8 19023:121506 19023:121506 00000001  &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
(flags may be D=deleted; S=shared; H=halted; I=Idle)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;syntax&amp;quot;&amp;gt;D ECF N&amp;lt;/span&amp;gt; displays contents of the name table. For example: &amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;    D ECF N&lt;br /&gt;
    Module   Logical-call-name &lt;br /&gt;
    QATUM13C MOD_QATUM13C &lt;br /&gt;
    QATUM13B MOD_QATUM13B &lt;br /&gt;
    QATUM13A MOD_QATUM13A &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;syntax&amp;quot;&amp;gt;D ECF U&amp;lt;/span&amp;gt; displays details of users currently accessing ECF modules. This is also the default option, and so &amp;lt;span class=&amp;quot;syntax&amp;quot;&amp;gt;D ECF&amp;lt;/span&amp;gt; will display the same output as &amp;lt;span class=&amp;quot;syntax&amp;quot;&amp;gt;D ECF U&amp;lt;/span&amp;gt;. For example:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;    D ECF U                           &lt;br /&gt;
    User# Userid     Module   Parmlen &lt;br /&gt;
    00002 ADMIN      --none--         &lt;br /&gt;
    00003 ADMIN      COBSAMP1 00000002&lt;br /&gt;
    00004 ADMIN      COBSAMP1 00000002 &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;syntax&amp;quot;&amp;gt;D ECF &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;function&amp;lt;/var&amp;gt; LIKE &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;?&amp;lt;/var&amp;gt; &amp;lt;/span&amp;gt; (where &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;?&amp;lt;/var&amp;gt; is a valid pattern) displays details for entities that match the specified pattern. The function is either M (modules), N (names), or U (users), and it defaults to U. So for example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;D ECF U L A&amp;lt;/p&amp;gt;&lt;br /&gt;
or&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;D ECF U L A*&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
displays details of ECF users whose names begin with A.&lt;br /&gt;
&lt;br /&gt;
===REGENERATE===&lt;br /&gt;
The &amp;lt;var&amp;gt;REGENERATE&amp;lt;/var&amp;gt; command can now be run in a multi-user environment by multiple users with system manager privileges. A new option USING is provided to specify the ddname of the input journal, so that the full syntax is now as follows:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;  REGENERATE [USING ddname] FILE filename [FROM dumpname | IGNORE]&lt;br /&gt;
  [TO {LAST UPDATE [BEFORE yy.ddd hh:mm:ss.th] | LAST CHECKPOINT [BEFORE yy.dd hh:mm:ss.th] &lt;br /&gt;
  | UPDATE number OF yy.ddd hh:mm:ss.th | CHECKPOINT yy.ddd hh:mm:ss.th} ]&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The default for the using ddname is CCAGEN, but any ddname may be used to allocate an input journal and used. For example:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;  ALLOCATE REGEN1 WITH SCOPE=SYSTEM DSN=PROD1.GDGJ OLD SEQUENTIAL GEN=+2&lt;br /&gt;
  REGENERATE USING REGEN1 FILE TEST&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It is the user&#039;s responsibility to ensure that the file being regenerated is not in use, and so prior to usage, &amp;lt;var&amp;gt;BUMP FILE&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;STOP FILE&amp;lt;/var&amp;gt; should be used to isolate usage against the file. If the file is in use, the REGEN will fail with these messages:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;  M204.1430: Failed to open file TEST&lt;br /&gt;
  M204.1436: Stopped processing file TEST  &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
$STATUS will now be set for &amp;lt;var&amp;gt;REGENERATE&amp;lt;/var&amp;gt; with the following values:&lt;br /&gt;
&amp;lt;blockquote&amp;gt;    &lt;br /&gt;
    0 - Success &amp;lt;br/&amp;gt;&lt;br /&gt;
    1 - No files were processed &amp;lt;br/&amp;gt;&lt;br /&gt;
    2 - At least one file stopped processing &amp;lt;br/&amp;gt;&lt;br /&gt;
    4 - A serious error occurred, REGEN failed &lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Similarly, &amp;lt;var&amp;gt;SETGRC&amp;lt;/var&amp;gt; may be used to get the return code and error message.&lt;br /&gt;
&lt;br /&gt;
==New and changed parameters==&lt;br /&gt;
&lt;br /&gt;
===ECMODS===&lt;br /&gt;
The new minimum value for ECMODS, the allowable number of ECF modules, is 1. Prior to V7.8 the minimum value was 0. This changed was enabled in V7.7 with the application of zap 77z306.&lt;br /&gt;
&lt;br /&gt;
===ECNAMES===&lt;br /&gt;
The new minimum value for ECNAMES, the allowable number of ECF module names, is 1. Prior to V7.8 the minimum value was 0. This changed was enabled in V7.7 with the application of zap 77z306.&lt;br /&gt;
&lt;br /&gt;
===ECPSIZE===&lt;br /&gt;
The new minimum value for ECPSIZE, the initial storage allocation for ECF parameters, is 1024. Prior to V7.8 the minimum value was 0. This changed was enabled in V7.7 with the application of zap 77z306.&lt;br /&gt;
&lt;br /&gt;
===ENQTIME===&lt;br /&gt;
Millisecond duration of automatic record locking retry wait.&lt;br /&gt;
&lt;br /&gt;
Prior to this change, if record locking conflicts occur frequently in a busy online, any user with a non-zero value for &amp;lt;var&amp;gt;[[ENQRETRY parameter|ENQRETRY]]&amp;lt;/var&amp;gt; will wait at least 3 seconds before the conflict is dealt with. This can degrade overall system performance.      &lt;br /&gt;
                                                         &lt;br /&gt;
The &amp;lt;var&amp;gt;[[ENQTIME parameter|ENQTIME]]&amp;lt;/var&amp;gt; parameter specifies the number of milliseconds waited for each record locking retry wait. ENQTIME can be between 1 and 60000, corresponding to a minimum of 1 millisecond and a maximum of 1 minute. The default value of ENQTIME is 3000 (3 seconds).            &lt;br /&gt;
                                                         &lt;br /&gt;
For example, with ENQTIME = 100 and ENQRETRY = 7, after a record locking conflict occurs the thread will retry 7 times with wait intervals of .1 seconds, and so within at most .7 seconds either the lock becomes available or the conflict triggers an On unit or cancels the request.     &lt;br /&gt;
                                                         &lt;br /&gt;
The ENQTIME parameter may also be reset with $ResetN. &lt;br /&gt;
&lt;br /&gt;
This new parameter was enabled in V7.7 with the application of zap 77z299.&lt;br /&gt;
&lt;br /&gt;
===EVALOPT===&lt;br /&gt;
The new &amp;lt;var&amp;gt;EVALOPT&amp;lt;/var&amp;gt; parameter controls the cancellation of a request on truncation of string data. The default value is 0, and currently there is just one setting, 1, which means &amp;quot;cancel a request if truncation of string data occurs.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
For example, with the default of 0 in place, the following code &amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;    %x is string len 1   &lt;br /&gt;
    %y is string len 2   &lt;br /&gt;
    %y = &#039;ab&#039;            &lt;br /&gt;
    %x = %y              &lt;br /&gt;
    printtext {~} = {%x} &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
would cause silent truncation, and give the result&lt;br /&gt;
    &amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;%x = a &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If &amp;lt;var&amp;gt;EVALOPT&amp;lt;/var&amp;gt; is set to 1, then the above code produces the following message:&lt;br /&gt;
    &amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;M204.0552: Variable too small for result &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and the request is cancelled.&lt;br /&gt;
&lt;br /&gt;
===LFSCB===&lt;br /&gt;
LFSCB, the length of the full screen buffer, now has a new minimum value of 8 ( the previous minimum was 0 ). This change has been enabled in v7.7 with the application of zap 77z042, and within V7.6 with the application of zap 76z393.&lt;br /&gt;
&lt;br /&gt;
===MAXPRE, MAXBOUT, MAXSUBT===&lt;br /&gt;
&amp;lt;p&amp;gt;Introduced in zap 77z257.&amp;lt;/p&amp;gt;&lt;br /&gt;
The new &amp;lt;var&amp;gt;MAXPRE&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;MAXBOUT&amp;lt;/var&amp;gt;, and &amp;lt;var&amp;gt;MAXSUBT&amp;lt;/var&amp;gt; parameters can be used to cancel a runaway transaction and prevent it from filling the checkpoint data set. &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;MAXPRE&amp;lt;/var&amp;gt;:  Maximum number of pre-images per transaction.  &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;MAXBOUT&amp;lt;/var&amp;gt;: Maximum number of backout pages per transaction. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;MAXSUBT&amp;lt;/var&amp;gt;: Maximum number of subtransaction checkpoints that a transaction can span.&amp;lt;/li&amp;gt;&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;Each new parameter defaults to unlimited. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;If a parameter value is set, a transaction is cancelled if that value is exceeded, and the following message is displayed:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;code&amp;gt;M204.0524: Maximum number (&amp;lt;i&amp;gt;num&amp;lt;/i&amp;gt;) of &amp;lt;i&amp;gt;parameter&amp;lt;/i&amp;gt; exceeded.&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
where &amp;lt;i&amp;gt;num&amp;lt;/i&amp;gt; is the value set for &amp;lt;i&amp;gt;parameter&amp;lt;/i&amp;gt; (&amp;lt;var&amp;gt;MAXPRE&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;MAXBOUT&amp;lt;/var&amp;gt;, or &amp;lt;var&amp;gt;MAXSUBT&amp;lt;/var&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
===NLDAPBUF===&lt;br /&gt;
This new parameter allows the number of LDAP buffers allocated during startup to be set in CCAIN. The default value is 2, and the settable value can range from 0 to 65535.&lt;br /&gt;
&lt;br /&gt;
===PUPDTH (new minimum value)===&lt;br /&gt;
If a user sets the &amp;lt;var&amp;gt;[[PUPDTH parameter|PUPDTH]]&amp;lt;/var&amp;gt; parameter to 0, it will now automatically be increased to 1, its minimum value.&lt;br /&gt;
&lt;br /&gt;
===SERV4G===&lt;br /&gt;
This parameter allows testing of server tables that span a 4-gigabyte boundary. For example, if SERV4G is X&#039;FFFFF000&#039;, each ATB server will begin at XX_FFFFF000. If SERV4G is X&#039;FFFF0000&#039;, each ATB server will begin at XX_FFFF0000. XX is determined by the storage available on the system. The parameter is set in CCAIN.&lt;br /&gt;
&lt;br /&gt;
The contents of the ATB server are specified by using the SERVGA parameter.&lt;br /&gt;
&lt;br /&gt;
For example. if you want VTBL to span the 4G boundary, you can use these settings: SERV4G=X&#039;FFFFF000&#039;, SERVGA=X&#039;00040000&#039;, and LVTBL=200 (6400 bytes, X&#039;1900&#039;). This will force each server&#039;s VTBL to begin at XX_FFFFF000 and end at XX+1_00000900.&lt;br /&gt;
&lt;br /&gt;
===WEBDFLT===&lt;br /&gt;
At V7.7, the default access rule for non-SSL ports was changed from ALLOW * to DISALLOW *, meaning that unless any ALLOW rules were in place resulting in a login/password prompt, the port couldn&#039;t be accessed. The new &amp;lt;var&amp;gt;[https://m204wiki.rocketsoftware.com/index.php/WEBDFLT_parameter WEBDFLT]&amp;lt;/var&amp;gt; parameter may be set to 1 for reversion to the old default of ALLOW *. Under V7.7, this new parameter was enabled with the application of zap 77z090. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;var&amp;gt;RESET WEBDFLT&amp;lt;/var&amp;gt; requires system administrator privileges. It is recommended to reset the 1 bit of &amp;lt;var&amp;gt;WEBDFLT&amp;lt;/var&amp;gt; to zero after issuing a series of &amp;lt;var&amp;gt;JANUS DEFINE&amp;lt;/var&amp;gt; commands which need WEBDFLT=1, as in the CCAIN input stream.&lt;br /&gt;
&lt;br /&gt;
==New and changed statistics==&lt;br /&gt;
===MPR, MBO, MCP, and RCV===&lt;br /&gt;
Introduced in zap 77z257.&lt;br /&gt;
&amp;lt;p&amp;gt;These statistics provide high water mark transaction information. (Since-last values will not be available until V78 GA.)&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;They are useful in conjunction with the &amp;lt;var&amp;gt;MAXPRE&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;MAXBOUT&amp;lt;/var&amp;gt;, and &amp;lt;var&amp;gt;MAXSUBT&amp;lt;/var&amp;gt; parameters. &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
User/system statistics:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;MPR: High water mark of transaction pre-images. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;MBO: High water mark of transaction backout pages. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;MCP: High water mark of transaction chkpoint spans. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
System statistics: &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;RCV: Number of blocks needed for subtransaction recovery &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt; &lt;br /&gt;
&amp;lt;p class=&amp;quot;note&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Notes:&amp;lt;/b&amp;gt; M204.0843 now displays the RCV statistic for subtransaction checkpoints.&lt;br /&gt;
The size of recovery checkpoint must be greater than the sum of the last RCV value plus the number of records in [https://m204wiki.rocketsoftware.com/index.php/System_and_media_recovery#RESTART_recovery_considerations_for_sub-transaction_checkpoints RESTART and RESTARTS].&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
===DKWTS and DKWTMICS===&lt;br /&gt;
Introduced in zap 77z7289.&lt;br /&gt;
&amp;lt;p&amp;gt;The new system statistics DKWTS (DisK WaiTs) and DKWTMICS (DisK WaiT MICroSeconds) collect data to provide rough disk I/O service time numbers.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
DKWTS shows the number of disk I/O waits. DKWTMICS shows the total wait time for those waits in microseconds. Dividing the difference in DKWTMICS by the difference in DKWTS over an interval provides the average disk I/O wait time in microseconds.              &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;note&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Notes:&amp;lt;/b&amp;gt; &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The wait time does include internal Model 204 scheduler delays, so on a CPU bound Model 204 system, the service times calculated from DKWTS and DKWTMICS are likely to be an overestimate of actual service times.&amp;lt;/li&amp;gt;  &lt;br /&gt;
                                                                    &lt;br /&gt;
&amp;lt;li&amp;gt;DKWTS and DKWTMICS are not available in SirMon; use [https://m204wiki.rocketsoftware.com/index.php/MONITOR_command MONITOR] SYSTEM STATISTICS to view these statistics.&amp;lt;/li&amp;gt;&amp;lt;/ul&amp;gt;  &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Compatibility issues==&lt;br /&gt;
===&amp;lt;b id=&amp;quot;listNewInit&amp;quot;&amp;gt;&amp;lt;/b&amp;gt;$ListNew cannot be used in Initial clause===&lt;br /&gt;
It is now a compilation error if &amp;lt;var&amp;gt;$ListNew&amp;lt;/var&amp;gt; is attempted to be used in the &amp;lt;var&amp;gt;Initial&amp;lt;/var&amp;gt; clause of a &lt;br /&gt;
[https://m204wiki.rocketsoftware.com/index.php/Using_variables_and_values_in_computation#Declare_statements_for_.25variables declaration statement].&lt;br /&gt;
&amp;lt;p&amp;gt;This change is propagated by zap maintenance to versions 7.5 (zap 75Z487), 7.6 (zap 76Z514), and 7.7 (zap 77z281) of Model 204.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote class=&amp;quot;note&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Note:&amp;lt;/b&amp;gt; Strictly speaking, this would not be considered a compilation error, because previously although &amp;lt;code&amp;gt;..&amp;amp;nbsp;Initial($ListNew)&amp;lt;/code&amp;gt; did not produce a compilation error, in almost all circumstances it would produce a snap if the initialized %variable were used with some other &amp;lt;var&amp;gt;$List&amp;lt;i&amp;gt;xxx&amp;lt;/i&amp;gt;&amp;lt;/var&amp;gt; invocation.&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Restricting the use of the CUSTOM=38 setting===&lt;br /&gt;
The [[CUSTOM parameter|CUSTOM=38]] parameter setting, introduced at V7.5, inadvertently provided System Manager privileges to all users via the RESET command. This CUSTOM setting is now restricted to the RESETting of the LAUDIT parameter.&lt;br /&gt;
&lt;br /&gt;
===Disabling of Closure support===&lt;br /&gt;
Due to a number of bugs related to Closure support, introduced at V7.7, this feature, which can best be described as exposed methods assigned to method variables, has been disabled in this release. This change was also made to V7.7 with application of zap 77z119.&lt;br /&gt;
&lt;br /&gt;
===Password delimiter enforced===&lt;br /&gt;
When using IFSTRTN to logon to a Model 204 online from an IFAM2 application, both the logonid and password must be followed by a semicolon - the delimiter.             &lt;br /&gt;
For example:      &lt;br /&gt;
                                      &lt;br /&gt;
CALL IFSTRTN(RC,&#039;logonid;password;&#039;...)&lt;br /&gt;
                 &lt;br /&gt;
If a semicolon does not follow the password string, the following message will now be issued&lt;br /&gt;
&lt;br /&gt;
M204.2964: Password missing or too long                  &lt;br /&gt;
                                                         &lt;br /&gt;
Previously, a semicolon following the password was not required and the first blank served as a password delimiter.  However, as of V7.7, embedded blanks are valid password characters and a semicolon is now required to delimit the password.&lt;br /&gt;
&lt;br /&gt;
This change has also been enabled in V7.7 with the application of zap 77z231.&lt;br /&gt;
&lt;br /&gt;
===PAGESZ parameter validated===&lt;br /&gt;
Previously it was possible to set the PAGESZ parameter to any value, although Model 204 internally supports one page size of 6184, and any deviation from this value would have led to problems during file creation. The value of this parameter is now controlled, such that setting it to any value other than 6184 will generate an M204.1149 message with the parameter being reset to 6184.&lt;br /&gt;
&lt;br /&gt;
===ECPRIV and the IDCAMS facility===&lt;br /&gt;
At V7.7 a security loophole was closed, whereby all ECF modules were run under external-authorizer profile of the calling user. Previously any ECF tasks were run under the owning job&#039;s external-authorizer profile, and in order for certain sites to retain that ability, a new setting of ECPRIV, value 4, was introduced to retain the ability to run ECF tasks using the job&#039;s security profile. &lt;br /&gt;
&lt;br /&gt;
The ECPRIV 4 setting potentially introduced a security loophole when calling the IDCAMS interface, based upon what the IDCAMS utility is able to do at a system level. Consequently as of this release, the ECPRIV 4 setting will be ignored when calling the IDCAMS facility via ECF, and such IDCAMS processes will always use the calling user&#039;s security profile. Any existing jobs that use ECF to call the IDCAMS utility with the ECFPRIV 4 bit set should be checked to ensure that the calling user&#039;s security profile still satisfies the job&#039;s requirements.&lt;br /&gt;
&lt;br /&gt;
===TCPOPTS is view only===&lt;br /&gt;
In previous versions the TCPOPTS parameter, which identifies the type of IP addressing in use ( v4 or v6 ), was resetable, although it was always documented as a view-only parameter. The parameter is now handled as a view-only parameter, and any attempts to reset the parameter will result in&lt;br /&gt;
&lt;br /&gt;
   M204.1123: Parameter TCPOPTS not reset&lt;br /&gt;
&lt;br /&gt;
===ZHPF command can only be issued by a system manager===&lt;br /&gt;
In previous versions it was possible to issue the ZHPF command without being logged on. From this release onwards, a user would have to be logged on with system manager privileges to be able to issue this command.&lt;br /&gt;
&lt;br /&gt;
Additionally, the command output will now only  display results for currently open files.&lt;br /&gt;
&lt;br /&gt;
This changes has been enabled in v7.7 with the application of zap 77z264.&lt;br /&gt;
&lt;br /&gt;
===Terminal MODEL reset failure===&lt;br /&gt;
If a reset of the terminal MODEL parameter fails due to an under sized output page buffer, then in addition to the existing messages that inform the user of this failure&lt;br /&gt;
&lt;br /&gt;
    M204.1875 UNABLE TO RESET MODEL TO %C &lt;br /&gt;
    M204.1123: Parameter MODEL not reset  &lt;br /&gt;
&lt;br /&gt;
the following message will now be issued&lt;br /&gt;
&lt;br /&gt;
    M204.1008: LOUTPB must be increased to at least &amp;lt;number&amp;gt; &lt;br /&gt;
                                                         &lt;br /&gt;
where &amp;lt;number&amp;gt; is the minimum value of LOUTPB necessary to support the terminal model.&lt;br /&gt;
&lt;br /&gt;
This change is enabled in V7.7 with the application of zap 77z309.&lt;br /&gt;
&lt;br /&gt;
==New and changed messages==&lt;br /&gt;
&lt;br /&gt;
See [[New and updated messages in Model 204 version 7.8|New and updated messages in Model 204 version 7.8]] for details.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category: Release notes]]&lt;/div&gt;</summary>
		<author><name>ELowell</name></author>
	</entry>
	<entry>
		<id>https://m204wiki.rocketsoftware.com/index.php?title=Release_notes_for_Model_204_version_7.8&amp;diff=117699</id>
		<title>Release notes for Model 204 version 7.8</title>
		<link rel="alternate" type="text/html" href="https://m204wiki.rocketsoftware.com/index.php?title=Release_notes_for_Model_204_version_7.8&amp;diff=117699"/>
		<updated>2019-11-01T21:18:30Z</updated>

		<summary type="html">&lt;p&gt;ELowell: small cleanup for formatting, consistency&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
These release notes list the enhancements and other changes contained in Model 204 version 7.8. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;&amp;lt;b&amp;gt;******THIS IS A DRAFT DOCUMENT.******&amp;lt;/b&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
These release notes list the enhancements and other changes contained in Model 204 version 7.8, &amp;lt;b&amp;gt;&amp;lt;i&amp;gt;which is still in development&amp;lt;/i&amp;gt;&amp;lt;/b&amp;gt;. Until the commercial release of the software, Rocket reserves the right to add to, remove, or change anything described herein. &lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
These release notes contain installation and features information for the Rocket Model 204 version 7.8 release.&lt;br /&gt;
Before beginning your installation, please read through this information about product installation and changes.&lt;br /&gt;
&lt;br /&gt;
==SOUL enhancements==&lt;br /&gt;
===AmIndependent method===&lt;br /&gt;
The &amp;lt;var&amp;gt;AmIndependent&amp;lt;/var&amp;gt; method returns TRUE for daemons spawned by &amp;lt;var&amp;gt;[http://m204wiki.rocketsoftware.com/index.php/RunIndependently_(Daemon_subroutine) RunIndependently]&amp;lt;/var&amp;gt;. (The action of &amp;lt;var&amp;gt;[https://m204wiki.rocketsoftware.com/index.php/AmDaemon_(Daemon_property) AmDaemon]&amp;lt;/var&amp;gt; remains unchanged.)&lt;br /&gt;
&lt;br /&gt;
The following table shows the values returned by &amp;lt;var&amp;gt;AmIndependent&amp;lt;/var&amp;gt; versus &amp;lt;var&amp;gt;AmDaemon&amp;lt;/var&amp;gt; for different daemon types:&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Type&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;AmDaemon&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;AmIndependent&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;$COMBG&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;False&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;False&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Independent daemon&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;False&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;True&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Other daemon&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;True&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;False&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Web, etc.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;False&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;False&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===$ProcOpn===&lt;br /&gt;
&amp;lt;var&amp;gt;[https://m204wiki.rocketsoftware.com/index.php/$ProcOpn $ProcOpn]&amp;lt;/var&amp;gt; now supports the opening of a procedure with an all-numeric name, and including a leading zero, such as:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;%result = $procOpn(&#039;0123&#039;, &#039;MYFILE&#039;)&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Support for such procedure names was initially introduced at V7.7, and this feature of &amp;lt;var&amp;gt;$ProcOpn&amp;lt;/var&amp;gt; is also enabled in V7.7 with the application of zap 77z054.&lt;br /&gt;
&lt;br /&gt;
===Allow parentheses to surround a boolean enumeration object===&lt;br /&gt;
The following sample code:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;   begin                                       &lt;br /&gt;
   variables are undefined                  &lt;br /&gt;
   %isValid is boolean initial (True)       &lt;br /&gt;
   if (%isValid) then                  &lt;br /&gt;
      print &#039;in IF&#039;                            &lt;br /&gt;
   end if                                   &lt;br /&gt;
   end   &amp;lt;/p&amp;gt;      &lt;br /&gt;
&lt;br /&gt;
will now compile and run successfully, since this syntax: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;if (%isValid) then &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
is logically equivalent to this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;if %isValid then &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Prior to V7.8 the presence of parentheses surrounding the boolean enumeration object would have caused a compilation error. This change is enabled in V7.7 with the application of zap 77z370.&lt;br /&gt;
&lt;br /&gt;
===Support for copying Object class objects===&lt;br /&gt;
The Object class now supports the copy and deepCopy methods. For example, an Object object can be copied as follows:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;   begin               &lt;br /&gt;
   %x is object object &lt;br /&gt;
   %y is object object &lt;br /&gt;
   %y = new            &lt;br /&gt;
   %x = %y:copy        &lt;br /&gt;
   end &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This change is enabled in v7.7 with the application of zap 77z076, and within V7.6 with the application of zap 76z412.&lt;br /&gt;
&lt;br /&gt;
===Assignment of enumeration values to method variables===&lt;br /&gt;
Enumerations values can now be assigned to method variables whose result is an enumeration. So, for example, the following code:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;   begin                                               &lt;br /&gt;
   enumeration colour                                  &lt;br /&gt;
      public                                           &lt;br /&gt;
         value red                                     &lt;br /&gt;
         value white                                   &lt;br /&gt;
         value blue                                    &lt;br /&gt;
      end public                                       &lt;br /&gt;
   end enumeration                                     &lt;br /&gt;
   %func    is function getColour is enumeration colour&lt;br /&gt;
   local function getColour is enumeration colour      &lt;br /&gt;
      return blue                                      &lt;br /&gt;
   end function                                        &lt;br /&gt;
   %func    = getColour                                &lt;br /&gt;
   %func    = (colour):red                             &lt;br /&gt;
   printText {~=%(Local):(%func)}                      &lt;br /&gt;
   end  &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
will produce this result:&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt; %(Local):(%func)=red &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
whereas previously this line:   &lt;br /&gt;
&lt;br /&gt;
  &amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt; %func    = (colour):red &amp;lt;/p&amp;gt;   &lt;br /&gt;
&lt;br /&gt;
would have been rejected with this message:&lt;br /&gt;
&lt;br /&gt;
   &amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;MSIR.0993: Assignment invalid: mismatch between method and method variable &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This change is enabled in V7.7 with the application of zap 77z128.&lt;br /&gt;
&lt;br /&gt;
==External Call Facility enhancements==&lt;br /&gt;
===Managing ECF tables more efficiently===&lt;br /&gt;
The are two new features to help manage ECF tables more efficiently, avoid conditions where the table can fill, and prevent the definition of further entities.&lt;br /&gt;
&lt;br /&gt;
The first feature is the new &amp;lt;var&amp;gt;DISPLAY ECF&amp;lt;/var&amp;gt; command, which displays the contents of ECF tables and also the current status of users accessing ECF modules. See more details of the &amp;lt;var&amp;gt;[[#DISPLAY ECF|DISPLAY ECF]]&amp;lt;/var&amp;gt; command below.&lt;br /&gt;
&lt;br /&gt;
The second feature is a new &amp;lt;var&amp;gt;EXTERNAL REMOVE&amp;lt;/var&amp;gt; statement with the following syntax:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;EXTERNAL REMOVE &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;modulename&amp;lt;/span&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This statement causes the entry for the named module to be removed from the module table. The table entry is then placed on a free chain of entries and can be reused by issuing the &amp;lt;var&amp;gt;EXTERNAL MODULE&amp;lt;/var&amp;gt; statement. This allows the module table to be managed with redundant entries removed, without having to recycle the ONLINE.&lt;br /&gt;
&lt;br /&gt;
An &amp;lt;var&amp;gt;EXTERNAL REMOVE&amp;lt;/var&amp;gt; statement will return &amp;lt;code&amp;gt;$status/$status&amp;lt;/code&amp;gt; values of &amp;lt;code&amp;gt;0/0&amp;lt;/code&amp;gt;, and most other status values that can be returned by the &amp;lt;var&amp;gt;EXTERNAL REMOVE&amp;lt;/var&amp;gt; statement are already documented in the ECF return codes table. If an &amp;lt;var&amp;gt;EXTERNAL REMOVE&amp;lt;/var&amp;gt; is attempted against a module that is currently being called (in use), then &amp;lt;code&amp;gt;$status/$status&amp;lt;/code&amp;gt; will return the values &amp;lt;code&amp;gt;20/1&amp;lt;/code&amp;gt; (module unavailable).&lt;br /&gt;
&lt;br /&gt;
==System enhancements==&lt;br /&gt;
&lt;br /&gt;
===New wait types for daemon/master waits===&lt;br /&gt;
&lt;br /&gt;
Two new wait types, viewable on the &amp;lt;var&amp;gt;[https://m204wiki.rocketsoftware.com/index.php/MONITOR_command MONITOR] USERS&amp;lt;/var&amp;gt; command output, have been implemented as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;57&amp;lt;/code&amp;gt; - Means a daemon thread waiting for its master thread  &amp;lt;br /&amp;gt;     &lt;br /&gt;
&amp;lt;code&amp;gt;58&amp;lt;/code&amp;gt; - Means a master thread waiting for one of its daemon threads&lt;br /&gt;
&lt;br /&gt;
This change is enabled in V7.7 with the application of zap 77z410.&lt;br /&gt;
&lt;br /&gt;
===Snap formatting changes===&lt;br /&gt;
Date/time stamps in the page headers of snaps will now be shown in normal format, rather than in julian format as in previous versions. So in the following example, a particular snap header under v7.7 or previous versions would show as: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;SNAPID    1   19226.060155  M204.0022: Bug .. nnnnn               PAGE     1 &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
whereas the same snap header under v7.8 would show as: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;SNAPID    1  2019/08/14 06:01:06   M204.0022: Bug .. nnnnn        PAGE     1 &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Also, due to improvements in handling trailing blanks in snap output, a snap generated under v7.8 should be marginally smaller than the same snap generated under previous versions, assuming the same SNAPCTL settings.&lt;br /&gt;
&lt;br /&gt;
===Call stack trace for problem diagnosis===&lt;br /&gt;
A  call stack trace is now provided to help diagnose and resolve common errors. To enable the stack trace, do either of the following: &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Set the &amp;lt;var&amp;gt;[[SIRFACT parameter|SIRFACT]] X&#039;01&#039;&amp;lt;/var&amp;gt; bit.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Set the &amp;lt;var&amp;gt;[[DEBUGUL parameter|DEBUGL]]&amp;lt;/var&amp;gt; parameter. Note that the &amp;lt;var&amp;gt;DEBUGUL&amp;lt;/var&amp;gt; approach will introduce extra QTBL overhead. &amp;lt;p&amp;gt;(&amp;lt;var&amp;gt;DEBUGUL&amp;lt;/var&amp;gt; provides a similar facility with an include trace of procedures leading to the error, but this might not be potentially as useful as the call trace.)&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt; &lt;br /&gt;
&lt;br /&gt;
The call stack trace can assist in diagnosing run-time errors that might occur, as illustrated by the following &amp;quot;Variable too small for result&amp;quot; and &amp;quot;MBSCAN exceeded&amp;quot; examples.&lt;br /&gt;
&lt;br /&gt;
====Variable too small for result====&lt;br /&gt;
When the stack trace is enabled, a &amp;quot;variable too small&amp;quot; error results in the following message:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;M204.2966: Error at line n, procedure &#039;&#039;procname&#039;&#039; in file &#039;&#039;procfile&#039;&#039;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
which identifies the line within a procedure where the error is occurring, in addition to the usual message:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;M204.0552: Variable too small for result&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Any subsequent M204.2966 messages indicate the point in the code from where the code in error was called. For example, a stack of three subroutine calls leading to a &amp;quot;variable too small&amp;quot; error might result in the following messaging:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;   M204.0552: Variable too small for result                             &lt;br /&gt;
   M204.2966: Error at line 9, procedure MYPROC.LEVEL4 in file MYPROC   &lt;br /&gt;
   M204.2966: Called from line 5, procedure MYPROC.LEVEL3 in file MYPROC&lt;br /&gt;
   M204.2966: Called from line 5, procedure MYPROC.LEVEL2 in file MYPROC&lt;br /&gt;
   M204.2966: Called from line 5, procedure MYPROC.LEVEL1 in file MYPROC &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This information should help in diagnosing the problem. &lt;br /&gt;
&lt;br /&gt;
If the error occurs within a command level program rather than a procedure, then the M204.2966 message is replaced by an M204.2967 message, and a similar error condition to the above with a preceding call stack might be audited as follows:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;   M204.0552: Variable too small for result              &lt;br /&gt;
   M204.2967: Error at line 14 of command level program  &lt;br /&gt;
   M204.2967: Called from line 5 of command level program&lt;br /&gt;
   M204.2967: Called from line 3 of command level program &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If neither &amp;lt;var&amp;gt;SIRFACT X&#039;01&#039;&amp;lt;/var&amp;gt; nor &amp;lt;var&amp;gt;DEBUGUL&amp;lt;/var&amp;gt; is set, then the &amp;quot;variable too small&amp;quot; error produces the following messages:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;   M204.0552: Variable too small for result &lt;br /&gt;
   M204.2968: Error: no debug info &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====MBSCAN exceeded====&lt;br /&gt;
Similarly to the handling of the &amp;quot;variable too small for result&amp;quot; error, the call stack can also be used to diagnose errors where the value of &amp;lt;var&amp;gt;[[MBSCAN parameter|MBSCAN]]&amp;lt;/var&amp;gt; is exceeded as a result of a direct search of Table B records. &lt;br /&gt;
&amp;lt;p&amp;gt;Again, under V7.8, with either the &amp;lt;var&amp;gt;SIRFACT X&#039;01&#039;&amp;lt;/var&amp;gt; bit set or &amp;lt;var&amp;gt;DEBUGUL&amp;lt;/var&amp;gt; set, if a long request occurs as a result of exceeding &amp;lt;var&amp;gt;MBSCAN&amp;lt;/var&amp;gt;, then initially the following message is produced, as before:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;M204.0569: File &#039;&#039;filename&#039;&#039;, Find: Table B records to be searched = &#039;&#039;nnnn&#039;&#039;&amp;lt;/p&amp;gt;&lt;br /&gt;
followed by a DYRWT prompt message. If the user replies &#039;N&#039; to the prompt, or if the request is run in an environment (such as a batch job) where the default response is &#039;N&#039;, the following message is produced after the M204.0569 message:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;Cancelling request: M204.2969: MBSCAN (&#039;&#039;mm&#039;&#039;) exceeded, records to be searched = &#039;&#039;nnnn&#039;&#039;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
where &#039;&#039;mm&#039;&#039; is the current setting of &amp;lt;var&amp;gt;MBSCAN&amp;lt;/var&amp;gt;. The M204.2969 message is followed by M204.2966 messages displaying the call stack trace. Thus, if the following code is run from procedure MYPROC.MBSCAN against the demo database, with an &amp;lt;var&amp;gt;MBSCAN&amp;lt;/var&amp;gt; setting of 10:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;   b                           &lt;br /&gt;
   call sub1                   &lt;br /&gt;
   sub1: subroutine            &lt;br /&gt;
   fd1:                        &lt;br /&gt;
      in clients fd city = ONTARIO&lt;br /&gt;
              end find         &lt;br /&gt;
      fr fd1                      &lt;br /&gt;
         pai                      &lt;br /&gt;
         print                    &lt;br /&gt;
      end for                     &lt;br /&gt;
   end subroutine              &lt;br /&gt;
   end &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
then the following messages are produced, assuming any prompts are responded to with an &#039;N&#039;:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;   M204.0569: File CLIENTS, Find: Table B records to be searched = 3415&lt;br /&gt;
   Cancelling request: M204.2969: MBSCAN (10) exceeded, records to be searched = 3415  &lt;br /&gt;
   M204.2966: Error at line 6, procedure MYPROC.MBSCAN in file MYPROC&lt;br /&gt;
   M204.2966: Called from line 3, procedure MYPROC.MBSCAN in file MYPROC  &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===appendJournalData===&lt;br /&gt;
The &amp;lt;var&amp;gt;[[AppendJournalData_(Stringlist_function)|AppendJournalData]]&amp;lt;/var&amp;gt; function is now more tolerant of an outstanding BUMP request. Previously, if &amp;lt;var&amp;gt;AppendJournalData&amp;lt;/var&amp;gt; was called to inadvertently retrieve a large amount of journal data, typically when called implicitly from within SirScan, then any outstanding BUMP request wouldn&#039;t be honored until all of the data had been retrieved, at which point the BUMP request would be completed, and all data would be lost.&lt;br /&gt;
&lt;br /&gt;
Now, the &amp;lt;var&amp;gt;AppendJournalData&amp;lt;/var&amp;gt; process checks for outstanding BUMP requests before each track I/O is executed, thus avoiding excessive I/Os against the journal and long waits for the BUMP of such a process to complete.&lt;br /&gt;
&lt;br /&gt;
==AUDIT204 enhancements==&lt;br /&gt;
===FORMAT command===&lt;br /&gt;
TIMEHH is a new parameter used with the FORMAT command of the [[Tracking_system_activity_(CCAJRNL,_CCAAUDIT,_CCAJLOG)#AUDIT204_utility|AUDIT204]] utility.  It indicates that timestamps, printed at the beginning of each line of output, should include hundredths of a second. Requires no other arguments.&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;b&amp;gt;NOTE:&amp;lt;/b&amp;gt; This parameter and the 78 version (or later) of AUDIT204 may be used against a 77 (or later) CCAJRNL.&amp;lt;/p&amp;gt;&lt;br /&gt;
For example:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;//CCAIN DD *&lt;br /&gt;
FORMAT YEARFORM 4&lt;br /&gt;
TIMEHH&lt;br /&gt;
TYPE ER MS LI&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Recovery enhancements==&lt;br /&gt;
===Media Recovery in a multi-user environment===&lt;br /&gt;
It is now possible to perform media recovery by issuing the &amp;lt;var&amp;gt;REGENERATE&amp;lt;/var&amp;gt; command to roll forward selected files in a multi-user environment, with the media recovery being carried out by different users with system manager privileges. The new USING option allows for the specification of a ddname for the input journal stream to be used by the &amp;lt;var&amp;gt;REGENERATE&amp;lt;/var&amp;gt; command. Previously media recovery was restricted to single user batch jobs, using the CCAGEN ddname for the input journal. For more details, see the &amp;lt;var&amp;gt;[[#REGENERATE|REGENERATE]]&amp;lt;/var&amp;gt; command below.&lt;br /&gt;
&lt;br /&gt;
==Security enhancements==&lt;br /&gt;
===CA-Top Secret can disallow CCASTAT logins===&lt;br /&gt;
The [https://m204wiki.rocketsoftware.com/index.php/CA-Top_Secret_interface CA-Top Secret] interface now recognizes the &amp;lt;code&amp;gt;DEFACID=&amp;lt;/code&amp;gt;, setting and does not allow CCASTAT logins in the online if &amp;lt;code&amp;gt;DEFACID&amp;lt;/code&amp;gt; is set to null. (There is no attempt to log on M204USR.) Therefore, to disallow CCASTAT logons, set DEFACID=, in [https://m204wiki.rocketsoftware.com/index.php/CA-Top_Secret_interface#Preparing_a_TOPSPARM_parameter_module_with_TOPSGEN TOPSPARM]. CCASTAT will be opened because it contains file and group passwords, but it will not be used for logons if CCASTAT logons are not allowed.&lt;br /&gt;
&lt;br /&gt;
===CUSTOM=11 and mixed cased input===&lt;br /&gt;
The &amp;lt;var&amp;gt;[https://m204wiki.rocketsoftware.com/index.php/CUSTOM_parameter CUSTOM]&amp;lt;/var&amp;gt; parameter CUSTOM=11 setting no longer requires that a *LOWER command be issued prior to a LOGCTL command (to add or change a  password) to preserve mixed case input. Prior to this release, with CUSTOM=11 in place, *LOWER had to be issued before a LOGCTL command, otherwise any mixed case password strings would automatically be translated into uppercase. This change is enabled in V7.7 with the application of zap 77z108.&lt;br /&gt;
&lt;br /&gt;
===DEFUSER can specify a jobname not authorized to access M204===&lt;br /&gt;
When specifying DEFUSER=JOBNAME and VALIDAT=LOGON in the RACFGEN parms for an ONLINE, if the specified jobname ( the owning id for the ONLINE job ) isn&#039;t authorized to use Model 204 via RACF, any LOGIN commands specifying no userid will now succeed ( previously such a LOGON would have failed ). This enables users to submit jobs with USE $JOB, whereby the string USER=jobname  will be added to the submitted JCL, and this in turn is useful if the specified jobname has dataset access privileges to datasets required by the submitted jobs, even if the jobname itself isn&#039;t authorized to use M204.&lt;br /&gt;
&lt;br /&gt;
==Janus product enhancements==&lt;br /&gt;
&lt;br /&gt;
===Janus Web Server access rule===&lt;br /&gt;
The automatic &amp;lt;var&amp;gt;[[JANUS WEB ALLOW]]&amp;lt;/var&amp;gt; rule, which allowed any user to access the port without requiring a login, is changed &amp;lt;i&amp;gt;for non-SSL ports&amp;lt;/i&amp;gt; to the following:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;JANUS WEB &amp;lt;i&amp;gt;portname&amp;lt;/i&amp;gt; DISALLOW *&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
This rule requires a system administrator to explicitly define &amp;lt;var&amp;gt;ALLOW&amp;lt;/var&amp;gt; rules to enable users to access non-SSL ports.&lt;br /&gt;
The rule applies unless overridden by user-added rules. &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;blockquote class=&amp;quot;note&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;b&amp;gt;Note:&amp;lt;/b&amp;gt; To revert from this change in the JANUS DEFINE default and make the default &lt;br /&gt;
 non-SSL &amp;lt;var&amp;gt;ALLOW&amp;lt;/var&amp;gt; rule as it was in version 7.5 and earlier (&amp;lt;code&amp;gt;ALLOW *&amp;lt;/code&amp;gt;), turn on the 1 bit of the &amp;lt;var&amp;gt;[[WEBDFLT parameter|WEBDFLT]]&amp;lt;/var&amp;gt; parameter: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;RESET WEBDFLT=1&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Increase in pending accepts for Janus BPX ports===&lt;br /&gt;
The default number of pending accepts for Janus BPX server ports has been increased from 3 to 12, thus reducing the likelihood that a pending accept may fail with the message&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;MSIR.0019 Connection request rejected for port (port), MAXCON exceeded&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The actual number of pending accepts to be supported on the port can be set with the new parameter MAXPEND, set on the &amp;lt;var&amp;gt;[[JANUS_DEFINE|JANUS DEFINE]]&amp;lt;/var&amp;gt; command, where MAXPEND can vary from 3 up to a maximum value of 32. The change to the default value was enabled in V7.7 with the application of zap 77z269.&lt;br /&gt;
&lt;br /&gt;
===TCP listen backlog increased===&lt;br /&gt;
&lt;br /&gt;
The [https://m204wiki.rocketsoftware.com/index.php/Program_Communication_facilities#LISTEN_call TCP_listen] backlog has been increased from 16 to 1024 under z/OS.&lt;br /&gt;
&lt;br /&gt;
This update tells the TCP stack to queue up to 1024 of such requests up before dropping them, thus reducing, or in most cases eliminating, the likelihood of a connection request drop, other than in exceptional circumstances, such as a denial of service attack. This change was enabled in V7.7 with the application of zap 77z340.&lt;br /&gt;
&lt;br /&gt;
===Defer the freeing of XMLSCREEN input XML===&lt;br /&gt;
&lt;br /&gt;
The freeing of [https://m204wiki.rocketsoftware.com/index.php/XMLSCREEN_and_NOXMLSCREEN_(JANUS_DEFINE_parameters) XMLSCREEN] input XML is now deferred until the next Read Screen or session termination. This means that if an application error is detected, the input XML can be retrieved with [https://m204wiki.rocketsoftware.com/index.php/$Web_Input_Content $Web_Input_Content] and then logged for problem analysis. &lt;br /&gt;
&lt;br /&gt;
Prior to this release the XML received from the client is freed immediately after being used to set the input data for a Read Screen, rendering it unavailable for problem determination.&lt;br /&gt;
&lt;br /&gt;
This change is enabled in V7.7 with the application of zap 77z368.&lt;br /&gt;
&lt;br /&gt;
===XMLSCREEN and Janus Web Legacy blank stripping===&lt;br /&gt;
&lt;br /&gt;
xmlScreens and Janus Web Legacy screens now adhere to the same standard as standard screen processing in terms of stripping leading blanks from input fields defined as [https://m204wiki.rocketsoftware.com/index.php/Full-screen_feature#DEBLANK_or_NODEBLANK_option DEBLANK] (either explicitly or implicitly).&lt;br /&gt;
&lt;br /&gt;
This change is enabled in V7.7 with the application of zap 77z400.&lt;br /&gt;
&lt;br /&gt;
===SSL input buffer size===&lt;br /&gt;
&lt;br /&gt;
The default value of [https://m204wiki.rocketsoftware.com/index.php/SSLIBSIZE_(JANUS_DEFINE_parameter) SSLIBSIZE] has been increased to 16384 + 128, or 16512. This size should ensure correct communication with all TLS spec compliant applications. It is the maximum size allowed unless you use [https://m204wiki.rocketsoftware.com/index.php/CUSTOM_parameter#Using_CUSTOM.3D.2818.29 CUSTOM=18].    &lt;br /&gt;
&lt;br /&gt;
This changed is enabled in V7.7 with the application of zap 77z415.&lt;br /&gt;
&lt;br /&gt;
===Increasing LDAP buffers===&lt;br /&gt;
&lt;br /&gt;
The number of LDAP buffers allocated at startup can now be changed by setting the NLDAPBUF parameter in CCAIN. See below for details on [[#NLDAPBUF|NLDAPBUF]].&lt;br /&gt;
&lt;br /&gt;
===Increase URL length returned with $web_form_action===&lt;br /&gt;
With this release the maximum Janus Web Server incoming URL that can be handled by &amp;lt;var&amp;gt;$web_form_action&amp;lt;/var&amp;gt; is increased from 512 bytes to 1024 bytes. This change is enabled in V7.7 with the application of zap 77z424.&lt;br /&gt;
&lt;br /&gt;
===Maximum RBSIZE setting increased===&lt;br /&gt;
The maximum value for RBSIZE, set on the &amp;lt;var&amp;gt;[[JANUS DEFINE|JANUS DEFINE]]&amp;lt;/var&amp;gt; command, is now increased to 16777215 (previously the maximum was 65534). RBSIZE specifies the RPC or Request Buffer size.  On a Web port, the Janus request buffer holds browser request information such as header data, cookies, and form data. On other port types, it holds RPC input and output parameters. This change is enabled in V7.7 with the application of zap 77z427.&lt;br /&gt;
&lt;br /&gt;
==Debugger enhancements==&lt;br /&gt;
&lt;br /&gt;
===Access to exposed variables===&lt;br /&gt;
The debuggers can now view or watch the values of variables exposed to local routines/methods. Previously, any attempts to access an exposed variable would have displayed &amp;quot;%varname has no value&amp;quot; in the debugger session. (This feature is enabled in V7.7 with the application of zap 77z363.)&lt;br /&gt;
&lt;br /&gt;
==Performance enhancements==&lt;br /&gt;
&lt;br /&gt;
===MP/204 offload improvements===&lt;br /&gt;
Application code issuing the following SOUL statements will now now be fully offloadable:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;File Records In/On&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Remember&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt; &lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Position&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Sort Values&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;                                             &lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Reset Header/Trailer&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Find and Print Count&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Find All Values&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;For Each Value&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
the above improvements are also enabled in V7.7 with the application of zaps 77z419 and 77z420.&lt;br /&gt;
&lt;br /&gt;
===X3270OUT exit offloadable===&lt;br /&gt;
When running MP/204 (AMPSUBS&amp;gt;0) and using the [https://m204wiki.rocketsoftware.com/index.php/Coding_SNA_Communications_Server_conversion_exit_routines#X3270OUT_.28convert_output_from_3270_format.29 X3270OUT] exit to convert a 3270 output data stream to the appropriate device protocol, the exit can now run in parallel mode to improve performance. This change was enabled in V7.7 with the application of zap 77z313.&lt;br /&gt;
&lt;br /&gt;
The X3270OUT exit must be written to be re-entrant.&lt;br /&gt;
&lt;br /&gt;
==New and changed commands==&lt;br /&gt;
===DISPLAY ECF===&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;DISPLAY ECF {{ M | N | U } like ?} &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This new command displays details from ECF tables, or the current status of users accessing ECF modules.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;syntax&amp;quot;&amp;gt;D ECF M&amp;lt;/span&amp;gt; displays the contents of the module table. For example:&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;    D ECF M &lt;br /&gt;
    Module   Loadlib  Address:Length     Loaded@      Lastused@   #Calls  Flags &lt;br /&gt;
    QATUM13C PROGLIB 2FB91FB8:00000028 19023:121506 19023:121506 00000001 &lt;br /&gt;
    QATUM13B PROGLIB 2FE65000:00009C18 19023:121506 19023:121506 00000001 &lt;br /&gt;
    QATUM13A PROGLIB 2FE6EC18:00001CD8 19023:121506 19023:121506 00000001  &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
(flags may be D=deleted; S=shared; H=halted; I=Idle)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;syntax&amp;quot;&amp;gt;D ECF N&amp;lt;/span&amp;gt; displays contents of the name table. For example: &amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;    D ECF N&lt;br /&gt;
    Module   Logical-call-name &lt;br /&gt;
    QATUM13C MOD_QATUM13C &lt;br /&gt;
    QATUM13B MOD_QATUM13B &lt;br /&gt;
    QATUM13A MOD_QATUM13A &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;syntax&amp;quot;&amp;gt;D ECF U&amp;lt;/span&amp;gt; displays details of users currently accessing ECF modules. This is also the default option, and so &amp;lt;span class=&amp;quot;syntax&amp;quot;&amp;gt;D ECF&amp;lt;/span&amp;gt; will display the same output as &amp;lt;span class=&amp;quot;syntax&amp;quot;&amp;gt;D ECF U&amp;lt;/span&amp;gt;. For example:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;    D ECF U                           &lt;br /&gt;
    User# Userid     Module   Parmlen &lt;br /&gt;
    00002 ADMIN      --none--         &lt;br /&gt;
    00003 ADMIN      COBSAMP1 00000002&lt;br /&gt;
    00004 ADMIN      COBSAMP1 00000002 &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;syntax&amp;quot;&amp;gt;D ECF &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;function&amp;lt;/var&amp;gt; LIKE &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;?&amp;lt;/var&amp;gt; &amp;lt;/span&amp;gt; (where &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;?&amp;lt;/var&amp;gt; is a valid pattern) displays details for entities that match the specified pattern. The function is either M (modules), N (names), or U (users), and it defaults to U. So for example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;D ECF U L A&amp;lt;/p&amp;gt;&lt;br /&gt;
or&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;D ECF U L A*&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
displays details of ECF users whose names begin with A.&lt;br /&gt;
&lt;br /&gt;
===REGENERATE===&lt;br /&gt;
The &amp;lt;var&amp;gt;REGENERATE&amp;lt;/var&amp;gt; command can now be run in a multi-user environment by multiple users with system manager privileges. A new option USING is provided to specify the ddname of the input journal, so that the full syntax is now as follows:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;  REGENERATE [USING ddname] FILE filename [FROM dumpname | IGNORE]&lt;br /&gt;
  [TO {LAST UPDATE [BEFORE yy.ddd hh:mm:ss.th] | LAST CHECKPOINT [BEFORE yy.dd hh:mm:ss.th] &lt;br /&gt;
  | UPDATE number OF yy.ddd hh:mm:ss.th | CHECKPOINT yy.ddd hh:mm:ss.th} ]&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The default for the using ddname is CCAGEN, but any ddname may be used to allocate an input journal and used. For example:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;  ALLOCATE REGEN1 WITH SCOPE=SYSTEM DSN=PROD1.GDGJ OLD SEQUENTIAL GEN=+2&lt;br /&gt;
  REGENERATE USING REGEN1 FILE TEST&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It is the user&#039;s responsibility to ensure that the file being regenerated is not in use, and so prior to usage, &amp;lt;var&amp;gt;BUMP FILE&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;STOP FILE&amp;lt;/var&amp;gt; should be used to isolate usage against the file. If the file is in use, the REGEN will fail with these messages:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;  M204.1430: Failed to open file TEST&lt;br /&gt;
  M204.1436: Stopped processing file TEST  &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
$STATUS will now be set for &amp;lt;var&amp;gt;REGENERATE&amp;lt;/var&amp;gt; with the following values:&lt;br /&gt;
&amp;lt;blockquote&amp;gt;    &lt;br /&gt;
    0 - Success &amp;lt;br/&amp;gt;&lt;br /&gt;
    1 - No files were processed &amp;lt;br/&amp;gt;&lt;br /&gt;
    2 - At least one file stopped processing &amp;lt;br/&amp;gt;&lt;br /&gt;
    4 - A serious error occurred, REGEN failed &lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Similarly, &amp;lt;var&amp;gt;SETGRC&amp;lt;/var&amp;gt; may be used to get the return code and error message.&lt;br /&gt;
&lt;br /&gt;
==New and changed parameters==&lt;br /&gt;
&lt;br /&gt;
===ECMODS===&lt;br /&gt;
The new minimum value for ECMODS, the allowable number of ECF modules, is 1. Prior to V7.8 the minimum value was 0. This changed was enabled in V7.7 with the application of zap 77z306.&lt;br /&gt;
&lt;br /&gt;
===ECNAMES===&lt;br /&gt;
The new minimum value for ECNAMES, the allowable number of ECF module names, is 1. Prior to V7.8 the minimum value was 0. This changed was enabled in V7.7 with the application of zap 77z306.&lt;br /&gt;
&lt;br /&gt;
===ECPSIZE===&lt;br /&gt;
The new minimum value for ECPSIZE, the initial storage allocation for ECF parameters, is 1024. Prior to V7.8 the minimum value was 0. This changed was enabled in V7.7 with the application of zap 77z306.&lt;br /&gt;
&lt;br /&gt;
===ENQTIME===&lt;br /&gt;
Millisecond duration of automatic record locking retry wait.&lt;br /&gt;
&lt;br /&gt;
Prior to this change, if record locking conflicts occur frequently in a busy online, any user with a non-zero value for &amp;lt;var&amp;gt;[[ENQRETRY parameter|ENQRETRY]]&amp;lt;/var&amp;gt; will wait at least 3 seconds before the conflict is dealt with. This can degrade overall system performance.      &lt;br /&gt;
                                                         &lt;br /&gt;
The &amp;lt;var&amp;gt;[[ENQTIME parameter|ENQTIME]]&amp;lt;/var&amp;gt; parameter specifies the number of milliseconds waited for each record locking retry wait. ENQTIME can be between 1 and 60000, corresponding to a minimum of 1 millisecond and a maximum of 1 minute. The default value of ENQTIME is 3000 (3 seconds).            &lt;br /&gt;
                                                         &lt;br /&gt;
For example, with ENQTIME = 100 and ENQRETRY = 7, after a record locking conflict occurs the thread will retry 7 times with wait intervals of .1 seconds, and so within at most .7 seconds either the lock becomes available or the conflict triggers an On unit or cancels the request.     &lt;br /&gt;
                                                         &lt;br /&gt;
The ENQTIME parameter may also be reset with $ResetN. &lt;br /&gt;
&lt;br /&gt;
This new parameter was enabled in V7.7 with the application of zap 77z299.&lt;br /&gt;
&lt;br /&gt;
===EVALOPT===&lt;br /&gt;
The new &amp;lt;var&amp;gt;EVALOPT&amp;lt;/var&amp;gt; parameter controls the cancellation of a request on truncation of string data. The default value is 0, and currently there is just one setting, 1, which means &amp;quot;cancel a request if truncation of string data occurs.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
For example, with the default of 0 in place, the following code &amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;    %x is string len 1   &lt;br /&gt;
    %y is string len 2   &lt;br /&gt;
    %y = &#039;ab&#039;            &lt;br /&gt;
    %x = %y              &lt;br /&gt;
    printtext {~} = {%x} &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
would cause silent truncation, and give the result&lt;br /&gt;
    &amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;%x = a &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If &amp;lt;var&amp;gt;EVALOPT&amp;lt;/var&amp;gt; is set to 1, then the above code produces the following message:&lt;br /&gt;
    &amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;M204.0552: Variable too small for result &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and the request is cancelled.&lt;br /&gt;
&lt;br /&gt;
===LFSCB===&lt;br /&gt;
LFSCB, the length of the full screen buffer, now has a new minimum value of 8 ( the previous minimum was 0 ). This change has been enabled in v7.7 with the application of zap 77z042, and within V7.6 with the application of zap 76z393.&lt;br /&gt;
&lt;br /&gt;
===MAXPRE, MAXBOUT, MAXSUBT===&lt;br /&gt;
&amp;lt;p&amp;gt;Introduced in zap 77z257.&amp;lt;/p&amp;gt;&lt;br /&gt;
The new &amp;lt;var&amp;gt;MAXPRE&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;MAXBOUT&amp;lt;/var&amp;gt;, and &amp;lt;var&amp;gt;MAXSUBT&amp;lt;/var&amp;gt; parameters can be used to cancel a runaway transaction and prevent it from filling the checkpoint data set. &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;MAXPRE&amp;lt;/var&amp;gt;:  Maximum number of pre-images per transaction.  &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;MAXBOUT&amp;lt;/var&amp;gt;: Maximum number of backout pages per transaction. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;MAXSUBT&amp;lt;/var&amp;gt;: Maximum number of subtransaction checkpoints that a transaction can span.&amp;lt;/li&amp;gt;&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;Each new parameter defaults to unlimited. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;If a parameter value is set, a transaction is cancelled if that value is exceeded, and the following message is displayed:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;code&amp;gt;M204.0524: Maximum number (&amp;lt;i&amp;gt;num&amp;lt;/i&amp;gt;) of &amp;lt;i&amp;gt;parameter&amp;lt;/i&amp;gt; exceeded.&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
where &amp;lt;i&amp;gt;num&amp;lt;/i&amp;gt; is the value set for &amp;lt;i&amp;gt;parameter&amp;lt;/i&amp;gt; (&amp;lt;var&amp;gt;MAXPRE&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;MAXBOUT&amp;lt;/var&amp;gt;, or &amp;lt;var&amp;gt;MAXSUBT&amp;lt;/var&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
===NLDAPBUF===&lt;br /&gt;
This new parameter allows the number of LDAP buffers allocated during startup to be set in CCAIN. The default value is 2, and the settable value can range from 0 to 65535.&lt;br /&gt;
&lt;br /&gt;
===PUPDTH (new minimum value)===&lt;br /&gt;
If a user sets the &amp;lt;var&amp;gt;[[PUPDTH parameter|PUPDTH]]&amp;lt;/var&amp;gt; parameter to 0, it will now automatically be increased to 1, its minimum value.&lt;br /&gt;
&lt;br /&gt;
===SERV4G===&lt;br /&gt;
This parameter allows testing of server tables that span a 4-gigabyte boundary. For example, if SERV4G is X&#039;FFFFF000&#039;, each ATB server will begin at XX_FFFFF000. If SERV4G is X&#039;FFFF0000&#039;, each ATB server will begin at XX_FFFF0000. XX is determined by the storage available on the system. The parameter is set in CCAIN.&lt;br /&gt;
&lt;br /&gt;
The contents of the ATB server are specified by using the SERVGA parameter.&lt;br /&gt;
&lt;br /&gt;
For example. if you want VTBL to span the 4G boundary, you can use these settings: SERV4G=X&#039;FFFFF000&#039;, SERVGA=X&#039;00040000&#039;, and LVTBL=200 (6400 bytes, X&#039;1900&#039;). This will force each server&#039;s VTBL to begin at XX_FFFFF000 and end at XX+1_00000900.&lt;br /&gt;
&lt;br /&gt;
===WEBDFLT===&lt;br /&gt;
At V7.7, the default access rule for non-SSL ports was changed from ALLOW * to DISALLOW *, meaning that unless any ALLOW rules were in place resulting in a login/password prompt, the port couldn&#039;t be accessed. The new &amp;lt;var&amp;gt;[https://m204wiki.rocketsoftware.com/index.php/WEBDFLT_parameter WEBDFLT]&amp;lt;/var&amp;gt; parameter may be set to 1 for reversion to the old default of ALLOW *. Under V7.7, this new parameter was enabled with the application of zap 77z090. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;var&amp;gt;RESET WEBDFLT&amp;lt;/var&amp;gt; requires system administrator privileges. It is recommended to reset the 1 bit of &amp;lt;var&amp;gt;WEBDFLT&amp;lt;/var&amp;gt; to zero after issuing a series of &amp;lt;var&amp;gt;JANUS DEFINE&amp;lt;/var&amp;gt; commands which need WEBDFLT=1, as in the CCAIN input stream.&lt;br /&gt;
&lt;br /&gt;
==New and changed statistics==&lt;br /&gt;
===MPR, MBO, MCP, and RCV===&lt;br /&gt;
Introduced in zap 77z257.&lt;br /&gt;
&amp;lt;p&amp;gt;These statistics provide high water mark transaction information. (Since-last values will not be available until V78 GA.)&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;They are useful in conjunction with the &amp;lt;var&amp;gt;MAXPRE&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;MAXBOUT&amp;lt;/var&amp;gt;, and &amp;lt;var&amp;gt;MAXSUBT&amp;lt;/var&amp;gt; parameters. &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
User/system statistics:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;MPR: High water mark of transaction pre-images. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;MBO: High water mark of transaction backout pages. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;MCP: High water mark of transaction chkpoint spans. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
System statistics: &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;RCV: Number of blocks needed for subtransaction recovery &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt; &lt;br /&gt;
&amp;lt;p class=&amp;quot;note&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Notes:&amp;lt;/b&amp;gt; M204.0843 now displays the RCV statistic for subtransaction checkpoints.&lt;br /&gt;
The size of recovery checkpoint must be greater than the sum of the last RCV value plus the number of records in [https://m204wiki.rocketsoftware.com/index.php/System_and_media_recovery#RESTART_recovery_considerations_for_sub-transaction_checkpoints RESTART and RESTARTS].&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
===DKWTS and DKWTMICS===&lt;br /&gt;
Introduced in zap 77z7289.&lt;br /&gt;
&amp;lt;p&amp;gt;The new system statistics DKWTS (DisK WaiTs) and DKWTMICS (DisK WaiT MICroSeconds) collect data to provide rough disk I/O service time numbers.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
DKWTS shows the number of disk I/O waits. DKWTMICS shows the total wait time for those waits in microseconds. Dividing the difference in DKWTMICS by the difference in DKWTS over an interval provides the average disk I/O wait time in microseconds.              &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;note&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Notes:&amp;lt;/b&amp;gt; &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The wait time does include internal Model 204 scheduler delays, so on a CPU bound Model 204 system, the service times calculated from DKWTS and DKWTMICS are likely to be an overestimate of actual service times.&amp;lt;/li&amp;gt;  &lt;br /&gt;
                                                                    &lt;br /&gt;
&amp;lt;li&amp;gt;DKWTS and DKWTMICS are not available in SirMon; use [https://m204wiki.rocketsoftware.com/index.php/MONITOR_command MONITOR] SYSTEM STATISTICS to view these statistics.&amp;lt;/li&amp;gt;&amp;lt;/ul&amp;gt;  &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Compatibility issues==&lt;br /&gt;
===&amp;lt;b id=&amp;quot;listNewInit&amp;quot;&amp;gt;&amp;lt;/b&amp;gt;$ListNew cannot be used in Initial clause===&lt;br /&gt;
It is now a compilation error if &amp;lt;var&amp;gt;$ListNew&amp;lt;/var&amp;gt; is attempted to be used in the &amp;lt;var&amp;gt;Initial&amp;lt;/var&amp;gt; clause of a &lt;br /&gt;
[https://m204wiki.rocketsoftware.com/index.php/Using_variables_and_values_in_computation#Declare_statements_for_.25variables declaration statement].&lt;br /&gt;
&amp;lt;p&amp;gt;This change is propagated by zap maintenance to versions 7.5 (zap 75Z487), 7.6 (zap 76Z514), and 7.7 (zap 77z281) of Model 204.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote class=&amp;quot;note&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Note:&amp;lt;/b&amp;gt; Strictly speaking, this would not be considered a compilation error, because previously although &amp;lt;code&amp;gt;..&amp;amp;nbsp;Initial($ListNew)&amp;lt;/code&amp;gt; did not produce a compilation error, in almost all circumstances it would produce a snap if the initialized %variable were used with some other &amp;lt;var&amp;gt;$List&amp;lt;i&amp;gt;xxx&amp;lt;/i&amp;gt;&amp;lt;/var&amp;gt; invocation.&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Restricting the use of the CUSTOM=38 setting===&lt;br /&gt;
The [[CUSTOM parameter|CUSTOM=38]] parameter setting, introduced at V7.5, inadvertently provided System Manager privileges to all users via the RESET command. This CUSTOM setting is now restricted to the RESETting of the LAUDIT parameter.&lt;br /&gt;
&lt;br /&gt;
===Disabling of Closure support===&lt;br /&gt;
Due to a number of bugs related to Closure support, introduced at V7.7, this feature, which can best be described as exposed methods assigned to method variables, has been disabled in this release. This change was also made to V7.7 with application of zap 77z119.&lt;br /&gt;
&lt;br /&gt;
===Password delimiter enforced===&lt;br /&gt;
When using IFSTRTN to logon to a Model 204 online from an IFAM2 application, both the logonid and password must be followed by a semicolon - the delimiter.             &lt;br /&gt;
For example:      &lt;br /&gt;
                                      &lt;br /&gt;
CALL IFSTRTN(RC,&#039;logonid;password;&#039;...)&lt;br /&gt;
                 &lt;br /&gt;
If a semicolon does not follow the password string, the following message will now be issued&lt;br /&gt;
&lt;br /&gt;
M204.2964: Password missing or too long                  &lt;br /&gt;
                                                         &lt;br /&gt;
Previously, a semicolon following the password was not required and the first blank served as a password delimiter.  However, as of V7.7, embedded blanks are valid password characters and a semicolon is now required to delimit the password.&lt;br /&gt;
&lt;br /&gt;
This change has also been enabled in V7.7 with the application of zap 77z231.&lt;br /&gt;
&lt;br /&gt;
===PAGESZ parameter validated===&lt;br /&gt;
Previously it was possible to set the PAGESZ parameter to any value, although Model 204 internally supports one page size of 6184, and any deviation from this value would have led to problems during file creation. The value of this parameter is now controlled, such that setting it to any value other than 6184 will generate an M204.1149 message with the parameter being reset to 6184.&lt;br /&gt;
&lt;br /&gt;
===ECPRIV and the IDCAMS facility===&lt;br /&gt;
At V7.7 a security loophole was closed, whereby all ECF modules were run under external-authorizer profile of the calling user. Previously any ECF tasks were run under the owning job&#039;s external-authorizer profile, and in order for certain sites to retain that ability, a new setting of ECPRIV, value 4, was introduced to retain the ability to run ECF tasks using the job&#039;s security profile. &lt;br /&gt;
&lt;br /&gt;
The ECPRIV 4 setting potentially introduced a security loophole when calling the IDCAMS interface, based upon what the IDCAMS utility is able to do at a system level. Consequently as of this release, the ECPRIV 4 setting will be ignored when calling the IDCAMS facility via ECF, and such IDCAMS processes will always use the calling user&#039;s security profile. Any existing jobs that use ECF to call the IDCAMS utility with the ECFPRIV 4 bit set should be checked to ensure that the calling user&#039;s security profile still satisfies the job&#039;s requirements.&lt;br /&gt;
&lt;br /&gt;
===TCPOPTS is view only===&lt;br /&gt;
In previous versions the TCPOPTS parameter, which identifies the type of IP addressing in use ( v4 or v6 ), was resetable, although it was always documented as a view-only parameter. The parameter is now handled as a view-only parameter, and any attempts to reset the parameter will result in&lt;br /&gt;
&lt;br /&gt;
   M204.1123: Parameter TCPOPTS not reset&lt;br /&gt;
&lt;br /&gt;
===ZHPF command can only be issued by a system manager===&lt;br /&gt;
In previous versions it was possible to issue the ZHPF command without being logged on. From this release onwards, a user would have to be logged on with system manager privileges to be able to issue this command.&lt;br /&gt;
&lt;br /&gt;
Additionally, the command output will now only  display results for currently open files.&lt;br /&gt;
&lt;br /&gt;
This changes has been enabled in v7.7 with the application of zap 77z264.&lt;br /&gt;
&lt;br /&gt;
===Terminal MODEL reset failure===&lt;br /&gt;
If a reset of the terminal MODEL parameter fails due to an under sized output page buffer, then in addition to the existing messages that inform the user of this failure&lt;br /&gt;
&lt;br /&gt;
    M204.1875 UNABLE TO RESET MODEL TO %C &lt;br /&gt;
    M204.1123: Parameter MODEL not reset  &lt;br /&gt;
&lt;br /&gt;
the following message will now be issued&lt;br /&gt;
&lt;br /&gt;
    M204.1008: LOUTPB must be increased to at least &amp;lt;number&amp;gt; &lt;br /&gt;
                                                         &lt;br /&gt;
where &amp;lt;number&amp;gt; is the minimum value of LOUTPB necessary to support the terminal model.&lt;br /&gt;
&lt;br /&gt;
This change is enabled in V7.7 with the application of zap 77z309.&lt;br /&gt;
&lt;br /&gt;
==New and changed messages==&lt;br /&gt;
&lt;br /&gt;
See [[New and updated messages in Model 204 version 7.8|New and updated messages in Model 204 version 7.8]] for details.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category: Release notes]]&lt;/div&gt;</summary>
		<author><name>ELowell</name></author>
	</entry>
	<entry>
		<id>https://m204wiki.rocketsoftware.com/index.php?title=Release_notes_for_Model_204_version_7.8&amp;diff=117698</id>
		<title>Release notes for Model 204 version 7.8</title>
		<link rel="alternate" type="text/html" href="https://m204wiki.rocketsoftware.com/index.php?title=Release_notes_for_Model_204_version_7.8&amp;diff=117698"/>
		<updated>2019-11-01T18:26:20Z</updated>

		<summary type="html">&lt;p&gt;ELowell: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
These release notes list the enhancements and other changes contained in Model 204 version 7.8. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;&amp;lt;b&amp;gt;******THIS IS A DRAFT DOCUMENT.******&amp;lt;/b&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
These release notes list the enhancements and other changes contained in Model 204 version 7.8, &amp;lt;b&amp;gt;&amp;lt;i&amp;gt;which is still in development&amp;lt;/i&amp;gt;&amp;lt;/b&amp;gt;. Until the commercial release of the software, Rocket reserves the right to add to, remove, or change anything described herein. &lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
These release notes contain installation and features information for the Rocket Model 204 version 7.8 release.&lt;br /&gt;
Before beginning your installation, please read through this information about product installation and changes.&lt;br /&gt;
&lt;br /&gt;
==SOUL enhancements==&lt;br /&gt;
===AmIndependent method===&lt;br /&gt;
The &amp;lt;var&amp;gt;AmIndependent&amp;lt;/var&amp;gt; method returns TRUE for daemons spawned by &amp;lt;var&amp;gt;[http://m204wiki.rocketsoftware.com/index.php/RunIndependently_(Daemon_subroutine) RunIndependently]&amp;lt;/var&amp;gt;. (The action of &amp;lt;var&amp;gt;[https://m204wiki.rocketsoftware.com/index.php/AmDaemon_(Daemon_property) AmDaemon]&amp;lt;/var&amp;gt; remains unchanged.)&lt;br /&gt;
&lt;br /&gt;
The following table shows the values returned by &amp;lt;var&amp;gt;AmIndependent&amp;lt;/var&amp;gt; versus &amp;lt;var&amp;gt;AmDaemon&amp;lt;/var&amp;gt; for different daemon types:&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Type&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;AmDaemon&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;AmIndependent&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;$COMBG&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;False&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;False&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Independent daemon&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;False&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;True&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Other daemon&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;True&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;False&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Web, etc.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;False&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;False&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===$ProcOpn===&lt;br /&gt;
&amp;lt;var&amp;gt;[https://m204wiki.rocketsoftware.com/index.php/$ProcOpn $ProcOpn]&amp;lt;/var&amp;gt; now supports the opening of a procedure with an all numeric name, and including a leading zero, e.g.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;%result = $procOpn(&#039;0123&#039;, &#039;MYFILE&#039;)&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Support for such procedures names was initially introduced at v7.7, and this feature of &amp;lt;var&amp;gt;$ProcOpn&amp;lt;/var&amp;gt; is also enabled within v7.7 with the application of zap 77z054.&lt;br /&gt;
&lt;br /&gt;
===Allow parentheses to surround a boolean enumeration object===&lt;br /&gt;
The following sample code:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;   begin                                       &lt;br /&gt;
   variables are undefined                  &lt;br /&gt;
   %isValid is boolean initial (True)       &lt;br /&gt;
   if (%isValid) then                  &lt;br /&gt;
      print &#039;in IF&#039;                            &lt;br /&gt;
   end if                                   &lt;br /&gt;
   end   &amp;lt;/p&amp;gt;      &lt;br /&gt;
&lt;br /&gt;
will now compile and run successfully, since this syntax: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;if (%isValid) then &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
is logically equivalent to this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;if %isValid then &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Prior to V7.8 the presence of parentheses surrounding the boolean enumeration object would have caused a compilation error. This change is enabled in V7.7 with the application of zap 77z370.&lt;br /&gt;
&lt;br /&gt;
===Support for copying Object class objects===&lt;br /&gt;
The Object class now supports the copy and deepCopy methods. For example, and Object object can be copied as follows:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;   begin               &lt;br /&gt;
   %x is object object &lt;br /&gt;
   %y is object object &lt;br /&gt;
   %y = new            &lt;br /&gt;
   %x = %y:copy        &lt;br /&gt;
   end &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This change is enabled in v7.7 with the application of zap 77z076, and within V7.6 with the application of zap 76z412.&lt;br /&gt;
&lt;br /&gt;
===Assignment of enumeration values to method variables===&lt;br /&gt;
Enumerations values can now be assigned to method variables whose result is an enumeration. So, for example, the following code:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;   begin                                               &lt;br /&gt;
   enumeration colour                                  &lt;br /&gt;
      public                                           &lt;br /&gt;
         value red                                     &lt;br /&gt;
         value white                                   &lt;br /&gt;
         value blue                                    &lt;br /&gt;
      end public                                       &lt;br /&gt;
   end enumeration                                     &lt;br /&gt;
   %func    is function getColour is enumeration colour&lt;br /&gt;
   local function getColour is enumeration colour      &lt;br /&gt;
      return blue                                      &lt;br /&gt;
   end function                                        &lt;br /&gt;
   %func    = getColour                                &lt;br /&gt;
   %func    = (colour):red                             &lt;br /&gt;
   printText {~=%(Local):(%func)}                      &lt;br /&gt;
   end  &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
will produce this result:&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt; %(Local):(%func)=red &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
whereas previously this line:   &lt;br /&gt;
&lt;br /&gt;
  &amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt; %func    = (colour):red &amp;lt;/p&amp;gt;   &lt;br /&gt;
&lt;br /&gt;
would have been rejected with this message:&lt;br /&gt;
&lt;br /&gt;
   &amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;MSIR.0993: Assignment invalid: mismatch between method and method variable &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This change is enabled in V7.7 with the application of zap 77z128.&lt;br /&gt;
&lt;br /&gt;
==External Call Facility enhancements==&lt;br /&gt;
===Managing ECF tables more efficiently===&lt;br /&gt;
The are two new features to help manage ECF tables more efficiently, avoid conditions where the table can fill, and prevent the definition of further entities.&lt;br /&gt;
&lt;br /&gt;
The first feature is the new &amp;lt;var&amp;gt;DISPLAY ECF&amp;lt;/var&amp;gt; command, which displays the contents of ECF tables and also the current status of users accessing ECF modules. See more details of the &amp;lt;var&amp;gt;[[#DISPLAY ECF|DISPLAY ECF]]&amp;lt;/var&amp;gt; command below.&lt;br /&gt;
&lt;br /&gt;
The second feature is a new &amp;lt;var&amp;gt;EXTERNAL REMOVE&amp;lt;/var&amp;gt; statement with the following syntax:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;EXTERNAL REMOVE &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;modulename&amp;lt;/span&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This statement causes the entry for the named module to be removed from the module table. The table entry is then placed on a free chain of entries and can be reused by issuing the EXTERNAL MODULE statement. This allows the module table to be managed with redundant entries removed, without having to recycle the ONLINE.&lt;br /&gt;
&lt;br /&gt;
An EXTERNAL REMOVE statement will return $status/$statusd values of 0/0, and most other status values that can be returned by the EXTERNAL REMOVE statement are already documented in the ECF return codes table. If an EXTERNAL REMOVE is attempted against a module that is currently being called (in use), then $status/$statusd will return the values 20/1 (module unavailable).&lt;br /&gt;
&lt;br /&gt;
==System enhancements==&lt;br /&gt;
&lt;br /&gt;
===New wait types for daemon/master waits===&lt;br /&gt;
&lt;br /&gt;
Two new wait types, viewable on the &amp;lt;var&amp;gt;[https://m204wiki.rocketsoftware.com/index.php/MONITOR_command MONITOR] USERS&amp;lt;/var&amp;gt; command output, have been implemented as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;57&amp;lt;/code&amp;gt; - Means a daemon thread waiting for its master thread  &amp;lt;br /&amp;gt;     &lt;br /&gt;
&amp;lt;code&amp;gt;58&amp;lt;/code&amp;gt; - Means a master thread waiting for one of its daemon threads&lt;br /&gt;
&lt;br /&gt;
This change is enabled in V7.7 with the application of zap 77z410.&lt;br /&gt;
&lt;br /&gt;
===Snap formatting changes===&lt;br /&gt;
Date/time stamps in the page headers of snaps will now be shown in normal format, rather than in julian format as in previous releases. So in the following example, a particular snap header under v7.7 or previous releases would show as: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;SNAPID    1   19226.060155  M204.0022: Bug .. nnnnn               PAGE     1 &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
whereas the same snap header under v7.8 would show as: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;SNAPID    1  2019/08/14 06:01:06   M204.0022: Bug .. nnnnn        PAGE     1 &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Also, due to improvements in handling trailing blanks in snap output, a snap generated under v7.8 should be marginally smaller than the same snap generated under previous releases, assuming the same SNAPCTL settings.&lt;br /&gt;
&lt;br /&gt;
===Call stack trace for problem diagnosis===&lt;br /&gt;
A  call stack trace is now provided to help diagnose and resolve common errors. To enable the stack trace, do either of the following: &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Set the &amp;lt;var&amp;gt;[[SIRFACT parameter|SIRFACT]] X&#039;01&#039;&amp;lt;/var&amp;gt; bit.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Set the &amp;lt;var&amp;gt;[[DEBUGUL parameter|DEBUGL]]&amp;lt;/var&amp;gt; parameter. Note that the &amp;lt;var&amp;gt;DEBUGUL&amp;lt;/var&amp;gt; approach will introduce extra QTBL overhead. &amp;lt;p&amp;gt;(&amp;lt;var&amp;gt;DEBUGUL&amp;lt;/var&amp;gt; provides a similar facility with an include trace of procedures leading to the error, but this might not be potentially as useful as the call trace.)&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt; &lt;br /&gt;
&lt;br /&gt;
The call stack trace can assist in diagnosing run-time errors that might occur, as illustrated by the following &amp;quot;Variable too small for result&amp;quot; and &amp;quot;MBSCAN exceeded&amp;quot; examples.&lt;br /&gt;
&lt;br /&gt;
====Variable too small for result====&lt;br /&gt;
When the stack trace is enabled, a &amp;quot;variable too small&amp;quot; error results in the following message:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;M204.2966: Error at line n, procedure &#039;&#039;procname&#039;&#039; in file &#039;&#039;procfile&#039;&#039;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
which identifies the line within a procedure where the error is occurring, in addition to the usual message:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;M204.0552: Variable too small for result&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Any subsequent M204.2966 messages indicate the point in the code from where the code in error was called. For example, a stack of three subroutine calls leading to a &amp;quot;variable too small&amp;quot; error might result in the following messaging:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;   M204.0552: Variable too small for result                             &lt;br /&gt;
   M204.2966: Error at line 9, procedure MYPROC.LEVEL4 in file MYPROC   &lt;br /&gt;
   M204.2966: Called from line 5, procedure MYPROC.LEVEL3 in file MYPROC&lt;br /&gt;
   M204.2966: Called from line 5, procedure MYPROC.LEVEL2 in file MYPROC&lt;br /&gt;
   M204.2966: Called from line 5, procedure MYPROC.LEVEL1 in file MYPROC &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This information should help in diagnosing the problem. &lt;br /&gt;
&lt;br /&gt;
If the error occurs within a command level program rather than a procedure, then the M204.2966 message is replaced by an M204.2967 message, and a similar error condition to the above with a preceding call stack might be audited as follows:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;   M204.0552: Variable too small for result              &lt;br /&gt;
   M204.2967: Error at line 14 of command level program  &lt;br /&gt;
   M204.2967: Called from line 5 of command level program&lt;br /&gt;
   M204.2967: Called from line 3 of command level program &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If neither &amp;lt;var&amp;gt;SIRFACT X&#039;01&#039;&amp;lt;/var&amp;gt; nor &amp;lt;var&amp;gt;DEBUGUL&amp;lt;/var&amp;gt; is set, then the &amp;quot;variable too small&amp;quot; error produces the following messages:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;   M204.0552: Variable too small for result &lt;br /&gt;
   M204.2968: Error: no debug info &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====MBSCAN exceeded====&lt;br /&gt;
Similarly to the handling of the &amp;quot;variable too small for result&amp;quot; error, the call stack can also be used to diagnose errors where the value of &amp;lt;var&amp;gt;[[MBSCAN parameter|MBSCAN]]&amp;lt;/var&amp;gt; is exceeded as a result of a direct search of Table B records. &lt;br /&gt;
&amp;lt;p&amp;gt;Again, under V7.8, with either the &amp;lt;var&amp;gt;SIRFACT X&#039;01&#039;&amp;lt;/var&amp;gt; bit set or &amp;lt;var&amp;gt;DEBUGUL&amp;lt;/var&amp;gt; set, if a long request occurs as a result of exceeding &amp;lt;var&amp;gt;MBSCAN&amp;lt;/var&amp;gt;, then initially the following message is produced, as before:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;M204.0569: File &#039;&#039;filename&#039;&#039;, Find: Table B records to be searched = &#039;&#039;nnnn&#039;&#039;&amp;lt;/p&amp;gt;&lt;br /&gt;
followed by a DYRWT prompt message. If the user replies &#039;N&#039; to the prompt, or if the request is run in an environment (such as a batch job) where the default response is &#039;N&#039;, the following message is produced after the M204.0569 message:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;Cancelling request: M204.2969: MBSCAN (&#039;&#039;mm&#039;&#039;) exceeded, records to be searched = &#039;&#039;nnnn&#039;&#039;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
where &#039;&#039;mm&#039;&#039; is the current setting of &amp;lt;var&amp;gt;MBSCAN&amp;lt;/var&amp;gt;. The M204.2969 message is followed by M204.2966 messages displaying the call stack trace. Thus, if the following code is run from procedure MYPROC.MBSCAN against the demo database, with an &amp;lt;var&amp;gt;MBSCAN&amp;lt;/var&amp;gt; setting of 10:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;   b                           &lt;br /&gt;
   call sub1                   &lt;br /&gt;
   sub1: subroutine            &lt;br /&gt;
   fd1:                        &lt;br /&gt;
      in clients fd city = ONTARIO&lt;br /&gt;
              end find         &lt;br /&gt;
      fr fd1                      &lt;br /&gt;
         pai                      &lt;br /&gt;
         print                    &lt;br /&gt;
      end for                     &lt;br /&gt;
   end subroutine              &lt;br /&gt;
   end &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
then the following messages are produced, assuming any prompts are responded to with an &#039;N&#039;:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;   M204.0569: File CLIENTS, Find: Table B records to be searched = 3415&lt;br /&gt;
   Cancelling request: M204.2969: MBSCAN (10) exceeded, records to be searched = 3415  &lt;br /&gt;
   M204.2966: Error at line 6, procedure MYPROC.MBSCAN in file MYPROC&lt;br /&gt;
   M204.2966: Called from line 3, procedure MYPROC.MBSCAN in file MYPROC  &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===appendJournalData===&lt;br /&gt;
The &amp;lt;var&amp;gt;[[AppendJournalData_(Stringlist_function)|AppendJournalData]]&amp;lt;/var&amp;gt; function is now more tolerant of an outstanding BUMP request. Previously, if &amp;lt;var&amp;gt;AppendJournalData&amp;lt;/var&amp;gt; was called to inadvertently retrieve a large amount of journal data, typically when called implicitly from within SirScan, then any outstanding BUMP request wouldn&#039;t be honored until all of the data had been retrieved, at which point the BUMP request would be completed, and all data would be lost.&lt;br /&gt;
&lt;br /&gt;
Now, the &amp;lt;var&amp;gt;AppendJournalData&amp;lt;/var&amp;gt; process checks for outstanding BUMP requests before each track I/O is executed, thus avoiding excessive I/Os against the journal and long waits for the BUMP of such a process to complete.&lt;br /&gt;
&lt;br /&gt;
==AUDIT204 enhancements==&lt;br /&gt;
===FORMAT command===&lt;br /&gt;
TIMEHH is a new parameter used with the FORMAT command of the [[Tracking_system_activity_(CCAJRNL,_CCAAUDIT,_CCAJLOG)#AUDIT204_utility|AUDIT204]] utility.  It indicates that timestamps, printed at the beginning of each line of output, should include hundredths of a second. Requires no other arguments.&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;b&amp;gt;NOTE:&amp;lt;/b&amp;gt; This parameter and the 78 version (or later) of AUDIT204 may be used against a 77 (or later) CCAJRNL.&amp;lt;/p&amp;gt;&lt;br /&gt;
For example:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;//CCAIN DD *&lt;br /&gt;
FORMAT YEARFORM 4&lt;br /&gt;
TIMEHH&lt;br /&gt;
TYPE ER MS LI&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Recovery enhancements==&lt;br /&gt;
===Media Recovery in a multi-user environment===&lt;br /&gt;
It is now possible to perform media recovery by issuing the &amp;lt;var&amp;gt;REGENERATE&amp;lt;/var&amp;gt; command to roll forward selected files in a multi-user environment, with the media recovery being carried out by different users with system manager privileges. The new USING option allows for the specification of a ddname for the input journal stream to be used by the &amp;lt;var&amp;gt;REGENERATE&amp;lt;/var&amp;gt; command. Previously media recovery was restricted to single user batch jobs, using the CCAGEN ddname for the input journal. For more details, see the &amp;lt;var&amp;gt;[[#REGENERATE|REGENERATE]]&amp;lt;/var&amp;gt; command below.&lt;br /&gt;
&lt;br /&gt;
==Security enhancements==&lt;br /&gt;
===CA-Top Secret can disallow CCASTAT logins===&lt;br /&gt;
The [https://m204wiki.rocketsoftware.com/index.php/CA-Top_Secret_interface CA-Top Secret] interface now recognizes the &amp;lt;code&amp;gt;DEFACID=&amp;lt;/code&amp;gt;, setting and does not allow CCASTAT logins in the online if &amp;lt;code&amp;gt;DEFACID&amp;lt;/code&amp;gt; is set to null. (There is no attempt to log on M204USR.) Therefore, to disallow CCASTAT logons, set DEFACID=, in [https://m204wiki.rocketsoftware.com/index.php/CA-Top_Secret_interface#Preparing_a_TOPSPARM_parameter_module_with_TOPSGEN TOPSPARM]. CCASTAT will be opened because it contains file and group passwords, but it will not be used for logons if CCASTAT logons are not allowed.&lt;br /&gt;
&lt;br /&gt;
===CUSTOM=11 and mixed cased input===&lt;br /&gt;
The &amp;lt;var&amp;gt;[https://m204wiki.rocketsoftware.com/index.php/CUSTOM_parameter CUSTOM]&amp;lt;/var&amp;gt; parameter CUSTOM=11 setting no longer requires that a *LOWER command be issued prior to a LOGCTL command (to add or change a  password) to preserve mixed case input. Prior to this release, with CUSTOM=11 in place, *LOWER had to be issued before a LOGCTL command, otherwise any mixed case password strings would automatically be translated into uppercase. This change is enabled within V7.7 with the application of zap 77z108.&lt;br /&gt;
&lt;br /&gt;
===DEFUSER can specify a jobname not authorized to access M204===&lt;br /&gt;
When specifying DEFUSER=JOBNAME and VALIDAT=LOGON in the RACFGEN parms for an ONLINE, if the specified jobname ( the owning id for the ONLINE job ) isn&#039;t authorized to use Model 204 via RACF, any LOGIN commands specifying no userid will now succeed ( previously such a LOGON would have failed ). This enables users to submit jobs with USE $JOB, whereby the string USER=jobname  will be added to the submitted JCL, and this in turn is useful if the specified jobname has dataset access privileges to datasets required by the submitted jobs, even if the jobname itself isn&#039;t authorized to use M204.&lt;br /&gt;
&lt;br /&gt;
==Janus product enhancements==&lt;br /&gt;
&lt;br /&gt;
===Janus Web Server access rule===&lt;br /&gt;
The automatic &amp;lt;var&amp;gt;[[JANUS WEB ALLOW]]&amp;lt;/var&amp;gt; rule, which allowed any user to access the port without requiring a login, is changed &amp;lt;i&amp;gt;for non-SSL ports&amp;lt;/i&amp;gt; to the following:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;JANUS WEB &amp;lt;i&amp;gt;portname&amp;lt;/i&amp;gt; DISALLOW *&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
This rule requires a system administrator to explicitly define &amp;lt;var&amp;gt;ALLOW&amp;lt;/var&amp;gt; rules to enable users to access non-SSL ports.&lt;br /&gt;
The rule applies unless overridden by user-added rules. &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;blockquote class=&amp;quot;note&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;b&amp;gt;Note:&amp;lt;/b&amp;gt; To revert from this change in the JANUS DEFINE default and make the default &lt;br /&gt;
 non-SSL &amp;lt;var&amp;gt;ALLOW&amp;lt;/var&amp;gt; rule as it was in version 7.5 and earlier (&amp;lt;code&amp;gt;ALLOW *&amp;lt;/code&amp;gt;), turn on the 1 bit of the &amp;lt;var&amp;gt;[[WEBDFLT parameter|WEBDFLT]]&amp;lt;/var&amp;gt; parameter: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;RESET WEBDFLT=1&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Increase in pending accepts for Janus BPX ports===&lt;br /&gt;
The default number of pending accepts for Janus BPX server ports has been increased from 3 to 12, thus reducing the likelihood that a pending accept may fail with the message&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;MSIR.0019 Connection request rejected for port (port), MAXCON exceeded&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The actual number of pending accepts to be supported on the port can be set with the new parameter MAXPEND, set on the &amp;lt;var&amp;gt;[[JANUS_DEFINE|JANUS DEFINE]]&amp;lt;/var&amp;gt; command, where MAXPEND can vary from 3 up to a maximum value of 32. The change to the default value was enabled within V7.7 with the application of zap 77z269.&lt;br /&gt;
&lt;br /&gt;
===TCP listen backlog increased===&lt;br /&gt;
&lt;br /&gt;
The [https://m204wiki.rocketsoftware.com/index.php/Program_Communication_facilities#LISTEN_call TCP_listen] backlog has been increased from 16 to 1024 under z/OS.&lt;br /&gt;
&lt;br /&gt;
This update tells the TCP stack to queue up to 1024 of such requests up before dropping them, thus reducing, or in most cases eliminating, the likelihood of a connection request drop, other than in exceptional circumstances, such as a denial of service attack. This change was enabled within V7.7 with the application of zap 77z340.&lt;br /&gt;
&lt;br /&gt;
===Defer the freeing of XMLSCREEN input XML===&lt;br /&gt;
&lt;br /&gt;
The freeing of [https://m204wiki.rocketsoftware.com/index.php/XMLSCREEN_and_NOXMLSCREEN_(JANUS_DEFINE_parameters) XMLSCREEN] input XML is now deferred until the next Read Screen or session termination. This means that if an application error is detected, the input XML can be retrieved with [https://m204wiki.rocketsoftware.com/index.php/$Web_Input_Content $Web_Input_Content] and then logged for problem analysis. &lt;br /&gt;
&lt;br /&gt;
Prior to this release the XML received from the client is freed immediately after being used to set the input data for a Read Screen, rendering it unavailable for problem determination.&lt;br /&gt;
&lt;br /&gt;
This change is enabled in V7.7 with the application of zap 77z368.&lt;br /&gt;
&lt;br /&gt;
===XMLSCREEN and Janus Web Legacy blank stripping===&lt;br /&gt;
&lt;br /&gt;
xmlScreens and Janus Web Legacy screens now adhere to the same standard as standard screen processing in terms of stripping leading blanks from input fields defined as [https://m204wiki.rocketsoftware.com/index.php/Full-screen_feature#DEBLANK_or_NODEBLANK_option DEBLANK] (either explicitly or implicitly).&lt;br /&gt;
&lt;br /&gt;
This change is enabled in V7.7 with the application of zap 77z400.&lt;br /&gt;
&lt;br /&gt;
===SSL input buffer size===&lt;br /&gt;
&lt;br /&gt;
The default value of [https://m204wiki.rocketsoftware.com/index.php/SSLIBSIZE_(JANUS_DEFINE_parameter) SSLIBSIZE] has been increased to 16384 + 128, or 16512. This size should ensure correct communication with all TLS spec compliant applications. It is the maximum size allowed unless you use [https://m204wiki.rocketsoftware.com/index.php/CUSTOM_parameter#Using_CUSTOM.3D.2818.29 CUSTOM=18].    &lt;br /&gt;
&lt;br /&gt;
This changed is enabled within V7.7 with the application of zap 77z415.&lt;br /&gt;
&lt;br /&gt;
===Increasing LDAP buffers===&lt;br /&gt;
&lt;br /&gt;
The number of LDAP buffers allocated at startup can now be changed by setting the NLDAPBUF parameter in CCAIN. See below for details on [[#NLDAPBUF|NLDAPBUF]].&lt;br /&gt;
&lt;br /&gt;
===Increase URL length returned with $web_form_action===&lt;br /&gt;
With this release the maximum Janus Web Server incoming URL that can be handled by &amp;lt;var&amp;gt;$web_form_action&amp;lt;/var&amp;gt; is increased from 512 bytes to 1024 bytes. This change is enabled within V7.7 with the application of zap 77z424.&lt;br /&gt;
&lt;br /&gt;
===Maximum RBSIZE setting increased===&lt;br /&gt;
The maximum value for RBSIZE, set on the &amp;lt;var&amp;gt;[[JANUS DEFINE|JANUS DEFINE]]&amp;lt;/var&amp;gt; command, is now increased to 16777215 (previously the maximum was 65534). RBSIZE specifies the RPC or Request Buffer size.  On a Web port, the Janus request buffer holds browser request information such as header data, cookies, and form data. On other port types, it holds RPC input and output parameters. This change is enabled within V7.7 with the application of zap 77z427.&lt;br /&gt;
&lt;br /&gt;
==Debugger enhancements==&lt;br /&gt;
&lt;br /&gt;
===Access to exposed variables===&lt;br /&gt;
The debuggers can now view or watch the values of variables exposed to local routines/methods. Previously, any attempts to access an exposed variable would have displayed &amp;quot;%varname has no value&amp;quot; in the debugger session. (This feature is enabled within V7.7 with the application of zap 77z363.)&lt;br /&gt;
&lt;br /&gt;
==Performance enhancements==&lt;br /&gt;
&lt;br /&gt;
===MP/204 offload improvements===&lt;br /&gt;
Application code issuing the following SOUL statements will now now be fully offloadable:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;File Records In/On&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Remember&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt; &lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Position&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Sort Values&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;                                             &lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Reset Header/Trailer&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Find and Print Count&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Find All Values&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;For Each Value&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
the above improvements are also enabled within V7.7 with the application of zaps 77z419 and 77z420.&lt;br /&gt;
&lt;br /&gt;
===X3270OUT exit offloadable===&lt;br /&gt;
When running MP/204 (AMPSUBS&amp;gt;0) and using the [https://m204wiki.rocketsoftware.com/index.php/Coding_SNA_Communications_Server_conversion_exit_routines#X3270OUT_.28convert_output_from_3270_format.29 X3270OUT] exit to convert a 3270 output data stream to the appropriate device protocol, the exit can now run in parallel mode to improve performance. This change was enabled in V7.7 with the application of zap 77Z313.&lt;br /&gt;
&lt;br /&gt;
The X3270OUT exit must be written to be re-entrant.&lt;br /&gt;
&lt;br /&gt;
==New and changed commands==&lt;br /&gt;
===DISPLAY ECF===&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;DISPLAY ECF {{ M | N | U } like ?} &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This new command displays details from ECF tables, or the current status of users accessing ECF modules.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;syntax&amp;quot;&amp;gt;D ECF M&amp;lt;/span&amp;gt; displays the contents of the module table. For example:&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;    D ECF M &lt;br /&gt;
    Module   Loadlib  Address:Length     Loaded@      Lastused@   #Calls  Flags &lt;br /&gt;
    QATUM13C PROGLIB 2FB91FB8:00000028 19023:121506 19023:121506 00000001 &lt;br /&gt;
    QATUM13B PROGLIB 2FE65000:00009C18 19023:121506 19023:121506 00000001 &lt;br /&gt;
    QATUM13A PROGLIB 2FE6EC18:00001CD8 19023:121506 19023:121506 00000001  &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
(flags may be D=deleted; S=shared; H=halted; I=Idle)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;syntax&amp;quot;&amp;gt;D ECF N&amp;lt;/span&amp;gt; displays contents of the name table. For example: &amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;    D ECF N&lt;br /&gt;
    Module   Logical-call-name &lt;br /&gt;
    QATUM13C MOD_QATUM13C &lt;br /&gt;
    QATUM13B MOD_QATUM13B &lt;br /&gt;
    QATUM13A MOD_QATUM13A &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;syntax&amp;quot;&amp;gt;D ECF U&amp;lt;/span&amp;gt; displays details of users currently accessing ECF modules. This is also the default option, and so &amp;lt;span class=&amp;quot;syntax&amp;quot;&amp;gt;D ECF&amp;lt;/span&amp;gt; will display the same output as &amp;lt;span class=&amp;quot;syntax&amp;quot;&amp;gt;D ECF U&amp;lt;/span&amp;gt;. For example:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;    D ECF U                           &lt;br /&gt;
    User# Userid     Module   Parmlen &lt;br /&gt;
    00002 ADMIN      --none--         &lt;br /&gt;
    00003 ADMIN      COBSAMP1 00000002&lt;br /&gt;
    00004 ADMIN      COBSAMP1 00000002 &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;syntax&amp;quot;&amp;gt;D ECF &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;function&amp;lt;/var&amp;gt; LIKE &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;?&amp;lt;/var&amp;gt; &amp;lt;/span&amp;gt; (where &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;?&amp;lt;/var&amp;gt; is a valid pattern) displays details for entities that match the specified pattern. The function is either M (modules), N (names), or U (users), and it defaults to U. So for example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;D ECF U L A&amp;lt;/p&amp;gt;&lt;br /&gt;
or&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;D ECF U L A*&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
displays details of ECF users whose names begin with A.&lt;br /&gt;
&lt;br /&gt;
===REGENERATE===&lt;br /&gt;
The &amp;lt;var&amp;gt;REGENERATE&amp;lt;/var&amp;gt; command can now be run in a multi-user environment by multiple users with system manager privileges. A new option USING is provided to specify the ddname of the input journal, so that the full syntax is now as follows:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;  REGENERATE [USING ddname] FILE filename [FROM dumpname | IGNORE]&lt;br /&gt;
  [TO {LAST UPDATE [BEFORE yy.ddd hh:mm:ss.th] | LAST CHECKPOINT [BEFORE yy.dd hh:mm:ss.th] &lt;br /&gt;
  | UPDATE number OF yy.ddd hh:mm:ss.th | CHECKPOINT yy.ddd hh:mm:ss.th} ]&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The default for the using ddname is CCAGEN, but any ddname may be used to allocate an input journal and used. For example:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;  ALLOCATE REGEN1 WITH SCOPE=SYSTEM DSN=PROD1.GDGJ OLD SEQUENTIAL GEN=+2&lt;br /&gt;
  REGENERATE USING REGEN1 FILE TEST&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It is the user&#039;s responsibility to ensure that the file being regenerated is not in use, and so prior to usage, &amp;lt;var&amp;gt;BUMP FILE&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;STOP FILE&amp;lt;/var&amp;gt; should be used to isolate usage against the file. If the file is in use, the REGEN will fail with these messages:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;  M204.1430: Failed to open file TEST&lt;br /&gt;
  M204.1436: Stopped processing file TEST  &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
$STATUS will now be set for &amp;lt;var&amp;gt;REGENERATE&amp;lt;/var&amp;gt; with the following values:&lt;br /&gt;
&amp;lt;blockquote&amp;gt;    &lt;br /&gt;
    0 - Success &amp;lt;br/&amp;gt;&lt;br /&gt;
    1 - No files were processed &amp;lt;br/&amp;gt;&lt;br /&gt;
    2 - At least one file stopped processing &amp;lt;br/&amp;gt;&lt;br /&gt;
    4 - A serious error occurred, REGEN failed &lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Similarly, &amp;lt;var&amp;gt;SETGRC&amp;lt;/var&amp;gt; may be used to get the return code and error message.&lt;br /&gt;
&lt;br /&gt;
==New and changed parameters==&lt;br /&gt;
&lt;br /&gt;
===ECMODS===&lt;br /&gt;
The new minimum value for ECMODS, the allowable number of ECF modules, is 1. Prior to V7.8 the minimum value was 0. This changed was enabled in V7.7 with the application of zap 77z306.&lt;br /&gt;
&lt;br /&gt;
===ECNAMES===&lt;br /&gt;
The new minimum value for ECNAMES, the allowable number of ECF module names, is 1. Prior to V7.8 the minimum value was 0. This changed was enabled in V7.7 with the application of zap 77z306.&lt;br /&gt;
&lt;br /&gt;
===ECPSIZE===&lt;br /&gt;
The new minimum value for ECPSIZE, the initial storage allocation for ECF parameters, is 1024. Prior to V7.8 the minimum value was 0. This changed was enabled in V7.7 with the application of zap 77z306.&lt;br /&gt;
&lt;br /&gt;
===ENQTIME===&lt;br /&gt;
Millisecond duration of automatic record locking retry wait.&lt;br /&gt;
&lt;br /&gt;
Prior to this change, if record locking conflicts occur frequently in a busy online, any user with a non-zero value for &amp;lt;var&amp;gt;[[ENQRETRY parameter|ENQRETRY]]&amp;lt;/var&amp;gt; will wait at least 3 seconds before the conflict is dealt with. This can degrade overall system performance.      &lt;br /&gt;
                                                         &lt;br /&gt;
The &amp;lt;var&amp;gt;[[ENQTIME parameter|ENQTIME]]&amp;lt;/var&amp;gt; parameter specifies the number of milliseconds waited for each record locking retry wait. ENQTIME can be between 1 and 60000, corresponding to a minimum of 1 millisecond and a maximum of 1 minute. The default value of ENQTIME is 3000 (3 seconds).            &lt;br /&gt;
                                                         &lt;br /&gt;
For example, with ENQTIME = 100 and ENQRETRY = 7, after a record locking conflict occurs the thread will retry 7 times with wait intervals of .1 seconds, and so within at most .7 seconds either the lock becomes available or the conflict triggers an On unit or cancels the request.     &lt;br /&gt;
                                                         &lt;br /&gt;
The ENQTIME parameter may also be reset with $ResetN. &lt;br /&gt;
&lt;br /&gt;
This new parameter was enabled within V7.7 with the application of zap 77z299.&lt;br /&gt;
&lt;br /&gt;
===EVALOPT===&lt;br /&gt;
The new &amp;lt;var&amp;gt;EVALOPT&amp;lt;/var&amp;gt; parameter controls the cancellation of a request on truncation of string data. The default value is 0, and currently there is just one setting, 1, which means &amp;quot;cancel a request if truncation of string data occurs.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
For example, with the default of 0 in place, the following code &amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;    %x is string len 1   &lt;br /&gt;
    %y is string len 2   &lt;br /&gt;
    %y = &#039;ab&#039;            &lt;br /&gt;
    %x = %y              &lt;br /&gt;
    printtext {~} = {%x} &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
would cause silent truncation, and give the result&lt;br /&gt;
    &amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;%x = a &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If &amp;lt;var&amp;gt;EVALOPT&amp;lt;/var&amp;gt; is set to 1, then the above code produces the following message:&lt;br /&gt;
    &amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;M204.0552: Variable too small for result &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and the request is cancelled.&lt;br /&gt;
&lt;br /&gt;
===LFSCB===&lt;br /&gt;
LFSCB, the length of the full screen buffer, now has a new minimum value of 8 ( the previous minimum was 0 ). This change has been enabled within v7.7 with the application of zap 77z042, and within V7.6 with the application of zap 76z393.&lt;br /&gt;
&lt;br /&gt;
===MAXPRE, MAXBOUT, MAXSUBT===&lt;br /&gt;
&amp;lt;p&amp;gt;Introduced in zap 77Z257.&amp;lt;/p&amp;gt;&lt;br /&gt;
The new &amp;lt;var&amp;gt;MAXPRE&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;MAXBOUT&amp;lt;/var&amp;gt;, and &amp;lt;var&amp;gt;MAXSUBT&amp;lt;/var&amp;gt; parameters can be used to cancel a runaway transaction and prevent it from filling the checkpoint data set. &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;MAXPRE&amp;lt;/var&amp;gt;:  Maximum number of pre-images per transaction.  &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;MAXBOUT&amp;lt;/var&amp;gt;: Maximum number of backout pages per transaction. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;MAXSUBT&amp;lt;/var&amp;gt;: Maximum number of subtransaction checkpoints that a transaction can span.&amp;lt;/li&amp;gt;&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;Each new parameter defaults to unlimited. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;If a parameter value is set, a transaction is cancelled if that value is exceeded, and the following message is displayed:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;code&amp;gt;M204.0524: Maximum number (&amp;lt;i&amp;gt;num&amp;lt;/i&amp;gt;) of &amp;lt;i&amp;gt;parameter&amp;lt;/i&amp;gt; exceeded.&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
where &amp;lt;i&amp;gt;num&amp;lt;/i&amp;gt; is the value set for &amp;lt;i&amp;gt;parameter&amp;lt;/i&amp;gt; (&amp;lt;var&amp;gt;MAXPRE&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;MAXBOUT&amp;lt;/var&amp;gt;, or &amp;lt;var&amp;gt;MAXSUBT&amp;lt;/var&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
===NLDAPBUF===&lt;br /&gt;
This new parameter allows the number of LDAP buffers allocated during startup to be set in CCAIN. The default value is 2, and the settable value can range from 0 to 65535.&lt;br /&gt;
&lt;br /&gt;
===PUPDTH (new minimum value)===&lt;br /&gt;
If a user sets the &amp;lt;var&amp;gt;[[PUPDTH parameter|PUPDTH]]&amp;lt;/var&amp;gt; parameter to 0, it will now automatically be increased to 1, its minimum value.&lt;br /&gt;
&lt;br /&gt;
===SERV4G===&lt;br /&gt;
This parameter allows testing of server tables that span a 4-gigabyte boundary. For example, if SERV4G is X&#039;FFFFF000&#039;, each ATB server will begin at XX_FFFFF000. If SERV4G is X&#039;FFFF0000&#039;, each ATB server will begin at XX_FFFF0000. XX is determined by the storage available on the system. The parameter is set in CCAIN.&lt;br /&gt;
&lt;br /&gt;
The contents of the ATB server are specified by using the SERVGA parameter.&lt;br /&gt;
&lt;br /&gt;
For example. if you want VTBL to span the 4G boundary, you can use these settings: SERV4G=X&#039;FFFFF000&#039;, SERVGA=X&#039;00040000&#039;, and LVTBL=200 (6400 bytes, X&#039;1900&#039;). This will force each server&#039;s VTBL to begin at XX_FFFFF000 and end at XX+1_00000900.&lt;br /&gt;
&lt;br /&gt;
===WEBDFLT===&lt;br /&gt;
At V7.7, the default access rule for non-SSL ports was changed from ALLOW * to DISALLOW *, meaning that unless any ALLOW rules were in place resulting in a login/password prompt, the port couldn&#039;t be accessed. The new &amp;lt;var&amp;gt;[https://m204wiki.rocketsoftware.com/index.php/WEBDFLT_parameter WEBDFLT]&amp;lt;/var&amp;gt; parameter may be set to 1 for reversion to the old default of ALLOW *. Under V7.7, this new parameter was enabled with the application of zap 77z090. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;var&amp;gt;RESET WEBDFLT&amp;lt;/var&amp;gt; requires system administrator privileges. It is recommended to reset the 1 bit of &amp;lt;var&amp;gt;WEBDFLT&amp;lt;/var&amp;gt; to zero after issuing a series of &amp;lt;var&amp;gt;JANUS DEFINE&amp;lt;/var&amp;gt; commands which need WEBDFLT=1, as in the CCAIN input stream.&lt;br /&gt;
&lt;br /&gt;
==New and changed statistics==&lt;br /&gt;
===MPR, MBO, MCP, and RCV===&lt;br /&gt;
Introduced in zap 77Z257.&lt;br /&gt;
&amp;lt;p&amp;gt;These statistics provide high water mark transaction information. (Since-last values will not be available until V78 GA.)&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;They are useful in conjunction with the &amp;lt;var&amp;gt;MAXPRE&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;MAXBOUT&amp;lt;/var&amp;gt;, and &amp;lt;var&amp;gt;MAXSUBT&amp;lt;/var&amp;gt; parameters. &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
User/system statistics:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;MPR: High water mark of transaction pre-images. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;MBO: High water mark of transaction backout pages. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;MCP: High water mark of transaction chkpoint spans. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
System statistics: &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;RCV: Number of blocks needed for subtransaction recovery &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt; &lt;br /&gt;
&amp;lt;p class=&amp;quot;note&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Notes:&amp;lt;/b&amp;gt; M204.0843 now displays the RCV statistic for subtransaction checkpoints.&lt;br /&gt;
The size of recovery checkpoint must be greater than the sum of the last RCV value plus the number of records in [https://m204wiki.rocketsoftware.com/index.php/System_and_media_recovery#RESTART_recovery_considerations_for_sub-transaction_checkpoints RESTART and RESTARTS].&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
===DKWTS and DKWTMICS===&lt;br /&gt;
Introduced in zap 77z7289.&lt;br /&gt;
&amp;lt;p&amp;gt;The new system statistics DKWTS (DisK WaiTs) and DKWTMICS (DisK WaiT MICroSeconds) collect data to provide rough disk I/O service time numbers.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
DKWTS shows the number of disk I/O waits. DKWTMICS shows the total wait time for those waits in microseconds. Dividing the difference in DKWTMICS by the difference in DKWTS over an interval provides the average disk I/O wait time in microseconds.              &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;note&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Notes:&amp;lt;/b&amp;gt; &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The wait time does include internal Model 204 scheduler delays, so on a CPU bound Model 204 system, the service times calculated from DKWTS and DKWTMICS are likely to be an overestimate of actual service times.&amp;lt;/li&amp;gt;  &lt;br /&gt;
                                                                    &lt;br /&gt;
&amp;lt;li&amp;gt;DKWTS and DKWTMICS are not available in SirMon; use [https://m204wiki.rocketsoftware.com/index.php/MONITOR_command MONITOR] SYSTEM STATISTICS to view these statistics.&amp;lt;/li&amp;gt;&amp;lt;/ul&amp;gt;  &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Compatibility issues==&lt;br /&gt;
===&amp;lt;b id=&amp;quot;listNewInit&amp;quot;&amp;gt;&amp;lt;/b&amp;gt;$ListNew cannot be used in Initial clause===&lt;br /&gt;
It is now a compilation error if &amp;lt;var&amp;gt;$ListNew&amp;lt;/var&amp;gt; is attempted to be used in the &amp;lt;var&amp;gt;Initial&amp;lt;/var&amp;gt; clause of a &lt;br /&gt;
[https://m204wiki.rocketsoftware.com/index.php/Using_variables_and_values_in_computation#Declare_statements_for_.25variables declaration statement].&lt;br /&gt;
&amp;lt;p&amp;gt;This change is propagated by zap maintenance to versions 7.5 (zap 75Z487), 7.6 (zap 76Z514), and 7.7 (zap 77Z281) of Model 204.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote class=&amp;quot;note&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Note:&amp;lt;/b&amp;gt; Strictly speaking, this would not be considered a compilation error, because previously although &amp;lt;code&amp;gt;..&amp;amp;nbsp;Initial($ListNew)&amp;lt;/code&amp;gt; did not produce a compilation error, in almost all circumstances it would produce a snap if the initialized %variable were used with some other &amp;lt;var&amp;gt;$List&amp;lt;i&amp;gt;xxx&amp;lt;/i&amp;gt;&amp;lt;/var&amp;gt; invocation.&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Restricting the use of the CUSTOM=38 setting===&lt;br /&gt;
The [[CUSTOM parameter|CUSTOM=38]] parameter setting, introduced at V7.5, inadvertently provided System Manager privileges to all users via the RESET command. This CUSTOM setting is now restricted to the RESETting of the LAUDIT parameter.&lt;br /&gt;
&lt;br /&gt;
===Disabling of Closure support===&lt;br /&gt;
Due to a number of bugs related to Closure support, introduced at V7.7, this feature, which can best be described as exposed methods assigned to method variables, has been disabled in this release. This change was also made to V7.7 with application of zap 77z119.&lt;br /&gt;
&lt;br /&gt;
===Password delimiter enforced===&lt;br /&gt;
When using IFSTRTN to logon to a Model 204 online from an IFAM2 application, both the logonid and password must be followed by a semicolon - the delimiter.             &lt;br /&gt;
For example:      &lt;br /&gt;
                                      &lt;br /&gt;
CALL IFSTRTN(RC,&#039;logonid;password;&#039;...)&lt;br /&gt;
                 &lt;br /&gt;
If a semicolon does not follow the password string, the following message will now be issued&lt;br /&gt;
&lt;br /&gt;
M204.2964: Password missing or too long                  &lt;br /&gt;
                                                         &lt;br /&gt;
Previously, a semicolon following the password was not required and the first blank served as a password delimiter.  However, as of V7.7, embedded blanks are valid password characters and a semicolon is now required to delimit the password.&lt;br /&gt;
&lt;br /&gt;
This change has also been enabled within V7.7 with the application of zap 77z231.&lt;br /&gt;
&lt;br /&gt;
===PAGESZ parameter validated===&lt;br /&gt;
Previously it was possible to set the PAGESZ parameter to any value, although Model 204 internally supports one page size of 6184, and any deviation from this value would have led to problems during file creation. The value of this parameter is now controlled, such that setting it to any value other than 6184 will generate an M204.1149 message with the parameter being reset to 6184.&lt;br /&gt;
&lt;br /&gt;
===ECPRIV and the IDCAMS facility===&lt;br /&gt;
At V7.7 a security loophole was closed, whereby all ECF modules were run under external-authorizer profile of the calling user. Previously any ECF tasks were run under the owning job&#039;s external-authorizer profile, and in order for certain sites to retain that ability, a new setting of ECPRIV, value 4, was introduced to retain the ability to run ECF tasks using the job&#039;s security profile. &lt;br /&gt;
&lt;br /&gt;
The ECPRIV 4 setting potentially introduced a security loophole when calling the IDCAMS interface, based upon what the IDCAMS utility is able to do at a system level. Consequently as of this release, the ECPRIV 4 setting will be ignored when calling the IDCAMS facility via ECF, and such IDCAMS processes will always use the calling user&#039;s security profile. Any existing jobs that use ECF to call the IDCAMS utility with the ECFPRIV 4 bit set should be checked to ensure that the calling user&#039;s security profile still satisfies the job&#039;s requirements.&lt;br /&gt;
&lt;br /&gt;
===TCPOPTS is view only===&lt;br /&gt;
In previous releases the TCPOPTS parameter, which identifies the type of IP addressing in use ( v4 or v6 ), was resetable, although it was always documented as a view-only parameter. The parameter is now handled as a view-only parameter, and any attempts to reset the parameter will result in&lt;br /&gt;
&lt;br /&gt;
   M204.1123: Parameter TCPOPTS not reset&lt;br /&gt;
&lt;br /&gt;
===ZHPF command can only be issued by a system manager===&lt;br /&gt;
In previous releases it was possible to issue the ZHPF command without being logged on. From this release onwards, a user would have to be logged on with system manager privileges to be able to issue this command.&lt;br /&gt;
&lt;br /&gt;
Additionally, the command output will now only  display results for currently open files.&lt;br /&gt;
&lt;br /&gt;
This changes has been enabled within v7.7 with the application of zap 77z264.&lt;br /&gt;
&lt;br /&gt;
===Terminal MODEL reset failure===&lt;br /&gt;
If a reset of the terminal MODEL parameter fails due to an under sized output page buffer, then in addition to the existing messages that inform the user of this failure&lt;br /&gt;
&lt;br /&gt;
    M204.1875 UNABLE TO RESET MODEL TO %C &lt;br /&gt;
    M204.1123: Parameter MODEL not reset  &lt;br /&gt;
&lt;br /&gt;
the following message will now be issued&lt;br /&gt;
&lt;br /&gt;
    M204.1008: LOUTPB must be increased to at least &amp;lt;number&amp;gt; &lt;br /&gt;
                                                         &lt;br /&gt;
where &amp;lt;number&amp;gt; is the minimum value of LOUTPB necessary to support the terminal model.&lt;br /&gt;
&lt;br /&gt;
This change is enabled in V7.7 with the application of zap 77z309.&lt;br /&gt;
&lt;br /&gt;
==New and changed messages==&lt;br /&gt;
&lt;br /&gt;
See [[New and updated messages in Model 204 version 7.8|New and updated messages in Model 204 version 7.8]] for details.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category: Release notes]]&lt;/div&gt;</summary>
		<author><name>ELowell</name></author>
	</entry>
	<entry>
		<id>https://m204wiki.rocketsoftware.com/index.php?title=Release_notes_for_Model_204_version_7.8&amp;diff=117695</id>
		<title>Release notes for Model 204 version 7.8</title>
		<link rel="alternate" type="text/html" href="https://m204wiki.rocketsoftware.com/index.php?title=Release_notes_for_Model_204_version_7.8&amp;diff=117695"/>
		<updated>2019-10-16T16:36:06Z</updated>

		<summary type="html">&lt;p&gt;ELowell: /* DISPLAY ECF */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
These release notes list the enhancements and other changes contained in Model 204 version 7.8. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;&amp;lt;b&amp;gt;******THIS IS A DRAFT DOCUMENT.******&amp;lt;/b&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
These release notes list the enhancements and other changes contained in Model 204 version 7.8, &amp;lt;b&amp;gt;&amp;lt;i&amp;gt;which is still in development&amp;lt;/i&amp;gt;&amp;lt;/b&amp;gt;. Until the commercial release of the software, Rocket reserves the right to add to, remove, or change anything described herein. &lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
These release notes contain installation and features information for the Rocket Model 204 version 7.8 release.&lt;br /&gt;
Before beginning your installation, please read through this information about product installation and changes.&lt;br /&gt;
&lt;br /&gt;
==SOUL enhancements==&lt;br /&gt;
===AmIndependent method===&lt;br /&gt;
The &amp;lt;var&amp;gt;AmIndependent&amp;lt;/var&amp;gt; method returns TRUE for daemons spawned by &amp;lt;var&amp;gt;[http://m204wiki.rocketsoftware.com/index.php/RunIndependently_(Daemon_subroutine) RunIndependently]&amp;lt;/var&amp;gt;. (The action of &amp;lt;var&amp;gt;[https://m204wiki.rocketsoftware.com/index.php/AmDaemon_(Daemon_property) AmDaemon]&amp;lt;/var&amp;gt; remains unchanged.)&lt;br /&gt;
&lt;br /&gt;
The following table shows the values returned by &amp;lt;var&amp;gt;AmIndependent&amp;lt;/var&amp;gt; versus &amp;lt;var&amp;gt;AmDaemon&amp;lt;/var&amp;gt; for different daemon types:&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Type&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;AmDaemon&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;AmIndependent&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;$COMBG&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;False&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;False&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Independent daemon&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;False&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;True&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Other daemon&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;True&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;False&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Web, etc.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;False&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;False&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===$ProcOpn===&lt;br /&gt;
&amp;lt;var&amp;gt;[https://m204wiki.rocketsoftware.com/index.php/$ProcOpn $ProcOpn]&amp;lt;/var&amp;gt; now supports the opening of a procedure with an all numeric name, and including a leading zero, e.g.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;%result = $procOpn(&#039;0123&#039;, &#039;MYFILE&#039;)&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Support for such procedures names was initially introduced at v7.7, and this feature of &amp;lt;var&amp;gt;$ProcOpn&amp;lt;/var&amp;gt; is also enabled within v7.7 with the application of zap 77z054.&lt;br /&gt;
&lt;br /&gt;
===Allow parentheses to surround a boolean enumeration object===&lt;br /&gt;
The following sample code&lt;br /&gt;
&lt;br /&gt;
   begin                                       &lt;br /&gt;
   variables are undefined                  &lt;br /&gt;
   %isValid is boolean initial (True)       &lt;br /&gt;
   if (%isValid) then                  &lt;br /&gt;
      print &#039;in IF&#039;                            &lt;br /&gt;
   end if                                   &lt;br /&gt;
   end         &lt;br /&gt;
&lt;br /&gt;
will now compile and run successfully, as &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;if (%isValid) then &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
is logically equivalent to&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;if %isValid then &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Prior to V7.8 the presence of parentheses surrounding the boolean enumeration object would have caused a compilation error. This change is enabled in V7.7 with the application of zap 77z370.&lt;br /&gt;
&lt;br /&gt;
===Support for copying Object class objects===&lt;br /&gt;
The Object class now supports the copy and deepCopy methods. For example, and Object object can be copied as follows&lt;br /&gt;
&lt;br /&gt;
   begin               &lt;br /&gt;
   %x is object object &lt;br /&gt;
   %y is object object &lt;br /&gt;
   %y = new            &lt;br /&gt;
   %x = %y:copy        &lt;br /&gt;
   end&lt;br /&gt;
&lt;br /&gt;
This change is enabled in v7.7 with the application of zap 77z076, and within V7.6 with the application of zap 76z412.&lt;br /&gt;
&lt;br /&gt;
===Assignment of enumeration values to method variables===&lt;br /&gt;
Enumerations values can now be assigned to method variables whose result is an enumeration.So for example the following code&lt;br /&gt;
&lt;br /&gt;
   begin                                               &lt;br /&gt;
   enumeration colour                                  &lt;br /&gt;
      public                                           &lt;br /&gt;
         value red                                     &lt;br /&gt;
         value white                                   &lt;br /&gt;
         value blue                                    &lt;br /&gt;
      end public                                       &lt;br /&gt;
   end enumeration                                     &lt;br /&gt;
   %func    is function getColour is enumeration colour&lt;br /&gt;
   local function getColour is enumeration colour      &lt;br /&gt;
      return blue                                      &lt;br /&gt;
   end function                                        &lt;br /&gt;
   %func    = getColour                                &lt;br /&gt;
   %func    = (colour):red                             &lt;br /&gt;
   printText {~=%(Local):(%func)}                      &lt;br /&gt;
   end  &lt;br /&gt;
&lt;br /&gt;
will produce the result&lt;br /&gt;
&lt;br /&gt;
   %(Local):(%func)=red&lt;br /&gt;
&lt;br /&gt;
whereas previously the line   &lt;br /&gt;
&lt;br /&gt;
   %func    = (colour):red    &lt;br /&gt;
&lt;br /&gt;
would have been rejected with the message&lt;br /&gt;
&lt;br /&gt;
   MSIR.0993: Assignment invalid: mismatch between method and method variable&lt;br /&gt;
&lt;br /&gt;
This change is enabled in V7.7 with the application of zap 77z128.&lt;br /&gt;
&lt;br /&gt;
==External Call Facility enhancements==&lt;br /&gt;
===Managing ECF tables more efficiently===&lt;br /&gt;
The are two new features to help manage ECF tables more efficiently, avoid conditions where the table can fill, and prevent the definition of further entities.&lt;br /&gt;
&lt;br /&gt;
The first feature is the new  &amp;lt;var&amp;gt;DISPLAY ECF&amp;lt;/var&amp;gt; command, which displays the contents of ECF tables and also the current status of users accessing ECF modules. See more details of the &amp;lt;var&amp;gt;[[#DISPLAY ECF|DISPLAY ECF]]&amp;lt;/var&amp;gt; command below.&lt;br /&gt;
&lt;br /&gt;
The second feature is a new &amp;lt;var&amp;gt;EXTERNAL REMOVE&amp;lt;/var&amp;gt; statement with the syntax&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;EXTERNAL REMOVE &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;modulename&amp;lt;/span&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This causes the entry for the named module to be removed from the module table. The table entry is then placed on a free chain of entries and can be reused by issuing the EXTERNAL MODULE statement. This allows the module table to be managed with redundant entries removed, without having to recycle the ONLINE.&lt;br /&gt;
&lt;br /&gt;
A EXTERNAL REMOVE statement will return $status/$statusd values of 0/0, and most other status values that can be returned by the EXTERNAL REMOVE statement are already documented in the ECF return codes table. If an EXTERNAL REMOVE is attempted against a module that is currently being called ( in use ), then $status/$statusd will return the values 20/1 ( module unavailable).&lt;br /&gt;
&lt;br /&gt;
==System enhancements==&lt;br /&gt;
&lt;br /&gt;
===New wait types for daemon/master waits===&lt;br /&gt;
&lt;br /&gt;
Two new wait types, viewable on the &amp;lt;var&amp;gt;[https://m204wiki.rocketsoftware.com/index.php/MONITOR_command MONITOR] USERS&amp;lt;/var&amp;gt; command output, have been implemented as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;57&amp;lt;/code&amp;gt; - Means a daemon thread waiting for its master thread  &amp;lt;br /&amp;gt;     &lt;br /&gt;
&amp;lt;code&amp;gt;58&amp;lt;/code&amp;gt; - Means a master thread waiting for one of its daemon threads&lt;br /&gt;
&lt;br /&gt;
This change is enabled in V7.7 with the application of zap 77z410.&lt;br /&gt;
&lt;br /&gt;
===Snap formatting changes===&lt;br /&gt;
Date/time stamps in the page headers of snaps will now be shown normal format, rather than in julian format as in previous releases. Thus in the following example a particular snap header under v7.7 or previous releases would show as &lt;br /&gt;
&lt;br /&gt;
   SNAPID    1   19226.060155  M204.0022: Bug .. nnnnn               PAGE     1&lt;br /&gt;
&lt;br /&gt;
whereas the same snap header under v7.8 would show as &lt;br /&gt;
&lt;br /&gt;
   SNAPID    1  2019/08/14 06:01:06   M204.0022: Bug .. nnnnn        PAGE     1&lt;br /&gt;
&lt;br /&gt;
Also, due to improvements in handling trailing blanks in snap output, a snap generated under v7.8 should be marginally smaller than the same snap generated under previous releases, assuming the same SNAPCTL settings.&lt;br /&gt;
&lt;br /&gt;
===Call stack trace for problem diagnosis===&lt;br /&gt;
A  call stack trace is now provided to help diagnose and resolve common errors. To enable the stack trace, do either of the following: &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Set the &amp;lt;var&amp;gt;[[SIRFACT parameter|SIRFACT]] X&#039;01&#039;&amp;lt;/var&amp;gt; bit.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Set the &amp;lt;var&amp;gt;[[DEBUGUL parameter|DEBUGL]]&amp;lt;/var&amp;gt; parameter. Note that the &amp;lt;var&amp;gt;DEBUGUL&amp;lt;/var&amp;gt; approach will introduce extra QTBL overhead. &amp;lt;p&amp;gt;(&amp;lt;var&amp;gt;DEBUGUL&amp;lt;/var&amp;gt; provides a similar facility with an include trace of procedures leading to the error, but this might not be potentially as useful as the call trace.)&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt; &lt;br /&gt;
&lt;br /&gt;
The call stack trace can assist in diagnosing run-time errors that might occur, as illustrated by the following &amp;quot;Variable too small for result&amp;quot; and &amp;quot;MBSCAN exceeded&amp;quot; examples.&lt;br /&gt;
&lt;br /&gt;
====Variable too small for result====&lt;br /&gt;
When the stack trace is enabled, a &amp;quot;variable too small&amp;quot; error results in the following message:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;M204.2966: Error at line n, procedure &#039;&#039;procname&#039;&#039; in file &#039;&#039;procfile&#039;&#039;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
which identifies the line within a procedure where the error is occurring, in addition to the usual message:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;M204.0552: Variable too small for result&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Any subsequent M204.2966 messages indicate the point in the code from where the code in error was called. For example, a stack of three subroutine calls leading to a &amp;quot;variable too small&amp;quot; error might result in the following messaging:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;   M204.0552: Variable too small for result                             &lt;br /&gt;
   M204.2966: Error at line 9, procedure MYPROC.LEVEL4 in file MYPROC   &lt;br /&gt;
   M204.2966: Called from line 5, procedure MYPROC.LEVEL3 in file MYPROC&lt;br /&gt;
   M204.2966: Called from line 5, procedure MYPROC.LEVEL2 in file MYPROC&lt;br /&gt;
   M204.2966: Called from line 5, procedure MYPROC.LEVEL1 in file MYPROC &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This information should help in diagnosing the problem. &lt;br /&gt;
&lt;br /&gt;
If the error occurs within a command level program rather than a procedure, then the M204.2966 message is replaced by an M204.2967 message, and a similar error condition to the above with a preceding call stack might be audited as follows:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;   M204.0552: Variable too small for result              &lt;br /&gt;
   M204.2967: Error at line 14 of command level program  &lt;br /&gt;
   M204.2967: Called from line 5 of command level program&lt;br /&gt;
   M204.2967: Called from line 3 of command level program &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If neither &amp;lt;var&amp;gt;SIRFACT X&#039;01&#039;&amp;lt;/var&amp;gt; nor &amp;lt;var&amp;gt;DEBUGUL&amp;lt;/var&amp;gt; is set, then the &amp;quot;variable too small&amp;quot; error produces the following messages:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;   M204.0552: Variable too small for result &lt;br /&gt;
   M204.2968: Error: no debug info &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====MBSCAN exceeded====&lt;br /&gt;
Similarly to the handling of the &amp;quot;variable too small for result&amp;quot; error, the call stack can also be used to diagnose errors where the value of &amp;lt;var&amp;gt;[[MBSCAN parameter|MBSCAN]]&amp;lt;/var&amp;gt; is exceeded as a result of a direct search of Table B records. &lt;br /&gt;
&amp;lt;p&amp;gt;Again, under V7.8, with either the &amp;lt;var&amp;gt;SIRFACT X&#039;01&#039;&amp;lt;/var&amp;gt; bit set or &amp;lt;var&amp;gt;DEBUGUL&amp;lt;/var&amp;gt; set, if a long request occurs as a result of exceeding &amp;lt;var&amp;gt;MBSCAN&amp;lt;/var&amp;gt;, then initially the following message is produced, as before:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;M204.0569: File &#039;&#039;filename&#039;&#039;, Find: Table B records to be searched = &#039;&#039;nnnn&#039;&#039;&amp;lt;/p&amp;gt;&lt;br /&gt;
followed by a DYRWT prompt message. If the user replies &#039;N&#039; to the prompt, or if the request is run in an environment (such as a batch job) where the default response is &#039;N&#039;, the following message is produced after the M204.0569 message:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;Cancelling request: M204.2969: MBSCAN (&#039;&#039;mm&#039;&#039;) exceeded, records to be searched = &#039;&#039;nnnn&#039;&#039;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
where &#039;&#039;mm&#039;&#039; is the current setting of &amp;lt;var&amp;gt;MBSCAN&amp;lt;/var&amp;gt;. The M204.2969 message is followed by M204.2966 messages displaying the call stack trace. Thus, if the following code is run from procedure MYPROC.MBSCAN against the demo database, with an &amp;lt;var&amp;gt;MBSCAN&amp;lt;/var&amp;gt; setting of 10:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;   b                           &lt;br /&gt;
   call sub1                   &lt;br /&gt;
   sub1: subroutine            &lt;br /&gt;
   fd1:                        &lt;br /&gt;
      in clients fd city = ONTARIO&lt;br /&gt;
              end find         &lt;br /&gt;
      fr fd1                      &lt;br /&gt;
         pai                      &lt;br /&gt;
         print                    &lt;br /&gt;
      end for                     &lt;br /&gt;
   end subroutine              &lt;br /&gt;
   end &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
then the following messages are produced, assuming any prompts are responded to with an &#039;N&#039;:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;   M204.0569: File CLIENTS, Find: Table B records to be searched = 3415&lt;br /&gt;
   Cancelling request: M204.2969: MBSCAN (10) exceeded, records to be searched = 3415  &lt;br /&gt;
   M204.2966: Error at line 6, procedure MYPROC.MBSCAN in file MYPROC&lt;br /&gt;
   M204.2966: Called from line 3, procedure MYPROC.MBSCAN in file MYPROC  &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===appendJournalData===&lt;br /&gt;
The &amp;lt;var&amp;gt;[[AppendJournalData_(Stringlist_function)|AppendJournalData]]&amp;lt;/var&amp;gt; function is now more tolerant of an outstanding BUMP request. Previously, if &amp;lt;var&amp;gt;AppendJournalData&amp;lt;/var&amp;gt; was called to inadvertently retrieve a large amount of journal data, typically when called implicitly from within SirScan, then any outstanding BUMP request wouldn&#039;t be honored until all of the data had been retrieved, at which point the BUMP request would be completed, and all data would be lost.&lt;br /&gt;
&lt;br /&gt;
Now, the &amp;lt;var&amp;gt;AppendJournalData&amp;lt;/var&amp;gt; process checks for outstanding BUMP requests before each track I/O is executed, thus avoiding excessive I/Os against the journal and long waits for the BUMP of such a process to complete.&lt;br /&gt;
&lt;br /&gt;
==AUDIT204 enhancements==&lt;br /&gt;
===FORMAT command===&lt;br /&gt;
TIMEHH is a new parameter used with the FORMAT command of the [[Tracking_system_activity_(CCAJRNL,_CCAAUDIT,_CCAJLOG)#AUDIT204_utility|AUDIT204]] utility.  It indicates that timestamps, printed at the beginning of each line of output, should include hundredths of a second. Requires no other arguments.&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;b&amp;gt;NOTE:&amp;lt;/b&amp;gt; This parameter and the 78 version (or later) of AUDIT204 may be used against a 77 (or later) CCAJRNL.&amp;lt;/p&amp;gt;&lt;br /&gt;
For example:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;//CCAIN DD *&lt;br /&gt;
FORMAT YEARFORM 4&lt;br /&gt;
TIMEHH&lt;br /&gt;
TYPE ER MS LI&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Recovery enhancements==&lt;br /&gt;
===Media Recovery in a multi-user environment===&lt;br /&gt;
It is now possible to perform media recovery by issuing the &amp;lt;var&amp;gt;REGENERATE&amp;lt;/var&amp;gt; command to roll forward selected files in a multi-user environment, with the media recovery being carried out by different users with system manager privileges. The new USING option allows for the specification of a ddname for the input journal stream to be used by the &amp;lt;var&amp;gt;REGENERATE&amp;lt;/var&amp;gt; command. Previously media recovery was restricted to single user batch jobs, using the CCAGEN ddname for the input journal. For more details, see the &amp;lt;var&amp;gt;[[#REGENERATE|REGENERATE]]&amp;lt;/var&amp;gt; command below.&lt;br /&gt;
&lt;br /&gt;
==Security enhancements==&lt;br /&gt;
===CA-Top Secret can disallow CCASTAT logins===&lt;br /&gt;
The [https://m204wiki.rocketsoftware.com/index.php/CA-Top_Secret_interface CA-Top Secret] interface now recognizes the &amp;lt;code&amp;gt;DEFACID=&amp;lt;/code&amp;gt;, setting and does not allow CCASTAT logins in the online if &amp;lt;code&amp;gt;DEFACID&amp;lt;/code&amp;gt; is set to null. (There is no attempt to log on M204USR.) Therefore, to disallow CCASTAT logons, set DEFACID=, in [https://m204wiki.rocketsoftware.com/index.php/CA-Top_Secret_interface#Preparing_a_TOPSPARM_parameter_module_with_TOPSGEN TOPSPARM]. CCASTAT will be opened because it contains file and group passwords, but it will not be used for logons if CCASTAT logons are not allowed.&lt;br /&gt;
&lt;br /&gt;
===CUSTOM=11 and mixed cased input===&lt;br /&gt;
The &amp;lt;var&amp;gt;[https://m204wiki.rocketsoftware.com/index.php/CUSTOM_parameter CUSTOM]&amp;lt;/var&amp;gt; parameter CUSTOM=11 setting no longer requires that a *LOWER command be issued prior to a LOGCTL command (to add or change a  password) to preserve mixed case input. Prior to this release, with CUSTOM=11 in place, *LOWER had to be issued before a LOGCTL command, otherwise any mixed case password strings would automatically be translated into uppercase. This change is enabled within V7.7 with the application of zap 77z108.&lt;br /&gt;
&lt;br /&gt;
===DEFUSER can specify a jobname not authorized to access M204===&lt;br /&gt;
When specifying DEFUSER=JOBNAME and VALIDAT=LOGON in the RACFGEN parms for an ONLINE, if the specified jobname ( the owning id for the ONLINE job ) isn&#039;t authorized to use Model 204 via RACF, any LOGIN commands specifying no userid will now succeed ( previously such a LOGON would have failed ). This enables users to submit jobs with USE $JOB, whereby the string USER=jobname  will be added to the submitted JCL, and this in turn is useful if the specified jobname has dataset access privileges to datasets required by the submitted jobs, even if the jobname itself isn&#039;t authorized to use M204.&lt;br /&gt;
&lt;br /&gt;
==Janus product enhancements==&lt;br /&gt;
&lt;br /&gt;
===Janus Web Server access rule===&lt;br /&gt;
The automatic &amp;lt;var&amp;gt;[[JANUS WEB ALLOW]]&amp;lt;/var&amp;gt; rule, which allowed any user to access the port without requiring a login, is changed &amp;lt;i&amp;gt;for non-SSL ports&amp;lt;/i&amp;gt; to the following:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;JANUS WEB &amp;lt;i&amp;gt;portname&amp;lt;/i&amp;gt; DISALLOW *&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
This rule requires a system administrator to explicitly define &amp;lt;var&amp;gt;ALLOW&amp;lt;/var&amp;gt; rules to enable users to access non-SSL ports.&lt;br /&gt;
The rule applies unless overridden by user-added rules. &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;blockquote class=&amp;quot;note&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;b&amp;gt;Note:&amp;lt;/b&amp;gt; To revert from this change in the JANUS DEFINE default and make the default &lt;br /&gt;
 non-SSL &amp;lt;var&amp;gt;ALLOW&amp;lt;/var&amp;gt; rule as it was in version 7.5 and earlier (&amp;lt;code&amp;gt;ALLOW *&amp;lt;/code&amp;gt;), turn on the 1 bit of the &amp;lt;var&amp;gt;[[WEBDFLT parameter|WEBDFLT]]&amp;lt;/var&amp;gt; parameter: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;RESET WEBDFLT=1&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Increase in pending accepts for Janus BPX ports===&lt;br /&gt;
The default number of pending accepts for Janus BPX server ports has been increased from 3 to 12, thus reducing the likelihood that a pending accept may fail with the message&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;MSIR.0019 Connection request rejected for port (port), MAXCON exceeded&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The actual number of pending accepts to be supported on the port can be set with the new parameter MAXPEND, set on the &amp;lt;var&amp;gt;[[JANUS_DEFINE|JANUS DEFINE]]&amp;lt;/var&amp;gt; command, where MAXPEND can vary from 3 up to a maximum value of 32. The change to the default value was enabled within V7.7 with the application of zap 77z269.&lt;br /&gt;
&lt;br /&gt;
===TCP listen backlog increased===&lt;br /&gt;
&lt;br /&gt;
The [https://m204wiki.rocketsoftware.com/index.php/Program_Communication_facilities#LISTEN_call TCP_listen] backlog has been increased from 16 to 1024 under z/OS.&lt;br /&gt;
&lt;br /&gt;
This update tells the TCP stack to queue up to 1024 of such requests up before dropping them, thus reducing, or in most cases eliminating, the likelihood of a connection request drop, other than in exceptional circumstances, such as a denial of service attack. This change was enabled within V7.7 with the application of zap 77z340.&lt;br /&gt;
&lt;br /&gt;
===Defer the freeing of XMLSCREEN input XML===&lt;br /&gt;
&lt;br /&gt;
The freeing of [https://m204wiki.rocketsoftware.com/index.php/XMLSCREEN_and_NOXMLSCREEN_(JANUS_DEFINE_parameters) XMLSCREEN] input XML is now deferred until the next Read Screen or session termination. This means that if an application error is detected, the input XML can be retrieved with [https://m204wiki.rocketsoftware.com/index.php/$Web_Input_Content $Web_Input_Content] and then logged for problem analysis. &lt;br /&gt;
&lt;br /&gt;
Prior to this release the XML received from the client is freed immediately after being used to set the input data for a Read Screen, rendering it unavailable for problem determination.&lt;br /&gt;
&lt;br /&gt;
This change is enabled in V7.7 with the application of zap 77z368.&lt;br /&gt;
&lt;br /&gt;
===XMLSCREEN and Janus Web Legacy blank stripping===&lt;br /&gt;
&lt;br /&gt;
xmlScreens and Janus Web Legacy screens now adhere to the same standard as standard screen processing in terms of stripping leading blanks from input fields defined as [https://m204wiki.rocketsoftware.com/index.php/Full-screen_feature#DEBLANK_or_NODEBLANK_option DEBLANK] (either explicitly or implicitly).&lt;br /&gt;
&lt;br /&gt;
This change is enabled in V7.7 with the application of zap 77z400.&lt;br /&gt;
&lt;br /&gt;
===SSL input buffer size===&lt;br /&gt;
&lt;br /&gt;
The default value of [https://m204wiki.rocketsoftware.com/index.php/SSLIBSIZE_(JANUS_DEFINE_parameter) SSLIBSIZE] has been increased to 16384 + 128, or 16512. This size should ensure correct communication with all TLS spec compliant applications. It is the maximum size allowed unless you use [https://m204wiki.rocketsoftware.com/index.php/CUSTOM_parameter#Using_CUSTOM.3D.2818.29 CUSTOM=18].    &lt;br /&gt;
&lt;br /&gt;
This changed is enabled within V7.7 with the application of zap 77z415.&lt;br /&gt;
&lt;br /&gt;
===Increasing LDAP buffers===&lt;br /&gt;
&lt;br /&gt;
The number of LDAP buffers allocated at startup can now be changed by setting the NLDAPBUF parameter in CCAIN. See below for details on [[#NLDAPBUF|NLDAPBUF]].&lt;br /&gt;
&lt;br /&gt;
===Increase URL length returned with $web_form_action===&lt;br /&gt;
With this release the maximum Janus Web Server incoming URL that can be handled by &amp;lt;var&amp;gt;$web_form_action&amp;lt;/var&amp;gt; is increased from 512 bytes to 1024 bytes. This change is enabled within V7.7 with the application of zap 77z424.&lt;br /&gt;
&lt;br /&gt;
===Maximum RBSIZE setting increased===&lt;br /&gt;
The maximum value for RBSIZE, set on the &amp;lt;var&amp;gt;[[JANUS DEFINE|JANUS DEFINE]]&amp;lt;/var&amp;gt; command, is now increased to 16777215 (previously the maximum was 65534). RBSIZE specifies the RPC or Request Buffer size.  On a Web port, the Janus request buffer holds browser request information such as header data, cookies, and form data. On other port types, it holds RPC input and output parameters. This change is enabled within V7.7 with the application of zap 77z427.&lt;br /&gt;
&lt;br /&gt;
==Debugger enhancements==&lt;br /&gt;
&lt;br /&gt;
===Access to exposed variables===&lt;br /&gt;
The debuggers can now view or watch the values of variables exposed to local routines/methods. Previously, any attempts to access an exposed variable would have displayed &amp;quot;%varname has no value&amp;quot; in the debugger session. (This feature is enabled within V7.7 with the application of zap 77z363.)&lt;br /&gt;
&lt;br /&gt;
==Performance enhancements==&lt;br /&gt;
&lt;br /&gt;
===MP/204 offload improvements===&lt;br /&gt;
Application code issuing the following SOUL statements will now now be fully offloadable:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;File Records In/On&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Remember&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt; &lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Position&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Sort Values&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;                                             &lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Reset Header/Trailer&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Find and Print Count&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Find All Values&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;For Each Value&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
the above improvements are also enabled within V7.7 with the application of zaps 77z419 and 77z420.&lt;br /&gt;
&lt;br /&gt;
===X3270OUT exit offloadable===&lt;br /&gt;
When running MP/204 (AMPSUBS&amp;gt;0) and using the [https://m204wiki.rocketsoftware.com/index.php/Coding_SNA_Communications_Server_conversion_exit_routines#X3270OUT_.28convert_output_from_3270_format.29 X3270OUT] exit to convert a 3270 output data stream to the appropriate device protocol, the exit can now run in parallel mode to improve performance. This change was enabled in V7.7 with the application of zap 77Z313.&lt;br /&gt;
&lt;br /&gt;
The X3270OUT exit must be written to be re-entrant.&lt;br /&gt;
&lt;br /&gt;
==New and changed commands==&lt;br /&gt;
===DISPLAY ECF===&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;DISPLAY ECF {{ M | N | U } like ?} &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This new command displays details from ECF tables, or the current status of users accessing ECF modules.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;syntax&amp;quot;&amp;gt;D ECF M&amp;lt;/span&amp;gt; displays the contents of the module table. For example:&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;    D ECF M &lt;br /&gt;
    Module   Loadlib  Address:Length     Loaded@      Lastused@   #Calls  Flags &lt;br /&gt;
    QATUM13C PROGLIB 2FB91FB8:00000028 19023:121506 19023:121506 00000001 &lt;br /&gt;
    QATUM13B PROGLIB 2FE65000:00009C18 19023:121506 19023:121506 00000001 &lt;br /&gt;
    QATUM13A PROGLIB 2FE6EC18:00001CD8 19023:121506 19023:121506 00000001  &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
(flags may be D=deleted; S=shared; H=halted; I=Idle)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;syntax&amp;quot;&amp;gt;D ECF N&amp;lt;/span&amp;gt; displays contents of the name table. For example: &amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;    D ECF N&lt;br /&gt;
    Module   Logical-call-name &lt;br /&gt;
    QATUM13C MOD_QATUM13C &lt;br /&gt;
    QATUM13B MOD_QATUM13B &lt;br /&gt;
    QATUM13A MOD_QATUM13A &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;syntax&amp;quot;&amp;gt;D ECF U&amp;lt;/span&amp;gt; displays details of users currently accessing ECF modules. This is also the default option, and so &amp;lt;span class=&amp;quot;syntax&amp;quot;&amp;gt;D ECF&amp;lt;/span&amp;gt; will display the same output as &amp;lt;span class=&amp;quot;syntax&amp;quot;&amp;gt;D ECF U&amp;lt;/span&amp;gt;. For example:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;    D ECF U                           &lt;br /&gt;
    User# Userid     Module   Parmlen &lt;br /&gt;
    00002 ADMIN      --none--         &lt;br /&gt;
    00003 ADMIN      COBSAMP1 00000002&lt;br /&gt;
    00004 ADMIN      COBSAMP1 00000002 &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;syntax&amp;quot;&amp;gt;D ECF &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;function&amp;lt;/var&amp;gt; LIKE &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;?&amp;lt;/var&amp;gt; &amp;lt;/span&amp;gt; (where &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;?&amp;lt;/var&amp;gt; is a valid pattern) displays details for entities that match the specified pattern. The function is either M (modules), N (names), or U (users), and it defaults to U. So for example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;D ECF U L A&amp;lt;/p&amp;gt;&lt;br /&gt;
or&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;D ECF U L A*&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
displays details of ECF users whose names begin with A.&lt;br /&gt;
&lt;br /&gt;
===REGENERATE===&lt;br /&gt;
The &amp;lt;var&amp;gt;REGENERATE&amp;lt;/var&amp;gt; command can now be run in a multi-user environment by multiple users with system manager privileges. A new option USING is provided to specify the ddname of the input journal, so that the full syntax is now as follows:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;  REGENERATE [USING ddname] FILE filename [FROM dumpname | IGNORE]&lt;br /&gt;
  [TO {LAST UPDATE [BEFORE yy.ddd hh:mm:ss.th] | LAST CHECKPOINT [BEFORE yy.dd hh:mm:ss.th] &lt;br /&gt;
  | UPDATE number OF yy.ddd hh:mm:ss.th | CHECKPOINT yy.ddd hh:mm:ss.th} ]&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The default for the using ddname is CCAGEN, but any ddname may be used to allocate an input journal and used. For example:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;  ALLOCATE REGEN1 WITH SCOPE=SYSTEM DSN=PROD1.GDGJ OLD SEQUENTIAL GEN=+2&lt;br /&gt;
  REGENERATE USING REGEN1 FILE TEST&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It is the user&#039;s responsibility to ensure that the file being regenerated is not in use, and so prior to usage, &amp;lt;var&amp;gt;BUMP FILE&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;STOP FILE&amp;lt;/var&amp;gt; should be used to isolate usage against the file. If the file is in use, the REGEN will fail with these messages:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;  M204.1430: Failed to open file TEST&lt;br /&gt;
  M204.1436: Stopped processing file TEST  &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
$STATUS will now be set for &amp;lt;var&amp;gt;REGENERATE&amp;lt;/var&amp;gt; with the following values:&lt;br /&gt;
&amp;lt;blockquote&amp;gt;    &lt;br /&gt;
    0 - Success &amp;lt;br/&amp;gt;&lt;br /&gt;
    1 - No files were processed &amp;lt;br/&amp;gt;&lt;br /&gt;
    2 - At least one file stopped processing &amp;lt;br/&amp;gt;&lt;br /&gt;
    4 - A serious error occurred, REGEN failed &lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Similarly, &amp;lt;var&amp;gt;SETGRC&amp;lt;/var&amp;gt; may be used to get the return code and error message.&lt;br /&gt;
&lt;br /&gt;
==New and changed parameters==&lt;br /&gt;
&lt;br /&gt;
===ECMODS===&lt;br /&gt;
The new minimum value for ECMODS, the allowable number of ECF modules, is 1. Prior to V7.8 the minimum value was 0. This changed was enabled in V7.7 with the application of zap 77z306.&lt;br /&gt;
&lt;br /&gt;
===ECNAMES===&lt;br /&gt;
The new minimum value for ECNAMES, the allowable number of ECF module names, is 1. Prior to V7.8 the minimum value was 0. This changed was enabled in V7.7 with the application of zap 77z306.&lt;br /&gt;
&lt;br /&gt;
===ECPSIZE===&lt;br /&gt;
The new minimum value for ECPSIZE, the initial storage allocation for ECF parameters, is 1024. Prior to V7.8 the minimum value was 0. This changed was enabled in V7.7 with the application of zap 77z306.&lt;br /&gt;
&lt;br /&gt;
===ENQTIME===&lt;br /&gt;
Millisecond duration of automatic record locking retry wait.&lt;br /&gt;
&lt;br /&gt;
Prior to this change, if record locking conflicts occur frequently in a busy online, any user with a non-zero value for &amp;lt;var&amp;gt;[[ENQRETRY parameter|ENQRETRY]]&amp;lt;/var&amp;gt; will wait at least 3 seconds before the conflict is dealt with. This can degrade overall system performance.      &lt;br /&gt;
                                                         &lt;br /&gt;
The &amp;lt;var&amp;gt;[[ENQTIME parameter|ENQTIME]]&amp;lt;/var&amp;gt; parameter specifies the number of milliseconds waited for each record locking retry wait. ENQTIME can be between 1 and 60000, corresponding to a minimum of 1 millisecond and a maximum of 1 minute. The default value of ENQTIME is 3000 (3 seconds).            &lt;br /&gt;
                                                         &lt;br /&gt;
For example, with ENQTIME = 100 and ENQRETRY = 7, after a record locking conflict occurs the thread will retry 7 times with wait intervals of .1 seconds, and so within at most .7 seconds either the lock becomes available or the conflict triggers an On unit or cancels the request.     &lt;br /&gt;
                                                         &lt;br /&gt;
The ENQTIME parameter may also be reset with $ResetN. &lt;br /&gt;
&lt;br /&gt;
This new parameter was enabled within V7.7 with the application of zap 77z299.&lt;br /&gt;
&lt;br /&gt;
===EVALOPT===&lt;br /&gt;
The new &amp;lt;var&amp;gt;EVALOPT&amp;lt;/var&amp;gt; parameter controls the cancellation of a request on truncation of string data. The default value is 0, and currently there is just one setting, 1, which means &amp;quot;cancel a request if truncation of string data occurs.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
For example, with the default of 0 in place, the following code &amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;    %x is string len 1   &lt;br /&gt;
    %y is string len 2   &lt;br /&gt;
    %y = &#039;ab&#039;            &lt;br /&gt;
    %x = %y              &lt;br /&gt;
    printtext {~} = {%x} &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
would cause silent truncation, and give the result&lt;br /&gt;
    &amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;%x = a &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If &amp;lt;var&amp;gt;EVALOPT&amp;lt;/var&amp;gt; is set to 1, then the above code produces the following message:&lt;br /&gt;
    &amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;M204.0552: Variable too small for result &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and the request is cancelled.&lt;br /&gt;
&lt;br /&gt;
===LFSCB===&lt;br /&gt;
LFSCB, the length of the full screen buffer, now has a new minimum value of 8 ( the previous minimum was 0 ). This change has been enabled within v7.7 with the application of zap 77z042, and within V7.6 with the application of zap 76z393.&lt;br /&gt;
&lt;br /&gt;
===MAXPRE, MAXBOUT, MAXSUBT===&lt;br /&gt;
&amp;lt;p&amp;gt;Introduced in zap 77Z257.&amp;lt;/p&amp;gt;&lt;br /&gt;
The new &amp;lt;var&amp;gt;MAXPRE&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;MAXBOUT&amp;lt;/var&amp;gt;, and &amp;lt;var&amp;gt;MAXSUBT&amp;lt;/var&amp;gt; parameters can be used to cancel a runaway transaction and prevent it from filling the checkpoint data set. &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;MAXPRE&amp;lt;/var&amp;gt;:  Maximum number of pre-images per transaction.  &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;MAXBOUT&amp;lt;/var&amp;gt;: Maximum number of backout pages per transaction. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;MAXSUBT&amp;lt;/var&amp;gt;: Maximum number of subtransaction checkpoints that a transaction can span.&amp;lt;/li&amp;gt;&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;Each new parameter defaults to unlimited. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;If a parameter value is set, a transaction is cancelled if that value is exceeded, and the following message is displayed:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;code&amp;gt;M204.0524: Maximum number (&amp;lt;i&amp;gt;num&amp;lt;/i&amp;gt;) of &amp;lt;i&amp;gt;parameter&amp;lt;/i&amp;gt; exceeded.&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
where &amp;lt;i&amp;gt;num&amp;lt;/i&amp;gt; is the value set for &amp;lt;i&amp;gt;parameter&amp;lt;/i&amp;gt; (&amp;lt;var&amp;gt;MAXPRE&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;MAXBOUT&amp;lt;/var&amp;gt;, or &amp;lt;var&amp;gt;MAXSUBT&amp;lt;/var&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
===NLDAPBUF===&lt;br /&gt;
This new parameter allows the number of LDAP buffers allocated during startup to be set in CCAIN. The default value is 2, and the settable value can range from 0 to 65535.&lt;br /&gt;
&lt;br /&gt;
===PUPDTH (new minimum value)===&lt;br /&gt;
If a user sets the &amp;lt;var&amp;gt;[[PUPDTH parameter|PUPDTH]]&amp;lt;/var&amp;gt; parameter to 0, it will now automatically be increased to 1, its minimum value.&lt;br /&gt;
&lt;br /&gt;
===SERV4G===&lt;br /&gt;
This parameter allows testing of server tables that span a 4-gigabyte boundary. For example, if SERV4G is X&#039;FFFFF000&#039;, each ATB server will begin at XX_FFFFF000. If SERV4G is X&#039;FFFF0000&#039;, each ATB server will begin at XX_FFFF0000. XX is determined by the storage available on the system. The parameter is set in CCAIN.&lt;br /&gt;
&lt;br /&gt;
The contents of the ATB server are specified by using the SERVGA parameter.&lt;br /&gt;
&lt;br /&gt;
For example. if you want VTBL to span the 4G boundary, you can use these settings: SERV4G=X&#039;FFFFF000&#039;, SERVGA=X&#039;00040000&#039;, and LVTBL=200 (6400 bytes, X&#039;1900&#039;). This will force each server&#039;s VTBL to begin at XX_FFFFF000 and end at XX+1_00000900.&lt;br /&gt;
&lt;br /&gt;
===WEBDFLT===&lt;br /&gt;
At V7.7, the default access rule for non-SSL ports was changed from ALLOW * to DISALLOW *, meaning that unless any ALLOW rules were in place resulting in a login/password prompt, the port couldn&#039;t be accessed. The new &amp;lt;var&amp;gt;[https://m204wiki.rocketsoftware.com/index.php/WEBDFLT_parameter WEBDFLT]&amp;lt;/var&amp;gt; parameter may be set to 1 for reversion to the old default of ALLOW *. Under V7.7, this new parameter was enabled with the application of zap 77z090. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;var&amp;gt;RESET WEBDFLT&amp;lt;/var&amp;gt; requires system administrator privileges. It is recommended to reset the 1 bit of &amp;lt;var&amp;gt;WEBDFLT&amp;lt;/var&amp;gt; to zero after issuing a series of &amp;lt;var&amp;gt;JANUS DEFINE&amp;lt;/var&amp;gt; commands which need WEBDFLT=1, as in the CCAIN input stream.&lt;br /&gt;
&lt;br /&gt;
==New and changed statistics==&lt;br /&gt;
===MPR, MBO, MCP, and RCV===&lt;br /&gt;
Introduced in zap 77Z257.&lt;br /&gt;
&amp;lt;p&amp;gt;These statistics provide high water mark transaction information. (Since-last values will not be available until V78 GA.)&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;They are useful in conjunction with the &amp;lt;var&amp;gt;MAXPRE&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;MAXBOUT&amp;lt;/var&amp;gt;, and &amp;lt;var&amp;gt;MAXSUBT&amp;lt;/var&amp;gt; parameters. &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
User/system statistics:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;MPR: High water mark of transaction pre-images. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;MBO: High water mark of transaction backout pages. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;MCP: High water mark of transaction chkpoint spans. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
System statistics: &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;RCV: Number of blocks needed for subtransaction recovery &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt; &lt;br /&gt;
&amp;lt;p class=&amp;quot;note&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Notes:&amp;lt;/b&amp;gt; M204.0843 now displays the RCV statistic for subtransaction checkpoints.&lt;br /&gt;
The size of recovery checkpoint must be greater than the sum of the last RCV value plus the number of records in [https://m204wiki.rocketsoftware.com/index.php/System_and_media_recovery#RESTART_recovery_considerations_for_sub-transaction_checkpoints RESTART and RESTARTS].&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
===DKWTS and DKWTMICS===&lt;br /&gt;
Introduced in zap 77z7289.&lt;br /&gt;
&amp;lt;p&amp;gt;The new system statistics DKWTS (DisK WaiTs) and DKWTMICS (DisK WaiT MICroSeconds) collect data to provide rough disk I/O service time numbers.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
DKWTS shows the number of disk I/O waits. DKWTMICS shows the total wait time for those waits in microseconds. Dividing the difference in DKWTMICS by the difference in DKWTS over an interval provides the average disk I/O wait time in microseconds.              &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;note&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Notes:&amp;lt;/b&amp;gt; &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The wait time does include internal Model 204 scheduler delays, so on a CPU bound Model 204 system, the service times calculated from DKWTS and DKWTMICS are likely to be an overestimate of actual service times.&amp;lt;/li&amp;gt;  &lt;br /&gt;
                                                                    &lt;br /&gt;
&amp;lt;li&amp;gt;DKWTS and DKWTMICS are not available in SirMon; use [https://m204wiki.rocketsoftware.com/index.php/MONITOR_command MONITOR] SYSTEM STATISTICS to view these statistics.&amp;lt;/li&amp;gt;&amp;lt;/ul&amp;gt;  &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Compatibility issues==&lt;br /&gt;
===&amp;lt;b id=&amp;quot;listNewInit&amp;quot;&amp;gt;&amp;lt;/b&amp;gt;$ListNew cannot be used in Initial clause===&lt;br /&gt;
It is now a compilation error if &amp;lt;var&amp;gt;$ListNew&amp;lt;/var&amp;gt; is attempted to be used in the &amp;lt;var&amp;gt;Initial&amp;lt;/var&amp;gt; clause of a &lt;br /&gt;
[https://m204wiki.rocketsoftware.com/index.php/Using_variables_and_values_in_computation#Declare_statements_for_.25variables declaration statement].&lt;br /&gt;
&amp;lt;p&amp;gt;This change is propagated by zap maintenance to versions 7.5 (zap 75Z487), 7.6 (zap 76Z514), and 7.7 (zap 77Z281) of Model 204.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote class=&amp;quot;note&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Note:&amp;lt;/b&amp;gt; Strictly speaking, this would not be considered a compilation error, because previously although &amp;lt;code&amp;gt;..&amp;amp;nbsp;Initial($ListNew)&amp;lt;/code&amp;gt; did not produce a compilation error, in almost all circumstances it would produce a snap if the initialized %variable were used with some other &amp;lt;var&amp;gt;$List&amp;lt;i&amp;gt;xxx&amp;lt;/i&amp;gt;&amp;lt;/var&amp;gt; invocation.&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Restricting the use of the CUSTOM=38 setting===&lt;br /&gt;
The [[CUSTOM parameter|CUSTOM=38]] parameter setting, introduced at V7.5, inadvertently provided System Manager privileges to all users via the RESET command. This CUSTOM setting is now restricted to the RESETting of the LAUDIT parameter.&lt;br /&gt;
&lt;br /&gt;
===Disabling of Closure support===&lt;br /&gt;
Due to a number of bugs related to Closure support, introduced at V7.7, this feature, which can best be described as exposed methods assigned to method variables, has been disabled in this release. This change was also made to V7.7 with application of zap 77z119.&lt;br /&gt;
&lt;br /&gt;
===Password delimiter enforced===&lt;br /&gt;
When using IFSTRTN to logon to a Model 204 online from an IFAM2 application, both the logonid and password must be followed by a semicolon - the delimiter.             &lt;br /&gt;
For example:      &lt;br /&gt;
                                      &lt;br /&gt;
CALL IFSTRTN(RC,&#039;logonid;password;&#039;...)&lt;br /&gt;
                 &lt;br /&gt;
If a semicolon does not follow the password string, the following message will now be issued&lt;br /&gt;
&lt;br /&gt;
M204.2964: Password missing or too long                  &lt;br /&gt;
                                                         &lt;br /&gt;
Previously, a semicolon following the password was not required and the first blank served as a password delimiter.  However, as of V7.7, embedded blanks are valid password characters and a semicolon is now required to delimit the password.&lt;br /&gt;
&lt;br /&gt;
This change has also been enabled within V7.7 with the application of zap 77z231.&lt;br /&gt;
&lt;br /&gt;
===PAGESZ parameter validated===&lt;br /&gt;
Previously it was possible to set the PAGESZ parameter to any value, although Model 204 internally supports one page size of 6184, and any deviation from this value would have led to problems during file creation. The value of this parameter is now controlled, such that setting it to any value other than 6184 will generate an M204.1149 message with the parameter being reset to 6184.&lt;br /&gt;
&lt;br /&gt;
===ECPRIV and the IDCAMS facility===&lt;br /&gt;
At V7.7 a security loophole was closed, whereby all ECF modules were run under external-authorizer profile of the calling user. Previously any ECF tasks were run under the owning job&#039;s external-authorizer profile, and in order for certain sites to retain that ability, a new setting of ECPRIV, value 4, was introduced to retain the ability to run ECF tasks using the job&#039;s security profile. &lt;br /&gt;
&lt;br /&gt;
The ECPRIV 4 setting potentially introduced a security loophole when calling the IDCAMS interface, based upon what the IDCAMS utility is able to do at a system level. Consequently as of this release, the ECPRIV 4 setting will be ignored when calling the IDCAMS facility via ECF, and such IDCAMS processes will always use the calling user&#039;s security profile. Any existing jobs that use ECF to call the IDCAMS utility with the ECFPRIV 4 bit set should be checked to ensure that the calling user&#039;s security profile still satisfies the job&#039;s requirements.&lt;br /&gt;
&lt;br /&gt;
===TCPOPTS is view only===&lt;br /&gt;
In previous releases the TCPOPTS parameter, which identifies the type of IP addressing in use ( v4 or v6 ), was resetable, although it was always documented as a view-only parameter. The parameter is now handled as a view-only parameter, and any attempts to reset the parameter will result in&lt;br /&gt;
&lt;br /&gt;
   M204.1123: Parameter TCPOPTS not reset&lt;br /&gt;
&lt;br /&gt;
===ZHPF command can only be issued by a system manager===&lt;br /&gt;
In previous releases it was possible to issue the ZHPF command without being logged on. From this release onwards, a user would have to be logged on with system manager privileges to be able to issue this command.&lt;br /&gt;
&lt;br /&gt;
Additionally, the command output will now only  display results for currently open files.&lt;br /&gt;
&lt;br /&gt;
This changes has been enabled within v7.7 with the application of zap 77z264.&lt;br /&gt;
&lt;br /&gt;
===Terminal MODEL reset failure===&lt;br /&gt;
If a reset of the terminal MODEL parameter fails due to an under sized output page buffer, then in addition to the existing messages that inform the user of this failure&lt;br /&gt;
&lt;br /&gt;
    M204.1875 UNABLE TO RESET MODEL TO %C &lt;br /&gt;
    M204.1123: Parameter MODEL not reset  &lt;br /&gt;
&lt;br /&gt;
the following message will now be issued&lt;br /&gt;
&lt;br /&gt;
    M204.1008: LOUTPB must be increased to at least &amp;lt;number&amp;gt; &lt;br /&gt;
                                                         &lt;br /&gt;
where &amp;lt;number&amp;gt; is the minimum value of LOUTPB necessary to support the terminal model.&lt;br /&gt;
&lt;br /&gt;
This change is enabled in V7.7 with the application of zap 77z309.&lt;br /&gt;
&lt;br /&gt;
==New and changed messages==&lt;br /&gt;
&lt;br /&gt;
See [[New and updated messages in Model 204 version 7.8|New and updated messages in Model 204 version 7.8]] for details.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category: Release notes]]&lt;/div&gt;</summary>
		<author><name>ELowell</name></author>
	</entry>
	<entry>
		<id>https://m204wiki.rocketsoftware.com/index.php?title=Release_notes_for_Model_204_version_7.8&amp;diff=117692</id>
		<title>Release notes for Model 204 version 7.8</title>
		<link rel="alternate" type="text/html" href="https://m204wiki.rocketsoftware.com/index.php?title=Release_notes_for_Model_204_version_7.8&amp;diff=117692"/>
		<updated>2019-09-25T15:58:04Z</updated>

		<summary type="html">&lt;p&gt;ELowell: /* Maximum RBSIZE setting increased */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
These release notes list the enhancements and other changes contained in Model 204 version 7.8. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;&amp;lt;b&amp;gt;******THIS IS A DRAFT DOCUMENT.******&amp;lt;/b&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
These release notes list the enhancements and other changes contained in Model 204 version 7.8, &amp;lt;b&amp;gt;&amp;lt;i&amp;gt;which is still in development&amp;lt;/i&amp;gt;&amp;lt;/b&amp;gt;. Until the commercial release of the software, Rocket reserves the right to add to, remove, or change anything described herein. &lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
These release notes contain installation and features information for the Rocket Model 204 version 7.8 release.&lt;br /&gt;
Before beginning your installation, please read through this information about product installation and changes.&lt;br /&gt;
&lt;br /&gt;
==SOUL enhancements==&lt;br /&gt;
===AmIndependent method===&lt;br /&gt;
The &amp;lt;var&amp;gt;AmIndependent&amp;lt;/var&amp;gt; method returns TRUE for daemons spawned by &amp;lt;var&amp;gt;[http://m204wiki.rocketsoftware.com/index.php/RunIndependently_(Daemon_subroutine) RunIndependently]&amp;lt;/var&amp;gt;. (The action of &amp;lt;var&amp;gt;[https://m204wiki.rocketsoftware.com/index.php/AmDaemon_(Daemon_property) AmDaemon]&amp;lt;/var&amp;gt; remains unchanged.)&lt;br /&gt;
&lt;br /&gt;
The following table shows the values returned by &amp;lt;var&amp;gt;AmIndependent&amp;lt;/var&amp;gt; versus &amp;lt;var&amp;gt;AmDaemon&amp;lt;/var&amp;gt; for different daemon types:&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Type&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;AmDaemon&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;AmIndependent&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;$COMBG&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;False&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;False&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Independent daemon&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;False&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;True&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Other daemon&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;True&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;False&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Web, etc.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;False&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;False&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===$ProcOpn===&lt;br /&gt;
&amp;lt;var&amp;gt;[https://m204wiki.rocketsoftware.com/index.php/$ProcOpn $ProcOpn]&amp;lt;/var&amp;gt; now supports the opening of a procedure with an all numeric name, and including a leading zero, e.g.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;%result = $procOpn(&#039;0123&#039;, &#039;MYFILE&#039;)&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Support for such procedures names was initially introduced at v7.7, and this feature of &amp;lt;var&amp;gt;$ProcOpn&amp;lt;/var&amp;gt; is also enabled within v7.7 with the application of zap 77z054.&lt;br /&gt;
&lt;br /&gt;
===Allow parentheses to surround a boolean enumeration object===&lt;br /&gt;
The following sample code&lt;br /&gt;
&lt;br /&gt;
   begin                                       &lt;br /&gt;
   variables are undefined                  &lt;br /&gt;
   %isValid is boolean initial (True)       &lt;br /&gt;
   if (%isValid) then                  &lt;br /&gt;
      print &#039;in IF&#039;                            &lt;br /&gt;
   end if                                   &lt;br /&gt;
   end         &lt;br /&gt;
&lt;br /&gt;
will now compile and run successfully, as &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;if (%isValid) then &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
is logically equivalent to&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;if %isValid then &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Prior to V7.8 the presence of parentheses surrounding the boolean enumeration object would have caused a compilation error. This change is enabled in V7.7 with the application of zap 77z370.&lt;br /&gt;
&lt;br /&gt;
===Support for copying Object class objects===&lt;br /&gt;
The Object class now supports the copy and deepCopy methods. For example, and Object object can be copied as follows&lt;br /&gt;
&lt;br /&gt;
   begin               &lt;br /&gt;
   %x is object object &lt;br /&gt;
   %y is object object &lt;br /&gt;
   %y = new            &lt;br /&gt;
   %x = %y:copy        &lt;br /&gt;
   end&lt;br /&gt;
&lt;br /&gt;
This change is enabled in v7.7 with the application of zap 77z076, and within V7.6 with the application of zap 76z412.&lt;br /&gt;
&lt;br /&gt;
===Assignment of enumeration values to method variables===&lt;br /&gt;
Enumerations values can now be assigned to method variables whose result is an enumeration.So for example the following code&lt;br /&gt;
&lt;br /&gt;
   begin                                               &lt;br /&gt;
   enumeration colour                                  &lt;br /&gt;
      public                                           &lt;br /&gt;
         value red                                     &lt;br /&gt;
         value white                                   &lt;br /&gt;
         value blue                                    &lt;br /&gt;
      end public                                       &lt;br /&gt;
   end enumeration                                     &lt;br /&gt;
   %func    is function getColour is enumeration colour&lt;br /&gt;
   local function getColour is enumeration colour      &lt;br /&gt;
      return blue                                      &lt;br /&gt;
   end function                                        &lt;br /&gt;
   %func    = getColour                                &lt;br /&gt;
   %func    = (colour):red                             &lt;br /&gt;
   printText {~=%(Local):(%func)}                      &lt;br /&gt;
   end  &lt;br /&gt;
&lt;br /&gt;
will produce the result&lt;br /&gt;
&lt;br /&gt;
   %(Local):(%func)=red&lt;br /&gt;
&lt;br /&gt;
whereas previously the line   &lt;br /&gt;
&lt;br /&gt;
   %func    = (colour):red    &lt;br /&gt;
&lt;br /&gt;
would have been rejected with the message&lt;br /&gt;
&lt;br /&gt;
   MSIR.0993: Assignment invalid: mismatch between method and method variable&lt;br /&gt;
&lt;br /&gt;
This change is enabled in V7.7 with the application of zap 77z128.&lt;br /&gt;
&lt;br /&gt;
==External Call Facility enhancements==&lt;br /&gt;
===Managing ECF tables more efficiently===&lt;br /&gt;
The are two new features to help manage ECF tables more efficiently, avoid conditions where the table can fill, and prevent the definition of further entities.&lt;br /&gt;
&lt;br /&gt;
The first feature is the new  &amp;lt;var&amp;gt;DISPLAY ECF&amp;lt;/var&amp;gt; command, which displays the contents of ECF tables and also the current status of users accessing ECF modules. See more details of the &amp;lt;var&amp;gt;[[#DISPLAY ECF|DISPLAY ECF]]&amp;lt;/var&amp;gt; command below.&lt;br /&gt;
&lt;br /&gt;
The second feature is a new &amp;lt;var&amp;gt;EXTERNAL REMOVE&amp;lt;/var&amp;gt; statement with the syntax&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;EXTERNAL REMOVE &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;modulename&amp;lt;/span&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This causes the entry for the named module to be removed from the module table. The table entry is then placed on a free chain of entries and can be reused by issuing the EXTERNAL MODULE statement. This allows the module table to be managed with redundant entries removed, without having to recycle the ONLINE.&lt;br /&gt;
&lt;br /&gt;
A EXTERNAL REMOVE statement will return $status/$statusd values of 0/0, and most other status values that can be returned by the EXTERNAL REMOVE statement are already documented in the ECF return codes table. If an EXTERNAL REMOVE is attempted against a module that is currently being called ( in use ), then $status/$statusd will return the values 20/1 ( module unavailable).&lt;br /&gt;
&lt;br /&gt;
==System enhancements==&lt;br /&gt;
&lt;br /&gt;
===New wait types for daemon/master waits===&lt;br /&gt;
&lt;br /&gt;
Two new wait types, viewable on the &amp;lt;var&amp;gt;[https://m204wiki.rocketsoftware.com/index.php/MONITOR_command MONITOR] USERS&amp;lt;/var&amp;gt; command output, have been implemented as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;57&amp;lt;/code&amp;gt; - Means a daemon thread waiting for its master thread  &amp;lt;br /&amp;gt;     &lt;br /&gt;
&amp;lt;code&amp;gt;58&amp;lt;/code&amp;gt; - Means a master thread waiting for one of its daemon threads&lt;br /&gt;
&lt;br /&gt;
This change is enabled in V7.7 with the application of zap 77z410.&lt;br /&gt;
&lt;br /&gt;
===Snap formatting changes===&lt;br /&gt;
Date/time stamps in the page headers of snaps will now be shown normal format, rather than in julian format as in previous releases. Thus in the following example a particular snap header under v7.7 or previous releases would show as &lt;br /&gt;
&lt;br /&gt;
   SNAPID    1   19226.060155  M204.0022: Bug .. nnnnn               PAGE     1&lt;br /&gt;
&lt;br /&gt;
whereas the same snap header under v7.8 would show as &lt;br /&gt;
&lt;br /&gt;
   SNAPID    1  2019/08/14 06:01:06   M204.0022: Bug .. nnnnn        PAGE     1&lt;br /&gt;
&lt;br /&gt;
Also, due to improvements in handling trailing blanks in snap output, a snap generated under v7.8 should be marginally smaller than the same snap generated under previous releases, assuming the same SNAPCTL settings.&lt;br /&gt;
&lt;br /&gt;
===Call stack trace for problem diagnosis===&lt;br /&gt;
A  call stack trace is now provided to help diagnose and resolve common errors. To enable the stack trace, do either of the following: &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Set the &amp;lt;var&amp;gt;[[SIRFACT parameter|SIRFACT]] X&#039;01&#039;&amp;lt;/var&amp;gt; bit.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Set the &amp;lt;var&amp;gt;[[DEBUGUL parameter|DEBUGL]]&amp;lt;/var&amp;gt; parameter. Note that the &amp;lt;var&amp;gt;DEBUGUL&amp;lt;/var&amp;gt; approach will introduce extra QTBL overhead. &amp;lt;p&amp;gt;(&amp;lt;var&amp;gt;DEBUGUL&amp;lt;/var&amp;gt; provides a similar facility with an include trace of procedures leading to the error, but this might not be potentially as useful as the call trace.)&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt; &lt;br /&gt;
&lt;br /&gt;
The call stack trace can assist in diagnosing run-time errors that might occur, as illustrated by the following &amp;quot;Variable too small for result&amp;quot; and &amp;quot;MBSCAN exceeded&amp;quot; examples.&lt;br /&gt;
&lt;br /&gt;
====Variable too small for result====&lt;br /&gt;
When the stack trace is enabled, a &amp;quot;variable too small&amp;quot; error results in the following message:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;M204.2966: Error at line n, procedure &#039;&#039;procname&#039;&#039; in file &#039;&#039;procfile&#039;&#039;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
which identifies the line within a procedure where the error is occurring, in addition to the usual message:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;M204.0552: Variable too small for result&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Any subsequent M204.2966 messages indicate the point in the code from where the code in error was called. For example, a stack of three subroutine calls leading to a &amp;quot;variable too small&amp;quot; error might result in the following messaging:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;   M204.0552: Variable too small for result                             &lt;br /&gt;
   M204.2966: Error at line 9, procedure MYPROC.LEVEL4 in file MYPROC   &lt;br /&gt;
   M204.2966: Called from line 5, procedure MYPROC.LEVEL3 in file MYPROC&lt;br /&gt;
   M204.2966: Called from line 5, procedure MYPROC.LEVEL2 in file MYPROC&lt;br /&gt;
   M204.2966: Called from line 5, procedure MYPROC.LEVEL1 in file MYPROC &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This information should help in diagnosing the problem. &lt;br /&gt;
&lt;br /&gt;
If the error occurs within a command level program rather than a procedure, then the M204.2966 message is replaced by an M204.2967 message, and a similar error condition to the above with a preceding call stack might be audited as follows:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;   M204.0552: Variable too small for result              &lt;br /&gt;
   M204.2967: Error at line 14 of command level program  &lt;br /&gt;
   M204.2967: Called from line 5 of command level program&lt;br /&gt;
   M204.2967: Called from line 3 of command level program &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If neither &amp;lt;var&amp;gt;SIRFACT X&#039;01&#039;&amp;lt;/var&amp;gt; nor &amp;lt;var&amp;gt;DEBUGUL&amp;lt;/var&amp;gt; is set, then the &amp;quot;variable too small&amp;quot; error produces the following messages:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;   M204.0552: Variable too small for result &lt;br /&gt;
   M204.2968: Error: no debug info &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====MBSCAN exceeded====&lt;br /&gt;
Similarly to the handling of the &amp;quot;variable too small for result&amp;quot; error, the call stack can also be used to diagnose errors where the value of &amp;lt;var&amp;gt;[[MBSCAN parameter|MBSCAN]]&amp;lt;/var&amp;gt; is exceeded as a result of a direct search of Table B records. &lt;br /&gt;
&amp;lt;p&amp;gt;Again, under V7.8, with either the &amp;lt;var&amp;gt;SIRFACT X&#039;01&#039;&amp;lt;/var&amp;gt; bit set or &amp;lt;var&amp;gt;DEBUGUL&amp;lt;/var&amp;gt; set, if a long request occurs as a result of exceeding &amp;lt;var&amp;gt;MBSCAN&amp;lt;/var&amp;gt;, then initially the following message is produced, as before:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;M204.0569: File &#039;&#039;filename&#039;&#039;, Find: Table B records to be searched = &#039;&#039;nnnn&#039;&#039;&amp;lt;/p&amp;gt;&lt;br /&gt;
followed by a DYRWT prompt message. If the user replies &#039;N&#039; to the prompt, or if the request is run in an environment (such as a batch job) where the default response is &#039;N&#039;, the following message is produced after the M204.0569 message:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;Cancelling request: M204.2969: MBSCAN (&#039;&#039;mm&#039;&#039;) exceeded, records to be searched = &#039;&#039;nnnn&#039;&#039;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
where &#039;&#039;mm&#039;&#039; is the current setting of &amp;lt;var&amp;gt;MBSCAN&amp;lt;/var&amp;gt;. The M204.2969 message is followed by M204.2966 messages displaying the call stack trace. Thus, if the following code is run from procedure MYPROC.MBSCAN against the demo database, with an &amp;lt;var&amp;gt;MBSCAN&amp;lt;/var&amp;gt; setting of 10:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;   b                           &lt;br /&gt;
   call sub1                   &lt;br /&gt;
   sub1: subroutine            &lt;br /&gt;
   fd1:                        &lt;br /&gt;
      in clients fd city = ONTARIO&lt;br /&gt;
              end find         &lt;br /&gt;
      fr fd1                      &lt;br /&gt;
         pai                      &lt;br /&gt;
         print                    &lt;br /&gt;
      end for                     &lt;br /&gt;
   end subroutine              &lt;br /&gt;
   end &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
then the following messages are produced, assuming any prompts are responded to with an &#039;N&#039;:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;   M204.0569: File CLIENTS, Find: Table B records to be searched = 3415&lt;br /&gt;
   Cancelling request: M204.2969: MBSCAN (10) exceeded, records to be searched = 3415  &lt;br /&gt;
   M204.2966: Error at line 6, procedure MYPROC.MBSCAN in file MYPROC&lt;br /&gt;
   M204.2966: Called from line 3, procedure MYPROC.MBSCAN in file MYPROC  &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===appendJournalData===&lt;br /&gt;
The &amp;lt;var&amp;gt;[[AppendJournalData_(Stringlist_function)|AppendJournalData]]&amp;lt;/var&amp;gt; function is now more tolerant of an outstanding BUMP request. Previously, if &amp;lt;var&amp;gt;AppendJournalData&amp;lt;/var&amp;gt; was called to inadvertently retrieve a large amount of journal data, typically when called implicitly from within SirScan, then any outstanding BUMP request wouldn&#039;t be honored until all of the data had been retrieved, at which point the BUMP request would be completed, and all data would be lost.&lt;br /&gt;
&lt;br /&gt;
Now, the &amp;lt;var&amp;gt;AppendJournalData&amp;lt;/var&amp;gt; process checks for outstanding BUMP requests before each track I/O is executed, thus avoiding excessive I/Os against the journal and long waits for the BUMP of such a process to complete.&lt;br /&gt;
&lt;br /&gt;
==AUDIT204 enhancements==&lt;br /&gt;
===FORMAT command===&lt;br /&gt;
TIMEHH is a new parameter used with the FORMAT command of the [[Tracking_system_activity_(CCAJRNL,_CCAAUDIT,_CCAJLOG)#AUDIT204_utility|AUDIT204]] utility.  It indicates that timestamps, printed at the beginning of each line of output, should include hundredths of a second. Requires no other arguments.&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;b&amp;gt;NOTE:&amp;lt;/b&amp;gt; This parameter and the 78 version (or later) of AUDIT204 may be used against a 77 (or later) CCAJRNL.&amp;lt;/p&amp;gt;&lt;br /&gt;
For example:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;//CCAIN DD *&lt;br /&gt;
FORMAT YEARFORM 4&lt;br /&gt;
TIMEHH&lt;br /&gt;
TYPE ER MS LI&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Recovery enhancements==&lt;br /&gt;
===Media Recovery in a multi-user environment===&lt;br /&gt;
It is now possible to perform media recovery by issuing the &amp;lt;var&amp;gt;REGENERATE&amp;lt;/var&amp;gt; command to roll forward selected files in a multi-user environment, with the media recovery being carried out by different users with system manager privileges. The new USING option allows for the specification of a ddname for the input journal stream to be used by the &amp;lt;var&amp;gt;REGENERATE&amp;lt;/var&amp;gt; command. Previously media recovery was restricted to single user batch jobs, using the CCAGEN ddname for the input journal. For more details, see the &amp;lt;var&amp;gt;[[#REGENERATE|REGENERATE]]&amp;lt;/var&amp;gt; command below.&lt;br /&gt;
&lt;br /&gt;
==Security enhancements==&lt;br /&gt;
===CA-Top Secret can disallow CCASTAT logins===&lt;br /&gt;
The [https://m204wiki.rocketsoftware.com/index.php/CA-Top_Secret_interface CA-Top Secret] interface now recognizes the &amp;lt;code&amp;gt;DEFACID=&amp;lt;/code&amp;gt;, setting and does not allow CCASTAT logins in the online if &amp;lt;code&amp;gt;DEFACID&amp;lt;/code&amp;gt; is set to null. (There is no attempt to log on M204USR.) Therefore, to disallow CCASTAT logons, set DEFACID=, in [https://m204wiki.rocketsoftware.com/index.php/CA-Top_Secret_interface#Preparing_a_TOPSPARM_parameter_module_with_TOPSGEN TOPSPARM]. CCASTAT will be opened because it contains file and group passwords, but it will not be used for logons if CCASTAT logons are not allowed.&lt;br /&gt;
&lt;br /&gt;
===CUSTOM=11 and mixed cased input===&lt;br /&gt;
The &amp;lt;var&amp;gt;[https://m204wiki.rocketsoftware.com/index.php/CUSTOM_parameter CUSTOM]&amp;lt;/var&amp;gt; parameter CUSTOM=11 setting no longer requires that a *LOWER command be issued prior to a LOGCTL command (to add or change a  password) to preserve mixed case input. Prior to this release, with CUSTOM=11 in place, *LOWER had to be issued before a LOGCTL command, otherwise any mixed case password strings would automatically be translated into uppercase. This change is enabled within V7.7 with the application of zap 77z108.&lt;br /&gt;
&lt;br /&gt;
===DEFUSER can specify a jobname not authorized to access M204===&lt;br /&gt;
When specifying DEFUSER=JOBNAME and VALIDAT=LOGON in the RACFGEN parms for an ONLINE, if the specified jobname ( the owning id for the ONLINE job ) isn&#039;t authorized to use Model 204 via RACF, any LOGIN commands specifying no userid will now succeed ( previously such a LOGON would have failed ). This enables users to submit jobs with USE $JOB, whereby the string USER=jobname  will be added to the submitted JCL, and this in turn is useful if the specified jobname has dataset access privileges to datasets required by the submitted jobs, even if the jobname itself isn&#039;t authorized to use M204.&lt;br /&gt;
&lt;br /&gt;
==Janus product enhancements==&lt;br /&gt;
&lt;br /&gt;
===Janus Web Server access rule===&lt;br /&gt;
The automatic &amp;lt;var&amp;gt;[[JANUS WEB ALLOW]]&amp;lt;/var&amp;gt; rule, which allowed any user to access the port without requiring a login, is changed &amp;lt;i&amp;gt;for non-SSL ports&amp;lt;/i&amp;gt; to the following:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;JANUS WEB &amp;lt;i&amp;gt;portname&amp;lt;/i&amp;gt; DISALLOW *&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
This rule requires a system administrator to explicitly define &amp;lt;var&amp;gt;ALLOW&amp;lt;/var&amp;gt; rules to enable users to access non-SSL ports.&lt;br /&gt;
The rule applies unless overridden by user-added rules. &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;blockquote class=&amp;quot;note&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;b&amp;gt;Note:&amp;lt;/b&amp;gt; To revert from this change in the JANUS DEFINE default and make the default &lt;br /&gt;
 non-SSL &amp;lt;var&amp;gt;ALLOW&amp;lt;/var&amp;gt; rule as it was in version 7.5 and earlier (&amp;lt;code&amp;gt;ALLOW *&amp;lt;/code&amp;gt;), turn on the 1 bit of the &amp;lt;var&amp;gt;[[WEBDFLT parameter|WEBDFLT]]&amp;lt;/var&amp;gt; parameter: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;RESET WEBDFLT=1&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Increase in pending accepts for Janus BPX ports===&lt;br /&gt;
The default number of pending accepts for Janus BPX server ports has been increased from 3 to 12, thus reducing the likelihood that a pending accept may fail with the message&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;MSIR.0019 Connection request rejected for port (port), MAXCON exceeded&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The actual number of pending accepts to be supported on the port can be set with the new parameter MAXPEND, set on the &amp;lt;var&amp;gt;[[JANUS_DEFINE|JANUS DEFINE]]&amp;lt;/var&amp;gt; command, where MAXPEND can vary from 3 up to a maximum value of 32. The change to the default value was enabled within V7.7 with the application of zap 77z269.&lt;br /&gt;
&lt;br /&gt;
===TCP listen backlog increased===&lt;br /&gt;
&lt;br /&gt;
The [https://m204wiki.rocketsoftware.com/index.php/Program_Communication_facilities#LISTEN_call TCP_listen] backlog has been increased from 16 to 1024 under z/OS.&lt;br /&gt;
&lt;br /&gt;
This update tells the TCP stack to queue up to 1024 of such requests up before dropping them, thus reducing, or in most cases eliminating, the likelihood of a connection request drop, other than in exceptional circumstances, such as a denial of service attack. This change was enabled within V7.7 with the application of zap 77z340.&lt;br /&gt;
&lt;br /&gt;
===Defer the freeing of XMLSCREEN input XML===&lt;br /&gt;
&lt;br /&gt;
The freeing of [https://m204wiki.rocketsoftware.com/index.php/XMLSCREEN_and_NOXMLSCREEN_(JANUS_DEFINE_parameters) XMLSCREEN] input XML is now deferred until the next Read Screen or session termination. This means that if an application error is detected, the input XML can be retrieved with [https://m204wiki.rocketsoftware.com/index.php/$Web_Input_Content $Web_Input_Content] and then logged for problem analysis. &lt;br /&gt;
&lt;br /&gt;
Prior to this release the XML received from the client is freed immediately after being used to set the input data for a Read Screen, rendering it unavailable for problem determination.&lt;br /&gt;
&lt;br /&gt;
This change is enabled in V7.7 with the application of zap 77z368.&lt;br /&gt;
&lt;br /&gt;
===XMLSCREEN and Janus Web Legacy blank stripping===&lt;br /&gt;
&lt;br /&gt;
xmlScreens and Janus Web Legacy screens now adhere to the same standard as standard screen processing in terms of stripping leading blanks from input fields defined as [https://m204wiki.rocketsoftware.com/index.php/Full-screen_feature#DEBLANK_or_NODEBLANK_option DEBLANK] (either explicitly or implicitly).&lt;br /&gt;
&lt;br /&gt;
This change is enabled in V7.7 with the application of zap 77z400.&lt;br /&gt;
&lt;br /&gt;
===SSL input buffer size===&lt;br /&gt;
&lt;br /&gt;
The default value of [https://m204wiki.rocketsoftware.com/index.php/SSLIBSIZE_(JANUS_DEFINE_parameter) SSLIBSIZE] has been increased to 16384 + 128, or 16512. This size should ensure correct communication with all TLS spec compliant applications. It is the maximum size allowed unless you use [https://m204wiki.rocketsoftware.com/index.php/CUSTOM_parameter#Using_CUSTOM.3D.2818.29 CUSTOM=18].    &lt;br /&gt;
&lt;br /&gt;
This changed is enabled within V7.7 with the application of zap 77z415.&lt;br /&gt;
&lt;br /&gt;
===Increasing LDAP buffers===&lt;br /&gt;
&lt;br /&gt;
The number of LDAP buffers allocated at startup can now be changed by setting the NLDAPBUF parameter in CCAIN. See below for details on [[#NLDAPBUF|NLDAPBUF]].&lt;br /&gt;
&lt;br /&gt;
===Increase URL length returned with $web_form_action===&lt;br /&gt;
With this release the maximum Janus Web Server incoming URL that can be handled by &amp;lt;var&amp;gt;$web_form_action&amp;lt;/var&amp;gt; is increased from 512 bytes to 1024 bytes. This change is enabled within V7.7 with the application of zap 77z424.&lt;br /&gt;
&lt;br /&gt;
===Maximum RBSIZE setting increased===&lt;br /&gt;
The maximum value for RBSIZE, set on the &amp;lt;var&amp;gt;[[JANUS DEFINE|JANUS DEFINE]]&amp;lt;/var&amp;gt; command, is now increased to 16777215 (previously the maximum was 65534). RBSIZE specifies the RPC or Request Buffer size.  On a Web port, the Janus request buffer holds browser request information such as header data, cookies, and form data. On other port types, it holds RPC input and output parameters. This change is enabled within V7.7 with the application of zap 77z427.&lt;br /&gt;
&lt;br /&gt;
==Debugger enhancements==&lt;br /&gt;
&lt;br /&gt;
===Access to exposed variables===&lt;br /&gt;
The debuggers can now view or watch the values of variables exposed to local routines/methods. Previously, any attempts to access an exposed variable would have displayed &amp;quot;%varname has no value&amp;quot; in the debugger session. (This feature is enabled within V7.7 with the application of zap 77z363.)&lt;br /&gt;
&lt;br /&gt;
==Performance enhancements==&lt;br /&gt;
&lt;br /&gt;
===MP/204 offload improvements===&lt;br /&gt;
Application code issuing the following SOUL statements will now now be fully offloadable:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;File Records In/On&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Remember&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt; &lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Position&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Sort Values&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;                                             &lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Reset Header/Trailer&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Find and Print Count&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Find All Values&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;For Each Value&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
the above improvements are also enabled within V7.7 with the application of zaps 77z419 and 77z420.&lt;br /&gt;
&lt;br /&gt;
===X3270OUT exit offloadable===&lt;br /&gt;
When running MP/204 (AMPSUBS&amp;gt;0) and using the [https://m204wiki.rocketsoftware.com/index.php/Coding_SNA_Communications_Server_conversion_exit_routines#X3270OUT_.28convert_output_from_3270_format.29 X3270OUT] exit to convert a 3270 output data stream to the appropriate device protocol, the exit can now run in parallel mode to improve performance. This change was enabled in V7.7 with the application of zap 77Z313.&lt;br /&gt;
&lt;br /&gt;
The X3270OUT exit must be written to be re-entrant.&lt;br /&gt;
&lt;br /&gt;
==New and changed commands==&lt;br /&gt;
===DISPLAY ECF===&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;DISPLAY ECF {{ M | N | U } like ?} &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This new command displays details from ECF tables, or the current status of users accessing ECF modules.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;syntax&amp;quot;&amp;gt;D ECF M&amp;lt;/span&amp;gt; displays the contents of the module table. For example:&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;    D ECF M &lt;br /&gt;
    Module   Loadlib  Address:Length     Loaded@      Lastused@   #Calls  Flags &lt;br /&gt;
    QATUM13C PROGLIB 2FB91FB8:00000028 19023:121506 19023:121506 00000001 &lt;br /&gt;
    QATUM13B PROGLIB 2FE65000:00009C18 19023:121506 19023:121506 00000001 &lt;br /&gt;
    QATUM13A PROGLIB 2FE6EC18:00001CD8 19023:121506 19023:121506 00000001  &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
(flags may be D=deleted; S=shared; H=halted; I=Idle)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;syntax&amp;quot;&amp;gt;D ECF N&amp;lt;/span&amp;gt; displays contents of the name table. For example: &amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;    D ECF N&lt;br /&gt;
    Module   Logical-call-name &lt;br /&gt;
    QATUM13C MOD_QATUM13C &lt;br /&gt;
    QATUM13B MOD_QATUM13B &lt;br /&gt;
    QATUM13A MOD_QATUM13A &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;syntax&amp;quot;&amp;gt;D ECF U&amp;lt;/span&amp;gt; displays details of users currently accessing ECF modules. This is also the default option, and so &amp;lt;span class=&amp;quot;syntax&amp;quot;&amp;gt;D ECF&amp;lt;/span&amp;gt; will display the same output as &amp;lt;span class=&amp;quot;syntax&amp;quot;&amp;gt;D ECF U&amp;lt;/span&amp;gt;. For example:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;    D ECF U                           &lt;br /&gt;
    User# Userid     Module   Parmlen &lt;br /&gt;
    00002 ADMIN      --none--         &lt;br /&gt;
    00003 ADMIN      COBSAMP1 00000002&lt;br /&gt;
    00004 ADMIN      COBSAMP1 00000002 &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;syntax&amp;quot;&amp;gt;D ECF LIKE ? &amp;lt;/span&amp;gt; (where &amp;lt;code&amp;gt;?&amp;lt;/code&amp;gt; is a valid pattern) displays details for entities that match the specified pattern.&lt;br /&gt;
&lt;br /&gt;
===REGENERATE===&lt;br /&gt;
The &amp;lt;var&amp;gt;REGENERATE&amp;lt;/var&amp;gt; command can now be run in a multi-user environment by multiple users with system manager privileges. A new option USING is provided to specify the ddname of the input journal, so that the full syntax is now as follows:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;  REGENERATE [USING ddname] FILE filename [FROM dumpname | IGNORE]&lt;br /&gt;
  [TO {LAST UPDATE [BEFORE yy.ddd hh:mm:ss.th] | LAST CHECKPOINT [BEFORE yy.dd hh:mm:ss.th] &lt;br /&gt;
  | UPDATE number OF yy.ddd hh:mm:ss.th | CHECKPOINT yy.ddd hh:mm:ss.th} ]&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The default for the using ddname is CCAGEN, but any ddname may be used to allocate an input journal and used. For example:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;  ALLOCATE REGEN1 WITH SCOPE=SYSTEM DSN=PROD1.GDGJ OLD SEQUENTIAL GEN=+2&lt;br /&gt;
  REGENERATE USING REGEN1 FILE TEST&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It is the user&#039;s responsibility to ensure that the file being regenerated is not in use, and so prior to usage, &amp;lt;var&amp;gt;BUMP FILE&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;STOP FILE&amp;lt;/var&amp;gt; should be used to isolate usage against the file. If the file is in use, the REGEN will fail with these messages:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;  M204.1430: Failed to open file TEST&lt;br /&gt;
  M204.1436: Stopped processing file TEST  &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
$STATUS will now be set for &amp;lt;var&amp;gt;REGENERATE&amp;lt;/var&amp;gt; with the following values:&lt;br /&gt;
&amp;lt;blockquote&amp;gt;    &lt;br /&gt;
    0 - Success &amp;lt;br/&amp;gt;&lt;br /&gt;
    1 - No files were processed &amp;lt;br/&amp;gt;&lt;br /&gt;
    2 - At least one file stopped processing &amp;lt;br/&amp;gt;&lt;br /&gt;
    4 - A serious error occurred, REGEN failed &lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Similarly, &amp;lt;var&amp;gt;SETGRC&amp;lt;/var&amp;gt; may be used to get the return code and error message.&lt;br /&gt;
&lt;br /&gt;
==New and changed parameters==&lt;br /&gt;
&lt;br /&gt;
===ECMODS===&lt;br /&gt;
The new minimum value for ECMODS, the allowable number of ECF modules, is 1. Prior to V7.8 the minimum value was 0. This changed was enabled in V7.7 with the application of zap 77z306.&lt;br /&gt;
&lt;br /&gt;
===ECNAMES===&lt;br /&gt;
The new minimum value for ECNAMES, the allowable number of ECF module names, is 1. Prior to V7.8 the minimum value was 0. This changed was enabled in V7.7 with the application of zap 77z306.&lt;br /&gt;
&lt;br /&gt;
===ECPSIZE===&lt;br /&gt;
The new minimum value for ECPSIZE, the initial storage allocation for ECF parameters, is 1024. Prior to V7.8 the minimum value was 0. This changed was enabled in V7.7 with the application of zap 77z306.&lt;br /&gt;
&lt;br /&gt;
===ENQTIME===&lt;br /&gt;
Millisecond duration of automatic record locking retry wait.&lt;br /&gt;
&lt;br /&gt;
Prior to this change, if record locking conflicts occur frequently in a busy online, any user with a non-zero value for &amp;lt;var&amp;gt;[[ENQRETRY parameter|ENQRETRY]]&amp;lt;/var&amp;gt; will wait at least 3 seconds before the conflict is dealt with. This can degrade overall system performance.      &lt;br /&gt;
                                                         &lt;br /&gt;
The &amp;lt;var&amp;gt;[[ENQTIME parameter|ENQTIME]]&amp;lt;/var&amp;gt; parameter specifies the number of milliseconds waited for each record locking retry wait. ENQTIME can be between 1 and 60000, corresponding to a minimum of 1 millisecond and a maximum of 1 minute. The default value of ENQTIME is 3000 (3 seconds).            &lt;br /&gt;
                                                         &lt;br /&gt;
For example, with ENQTIME = 100 and ENQRETRY = 7, after a record locking conflict occurs the thread will retry 7 times with wait intervals of .1 seconds, and so within at most .7 seconds either the lock becomes available or the conflict triggers an On unit or cancels the request.     &lt;br /&gt;
                                                         &lt;br /&gt;
The ENQTIME parameter may also be reset with $ResetN. &lt;br /&gt;
&lt;br /&gt;
This new parameter was enabled within V7.7 with the application of zap 77z299.&lt;br /&gt;
&lt;br /&gt;
===EVALOPT===&lt;br /&gt;
The new &amp;lt;var&amp;gt;EVALOPT&amp;lt;/var&amp;gt; parameter controls the cancellation of a request on truncation of string data. The default value is 0, and currently there is just one setting, 1, which means &amp;quot;cancel a request if truncation of string data occurs.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
For example, with the default of 0 in place, the following code &amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;    %x is string len 1   &lt;br /&gt;
    %y is string len 2   &lt;br /&gt;
    %y = &#039;ab&#039;            &lt;br /&gt;
    %x = %y              &lt;br /&gt;
    printtext {~} = {%x} &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
would cause silent truncation, and give the result&lt;br /&gt;
    &amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;%x = a &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If &amp;lt;var&amp;gt;EVALOPT&amp;lt;/var&amp;gt; is set to 1, then the above code produces the following message:&lt;br /&gt;
    &amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;M204.0552: Variable too small for result &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and the request is cancelled.&lt;br /&gt;
&lt;br /&gt;
===LFSCB===&lt;br /&gt;
LFSCB, the length of the full screen buffer, now has a new minimum value of 8 ( the previous minimum was 0 ). This change has been enabled within v7.7 with the application of zap 77z042, and within V7.6 with the application of zap 76z393.&lt;br /&gt;
&lt;br /&gt;
===MAXPRE, MAXBOUT, MAXSUBT===&lt;br /&gt;
&amp;lt;p&amp;gt;Introduced in zap 77Z257.&amp;lt;/p&amp;gt;&lt;br /&gt;
The new &amp;lt;var&amp;gt;MAXPRE&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;MAXBOUT&amp;lt;/var&amp;gt;, and &amp;lt;var&amp;gt;MAXSUBT&amp;lt;/var&amp;gt; parameters can be used to cancel a runaway transaction and prevent it from filling the checkpoint data set. &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;MAXPRE&amp;lt;/var&amp;gt;:  Maximum number of pre-images per transaction.  &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;MAXBOUT&amp;lt;/var&amp;gt;: Maximum number of backout pages per transaction. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;MAXSUBT&amp;lt;/var&amp;gt;: Maximum number of subtransaction checkpoints that a transaction can span.&amp;lt;/li&amp;gt;&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;Each new parameter defaults to unlimited. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;If a parameter value is set, a transaction is cancelled if that value is exceeded, and the following message is displayed:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;code&amp;gt;M204.0524: Maximum number (&amp;lt;i&amp;gt;num&amp;lt;/i&amp;gt;) of &amp;lt;i&amp;gt;parameter&amp;lt;/i&amp;gt; exceeded.&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
where &amp;lt;i&amp;gt;num&amp;lt;/i&amp;gt; is the value set for &amp;lt;i&amp;gt;parameter&amp;lt;/i&amp;gt; (&amp;lt;var&amp;gt;MAXPRE&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;MAXBOUT&amp;lt;/var&amp;gt;, or &amp;lt;var&amp;gt;MAXSUBT&amp;lt;/var&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
===NLDAPBUF===&lt;br /&gt;
This new parameter allows the number of LDAP buffers allocated during startup to be set in CCAIN. The default value is 2, and the settable value can range from 0 to 65535.&lt;br /&gt;
&lt;br /&gt;
===PUPDTH (new minimum value)===&lt;br /&gt;
If a user sets the &amp;lt;var&amp;gt;[[PUPDTH parameter|PUPDTH]]&amp;lt;/var&amp;gt; parameter to 0, it will now automatically be increased to 1, its minimum value.&lt;br /&gt;
&lt;br /&gt;
===SERV4G===&lt;br /&gt;
This parameter allows testing of server tables that span a 4-gigabyte boundary. For example, if SERV4G is X&#039;FFFFF000&#039;, each ATB server will begin at XX_FFFFF000. If SERV4G is X&#039;FFFF0000&#039;, each ATB server will begin at XX_FFFF0000. XX is determined by the storage available on the system. The parameter is set in CCAIN.&lt;br /&gt;
&lt;br /&gt;
The contents of the ATB server are specified by using the SERVGA parameter.&lt;br /&gt;
&lt;br /&gt;
For example. if you want VTBL to span the 4G boundary, you can use these settings: SERV4G=X&#039;FFFFF000&#039;, SERVGA=X&#039;00040000&#039;, and LVTBL=200 (6400 bytes, X&#039;1900&#039;). This will force each server&#039;s VTBL to begin at XX_FFFFF000 and end at XX+1_00000900.&lt;br /&gt;
&lt;br /&gt;
===WEBDFLT===&lt;br /&gt;
At V7.7, the default access rule for non-SSL ports was changed from ALLOW * to DISALLOW *, meaning that unless any ALLOW rules were in place resulting in a login/password prompt, the port couldn&#039;t be accessed. The new &amp;lt;var&amp;gt;[https://m204wiki.rocketsoftware.com/index.php/WEBDFLT_parameter WEBDFLT]&amp;lt;/var&amp;gt; parameter may be set to 1 for reversion to the old default of ALLOW *. Under V7.7, this new parameter was enabled with the application of zap 77z090. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;var&amp;gt;RESET WEBDFLT&amp;lt;/var&amp;gt; requires system administrator privileges. It is recommended to reset the 1 bit of &amp;lt;var&amp;gt;WEBDFLT&amp;lt;/var&amp;gt; to zero after issuing a series of &amp;lt;var&amp;gt;JANUS DEFINE&amp;lt;/var&amp;gt; commands which need WEBDFLT=1, as in the CCAIN input stream.&lt;br /&gt;
&lt;br /&gt;
==New and changed statistics==&lt;br /&gt;
===MPR, MBO, MCP, and RCV===&lt;br /&gt;
Introduced in zap 77Z257.&lt;br /&gt;
&amp;lt;p&amp;gt;These statistics provide high water mark transaction information. (Since-last values will not be available until V78 GA.)&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;They are useful in conjunction with the &amp;lt;var&amp;gt;MAXPRE&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;MAXBOUT&amp;lt;/var&amp;gt;, and &amp;lt;var&amp;gt;MAXSUBT&amp;lt;/var&amp;gt; parameters. &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
User/system statistics:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;MPR: High water mark of transaction pre-images. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;MBO: High water mark of transaction backout pages. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;MCP: High water mark of transaction chkpoint spans. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
System statistics: &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;RCV: Number of blocks needed for subtransaction recovery &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt; &lt;br /&gt;
&amp;lt;p class=&amp;quot;note&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Notes:&amp;lt;/b&amp;gt; M204.0843 now displays the RCV statistic for subtransaction checkpoints.&lt;br /&gt;
The size of recovery checkpoint must be greater than the sum of the last RCV value plus the number of records in [https://m204wiki.rocketsoftware.com/index.php/System_and_media_recovery#RESTART_recovery_considerations_for_sub-transaction_checkpoints RESTART and RESTARTS].&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
===DKWTS and DKWTMICS===&lt;br /&gt;
Introduced in zap 77z7289.&lt;br /&gt;
&amp;lt;p&amp;gt;The new system statistics DKWTS (DisK WaiTs) and DKWTMICS (DisK WaiT MICroSeconds) collect data to provide rough disk I/O service time numbers.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
DKWTS shows the number of disk I/O waits. DKWTMICS shows the total wait time for those waits in microseconds. Dividing the difference in DKWTMICS by the difference in DKWTS over an interval provides the average disk I/O wait time in microseconds.              &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;note&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Notes:&amp;lt;/b&amp;gt; &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The wait time does include internal Model 204 scheduler delays, so on a CPU bound Model 204 system, the service times calculated from DKWTS and DKWTMICS are likely to be an overestimate of actual service times.&amp;lt;/li&amp;gt;  &lt;br /&gt;
                                                                    &lt;br /&gt;
&amp;lt;li&amp;gt;DKWTS and DKWTMICS are not available in SirMon; use [https://m204wiki.rocketsoftware.com/index.php/MONITOR_command MONITOR] SYSTEM STATISTICS to view these statistics.&amp;lt;/li&amp;gt;&amp;lt;/ul&amp;gt;  &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Compatibility issues==&lt;br /&gt;
===&amp;lt;b id=&amp;quot;listNewInit&amp;quot;&amp;gt;&amp;lt;/b&amp;gt;$ListNew cannot be used in Initial clause===&lt;br /&gt;
It is now a compilation error if &amp;lt;var&amp;gt;$ListNew&amp;lt;/var&amp;gt; is attempted to be used in the &amp;lt;var&amp;gt;Initial&amp;lt;/var&amp;gt; clause of a &lt;br /&gt;
[https://m204wiki.rocketsoftware.com/index.php/Using_variables_and_values_in_computation#Declare_statements_for_.25variables declaration statement].&lt;br /&gt;
&amp;lt;p&amp;gt;This change is propagated by zap maintenance to versions 7.5 (zap 75Z487), 7.6 (zap 76Z514), and 7.7 (zap 77Z281) of Model 204.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote class=&amp;quot;note&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Note:&amp;lt;/b&amp;gt; Strictly speaking, this would not be considered a compilation error, because previously although &amp;lt;code&amp;gt;..&amp;amp;nbsp;Initial($ListNew)&amp;lt;/code&amp;gt; did not produce a compilation error, in almost all circumstances it would produce a snap if the initialized %variable were used with some other &amp;lt;var&amp;gt;$List&amp;lt;i&amp;gt;xxx&amp;lt;/i&amp;gt;&amp;lt;/var&amp;gt; invocation.&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Restricting the use of the CUSTOM=38 setting===&lt;br /&gt;
The [[CUSTOM parameter|CUSTOM=38]] parameter setting, introduced at V7.5, inadvertently provided System Manager privileges to all users via the RESET command. This CUSTOM setting is now restricted to the RESETting of the LAUDIT parameter.&lt;br /&gt;
&lt;br /&gt;
===Disabling of Closure support===&lt;br /&gt;
Due to a number of bugs related to Closure support, introduced at V7.7, this feature, which can best be described as exposed methods assigned to method variables, has been disabled in this release. This change was also made to V7.7 with application of zap 77z119.&lt;br /&gt;
&lt;br /&gt;
===Password delimiter enforced===&lt;br /&gt;
When using IFSTRTN to logon to a Model 204 online from an IFAM2 application, both the logonid and password must be followed by a semicolon - the delimiter.             &lt;br /&gt;
For example:      &lt;br /&gt;
                                      &lt;br /&gt;
CALL IFSTRTN(RC,&#039;logonid;password;&#039;...)&lt;br /&gt;
                 &lt;br /&gt;
If a semicolon does not follow the password string, the following message will now be issued&lt;br /&gt;
&lt;br /&gt;
M204.2964: Password missing or too long                  &lt;br /&gt;
                                                         &lt;br /&gt;
Previously, a semicolon following the password was not required and the first blank served as a password delimiter.  However, as of V7.7, embedded blanks are valid password characters and a semicolon is now required to delimit the password.&lt;br /&gt;
&lt;br /&gt;
This change has also been enabled within V7.7 with the application of zap 77z231.&lt;br /&gt;
&lt;br /&gt;
===PAGESZ parameter validated===&lt;br /&gt;
Previously it was possible to set the PAGESZ parameter to any value, although Model 204 internally supports one page size of 6184, and any deviation from this value would have led to problems during file creation. The value of this parameter is now controlled, such that setting it to any value other than 6184 will generate an M204.1149 message with the parameter being reset to 6184.&lt;br /&gt;
&lt;br /&gt;
===ECPRIV and the IDCAMS facility===&lt;br /&gt;
At V7.7 a security loophole was closed, whereby all ECF modules were run under external-authorizer profile of the calling user. Previously any ECF tasks were run under the owning job&#039;s external-authorizer profile, and in order for certain sites to retain that ability, a new setting of ECPRIV, value 4, was introduced to retain the ability to run ECF tasks using the job&#039;s security profile. &lt;br /&gt;
&lt;br /&gt;
The ECPRIV 4 setting potentially introduced a security loophole when calling the IDCAMS interface, based upon what the IDCAMS utility is able to do at a system level. Consequently as of this release, the ECPRIV 4 setting will be ignored when calling the IDCAMS facility via ECF, and such IDCAMS processes will always use the calling user&#039;s security profile. Any existing jobs that use ECF to call the IDCAMS utility with the ECFPRIV 4 bit set should be checked to ensure that the calling user&#039;s security profile still satisfies the job&#039;s requirements.&lt;br /&gt;
&lt;br /&gt;
===TCPOPTS is view only===&lt;br /&gt;
In previous releases the TCPOPTS parameter, which identifies the type of IP addressing in use ( v4 or v6 ), was resetable, although it was always documented as a view-only parameter. The parameter is now handled as a view-only parameter, and any attempts to reset the parameter will result in&lt;br /&gt;
&lt;br /&gt;
   M204.1123: Parameter TCPOPTS not reset&lt;br /&gt;
&lt;br /&gt;
===ZHPF command can only be issued by a system manager===&lt;br /&gt;
In previous releases it was possible to issue the ZHPF command without being logged on. From this release onwards, a user would have to be logged on with system manager privileges to be able to issue this command.&lt;br /&gt;
&lt;br /&gt;
Additionally, the command output will now only  display results for currently open files.&lt;br /&gt;
&lt;br /&gt;
This changes has been enabled within v7.7 with the application of zap 77z264.&lt;br /&gt;
&lt;br /&gt;
===Terminal MODEL reset failure===&lt;br /&gt;
If a reset of the terminal MODEL parameter fails due to an under sized output page buffer, then in addition to the existing messages that inform the user of this failure&lt;br /&gt;
&lt;br /&gt;
    M204.1875 UNABLE TO RESET MODEL TO %C &lt;br /&gt;
    M204.1123: Parameter MODEL not reset  &lt;br /&gt;
&lt;br /&gt;
the following message will now be issued&lt;br /&gt;
&lt;br /&gt;
    M204.1008: LOUTPB must be increased to at least &amp;lt;number&amp;gt; &lt;br /&gt;
                                                         &lt;br /&gt;
where &amp;lt;number&amp;gt; is the minimum value of LOUTPB necessary to support the terminal model.&lt;br /&gt;
&lt;br /&gt;
This change is enabled in V7.7 with the application of zap 77z309.&lt;br /&gt;
&lt;br /&gt;
==New and changed messages==&lt;br /&gt;
&lt;br /&gt;
See [[New and updated messages in Model 204 version 7.8|New and updated messages in Model 204 version 7.8]] for details.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category: Release notes]]&lt;/div&gt;</summary>
		<author><name>ELowell</name></author>
	</entry>
	<entry>
		<id>https://m204wiki.rocketsoftware.com/index.php?title=Methods&amp;diff=117690</id>
		<title>Methods</title>
		<link rel="alternate" type="text/html" href="https://m204wiki.rocketsoftware.com/index.php?title=Methods&amp;diff=117690"/>
		<updated>2019-09-18T18:24:53Z</updated>

		<summary type="html">&lt;p&gt;ELowell: /* Mapping parameter names in declarations to names within the method */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;As discussed in [[Classes and Objects]], a &amp;lt;var&amp;gt;Class&amp;lt;/var&amp;gt; block can contain declaration blocks and/or &#039;&#039;&#039;method&#039;&#039;&#039; definitions. This page describes the characteristics of these class methods and &lt;br /&gt;
their definitions. For information about defining special-purpose methods that are less broadly applicable and therefore not part of the class, see [[Local and Common entities]].  &lt;br /&gt;
&lt;br /&gt;
==Method definition syntax==&lt;br /&gt;
All declaration blocks must appear before any method definitions. A method definition consists of the method header, which is basically a reiteration of the method declaration, the method body (code), and an End method statement:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;methodHeader&amp;lt;/span&amp;gt;&lt;br /&gt;
  &amp;lt;span class=&amp;quot;squareb&amp;quot;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;[[#Internal parameter names|internalNamesBlock]]&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;squareb&amp;quot;&amp;gt;]&amp;lt;/span&amp;gt;&lt;br /&gt;
  &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;methodBody&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;literal&amp;quot;&amp;gt;End&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;methodType&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;squareb&amp;quot;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;methodName&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;squareb&amp;quot;&amp;gt;]&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;methodHeader&#039;&#039; must nearly match the method declaration (which is described in detail in [[Classes and Objects#Method declarations and method types|Method declarations and method types]]), except:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Named parameters do not have to appear in the same order. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;The optional &amp;lt;var&amp;gt;Public&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;Private&amp;lt;/var&amp;gt;, or &amp;lt;var&amp;gt;Shared&amp;lt;/var&amp;gt; indication may be present on one and not the other. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The parameter names must be present on the method declarations (as opposed to the &amp;lt;var&amp;gt;Declare Subroutine&amp;lt;/var&amp;gt; statement) and must match the parameter names in the method header. This redundancy may seem extreme, it has several benefits:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;It ensures that a complete method description is available in both the declaration block and the method definition. The former is convenient for users of the class and someone trying to understand the class as a whole. The latter is convenient for someone looking at the method in isolation. Meaningful parameter names on the method declarations will make the method functionality much clearer than the parameter datatype alone. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Complete redundancy makes it possible to cut-and-paste or copy a method declaration to the method definition, or vice versa. The method body consists of the code that implements the method or methods. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;props&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;var&amp;gt;Functions&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;Subroutines&amp;lt;/var&amp;gt; have one method, but &amp;lt;var&amp;gt;Properties&amp;lt;/var&amp;gt; can have two methods: one for retrieving the property (a &amp;lt;var&amp;gt;Get&amp;lt;/var&amp;gt; method), and one for setting the property (a &amp;lt;var&amp;gt;Set&amp;lt;/var&amp;gt; method). The &amp;lt;var&amp;gt;Get&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;Set&amp;lt;/var&amp;gt; methods are enclosed in &amp;lt;var&amp;gt;Get&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;Set&amp;lt;/var&amp;gt; blocks:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;literal&amp;quot;&amp;gt;Property&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;name&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;squareb&amp;quot;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;(parameters)&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;squareb&amp;quot;&amp;gt;]&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;squareb&amp;quot;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;literal&amp;quot;&amp;gt;Is&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;squareb&amp;quot;&amp;gt;]&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;type&amp;lt;/span&amp;gt;&lt;br /&gt;
  [[#Internal parameter names|&amp;lt;span class=&amp;quot;squareb&amp;quot;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;internalNamesBlock&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;squareb&amp;quot;&amp;gt;]&amp;lt;/span&amp;gt;]]&lt;br /&gt;
  &amp;lt;span class=&amp;quot;literal&amp;quot;&amp;gt;Get&amp;lt;/span&amp;gt;&lt;br /&gt;
    &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;getmethodBody&amp;lt;/span&amp;gt;&lt;br /&gt;
  &amp;lt;span class=&amp;quot;literal&amp;quot;&amp;gt;End Get&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;squareb&amp;quot;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;methodName&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;squareb&amp;quot;&amp;gt;]&amp;lt;/span&amp;gt;&lt;br /&gt;
  &amp;lt;span class=&amp;quot;literal&amp;quot;&amp;gt;Set&amp;lt;/span&amp;gt;&lt;br /&gt;
    &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;setmethodBody&amp;lt;/span&amp;gt;&lt;br /&gt;
  &amp;lt;span class=&amp;quot;literal&amp;quot;&amp;gt;End Set&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;squareb&amp;quot;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;methodName&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;squareb&amp;quot;&amp;gt;]&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;literal&amp;quot;&amp;gt;End&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;literal&amp;quot;&amp;gt;Property&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;squareb&amp;quot;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;methodName&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;squareb&amp;quot;&amp;gt;]&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
The &amp;lt;var&amp;gt;Get&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;Set&amp;lt;/var&amp;gt; methods can appear in any order inside the &amp;lt;var&amp;gt;Property&amp;lt;/var&amp;gt; definition block, though must both appear within a single property definition block. &amp;lt;var&amp;gt;ReadOnly&amp;lt;/var&amp;gt; methods have a &amp;lt;var&amp;gt;Get&amp;lt;/var&amp;gt; method only. &amp;lt;var&amp;gt;WriteOnly&amp;lt;/var&amp;gt; methods have a &amp;lt;var&amp;gt;Set&amp;lt;/var&amp;gt; method only.&lt;br /&gt;
&lt;br /&gt;
==Comparing methods to complex subroutines==&lt;br /&gt;
Methods behave very much like &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;SOUL&amp;lt;/var&amp;gt; [[Subroutines|complex subroutines]], and they have some important differences:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Methods can have optional parameters, that is, parameters not specified in the method invocation. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Method Input parameters (unless they are arrays) are passed to the method by value &amp;amp;mdash; by copying the corresponding argument values provided when the method is invoked, instead of working with a pointer to the argument values. This copying allows the parameters to be updated within the method without consequence to the arguments outside the method.  Method Output parameters are passed by reference &amp;amp;#x2014; pointers to the argument values are passed instead of argument value copies, and updates to the parameters within the method affect the actual arguments outside the method. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;methobj2&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Instance-specific (non-&amp;lt;var&amp;gt;Shared&amp;lt;/var&amp;gt;) methods always have an implicit input parameter: the object on which they operate, also known as the &#039;&#039;&#039;method object&#039;&#039;&#039;. This implicit object can be referred to by the parameter name &amp;lt;var&amp;gt;%this&amp;lt;/var&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;note&amp;quot;&amp;gt;&#039;&#039;&#039;Note:&#039;&#039;&#039; It is not valid to declare a local variable named &amp;lt;code&amp;gt;%this&amp;lt;/code&amp;gt; in non-&amp;lt;var&amp;gt;Shared&amp;lt;/var&amp;gt; methods because it is implicitly declared by &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;SOUL&amp;lt;/var&amp;gt;. &amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;The &amp;lt;var&amp;gt;Set&amp;lt;/var&amp;gt; method in a &amp;lt;var&amp;gt;Property&amp;lt;/var&amp;gt; has another implicit input parameter: the value to which the property is being set. This parameter has the same name as the property. For example, if a property is called &amp;lt;code&amp;gt;Height&amp;lt;/code&amp;gt;, the input value in a &amp;lt;var&amp;gt;Set&amp;lt;/var&amp;gt; method for an instance-specific (non-shared) method may be referenced as:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;%this:height&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;note&amp;quot;&amp;gt;&#039;&#039;&#039;Note:&#039;&#039;&#039; Within the &amp;lt;var&amp;gt;Set&amp;lt;/var&amp;gt; method, the input value is copied (not referenced directly), so it may be updated. &amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Methods, being part of a class, can access the &amp;lt;var&amp;gt;Private&amp;lt;/var&amp;gt; methods and variables in a class. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;All statement labels within a method definition must be unique. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Local variables in methods are always auto-initialized upon entry. They take either their explicit Initial values or implicit initial values by datatype (0 for Fixed and Float, a null string for &amp;lt;var&amp;gt;String&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;Longstring&amp;lt;/var&amp;gt;, a null for Objects). &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Local variables are always stacked for recursive entry to methods. That is, if a method is called directly by itself or indirectly by other methods, the subsequent executions get their own copies of all local variables. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Object variables and &amp;lt;var&amp;gt;Longstrings&amp;lt;/var&amp;gt; are automatically cleaned up on exit from methods. Object variables are set to null, and if a variable is the last reference to an object, the object is discarded (see, [[Object variables]]). &amp;lt;var&amp;gt;Longstrings&amp;lt;/var&amp;gt; are set to null, and any CCATEMP pages associated with the &amp;lt;var&amp;gt;Longstrings&amp;lt;/var&amp;gt; are freed. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Methods that return a value must have the return value indicated on the &amp;lt;var&amp;gt;Return&amp;lt;/var&amp;gt; statement. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Examples of method definitions==&lt;br /&gt;
&lt;br /&gt;
====Function====&lt;br /&gt;
The following is an example of a Function that adds an amount to a private variable and returns the new value:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;class account&lt;br /&gt;
  private&lt;br /&gt;
    variable balance is fixed dp 2&lt;br /&gt;
  end private&lt;br /&gt;
  public&lt;br /&gt;
    function adjustBalance(%amount is fixed dp 2) -&lt;br /&gt;
         is fixed dp 2 callable&lt;br /&gt;
  end public&lt;br /&gt;
 &lt;br /&gt;
  function adjustBalance(%amount is fixed dp 2) is fixed dp 2 callable&lt;br /&gt;
    %this:balance = %this:balance + %amount&lt;br /&gt;
    return %this:balance&lt;br /&gt;
  end function&lt;br /&gt;
end class&lt;br /&gt;
 ...&lt;br /&gt;
%myAccount is object account&lt;br /&gt;
 ...&lt;br /&gt;
%balance = %myAccount:adjustBalance(50.00)&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
If the application does not need the new balance resulting from the &amp;lt;code&amp;gt;AdjustBalance&amp;lt;/code&amp;gt;, the last line could be written:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;%myAccount:adjustBalance(50.00) &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As when invoking &amp;lt;var&amp;gt;Variable&amp;lt;/var&amp;gt; members of a class, the colon (&amp;lt;tt&amp;gt;:&amp;lt;/tt&amp;gt;) that separates the object variable &amp;lt;code&amp;gt;%myaccount&amp;lt;/code&amp;gt; and the method &amp;lt;code&amp;gt;adjustBalance&amp;lt;/code&amp;gt;, above, may alternatively be specified with a single blank before and/or after it.&lt;br /&gt;
&lt;br /&gt;
====Property====&lt;br /&gt;
The following example illustrates a &amp;lt;var&amp;gt;Property&amp;lt;/var&amp;gt; that returns or sets a temperature in Fahrenheit, and that uses a public variable to retrieve or set the Celsius temperature. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;class thermometer&lt;br /&gt;
&lt;br /&gt;
public&lt;br /&gt;
  variable celsius is float&lt;br /&gt;
  property fahrenheit is float&lt;br /&gt;
end public&lt;br /&gt;
property fahrenheit is float&lt;br /&gt;
  get&lt;br /&gt;
    return (1.8 * %this:celsius) + 32&lt;br /&gt;
  end get&lt;br /&gt;
  set&lt;br /&gt;
    %this:celsius = (%fahrenheit - 32) / 1.8&lt;br /&gt;
  end set&lt;br /&gt;
end property fahrenheit&lt;br /&gt;
end class&lt;br /&gt;
 &lt;br /&gt;
%temp is object thermometer&lt;br /&gt;
%temp = new&lt;br /&gt;
 ...&lt;br /&gt;
%temp:fahrenheit = %input&lt;br /&gt;
 ...&lt;br /&gt;
print &#039;Temperature fahrenheit: &#039; %temp:fahrenheit&lt;br /&gt;
print &#039;Temperature celsius: &#039; %temp:celsius&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Inside a non-shared method, references to the implicit input object, &amp;lt;code&amp;gt;%this&amp;lt;/code&amp;gt;, can omit the &amp;amp;#x201C;this:&amp;amp;#x201D; and refer to public and private class variables as if they were local variables. For example, the above &amp;lt;code&amp;gt;Fahrenheit&amp;lt;/code&amp;gt; property could have been written as:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;property fahrenheit is float&lt;br /&gt;
get&lt;br /&gt;
return (1.8 * %celsius) + 32&lt;br /&gt;
end get&lt;br /&gt;
 ...&lt;br /&gt;
end property fahrenheit&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
Nevertheless, the &amp;lt;code&amp;gt;this:&amp;lt;/code&amp;gt; can be specified to make clear that a reference is to a class variable or to distinguish a class variable from a local variable:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;property fahrenheit is float&lt;br /&gt;
 ...&lt;br /&gt;
  set&lt;br /&gt;
    %celsius is fixed dp 2&lt;br /&gt;
    %this:celsius = (%fahrenheit - 32) / 1.8&lt;br /&gt;
    %celsius = %this:celsius&lt;br /&gt;
    print &#039;Temperature changed to &#039; %celsius&lt;br /&gt;
  end set&lt;br /&gt;
end property fahrenheit  &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Because a local variable is accessed instead of a class variable by the same name, the &amp;lt;code&amp;gt;%this&amp;lt;/code&amp;gt; is required to reference the class variable inside a class method. This precedence of local variables ahead of class variables means that public or private variables can be added to a class without fear of &amp;amp;#x201C;breaking&amp;amp;#x201D; methods that might have local variables with the same name. This might be important in very large classes with many methods. There are other cases where the &amp;lt;code&amp;gt;%this&amp;lt;/code&amp;gt; is required to access the method object.&lt;br /&gt;
&lt;br /&gt;
====Subroutine====&lt;br /&gt;
The following is an example of a &amp;lt;var&amp;gt;Subroutine&amp;lt;/var&amp;gt; that sets a private class variable and then displays all private variables in the class:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;class comic&lt;br /&gt;
  private&lt;br /&gt;
    variable name is string len 32&lt;br /&gt;
    variable pratfalls is fixed&lt;br /&gt;
    variable trademark is longstring&lt;br /&gt;
  end private&lt;br /&gt;
  public&lt;br /&gt;
    subroutine display(%newName is string len 32)&lt;br /&gt;
  end public&lt;br /&gt;
  subroutine display(%newName is string len 32)&lt;br /&gt;
    %name = %newName&lt;br /&gt;
    print &#039;Name = &#039; %name&lt;br /&gt;
    print &#039;Pratfalls = &#039; %pratfalls&lt;br /&gt;
    print &#039;Trademark = &#039; %trademark&lt;br /&gt;
  end subroutine display&lt;br /&gt;
end class&lt;br /&gt;
%stooge is object comic&lt;br /&gt;
 ...&lt;br /&gt;
%stooge:display(&#039;Curly&#039;)&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;b id=&amp;quot;optionalParams&amp;quot;&amp;gt;&amp;lt;/b&amp;gt;Optional and default parameters==&lt;br /&gt;
Methods support optional parameters, that is, parameters that do not need to be passed on every invocation of the method. For example, suppose a function returns the number of items in a bin. And suppose that function can be passed a number of items to add to the bin. Usually when the function is invoked, no items are added, but once in a while, they are. So the function can be declared as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;class bin&lt;br /&gt;
 ...&lt;br /&gt;
public&lt;br /&gt;
 ...&lt;br /&gt;
function numberOfItems(%add is fixed optional)&lt;br /&gt;
 ...&lt;br /&gt;
end public&lt;br /&gt;
 ...&lt;br /&gt;
end class &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Given this declaration, the function could be invoked as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;%yellow is object bin&lt;br /&gt;
 ...&lt;br /&gt;
%yellow = new&lt;br /&gt;
 ...&lt;br /&gt;
print %yellow:numberOfItems &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It can also be invoked as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;print %yellow:numberOfItems() &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And, finally, in cases where a value is to be passed to the method, it could be invoked as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;%items = %yellow:numberOfItems(%number) &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
When a parameter is optional and it is not passed by the invoker, that parameter has a standard value, based on its datatype, inside the method. This standard value is the standard initial value for a variable of the parameter&#039;s datatype. These initial values for each datatype are the following:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;dl&amp;gt;&lt;br /&gt;
&amp;lt;dt&amp;gt;String &amp;lt;dd&amp;gt;A null (zero-length) string.&lt;br /&gt;
&amp;lt;dt&amp;gt;Longstring &amp;lt;dd&amp;gt;A null (zero-length) string.&lt;br /&gt;
&amp;lt;dt&amp;gt;Float &amp;lt;dd&amp;gt;0.&lt;br /&gt;
&amp;lt;dt&amp;gt;Fixed &amp;lt;dd&amp;gt;0.&lt;br /&gt;
&amp;lt;dt&amp;gt;Object &amp;lt;dd&amp;gt;Null. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;note&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Note:&amp;lt;/b&amp;gt; Because specifying the &amp;lt;var&amp;gt;Optional&amp;lt;/var&amp;gt; keyword for an &amp;lt;var&amp;gt;Object&amp;lt;/var&amp;gt; parameter means that the absence of the parameter presents a null object parameter variable to the method, &amp;lt;var&amp;gt;Optional&amp;lt;/var&amp;gt; implies the &amp;lt;var&amp;gt;AllowNull&amp;lt;/var&amp;gt; keyword and, in fact, it cannot be specified along with &amp;lt;var&amp;gt;AllowNull&amp;lt;/var&amp;gt;. &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;dt&amp;gt;Structure &amp;lt;dd&amp;gt;Each item in the structure is given its default initial value, which is the same as indicated in this list for the other datatypes, unless an Initial clause was used in a structure item declaration in the structure definition. So, if a method is defined as follows: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;function square(%number is float optional)&lt;br /&gt;
 ...&lt;br /&gt;
return %number * %number&lt;br /&gt;
 ...&lt;br /&gt;
end function &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The following will print &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;print %object:square &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/dl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For the &amp;amp;#x201C;simple&amp;amp;#x201D; datatypes &amp;lt;var&amp;gt;Fixed&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;Float&amp;lt;/var&amp;gt;, or &amp;lt;var&amp;gt;String&amp;lt;/var&amp;gt;, it is possible to specify an alternative value to be passed to a method for an unspecified argument. This is done by specifying the &amp;lt;var&amp;gt;Default&amp;lt;/var&amp;gt; keyword instead of &amp;lt;var&amp;gt;Optional&amp;lt;/var&amp;gt;. As of Sirius Mods 7.1, default values can also be specified for &amp;lt;var&amp;gt;Enumeration&amp;lt;/var&amp;gt; parameters, including &amp;lt;var&amp;gt;Booleans&amp;lt;/var&amp;gt;. The &amp;lt;var&amp;gt;Default&amp;lt;/var&amp;gt; keyword must be followed by a string, numeric, or enumeration constant in parentheses:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;function square(%number is float default(-1))&lt;br /&gt;
 ...&lt;br /&gt;
return %number * %number&lt;br /&gt;
 ...&lt;br /&gt;
end function &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And the following statement prints &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; since the square of -1 is 1:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;print %object:square &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The following method declaration uses an alternative default string value:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;subroutine addCustomer(%lname is string len 32 -&lt;br /&gt;
default(&#039;***Unknown***&#039;) ) &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The following method indicates a default value of &amp;lt;code&amp;gt;Share&amp;lt;/code&amp;gt; for a &amp;lt;var&amp;gt;LockStrength&amp;lt;/var&amp;gt; enumeration parameter:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;function getRecord(%key is string len 10, -&lt;br /&gt;
%ls is enumeration lockstrength default(share)) -&lt;br /&gt;
    is object record in file foo &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Optional or default parameters are allowed on any kind of method: functions, subroutines, properties, or constructors. Constructors, especially, can often benefit greatly from optional parameters as there are often extra qualifiers for newly instantiated objects that might be present, but often are not. For example, one might have a constructor for a product object that allows, but does not require, the specification of a product code:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;constructor new(%productCode is string len 8 optional) &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In this example, the &amp;lt;code&amp;gt;New&amp;lt;/code&amp;gt; function could then be invoked with or without the optional&lt;br /&gt;
product code:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;%cake = new&lt;br /&gt;
 ...&lt;br /&gt;
%pie = new(&#039;31415929&#039;) &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;b id=&amp;quot;isPresent&amp;quot;&amp;gt;&amp;lt;/b&amp;gt;Is [Not] Present test for optional or default parameter===&lt;br /&gt;
&lt;br /&gt;
Generally, it is sufficient for a method to simply use the replacement value for an optional or default parameter without caring whether that value was specified explicitly or generated implicitly. For example, if a method is declared as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;subroutine increment(%amount is fixed default(1)) &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It probably does not matter whether it is invoked as&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;%object:increment(1) &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
or&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;%object:increment &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
However, there may be cases where a method wants to distinguish between the two cases. For example, consider the following class:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;class incident&lt;br /&gt;
  public&lt;br /&gt;
    subroutine setComment( -&lt;br /&gt;
      %comment is string len 64 optional)&lt;br /&gt;
      ...&lt;br /&gt;
  end public&lt;br /&gt;
  private&lt;br /&gt;
    variable haveComment is float&lt;br /&gt;
    variable comment is string len 64&lt;br /&gt;
    ...&lt;br /&gt;
  end private&lt;br /&gt;
  ...&lt;br /&gt;
end class &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A null string might be a valid comment, but it also might be useful to be able to use the &amp;lt;code&amp;gt;SetComment&amp;lt;/code&amp;gt; method defined above to indicate that there is no comment. So, it might be necessary to distinguish the following two invocations:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;%object:setComment&lt;br /&gt;
 ...&lt;br /&gt;
%object:setComment(&#039;&#039;) &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To make this possible, SOUL provides the &amp;lt;var&amp;gt;Is Present&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;Is Not Present&amp;lt;/var&amp;gt; tests for optional and default method parameters:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;subroutine setComment(%comment is string len 64 optional)&lt;br /&gt;
  if %comment is present then&lt;br /&gt;
    %this:haveComment = 1&lt;br /&gt;
    %this:comment = %comment&lt;br /&gt;
  else&lt;br /&gt;
    %this:haveComment = 0&lt;br /&gt;
    %this:comment = &#039;&#039;&lt;br /&gt;
  end if&lt;br /&gt;
end subroutine setComment &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;var&amp;gt;Is Present&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;Is Not Present&amp;lt;/var&amp;gt; tests can be especially useful in code where the default value is not a constant. The most common example of this is a date parameter that is usually the current date, but not always. For example, consider a constructor that sets the start date for a transaction to the current date, unless an optional date is passed&lt;br /&gt;
to the constructor:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;constructor new(%startDate is string len 8 optional)&lt;br /&gt;
if %startDate is not present then&lt;br /&gt;
  %startDate = $sir_date(&#039;YYYYMMDD&#039;)&lt;br /&gt;
end if &lt;br /&gt;
 ... &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
While the same thing could probably be accomplished, in this case, by checking for a null value, it is a bit neater to check for the presence of the parameter.&lt;br /&gt;
&lt;br /&gt;
==Named parameters==&lt;br /&gt;
Methods support &amp;lt;b&amp;gt;named parameters&amp;lt;/b&amp;gt;, that is, parameters that are passed by name rather than position. For example, one might have a method called &amp;lt;code&amp;gt;Roundabout&amp;lt;/code&amp;gt; that has a parameter that specifies a value for an exit. It might be invoked as follows:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;%bypass:roundabout(&#039;KIDLINGTON&#039;)&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
If the first parameter for this method were allowed to be invoked by name, this method might also be invoked as:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;%bypass:roundabout(exit=&#039;KIDLINGTON&#039;)&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
As this example illustrates, a named parameter is indicated by the name of the parameter followed by an equal sign, which is then followed by any expression that is to be assigned to the parameter.&lt;br /&gt;
&lt;br /&gt;
Named parameters are supported for both system and user-written methods.&lt;br /&gt;
&lt;br /&gt;
Arguments that are passed by name are called &amp;lt;b&amp;gt;named&amp;lt;/b&amp;gt; arguments, while those that are not are called &amp;lt;b&amp;gt;positional&amp;lt;/b&amp;gt; arguments, because their meaning is determined by their position in an argument list. While a method can be invoked with both positional and named arguments, all the positional arguments must precede the named arguments. That is, the following is valid because all the positional arguments precede the named ones:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;%mini:addPetrol(24, &#039;Stratford&#039;, price=89.5, brand=&#039;BP&#039;)&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
But the following is invalid because the named parameter litres precedes the positional parameter &amp;lt;code&amp;gt;Stratford&amp;lt;/code&amp;gt;.&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;%mini:addPetrol(litres=24, &#039;Stratford&#039;, price=89.5)&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
A name on an argument can be allowed or required. If allowed, the argument can be specified either positionally or by name. If required, the argument can only be specified by name. Whether the name on an argument is allowed or required has nothing to do with whether the argument is required. That is, just as positional parameters can be required, Optional, or Default, so too can named parameters. That said, named parameters will tend to be optional, since required parameters usually have a fixed position in a parameter list.&lt;br /&gt;
&lt;br /&gt;
As noted before, system methods can have named parameters. To determine which parameters on a system method are positional, name allowed, or name required, see the documentation for that method. An example of a system method with a name required parameter is the &amp;lt;var&amp;gt;ParseLines&amp;lt;/var&amp;gt; method, which has a name required (but optional) &amp;lt;var&amp;gt;StripTrailingNull&amp;lt;/var&amp;gt; parameter:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt; %list:parseLines(%string, stripTrailingNull=false)&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
For user-written methods, the distinction between positional, name allowed, and name required parameters is made on the method declaration and definition header. By default, the parameters in user-written methods are positional. For example, in the following method declaration, all parameters are positional:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;subroutine display(%customerId is string len 10, -&lt;br /&gt;
                   %startyear is float, -&lt;br /&gt;
                   %showFamily is enumeration boolean optional, -&lt;br /&gt;
                   %showEmployer is enumeration boolean optional, -&lt;br /&gt;
                   %showMedical is enumeration boolean optional)&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
So the method might be invoked as follows:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;%cust:display(%crn, %year, true, , true)&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
To indicate that a name can be used for a parameter, the &amp;lt;var&amp;gt;NameAllowed&amp;lt;/var&amp;gt; keyword should be specified on the parameter declaration:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;subroutine display(%customerId is string len 10, -&lt;br /&gt;
                   %startyear is float, -&lt;br /&gt;
                   %showFamily is enumeration boolean optional, -&lt;br /&gt;
                   %showEmployer is enumeration boolean optional, -&lt;br /&gt;
                   %showMedical is enumeration boolean optional nameAllowed)&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
So that the method could then be invoked either as before, or as follows:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;%cust:display(%crn, %year, true, , showMedical=true)&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;note&amp;quot;&amp;gt;&#039;&#039;&#039;Note:&#039;&#039;&#039; Even though the parameter name is declared with a leading percent character (&amp;lt;tt&amp;gt;%&amp;lt;/tt&amp;gt;), the name of the parameter when invoking the method should exclude the percent character. &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the &amp;lt;var&amp;gt;NameRequired&amp;lt;/var&amp;gt; keyword is specified on a parameter definition, the parameter must always be passed as a named argument rather than a positional one:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;subroutine display(%customerId is string len 10, -&lt;br /&gt;
                   %startyear is float, -&lt;br /&gt;
                   %showFamily is enumeration boolean optional, -&lt;br /&gt;
                   %showEmployer is enumeration boolean optional, -&lt;br /&gt;
                   %showMedical is enumeration boolean optional nameRequired)&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
If a parameter other than the last is specified with &amp;lt;var&amp;gt;NameAllowed&amp;lt;/var&amp;gt;, all parameters after that are also treated as if &amp;lt;var&amp;gt;NameAllowed&amp;lt;/var&amp;gt; were specified on their declarations. That is, the following two declarations are equivalent:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;subroutine display(%customerId is string len 10, -&lt;br /&gt;
                   %startyear is float, -&lt;br /&gt;
                   %showFamily is enumeration boolean optional nameAllowed, -&lt;br /&gt;
                   %showEmployer is enumeration boolean optional nameAllowed, -&lt;br /&gt;
                   %showMedical is enumeration boolean optional nameAllowed)&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;subroutine display(%customerId is string len 10, -&lt;br /&gt;
                   %startyear is float, -&lt;br /&gt;
                   %showFamily is enumeration boolean optional nameAllowed, -&lt;br /&gt;
                   %showEmployer is enumeration boolean optional, -&lt;br /&gt;
                   %showMedical is enumeration boolean optional)&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
Similarly, a &amp;lt;var&amp;gt;NameRequired&amp;lt;/var&amp;gt; keyword implies &amp;lt;var&amp;gt;NameRequired&amp;lt;/var&amp;gt; for all subsequent parameters. A NameRequired parameter can follow a NameAllowed parameter though, of course, all parameters after the NameRequired parameter are also assumed to be &amp;lt;var&amp;gt;NameRequired&amp;lt;/var&amp;gt;, whether or not that keyword is specified. A NameAllowed parameter cannot follow a NameRequired parameter. Named arguments can be specified in any order, so given the above declaration, the following two invocations are identical:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;%cust:display(%crn, %year, showFamily=true, showMedical=false)&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;%cust:display(%crn, %year, showMedical=false, showFamily=true)&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
There are many reasons to use named parameters. One is to make method invocations easier to understand. If a method has many parameters, the invocations can look like:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;%cust:display(%crn, %year, true, false)&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
And, if a programmer looking at this did not have the parameters for this method memorized, she would have to go to the method declaration to have an idea of what was being done here. But naming the arguments makes the code much clearer:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;%cust:display(%crn, %year, showFamily=true, showMedical=false)&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
As this example illustrates, named parameters can be particularly useful for boolean switches that alter the behavior of a method, especially when there are many of these switches.&lt;br /&gt;
&lt;br /&gt;
Another advantage of named parameters is that they are order independent. This means that place-holders do not have to be specified for optional parameters that are not specified on their invocation. This is especially important for methods with many optional parameters. For example, in the absence of named parameters, a method with seven optional parameters might be invoked as follows:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;%mini:drive(,,,,,,,65)&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
Such a call can be made much easier to read, and much less error prone, by using a named parameter:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;%mini:drive(speed=65)&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
Named parameters can also be useful to delay decisions about parameter order. That is, if a method has, say, two optional parameters, and it is not immediately obvious which one is most likely to be used more often (and thus be the first positional parameter), the parameters can be initially declared as NameRequired:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;subroutine add(%oil is float optional nameRequired, -&lt;br /&gt;
               %petrol is float optional nameRequired)&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
All invocations of the method would then have to use names:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;%mg:add(petrol=18)&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
If after some experience, it is determined that one parameter is much more commonly used than another, that parameter can be changed to a &amp;lt;var&amp;gt;NameAllowed&amp;lt;/var&amp;gt; parameter:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;subroutine add(%petrol is float optional &amp;lt;var&amp;gt;NameAllowed&amp;lt;/var&amp;gt;, -&lt;br /&gt;
               %oil is float optional nameRequired)&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
When that change is made, invocations of the method can use the &amp;lt;var&amp;gt;NameAllowed&amp;lt;/var&amp;gt; parameter positionally:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;%mg:add(18)&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
Note that this delaying tactic can even be useful with non-optional parameters, if there is a possibility that some of the non-optional parameters might be made optional some day &amp;amp;mdash; perhaps after appropriate defaults are determined.&lt;br /&gt;
&lt;br /&gt;
Finally, named parameters can be used to &amp;amp;#x201C;rescue&amp;amp;#x201D; a (retrospectively) bad decision about parameter order. For example, if after some use, it is determined that for a method with many parameters, the fifth parameter is more often specified than any of the earlier parameters, it can be turned into a &amp;lt;var&amp;gt;NameAllowed&amp;lt;/var&amp;gt; parameter, making it possible to specify that parameter without having to specify the earlier parameters. All this said, named parameters are not a panacea. There are some drawbacks to using named parameters:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;They make method invocations more verbose, sometimes with little or no benefit. This is especially true for methods with one or two parameters where the meaning of the parameter(s) are obvious from the name of the method.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Time and care must be taken to chose good parameter names. Once a parameter name is chosen for a named parameter, it can be quite difficult to change it, as this would require changing all code that specifies that parameter name in a method invocation.&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So, as with most programming constructs, the use of named parameters is an art rather than a science. As named parameters should be used where appropriate, they should be avoided where inappropriate. But other than the vague and not inviolate principle that named parameters are more likely to be useful in methods with more parameters, the appropriateness of named parameters is a subjective matter.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;note&amp;quot;&amp;gt;&#039;&#039;&#039;Note:&#039;&#039;&#039; A final point should be made about named parameters: their syntax is somewhat of an inconsistency in &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;User Language&amp;lt;/var&amp;gt;. In most contexts where user-written expressions are allowed, an equal sign is treated as a comparison operator. &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For example, in the following statement the variables &amp;lt;code&amp;gt;%value&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;%crn&amp;lt;/code&amp;gt; are compared, and, if equal, the global &amp;lt;code&amp;gt;CRN&amp;lt;/code&amp;gt; is set to 1, otherwise it is set to 0: &lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;$setg(&#039;CRN&#039;, %value=%crn)&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
If &amp;lt;code&amp;gt;%value&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;%crn&amp;lt;/code&amp;gt; were not defined, this statement would generate a compilation error.&lt;br /&gt;
&lt;br /&gt;
Given this syntactic structure, one might expect that a named argument in a method invocation would be interpreted as a comparison of a field name with a value. For example, one might expect the argument to the &amp;lt;var&amp;gt;New&amp;lt;/var&amp;gt; method to be the result of a comparison between field &amp;lt;code&amp;gt;Host&amp;lt;/code&amp;gt; and the variable &amp;lt;code&amp;gt;%target&amp;lt;/code&amp;gt;:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;%socket = new(host=%target)&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
The reality is that the use of the equal sign is almost always limited to conditions in an &amp;lt;var&amp;gt;If&amp;lt;/var&amp;gt; statement, so one probably wouldn&#039;t expect to find a comparison in the above context. Object-oriented SOUL takes one step further by interpreting any single token followed by an equal sign in a method parameter as a named argument, whether or not what is to the left of the equal sign is a valid parameter name. For example, the following will produce a compilation error, even if &amp;lt;code&amp;gt;%input&amp;lt;/code&amp;gt; is a defined variable, and even though it is not a valid parameter name:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;%object:doIfTrue(%input = 1)&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
In the odd cases where one really wants to pass the result of an equality comparison to a method, the alternative character comparison operator can be used:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;%object:doIfTrue(%input eq 1)&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
or, the comparison can be wrapped in an extra parenthesis:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;%object:doIfTrue((%input eq 1))&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;b id=&amp;quot;Internal parameter names&amp;quot;&amp;gt;&amp;lt;/b&amp;gt;Parameter description guidelines==&lt;br /&gt;
A method declaration contains a description of the method&#039;s parameters. A parameter description includes the parameter name, type, and attributes (&amp;lt;var&amp;gt;Optional&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;AllowNull&amp;lt;/var&amp;gt;, and so on). The names should be descriptive, as this makes it easier for users of a method to understand what the method does by looking at its declaration. For example, the following method declaration&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;subroutine fill(%petrol is float, %oil is float)&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
is much more helpful than this declaration:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;subroutine fill(%x is float, %y is float)&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
With the availability of named parameters, the use of meaningful parameter names becomes even more important, because the parameter names will actually appear in the method invocations:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;%multipla:fill(oil=0.5)&amp;lt;/p&amp;gt;&lt;br /&gt;
===&amp;lt;b id=&amp;quot;intNamesStmt&amp;quot;&amp;gt;&amp;lt;/b&amp;gt;Mapping parameter names in declarations to names within methods=== &lt;br /&gt;
It is possible that the ideal names for method declarations are not the ideal names for the parameters within the actual methods themselves. For example, one might have a standard that all parameters should start with &amp;lt;code&amp;gt;parm.&amp;lt;/code&amp;gt; in method code, so that it is easy to tell which variables are parameters. If this standard is extended to the names on the declaration, the result is ugly and redundant parameter names in declarations and method invocations:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;%multipla:fill(parm.oil=0.5)&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;var&amp;gt;InternalNames&amp;lt;/var&amp;gt; block is provided to allow mapping of parameter names on declarations to another name to be used within the method, making it possible to use the optimal names on method declarations and within methods, even if the two names are not the same.&lt;br /&gt;
&lt;br /&gt;
The syntax of the &amp;lt;var&amp;gt;InternalNames&amp;lt;/var&amp;gt; block is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;literal&amp;quot;&amp;gt;InternalNames&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;newName&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;squareb&amp;quot;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;literal&amp;quot;&amp;gt;Is&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;squareb&amp;quot;&amp;gt;]&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;parameterName&amp;lt;/span&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;span class=&amp;quot;literal&amp;quot;&amp;gt;End InternalNames&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Where:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;newName&amp;lt;/th&amp;gt;&amp;lt;td&amp;gt;The name to be assigned to that parameter for internal use.&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;parameterName&amp;lt;/th&amp;gt;&amp;lt;td&amp;gt;The name of the parameter as it appears in the method declaration.&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;var&amp;gt;InternalNames&amp;lt;/var&amp;gt; statement must be the first statement after a method definition header, which means that for properties it must appear before the &amp;lt;var&amp;gt;Get&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;Set&amp;lt;/var&amp;gt; blocks.&lt;br /&gt;
&lt;br /&gt;
For properties, the &amp;lt;var&amp;gt;InternalNames&amp;lt;/var&amp;gt; block changes the names of parameters for both the &amp;lt;var&amp;gt;Get&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;Set&amp;lt;/var&amp;gt; methods. &amp;lt;var&amp;gt;InternalNames&amp;lt;/var&amp;gt; can be used to rename implicit parameters, such as:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;%this, which is used to reference the method object. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;The input value parameter for properties, which has the same name as the property (preceded by a percent). &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the following example, the input variables &amp;lt;code&amp;gt;%petrol&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;%oil&amp;lt;/code&amp;gt; are mapped to the names &amp;lt;code&amp;gt;%parm.petrol&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;%parm.oil&amp;lt;/code&amp;gt;, respectively:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;subroutine add(%petrol is float nameRequired optional, -&lt;br /&gt;
  %oil is float nameRequired optional)&lt;br /&gt;
internalNames&lt;br /&gt;
  %parm.petrol is %petrol&lt;br /&gt;
  %parm.oil is %oil&lt;br /&gt;
end internalNames&lt;br /&gt;
...&lt;br /&gt;
%petrol = %petrol + %parm.petrol&lt;br /&gt;
%oil = %oil + %parm.oil&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This example illustrates how if &amp;lt;code&amp;gt;petrol&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;oil&amp;lt;/code&amp;gt; were private class variables, the &amp;lt;var&amp;gt;InternalNames&amp;lt;/var&amp;gt; block makes it possible to have parameters in a method declaration with the same name, but to avoid naming conflict or confusion between the private class variables and the parameter names.&lt;br /&gt;
&lt;br /&gt;
==Stringing method invocations together==&lt;br /&gt;
Often, a method will return an object, that is, an instance of a class. In such cases, it is possible to invoke another method against the result object by stringing together method invocations.&lt;br /&gt;
&lt;br /&gt;
In the following example, the method object for the &amp;lt;code&amp;gt;Slap&amp;lt;/code&amp;gt; subroutine is the object returned by the &amp;lt;code&amp;gt;Call&amp;lt;/code&amp;gt; function:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;class comic&lt;br /&gt;
  public&lt;br /&gt;
    function call(%name is string len 32) is object comic&lt;br /&gt;
    subroutine slap&lt;br /&gt;
    ...&lt;br /&gt;
  end public&lt;br /&gt;
  ...&lt;br /&gt;
end class&lt;br /&gt;
 ...&lt;br /&gt;
%moe is object comic&lt;br /&gt;
 ...&lt;br /&gt;
%moe:call(&#039;Curly):slap &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The same is true for stringing a method invocation to an object variable in a class:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;class comic&lt;br /&gt;
  public&lt;br /&gt;
    variable brother is object comic&lt;br /&gt;
    subroutine slap&lt;br /&gt;
    ...&lt;br /&gt;
  end public&lt;br /&gt;
  ...&lt;br /&gt;
end class&lt;br /&gt;
 ...&lt;br /&gt;
%moe is object comic&lt;br /&gt;
 ...&lt;br /&gt;
%moe:brother:slap &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This stringing of method/variable names can be extended indefinitely and is one of the big advantages of object-oriented syntax over standard procedure syntax. Procedural syntax accomplishes the same economy using nesting:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;call $slap($brother(%moe)) &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
With procedural syntax, the evaluation is from the inside out and should be read that way. Evaluation of strung-together class members is left to right, and so it can be read in that more natural order. If there is more than one input object to a method, object oriented syntax must also resort to nesting, but this is relatively rare and still requires one fewer nested object than procedural syntax.&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[[Classes and Objects]]&lt;br /&gt;
&amp;lt;li&amp;gt;[[Local and Common entities]]&lt;br /&gt;
&amp;lt;li&amp;gt;[[Enhancement methods]]&lt;br /&gt;
&amp;lt;li&amp;gt;[[Print, Audit, and Trace methods for user objects]]&lt;br /&gt;
&amp;lt;li&amp;gt;[[Object oriented programming in SOUL]]&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Overviews]]&lt;br /&gt;
[[Category:SOUL object-oriented programming topics]]&lt;/div&gt;</summary>
		<author><name>ELowell</name></author>
	</entry>
	<entry>
		<id>https://m204wiki.rocketsoftware.com/index.php?title=Methods&amp;diff=117689</id>
		<title>Methods</title>
		<link rel="alternate" type="text/html" href="https://m204wiki.rocketsoftware.com/index.php?title=Methods&amp;diff=117689"/>
		<updated>2019-09-18T18:21:49Z</updated>

		<summary type="html">&lt;p&gt;ELowell: /* InternalNames - map parameter names to names within the method */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;As discussed in [[Classes and Objects]], a &amp;lt;var&amp;gt;Class&amp;lt;/var&amp;gt; block can contain declaration blocks and/or &#039;&#039;&#039;method&#039;&#039;&#039; definitions. This page describes the characteristics of these class methods and &lt;br /&gt;
their definitions. For information about defining special-purpose methods that are less broadly applicable and therefore not part of the class, see [[Local and Common entities]].  &lt;br /&gt;
&lt;br /&gt;
==Method definition syntax==&lt;br /&gt;
All declaration blocks must appear before any method definitions. A method definition consists of the method header, which is basically a reiteration of the method declaration, the method body (code), and an End method statement:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;methodHeader&amp;lt;/span&amp;gt;&lt;br /&gt;
  &amp;lt;span class=&amp;quot;squareb&amp;quot;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;[[#Internal parameter names|internalNamesBlock]]&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;squareb&amp;quot;&amp;gt;]&amp;lt;/span&amp;gt;&lt;br /&gt;
  &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;methodBody&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;literal&amp;quot;&amp;gt;End&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;methodType&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;squareb&amp;quot;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;methodName&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;squareb&amp;quot;&amp;gt;]&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;methodHeader&#039;&#039; must nearly match the method declaration (which is described in detail in [[Classes and Objects#Method declarations and method types|Method declarations and method types]]), except:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Named parameters do not have to appear in the same order. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;The optional &amp;lt;var&amp;gt;Public&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;Private&amp;lt;/var&amp;gt;, or &amp;lt;var&amp;gt;Shared&amp;lt;/var&amp;gt; indication may be present on one and not the other. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The parameter names must be present on the method declarations (as opposed to the &amp;lt;var&amp;gt;Declare Subroutine&amp;lt;/var&amp;gt; statement) and must match the parameter names in the method header. This redundancy may seem extreme, it has several benefits:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;It ensures that a complete method description is available in both the declaration block and the method definition. The former is convenient for users of the class and someone trying to understand the class as a whole. The latter is convenient for someone looking at the method in isolation. Meaningful parameter names on the method declarations will make the method functionality much clearer than the parameter datatype alone. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Complete redundancy makes it possible to cut-and-paste or copy a method declaration to the method definition, or vice versa. The method body consists of the code that implements the method or methods. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;props&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;var&amp;gt;Functions&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;Subroutines&amp;lt;/var&amp;gt; have one method, but &amp;lt;var&amp;gt;Properties&amp;lt;/var&amp;gt; can have two methods: one for retrieving the property (a &amp;lt;var&amp;gt;Get&amp;lt;/var&amp;gt; method), and one for setting the property (a &amp;lt;var&amp;gt;Set&amp;lt;/var&amp;gt; method). The &amp;lt;var&amp;gt;Get&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;Set&amp;lt;/var&amp;gt; methods are enclosed in &amp;lt;var&amp;gt;Get&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;Set&amp;lt;/var&amp;gt; blocks:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;literal&amp;quot;&amp;gt;Property&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;name&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;squareb&amp;quot;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;(parameters)&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;squareb&amp;quot;&amp;gt;]&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;squareb&amp;quot;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;literal&amp;quot;&amp;gt;Is&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;squareb&amp;quot;&amp;gt;]&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;type&amp;lt;/span&amp;gt;&lt;br /&gt;
  [[#Internal parameter names|&amp;lt;span class=&amp;quot;squareb&amp;quot;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;internalNamesBlock&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;squareb&amp;quot;&amp;gt;]&amp;lt;/span&amp;gt;]]&lt;br /&gt;
  &amp;lt;span class=&amp;quot;literal&amp;quot;&amp;gt;Get&amp;lt;/span&amp;gt;&lt;br /&gt;
    &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;getmethodBody&amp;lt;/span&amp;gt;&lt;br /&gt;
  &amp;lt;span class=&amp;quot;literal&amp;quot;&amp;gt;End Get&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;squareb&amp;quot;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;methodName&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;squareb&amp;quot;&amp;gt;]&amp;lt;/span&amp;gt;&lt;br /&gt;
  &amp;lt;span class=&amp;quot;literal&amp;quot;&amp;gt;Set&amp;lt;/span&amp;gt;&lt;br /&gt;
    &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;setmethodBody&amp;lt;/span&amp;gt;&lt;br /&gt;
  &amp;lt;span class=&amp;quot;literal&amp;quot;&amp;gt;End Set&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;squareb&amp;quot;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;methodName&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;squareb&amp;quot;&amp;gt;]&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;literal&amp;quot;&amp;gt;End&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;literal&amp;quot;&amp;gt;Property&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;squareb&amp;quot;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;methodName&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;squareb&amp;quot;&amp;gt;]&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
The &amp;lt;var&amp;gt;Get&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;Set&amp;lt;/var&amp;gt; methods can appear in any order inside the &amp;lt;var&amp;gt;Property&amp;lt;/var&amp;gt; definition block, though must both appear within a single property definition block. &amp;lt;var&amp;gt;ReadOnly&amp;lt;/var&amp;gt; methods have a &amp;lt;var&amp;gt;Get&amp;lt;/var&amp;gt; method only. &amp;lt;var&amp;gt;WriteOnly&amp;lt;/var&amp;gt; methods have a &amp;lt;var&amp;gt;Set&amp;lt;/var&amp;gt; method only.&lt;br /&gt;
&lt;br /&gt;
==Comparing methods to complex subroutines==&lt;br /&gt;
Methods behave very much like &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;SOUL&amp;lt;/var&amp;gt; [[Subroutines|complex subroutines]], and they have some important differences:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Methods can have optional parameters, that is, parameters not specified in the method invocation. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Method Input parameters (unless they are arrays) are passed to the method by value &amp;amp;mdash; by copying the corresponding argument values provided when the method is invoked, instead of working with a pointer to the argument values. This copying allows the parameters to be updated within the method without consequence to the arguments outside the method.  Method Output parameters are passed by reference &amp;amp;#x2014; pointers to the argument values are passed instead of argument value copies, and updates to the parameters within the method affect the actual arguments outside the method. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;methobj2&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Instance-specific (non-&amp;lt;var&amp;gt;Shared&amp;lt;/var&amp;gt;) methods always have an implicit input parameter: the object on which they operate, also known as the &#039;&#039;&#039;method object&#039;&#039;&#039;. This implicit object can be referred to by the parameter name &amp;lt;var&amp;gt;%this&amp;lt;/var&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;note&amp;quot;&amp;gt;&#039;&#039;&#039;Note:&#039;&#039;&#039; It is not valid to declare a local variable named &amp;lt;code&amp;gt;%this&amp;lt;/code&amp;gt; in non-&amp;lt;var&amp;gt;Shared&amp;lt;/var&amp;gt; methods because it is implicitly declared by &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;SOUL&amp;lt;/var&amp;gt;. &amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;The &amp;lt;var&amp;gt;Set&amp;lt;/var&amp;gt; method in a &amp;lt;var&amp;gt;Property&amp;lt;/var&amp;gt; has another implicit input parameter: the value to which the property is being set. This parameter has the same name as the property. For example, if a property is called &amp;lt;code&amp;gt;Height&amp;lt;/code&amp;gt;, the input value in a &amp;lt;var&amp;gt;Set&amp;lt;/var&amp;gt; method for an instance-specific (non-shared) method may be referenced as:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;%this:height&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;note&amp;quot;&amp;gt;&#039;&#039;&#039;Note:&#039;&#039;&#039; Within the &amp;lt;var&amp;gt;Set&amp;lt;/var&amp;gt; method, the input value is copied (not referenced directly), so it may be updated. &amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Methods, being part of a class, can access the &amp;lt;var&amp;gt;Private&amp;lt;/var&amp;gt; methods and variables in a class. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;All statement labels within a method definition must be unique. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Local variables in methods are always auto-initialized upon entry. They take either their explicit Initial values or implicit initial values by datatype (0 for Fixed and Float, a null string for &amp;lt;var&amp;gt;String&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;Longstring&amp;lt;/var&amp;gt;, a null for Objects). &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Local variables are always stacked for recursive entry to methods. That is, if a method is called directly by itself or indirectly by other methods, the subsequent executions get their own copies of all local variables. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Object variables and &amp;lt;var&amp;gt;Longstrings&amp;lt;/var&amp;gt; are automatically cleaned up on exit from methods. Object variables are set to null, and if a variable is the last reference to an object, the object is discarded (see, [[Object variables]]). &amp;lt;var&amp;gt;Longstrings&amp;lt;/var&amp;gt; are set to null, and any CCATEMP pages associated with the &amp;lt;var&amp;gt;Longstrings&amp;lt;/var&amp;gt; are freed. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Methods that return a value must have the return value indicated on the &amp;lt;var&amp;gt;Return&amp;lt;/var&amp;gt; statement. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Examples of method definitions==&lt;br /&gt;
&lt;br /&gt;
====Function====&lt;br /&gt;
The following is an example of a Function that adds an amount to a private variable and returns the new value:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;class account&lt;br /&gt;
  private&lt;br /&gt;
    variable balance is fixed dp 2&lt;br /&gt;
  end private&lt;br /&gt;
  public&lt;br /&gt;
    function adjustBalance(%amount is fixed dp 2) -&lt;br /&gt;
         is fixed dp 2 callable&lt;br /&gt;
  end public&lt;br /&gt;
 &lt;br /&gt;
  function adjustBalance(%amount is fixed dp 2) is fixed dp 2 callable&lt;br /&gt;
    %this:balance = %this:balance + %amount&lt;br /&gt;
    return %this:balance&lt;br /&gt;
  end function&lt;br /&gt;
end class&lt;br /&gt;
 ...&lt;br /&gt;
%myAccount is object account&lt;br /&gt;
 ...&lt;br /&gt;
%balance = %myAccount:adjustBalance(50.00)&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
If the application does not need the new balance resulting from the &amp;lt;code&amp;gt;AdjustBalance&amp;lt;/code&amp;gt;, the last line could be written:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;%myAccount:adjustBalance(50.00) &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As when invoking &amp;lt;var&amp;gt;Variable&amp;lt;/var&amp;gt; members of a class, the colon (&amp;lt;tt&amp;gt;:&amp;lt;/tt&amp;gt;) that separates the object variable &amp;lt;code&amp;gt;%myaccount&amp;lt;/code&amp;gt; and the method &amp;lt;code&amp;gt;adjustBalance&amp;lt;/code&amp;gt;, above, may alternatively be specified with a single blank before and/or after it.&lt;br /&gt;
&lt;br /&gt;
====Property====&lt;br /&gt;
The following example illustrates a &amp;lt;var&amp;gt;Property&amp;lt;/var&amp;gt; that returns or sets a temperature in Fahrenheit, and that uses a public variable to retrieve or set the Celsius temperature. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;class thermometer&lt;br /&gt;
&lt;br /&gt;
public&lt;br /&gt;
  variable celsius is float&lt;br /&gt;
  property fahrenheit is float&lt;br /&gt;
end public&lt;br /&gt;
property fahrenheit is float&lt;br /&gt;
  get&lt;br /&gt;
    return (1.8 * %this:celsius) + 32&lt;br /&gt;
  end get&lt;br /&gt;
  set&lt;br /&gt;
    %this:celsius = (%fahrenheit - 32) / 1.8&lt;br /&gt;
  end set&lt;br /&gt;
end property fahrenheit&lt;br /&gt;
end class&lt;br /&gt;
 &lt;br /&gt;
%temp is object thermometer&lt;br /&gt;
%temp = new&lt;br /&gt;
 ...&lt;br /&gt;
%temp:fahrenheit = %input&lt;br /&gt;
 ...&lt;br /&gt;
print &#039;Temperature fahrenheit: &#039; %temp:fahrenheit&lt;br /&gt;
print &#039;Temperature celsius: &#039; %temp:celsius&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Inside a non-shared method, references to the implicit input object, &amp;lt;code&amp;gt;%this&amp;lt;/code&amp;gt;, can omit the &amp;amp;#x201C;this:&amp;amp;#x201D; and refer to public and private class variables as if they were local variables. For example, the above &amp;lt;code&amp;gt;Fahrenheit&amp;lt;/code&amp;gt; property could have been written as:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;property fahrenheit is float&lt;br /&gt;
get&lt;br /&gt;
return (1.8 * %celsius) + 32&lt;br /&gt;
end get&lt;br /&gt;
 ...&lt;br /&gt;
end property fahrenheit&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
Nevertheless, the &amp;lt;code&amp;gt;this:&amp;lt;/code&amp;gt; can be specified to make clear that a reference is to a class variable or to distinguish a class variable from a local variable:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;property fahrenheit is float&lt;br /&gt;
 ...&lt;br /&gt;
  set&lt;br /&gt;
    %celsius is fixed dp 2&lt;br /&gt;
    %this:celsius = (%fahrenheit - 32) / 1.8&lt;br /&gt;
    %celsius = %this:celsius&lt;br /&gt;
    print &#039;Temperature changed to &#039; %celsius&lt;br /&gt;
  end set&lt;br /&gt;
end property fahrenheit  &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Because a local variable is accessed instead of a class variable by the same name, the &amp;lt;code&amp;gt;%this&amp;lt;/code&amp;gt; is required to reference the class variable inside a class method. This precedence of local variables ahead of class variables means that public or private variables can be added to a class without fear of &amp;amp;#x201C;breaking&amp;amp;#x201D; methods that might have local variables with the same name. This might be important in very large classes with many methods. There are other cases where the &amp;lt;code&amp;gt;%this&amp;lt;/code&amp;gt; is required to access the method object.&lt;br /&gt;
&lt;br /&gt;
====Subroutine====&lt;br /&gt;
The following is an example of a &amp;lt;var&amp;gt;Subroutine&amp;lt;/var&amp;gt; that sets a private class variable and then displays all private variables in the class:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;class comic&lt;br /&gt;
  private&lt;br /&gt;
    variable name is string len 32&lt;br /&gt;
    variable pratfalls is fixed&lt;br /&gt;
    variable trademark is longstring&lt;br /&gt;
  end private&lt;br /&gt;
  public&lt;br /&gt;
    subroutine display(%newName is string len 32)&lt;br /&gt;
  end public&lt;br /&gt;
  subroutine display(%newName is string len 32)&lt;br /&gt;
    %name = %newName&lt;br /&gt;
    print &#039;Name = &#039; %name&lt;br /&gt;
    print &#039;Pratfalls = &#039; %pratfalls&lt;br /&gt;
    print &#039;Trademark = &#039; %trademark&lt;br /&gt;
  end subroutine display&lt;br /&gt;
end class&lt;br /&gt;
%stooge is object comic&lt;br /&gt;
 ...&lt;br /&gt;
%stooge:display(&#039;Curly&#039;)&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;b id=&amp;quot;optionalParams&amp;quot;&amp;gt;&amp;lt;/b&amp;gt;Optional and default parameters==&lt;br /&gt;
Methods support optional parameters, that is, parameters that do not need to be passed on every invocation of the method. For example, suppose a function returns the number of items in a bin. And suppose that function can be passed a number of items to add to the bin. Usually when the function is invoked, no items are added, but once in a while, they are. So the function can be declared as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;class bin&lt;br /&gt;
 ...&lt;br /&gt;
public&lt;br /&gt;
 ...&lt;br /&gt;
function numberOfItems(%add is fixed optional)&lt;br /&gt;
 ...&lt;br /&gt;
end public&lt;br /&gt;
 ...&lt;br /&gt;
end class &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Given this declaration, the function could be invoked as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;%yellow is object bin&lt;br /&gt;
 ...&lt;br /&gt;
%yellow = new&lt;br /&gt;
 ...&lt;br /&gt;
print %yellow:numberOfItems &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It can also be invoked as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;print %yellow:numberOfItems() &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And, finally, in cases where a value is to be passed to the method, it could be invoked as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;%items = %yellow:numberOfItems(%number) &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
When a parameter is optional and it is not passed by the invoker, that parameter has a standard value, based on its datatype, inside the method. This standard value is the standard initial value for a variable of the parameter&#039;s datatype. These initial values for each datatype are the following:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;dl&amp;gt;&lt;br /&gt;
&amp;lt;dt&amp;gt;String &amp;lt;dd&amp;gt;A null (zero-length) string.&lt;br /&gt;
&amp;lt;dt&amp;gt;Longstring &amp;lt;dd&amp;gt;A null (zero-length) string.&lt;br /&gt;
&amp;lt;dt&amp;gt;Float &amp;lt;dd&amp;gt;0.&lt;br /&gt;
&amp;lt;dt&amp;gt;Fixed &amp;lt;dd&amp;gt;0.&lt;br /&gt;
&amp;lt;dt&amp;gt;Object &amp;lt;dd&amp;gt;Null. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;note&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Note:&amp;lt;/b&amp;gt; Because specifying the &amp;lt;var&amp;gt;Optional&amp;lt;/var&amp;gt; keyword for an &amp;lt;var&amp;gt;Object&amp;lt;/var&amp;gt; parameter means that the absence of the parameter presents a null object parameter variable to the method, &amp;lt;var&amp;gt;Optional&amp;lt;/var&amp;gt; implies the &amp;lt;var&amp;gt;AllowNull&amp;lt;/var&amp;gt; keyword and, in fact, it cannot be specified along with &amp;lt;var&amp;gt;AllowNull&amp;lt;/var&amp;gt;. &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;dt&amp;gt;Structure &amp;lt;dd&amp;gt;Each item in the structure is given its default initial value, which is the same as indicated in this list for the other datatypes, unless an Initial clause was used in a structure item declaration in the structure definition. So, if a method is defined as follows: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;function square(%number is float optional)&lt;br /&gt;
 ...&lt;br /&gt;
return %number * %number&lt;br /&gt;
 ...&lt;br /&gt;
end function &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The following will print &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;print %object:square &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/dl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For the &amp;amp;#x201C;simple&amp;amp;#x201D; datatypes &amp;lt;var&amp;gt;Fixed&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;Float&amp;lt;/var&amp;gt;, or &amp;lt;var&amp;gt;String&amp;lt;/var&amp;gt;, it is possible to specify an alternative value to be passed to a method for an unspecified argument. This is done by specifying the &amp;lt;var&amp;gt;Default&amp;lt;/var&amp;gt; keyword instead of &amp;lt;var&amp;gt;Optional&amp;lt;/var&amp;gt;. As of Sirius Mods 7.1, default values can also be specified for &amp;lt;var&amp;gt;Enumeration&amp;lt;/var&amp;gt; parameters, including &amp;lt;var&amp;gt;Booleans&amp;lt;/var&amp;gt;. The &amp;lt;var&amp;gt;Default&amp;lt;/var&amp;gt; keyword must be followed by a string, numeric, or enumeration constant in parentheses:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;function square(%number is float default(-1))&lt;br /&gt;
 ...&lt;br /&gt;
return %number * %number&lt;br /&gt;
 ...&lt;br /&gt;
end function &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And the following statement prints &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; since the square of -1 is 1:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;print %object:square &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The following method declaration uses an alternative default string value:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;subroutine addCustomer(%lname is string len 32 -&lt;br /&gt;
default(&#039;***Unknown***&#039;) ) &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The following method indicates a default value of &amp;lt;code&amp;gt;Share&amp;lt;/code&amp;gt; for a &amp;lt;var&amp;gt;LockStrength&amp;lt;/var&amp;gt; enumeration parameter:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;function getRecord(%key is string len 10, -&lt;br /&gt;
%ls is enumeration lockstrength default(share)) -&lt;br /&gt;
    is object record in file foo &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Optional or default parameters are allowed on any kind of method: functions, subroutines, properties, or constructors. Constructors, especially, can often benefit greatly from optional parameters as there are often extra qualifiers for newly instantiated objects that might be present, but often are not. For example, one might have a constructor for a product object that allows, but does not require, the specification of a product code:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;constructor new(%productCode is string len 8 optional) &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In this example, the &amp;lt;code&amp;gt;New&amp;lt;/code&amp;gt; function could then be invoked with or without the optional&lt;br /&gt;
product code:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;%cake = new&lt;br /&gt;
 ...&lt;br /&gt;
%pie = new(&#039;31415929&#039;) &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;b id=&amp;quot;isPresent&amp;quot;&amp;gt;&amp;lt;/b&amp;gt;Is [Not] Present test for optional or default parameter===&lt;br /&gt;
&lt;br /&gt;
Generally, it is sufficient for a method to simply use the replacement value for an optional or default parameter without caring whether that value was specified explicitly or generated implicitly. For example, if a method is declared as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;subroutine increment(%amount is fixed default(1)) &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It probably does not matter whether it is invoked as&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;%object:increment(1) &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
or&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;%object:increment &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
However, there may be cases where a method wants to distinguish between the two cases. For example, consider the following class:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;class incident&lt;br /&gt;
  public&lt;br /&gt;
    subroutine setComment( -&lt;br /&gt;
      %comment is string len 64 optional)&lt;br /&gt;
      ...&lt;br /&gt;
  end public&lt;br /&gt;
  private&lt;br /&gt;
    variable haveComment is float&lt;br /&gt;
    variable comment is string len 64&lt;br /&gt;
    ...&lt;br /&gt;
  end private&lt;br /&gt;
  ...&lt;br /&gt;
end class &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A null string might be a valid comment, but it also might be useful to be able to use the &amp;lt;code&amp;gt;SetComment&amp;lt;/code&amp;gt; method defined above to indicate that there is no comment. So, it might be necessary to distinguish the following two invocations:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;%object:setComment&lt;br /&gt;
 ...&lt;br /&gt;
%object:setComment(&#039;&#039;) &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To make this possible, SOUL provides the &amp;lt;var&amp;gt;Is Present&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;Is Not Present&amp;lt;/var&amp;gt; tests for optional and default method parameters:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;subroutine setComment(%comment is string len 64 optional)&lt;br /&gt;
  if %comment is present then&lt;br /&gt;
    %this:haveComment = 1&lt;br /&gt;
    %this:comment = %comment&lt;br /&gt;
  else&lt;br /&gt;
    %this:haveComment = 0&lt;br /&gt;
    %this:comment = &#039;&#039;&lt;br /&gt;
  end if&lt;br /&gt;
end subroutine setComment &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;var&amp;gt;Is Present&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;Is Not Present&amp;lt;/var&amp;gt; tests can be especially useful in code where the default value is not a constant. The most common example of this is a date parameter that is usually the current date, but not always. For example, consider a constructor that sets the start date for a transaction to the current date, unless an optional date is passed&lt;br /&gt;
to the constructor:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;constructor new(%startDate is string len 8 optional)&lt;br /&gt;
if %startDate is not present then&lt;br /&gt;
  %startDate = $sir_date(&#039;YYYYMMDD&#039;)&lt;br /&gt;
end if &lt;br /&gt;
 ... &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
While the same thing could probably be accomplished, in this case, by checking for a null value, it is a bit neater to check for the presence of the parameter.&lt;br /&gt;
&lt;br /&gt;
==Named parameters==&lt;br /&gt;
Methods support &amp;lt;b&amp;gt;named parameters&amp;lt;/b&amp;gt;, that is, parameters that are passed by name rather than position. For example, one might have a method called &amp;lt;code&amp;gt;Roundabout&amp;lt;/code&amp;gt; that has a parameter that specifies a value for an exit. It might be invoked as follows:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;%bypass:roundabout(&#039;KIDLINGTON&#039;)&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
If the first parameter for this method were allowed to be invoked by name, this method might also be invoked as:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;%bypass:roundabout(exit=&#039;KIDLINGTON&#039;)&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
As this example illustrates, a named parameter is indicated by the name of the parameter followed by an equal sign, which is then followed by any expression that is to be assigned to the parameter.&lt;br /&gt;
&lt;br /&gt;
Named parameters are supported for both system and user-written methods.&lt;br /&gt;
&lt;br /&gt;
Arguments that are passed by name are called &amp;lt;b&amp;gt;named&amp;lt;/b&amp;gt; arguments, while those that are not are called &amp;lt;b&amp;gt;positional&amp;lt;/b&amp;gt; arguments, because their meaning is determined by their position in an argument list. While a method can be invoked with both positional and named arguments, all the positional arguments must precede the named arguments. That is, the following is valid because all the positional arguments precede the named ones:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;%mini:addPetrol(24, &#039;Stratford&#039;, price=89.5, brand=&#039;BP&#039;)&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
But the following is invalid because the named parameter litres precedes the positional parameter &amp;lt;code&amp;gt;Stratford&amp;lt;/code&amp;gt;.&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;%mini:addPetrol(litres=24, &#039;Stratford&#039;, price=89.5)&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
A name on an argument can be allowed or required. If allowed, the argument can be specified either positionally or by name. If required, the argument can only be specified by name. Whether the name on an argument is allowed or required has nothing to do with whether the argument is required. That is, just as positional parameters can be required, Optional, or Default, so too can named parameters. That said, named parameters will tend to be optional, since required parameters usually have a fixed position in a parameter list.&lt;br /&gt;
&lt;br /&gt;
As noted before, system methods can have named parameters. To determine which parameters on a system method are positional, name allowed, or name required, see the documentation for that method. An example of a system method with a name required parameter is the &amp;lt;var&amp;gt;ParseLines&amp;lt;/var&amp;gt; method, which has a name required (but optional) &amp;lt;var&amp;gt;StripTrailingNull&amp;lt;/var&amp;gt; parameter:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt; %list:parseLines(%string, stripTrailingNull=false)&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
For user-written methods, the distinction between positional, name allowed, and name required parameters is made on the method declaration and definition header. By default, the parameters in user-written methods are positional. For example, in the following method declaration, all parameters are positional:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;subroutine display(%customerId is string len 10, -&lt;br /&gt;
                   %startyear is float, -&lt;br /&gt;
                   %showFamily is enumeration boolean optional, -&lt;br /&gt;
                   %showEmployer is enumeration boolean optional, -&lt;br /&gt;
                   %showMedical is enumeration boolean optional)&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
So the method might be invoked as follows:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;%cust:display(%crn, %year, true, , true)&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
To indicate that a name can be used for a parameter, the &amp;lt;var&amp;gt;NameAllowed&amp;lt;/var&amp;gt; keyword should be specified on the parameter declaration:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;subroutine display(%customerId is string len 10, -&lt;br /&gt;
                   %startyear is float, -&lt;br /&gt;
                   %showFamily is enumeration boolean optional, -&lt;br /&gt;
                   %showEmployer is enumeration boolean optional, -&lt;br /&gt;
                   %showMedical is enumeration boolean optional nameAllowed)&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
So that the method could then be invoked either as before, or as follows:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;%cust:display(%crn, %year, true, , showMedical=true)&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;note&amp;quot;&amp;gt;&#039;&#039;&#039;Note:&#039;&#039;&#039; Even though the parameter name is declared with a leading percent character (&amp;lt;tt&amp;gt;%&amp;lt;/tt&amp;gt;), the name of the parameter when invoking the method should exclude the percent character. &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the &amp;lt;var&amp;gt;NameRequired&amp;lt;/var&amp;gt; keyword is specified on a parameter definition, the parameter must always be passed as a named argument rather than a positional one:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;subroutine display(%customerId is string len 10, -&lt;br /&gt;
                   %startyear is float, -&lt;br /&gt;
                   %showFamily is enumeration boolean optional, -&lt;br /&gt;
                   %showEmployer is enumeration boolean optional, -&lt;br /&gt;
                   %showMedical is enumeration boolean optional nameRequired)&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
If a parameter other than the last is specified with &amp;lt;var&amp;gt;NameAllowed&amp;lt;/var&amp;gt;, all parameters after that are also treated as if &amp;lt;var&amp;gt;NameAllowed&amp;lt;/var&amp;gt; were specified on their declarations. That is, the following two declarations are equivalent:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;subroutine display(%customerId is string len 10, -&lt;br /&gt;
                   %startyear is float, -&lt;br /&gt;
                   %showFamily is enumeration boolean optional nameAllowed, -&lt;br /&gt;
                   %showEmployer is enumeration boolean optional nameAllowed, -&lt;br /&gt;
                   %showMedical is enumeration boolean optional nameAllowed)&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;subroutine display(%customerId is string len 10, -&lt;br /&gt;
                   %startyear is float, -&lt;br /&gt;
                   %showFamily is enumeration boolean optional nameAllowed, -&lt;br /&gt;
                   %showEmployer is enumeration boolean optional, -&lt;br /&gt;
                   %showMedical is enumeration boolean optional)&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
Similarly, a &amp;lt;var&amp;gt;NameRequired&amp;lt;/var&amp;gt; keyword implies &amp;lt;var&amp;gt;NameRequired&amp;lt;/var&amp;gt; for all subsequent parameters. A NameRequired parameter can follow a NameAllowed parameter though, of course, all parameters after the NameRequired parameter are also assumed to be &amp;lt;var&amp;gt;NameRequired&amp;lt;/var&amp;gt;, whether or not that keyword is specified. A NameAllowed parameter cannot follow a NameRequired parameter. Named arguments can be specified in any order, so given the above declaration, the following two invocations are identical:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;%cust:display(%crn, %year, showFamily=true, showMedical=false)&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;%cust:display(%crn, %year, showMedical=false, showFamily=true)&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
There are many reasons to use named parameters. One is to make method invocations easier to understand. If a method has many parameters, the invocations can look like:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;%cust:display(%crn, %year, true, false)&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
And, if a programmer looking at this did not have the parameters for this method memorized, she would have to go to the method declaration to have an idea of what was being done here. But naming the arguments makes the code much clearer:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;%cust:display(%crn, %year, showFamily=true, showMedical=false)&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
As this example illustrates, named parameters can be particularly useful for boolean switches that alter the behavior of a method, especially when there are many of these switches.&lt;br /&gt;
&lt;br /&gt;
Another advantage of named parameters is that they are order independent. This means that place-holders do not have to be specified for optional parameters that are not specified on their invocation. This is especially important for methods with many optional parameters. For example, in the absence of named parameters, a method with seven optional parameters might be invoked as follows:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;%mini:drive(,,,,,,,65)&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
Such a call can be made much easier to read, and much less error prone, by using a named parameter:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;%mini:drive(speed=65)&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
Named parameters can also be useful to delay decisions about parameter order. That is, if a method has, say, two optional parameters, and it is not immediately obvious which one is most likely to be used more often (and thus be the first positional parameter), the parameters can be initially declared as NameRequired:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;subroutine add(%oil is float optional nameRequired, -&lt;br /&gt;
               %petrol is float optional nameRequired)&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
All invocations of the method would then have to use names:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;%mg:add(petrol=18)&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
If after some experience, it is determined that one parameter is much more commonly used than another, that parameter can be changed to a &amp;lt;var&amp;gt;NameAllowed&amp;lt;/var&amp;gt; parameter:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;subroutine add(%petrol is float optional &amp;lt;var&amp;gt;NameAllowed&amp;lt;/var&amp;gt;, -&lt;br /&gt;
               %oil is float optional nameRequired)&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
When that change is made, invocations of the method can use the &amp;lt;var&amp;gt;NameAllowed&amp;lt;/var&amp;gt; parameter positionally:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;%mg:add(18)&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
Note that this delaying tactic can even be useful with non-optional parameters, if there is a possibility that some of the non-optional parameters might be made optional some day &amp;amp;mdash; perhaps after appropriate defaults are determined.&lt;br /&gt;
&lt;br /&gt;
Finally, named parameters can be used to &amp;amp;#x201C;rescue&amp;amp;#x201D; a (retrospectively) bad decision about parameter order. For example, if after some use, it is determined that for a method with many parameters, the fifth parameter is more often specified than any of the earlier parameters, it can be turned into a &amp;lt;var&amp;gt;NameAllowed&amp;lt;/var&amp;gt; parameter, making it possible to specify that parameter without having to specify the earlier parameters. All this said, named parameters are not a panacea. There are some drawbacks to using named parameters:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;They make method invocations more verbose, sometimes with little or no benefit. This is especially true for methods with one or two parameters where the meaning of the parameter(s) are obvious from the name of the method.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Time and care must be taken to chose good parameter names. Once a parameter name is chosen for a named parameter, it can be quite difficult to change it, as this would require changing all code that specifies that parameter name in a method invocation.&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So, as with most programming constructs, the use of named parameters is an art rather than a science. As named parameters should be used where appropriate, they should be avoided where inappropriate. But other than the vague and not inviolate principle that named parameters are more likely to be useful in methods with more parameters, the appropriateness of named parameters is a subjective matter.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;note&amp;quot;&amp;gt;&#039;&#039;&#039;Note:&#039;&#039;&#039; A final point should be made about named parameters: their syntax is somewhat of an inconsistency in &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;User Language&amp;lt;/var&amp;gt;. In most contexts where user-written expressions are allowed, an equal sign is treated as a comparison operator. &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For example, in the following statement the variables &amp;lt;code&amp;gt;%value&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;%crn&amp;lt;/code&amp;gt; are compared, and, if equal, the global &amp;lt;code&amp;gt;CRN&amp;lt;/code&amp;gt; is set to 1, otherwise it is set to 0: &lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;$setg(&#039;CRN&#039;, %value=%crn)&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
If &amp;lt;code&amp;gt;%value&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;%crn&amp;lt;/code&amp;gt; were not defined, this statement would generate a compilation error.&lt;br /&gt;
&lt;br /&gt;
Given this syntactic structure, one might expect that a named argument in a method invocation would be interpreted as a comparison of a field name with a value. For example, one might expect the argument to the &amp;lt;var&amp;gt;New&amp;lt;/var&amp;gt; method to be the result of a comparison between field &amp;lt;code&amp;gt;Host&amp;lt;/code&amp;gt; and the variable &amp;lt;code&amp;gt;%target&amp;lt;/code&amp;gt;:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;%socket = new(host=%target)&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
The reality is that the use of the equal sign is almost always limited to conditions in an &amp;lt;var&amp;gt;If&amp;lt;/var&amp;gt; statement, so one probably wouldn&#039;t expect to find a comparison in the above context. Object-oriented SOUL takes one step further by interpreting any single token followed by an equal sign in a method parameter as a named argument, whether or not what is to the left of the equal sign is a valid parameter name. For example, the following will produce a compilation error, even if &amp;lt;code&amp;gt;%input&amp;lt;/code&amp;gt; is a defined variable, and even though it is not a valid parameter name:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;%object:doIfTrue(%input = 1)&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
In the odd cases where one really wants to pass the result of an equality comparison to a method, the alternative character comparison operator can be used:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;%object:doIfTrue(%input eq 1)&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
or, the comparison can be wrapped in an extra parenthesis:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;%object:doIfTrue((%input eq 1))&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;b id=&amp;quot;Internal parameter names&amp;quot;&amp;gt;&amp;lt;/b&amp;gt;Parameter description guidelines==&lt;br /&gt;
A method declaration contains a description of the method&#039;s parameters. A parameter description includes the parameter name, type, and attributes (&amp;lt;var&amp;gt;Optional&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;AllowNull&amp;lt;/var&amp;gt;, and so on). The names should be descriptive, as this makes it easier for users of a method to understand what the method does by looking at its declaration. For example, the following method declaration&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;subroutine fill(%petrol is float, %oil is float)&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
is much more helpful than this declaration:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;subroutine fill(%x is float, %y is float)&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
With the availability of named parameters, the use of meaningful parameter names becomes even more important, because the parameter names will actually appear in the method invocations:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;%multipla:fill(oil=0.5)&amp;lt;/p&amp;gt;&lt;br /&gt;
===&amp;lt;b id=&amp;quot;intNamesStmt&amp;quot;&amp;gt;&amp;lt;/b&amp;gt;Mapping parameter names in declarations to names within the method=== &lt;br /&gt;
It is possible that the ideal names for method declarations are not the ideal names for the parameters within the actual methods themselves. For example, one might have a standard that all parameters should start with &amp;lt;code&amp;gt;parm.&amp;lt;/code&amp;gt; in method code, so that it is easy to tell which variables are parameters. If this standard is extended to the names on the declaration, the result is ugly and redundant parameter names in declarations and method invocations:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;%multipla:fill(parm.oil=0.5)&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;var&amp;gt;InternalNames&amp;lt;/var&amp;gt; block is provided to allow mapping of parameter names on declarations to another name to be used within the method, making it possible to use the optimal names on method declarations and within methods, even if the two names are not the same.&lt;br /&gt;
&lt;br /&gt;
The syntax of the &amp;lt;var&amp;gt;InternalNames&amp;lt;/var&amp;gt; block is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;literal&amp;quot;&amp;gt;InternalNames&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;newName&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;squareb&amp;quot;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;literal&amp;quot;&amp;gt;Is&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;squareb&amp;quot;&amp;gt;]&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;parameterName&amp;lt;/span&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;span class=&amp;quot;literal&amp;quot;&amp;gt;End InternalNames&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Where:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;newName&amp;lt;/th&amp;gt;&amp;lt;td&amp;gt;The name to be assigned to that parameter for internal use.&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;parameterName&amp;lt;/th&amp;gt;&amp;lt;td&amp;gt;The name of the parameter as it appears in the method declaration.&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;var&amp;gt;InternalNames&amp;lt;/var&amp;gt; statement must be the first statement after a method definition header, which means that for properties it must appear before the &amp;lt;var&amp;gt;Get&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;Set&amp;lt;/var&amp;gt; blocks.&lt;br /&gt;
&lt;br /&gt;
For properties, the &amp;lt;var&amp;gt;InternalNames&amp;lt;/var&amp;gt; block changes the names of parameters for both the &amp;lt;var&amp;gt;Get&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;Set&amp;lt;/var&amp;gt; methods. &amp;lt;var&amp;gt;InternalNames&amp;lt;/var&amp;gt; can be used to rename implicit parameters, such as:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;%this, which is used to reference the method object. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;The input value parameter for properties, which has the same name as the property (preceded by a percent). &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the following example, the input variables &amp;lt;code&amp;gt;%petrol&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;%oil&amp;lt;/code&amp;gt; are mapped to the names &amp;lt;code&amp;gt;%parm.petrol&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;%parm.oil&amp;lt;/code&amp;gt;, respectively:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;subroutine add(%petrol is float nameRequired optional, -&lt;br /&gt;
  %oil is float nameRequired optional)&lt;br /&gt;
internalNames&lt;br /&gt;
  %parm.petrol is %petrol&lt;br /&gt;
  %parm.oil is %oil&lt;br /&gt;
end internalNames&lt;br /&gt;
...&lt;br /&gt;
%petrol = %petrol + %parm.petrol&lt;br /&gt;
%oil = %oil + %parm.oil&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This example illustrates how if &amp;lt;code&amp;gt;petrol&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;oil&amp;lt;/code&amp;gt; were private class variables, the &amp;lt;var&amp;gt;InternalNames&amp;lt;/var&amp;gt; block makes it possible to have parameters in a method declaration with the same name, but to avoid naming conflict or confusion between the private class variables and the parameter names.&lt;br /&gt;
&lt;br /&gt;
==Stringing method invocations together==&lt;br /&gt;
Often, a method will return an object, that is, an instance of a class. In such cases, it is possible to invoke another method against the result object by stringing together method invocations.&lt;br /&gt;
&lt;br /&gt;
In the following example, the method object for the &amp;lt;code&amp;gt;Slap&amp;lt;/code&amp;gt; subroutine is the object returned by the &amp;lt;code&amp;gt;Call&amp;lt;/code&amp;gt; function:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;class comic&lt;br /&gt;
  public&lt;br /&gt;
    function call(%name is string len 32) is object comic&lt;br /&gt;
    subroutine slap&lt;br /&gt;
    ...&lt;br /&gt;
  end public&lt;br /&gt;
  ...&lt;br /&gt;
end class&lt;br /&gt;
 ...&lt;br /&gt;
%moe is object comic&lt;br /&gt;
 ...&lt;br /&gt;
%moe:call(&#039;Curly):slap &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The same is true for stringing a method invocation to an object variable in a class:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;class comic&lt;br /&gt;
  public&lt;br /&gt;
    variable brother is object comic&lt;br /&gt;
    subroutine slap&lt;br /&gt;
    ...&lt;br /&gt;
  end public&lt;br /&gt;
  ...&lt;br /&gt;
end class&lt;br /&gt;
 ...&lt;br /&gt;
%moe is object comic&lt;br /&gt;
 ...&lt;br /&gt;
%moe:brother:slap &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This stringing of method/variable names can be extended indefinitely and is one of the big advantages of object-oriented syntax over standard procedure syntax. Procedural syntax accomplishes the same economy using nesting:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;call $slap($brother(%moe)) &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
With procedural syntax, the evaluation is from the inside out and should be read that way. Evaluation of strung-together class members is left to right, and so it can be read in that more natural order. If there is more than one input object to a method, object oriented syntax must also resort to nesting, but this is relatively rare and still requires one fewer nested object than procedural syntax.&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[[Classes and Objects]]&lt;br /&gt;
&amp;lt;li&amp;gt;[[Local and Common entities]]&lt;br /&gt;
&amp;lt;li&amp;gt;[[Enhancement methods]]&lt;br /&gt;
&amp;lt;li&amp;gt;[[Print, Audit, and Trace methods for user objects]]&lt;br /&gt;
&amp;lt;li&amp;gt;[[Object oriented programming in SOUL]]&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Overviews]]&lt;br /&gt;
[[Category:SOUL object-oriented programming topics]]&lt;/div&gt;</summary>
		<author><name>ELowell</name></author>
	</entry>
	<entry>
		<id>https://m204wiki.rocketsoftware.com/index.php?title=Methods&amp;diff=117688</id>
		<title>Methods</title>
		<link rel="alternate" type="text/html" href="https://m204wiki.rocketsoftware.com/index.php?title=Methods&amp;diff=117688"/>
		<updated>2019-09-18T18:16:43Z</updated>

		<summary type="html">&lt;p&gt;ELowell: /* The InternalNames block - map argument names to names internal to the method */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;As discussed in [[Classes and Objects]], a &amp;lt;var&amp;gt;Class&amp;lt;/var&amp;gt; block can contain declaration blocks and/or &#039;&#039;&#039;method&#039;&#039;&#039; definitions. This page describes the characteristics of these class methods and &lt;br /&gt;
their definitions. For information about defining special-purpose methods that are less broadly applicable and therefore not part of the class, see [[Local and Common entities]].  &lt;br /&gt;
&lt;br /&gt;
==Method definition syntax==&lt;br /&gt;
All declaration blocks must appear before any method definitions. A method definition consists of the method header, which is basically a reiteration of the method declaration, the method body (code), and an End method statement:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;methodHeader&amp;lt;/span&amp;gt;&lt;br /&gt;
  &amp;lt;span class=&amp;quot;squareb&amp;quot;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;[[#Internal parameter names|internalNamesBlock]]&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;squareb&amp;quot;&amp;gt;]&amp;lt;/span&amp;gt;&lt;br /&gt;
  &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;methodBody&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;literal&amp;quot;&amp;gt;End&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;methodType&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;squareb&amp;quot;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;methodName&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;squareb&amp;quot;&amp;gt;]&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;methodHeader&#039;&#039; must nearly match the method declaration (which is described in detail in [[Classes and Objects#Method declarations and method types|Method declarations and method types]]), except:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Named parameters do not have to appear in the same order. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;The optional &amp;lt;var&amp;gt;Public&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;Private&amp;lt;/var&amp;gt;, or &amp;lt;var&amp;gt;Shared&amp;lt;/var&amp;gt; indication may be present on one and not the other. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The parameter names must be present on the method declarations (as opposed to the &amp;lt;var&amp;gt;Declare Subroutine&amp;lt;/var&amp;gt; statement) and must match the parameter names in the method header. This redundancy may seem extreme, it has several benefits:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;It ensures that a complete method description is available in both the declaration block and the method definition. The former is convenient for users of the class and someone trying to understand the class as a whole. The latter is convenient for someone looking at the method in isolation. Meaningful parameter names on the method declarations will make the method functionality much clearer than the parameter datatype alone. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Complete redundancy makes it possible to cut-and-paste or copy a method declaration to the method definition, or vice versa. The method body consists of the code that implements the method or methods. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;props&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;var&amp;gt;Functions&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;Subroutines&amp;lt;/var&amp;gt; have one method, but &amp;lt;var&amp;gt;Properties&amp;lt;/var&amp;gt; can have two methods: one for retrieving the property (a &amp;lt;var&amp;gt;Get&amp;lt;/var&amp;gt; method), and one for setting the property (a &amp;lt;var&amp;gt;Set&amp;lt;/var&amp;gt; method). The &amp;lt;var&amp;gt;Get&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;Set&amp;lt;/var&amp;gt; methods are enclosed in &amp;lt;var&amp;gt;Get&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;Set&amp;lt;/var&amp;gt; blocks:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;literal&amp;quot;&amp;gt;Property&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;name&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;squareb&amp;quot;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;(parameters)&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;squareb&amp;quot;&amp;gt;]&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;squareb&amp;quot;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;literal&amp;quot;&amp;gt;Is&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;squareb&amp;quot;&amp;gt;]&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;type&amp;lt;/span&amp;gt;&lt;br /&gt;
  [[#Internal parameter names|&amp;lt;span class=&amp;quot;squareb&amp;quot;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;internalNamesBlock&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;squareb&amp;quot;&amp;gt;]&amp;lt;/span&amp;gt;]]&lt;br /&gt;
  &amp;lt;span class=&amp;quot;literal&amp;quot;&amp;gt;Get&amp;lt;/span&amp;gt;&lt;br /&gt;
    &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;getmethodBody&amp;lt;/span&amp;gt;&lt;br /&gt;
  &amp;lt;span class=&amp;quot;literal&amp;quot;&amp;gt;End Get&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;squareb&amp;quot;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;methodName&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;squareb&amp;quot;&amp;gt;]&amp;lt;/span&amp;gt;&lt;br /&gt;
  &amp;lt;span class=&amp;quot;literal&amp;quot;&amp;gt;Set&amp;lt;/span&amp;gt;&lt;br /&gt;
    &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;setmethodBody&amp;lt;/span&amp;gt;&lt;br /&gt;
  &amp;lt;span class=&amp;quot;literal&amp;quot;&amp;gt;End Set&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;squareb&amp;quot;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;methodName&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;squareb&amp;quot;&amp;gt;]&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;literal&amp;quot;&amp;gt;End&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;literal&amp;quot;&amp;gt;Property&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;squareb&amp;quot;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;methodName&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;squareb&amp;quot;&amp;gt;]&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
The &amp;lt;var&amp;gt;Get&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;Set&amp;lt;/var&amp;gt; methods can appear in any order inside the &amp;lt;var&amp;gt;Property&amp;lt;/var&amp;gt; definition block, though must both appear within a single property definition block. &amp;lt;var&amp;gt;ReadOnly&amp;lt;/var&amp;gt; methods have a &amp;lt;var&amp;gt;Get&amp;lt;/var&amp;gt; method only. &amp;lt;var&amp;gt;WriteOnly&amp;lt;/var&amp;gt; methods have a &amp;lt;var&amp;gt;Set&amp;lt;/var&amp;gt; method only.&lt;br /&gt;
&lt;br /&gt;
==Comparing methods to complex subroutines==&lt;br /&gt;
Methods behave very much like &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;SOUL&amp;lt;/var&amp;gt; [[Subroutines|complex subroutines]], and they have some important differences:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Methods can have optional parameters, that is, parameters not specified in the method invocation. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Method Input parameters (unless they are arrays) are passed to the method by value &amp;amp;mdash; by copying the corresponding argument values provided when the method is invoked, instead of working with a pointer to the argument values. This copying allows the parameters to be updated within the method without consequence to the arguments outside the method.  Method Output parameters are passed by reference &amp;amp;#x2014; pointers to the argument values are passed instead of argument value copies, and updates to the parameters within the method affect the actual arguments outside the method. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;methobj2&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Instance-specific (non-&amp;lt;var&amp;gt;Shared&amp;lt;/var&amp;gt;) methods always have an implicit input parameter: the object on which they operate, also known as the &#039;&#039;&#039;method object&#039;&#039;&#039;. This implicit object can be referred to by the parameter name &amp;lt;var&amp;gt;%this&amp;lt;/var&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;note&amp;quot;&amp;gt;&#039;&#039;&#039;Note:&#039;&#039;&#039; It is not valid to declare a local variable named &amp;lt;code&amp;gt;%this&amp;lt;/code&amp;gt; in non-&amp;lt;var&amp;gt;Shared&amp;lt;/var&amp;gt; methods because it is implicitly declared by &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;SOUL&amp;lt;/var&amp;gt;. &amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;The &amp;lt;var&amp;gt;Set&amp;lt;/var&amp;gt; method in a &amp;lt;var&amp;gt;Property&amp;lt;/var&amp;gt; has another implicit input parameter: the value to which the property is being set. This parameter has the same name as the property. For example, if a property is called &amp;lt;code&amp;gt;Height&amp;lt;/code&amp;gt;, the input value in a &amp;lt;var&amp;gt;Set&amp;lt;/var&amp;gt; method for an instance-specific (non-shared) method may be referenced as:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;%this:height&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;note&amp;quot;&amp;gt;&#039;&#039;&#039;Note:&#039;&#039;&#039; Within the &amp;lt;var&amp;gt;Set&amp;lt;/var&amp;gt; method, the input value is copied (not referenced directly), so it may be updated. &amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Methods, being part of a class, can access the &amp;lt;var&amp;gt;Private&amp;lt;/var&amp;gt; methods and variables in a class. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;All statement labels within a method definition must be unique. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Local variables in methods are always auto-initialized upon entry. They take either their explicit Initial values or implicit initial values by datatype (0 for Fixed and Float, a null string for &amp;lt;var&amp;gt;String&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;Longstring&amp;lt;/var&amp;gt;, a null for Objects). &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Local variables are always stacked for recursive entry to methods. That is, if a method is called directly by itself or indirectly by other methods, the subsequent executions get their own copies of all local variables. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Object variables and &amp;lt;var&amp;gt;Longstrings&amp;lt;/var&amp;gt; are automatically cleaned up on exit from methods. Object variables are set to null, and if a variable is the last reference to an object, the object is discarded (see, [[Object variables]]). &amp;lt;var&amp;gt;Longstrings&amp;lt;/var&amp;gt; are set to null, and any CCATEMP pages associated with the &amp;lt;var&amp;gt;Longstrings&amp;lt;/var&amp;gt; are freed. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Methods that return a value must have the return value indicated on the &amp;lt;var&amp;gt;Return&amp;lt;/var&amp;gt; statement. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Examples of method definitions==&lt;br /&gt;
&lt;br /&gt;
====Function====&lt;br /&gt;
The following is an example of a Function that adds an amount to a private variable and returns the new value:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;class account&lt;br /&gt;
  private&lt;br /&gt;
    variable balance is fixed dp 2&lt;br /&gt;
  end private&lt;br /&gt;
  public&lt;br /&gt;
    function adjustBalance(%amount is fixed dp 2) -&lt;br /&gt;
         is fixed dp 2 callable&lt;br /&gt;
  end public&lt;br /&gt;
 &lt;br /&gt;
  function adjustBalance(%amount is fixed dp 2) is fixed dp 2 callable&lt;br /&gt;
    %this:balance = %this:balance + %amount&lt;br /&gt;
    return %this:balance&lt;br /&gt;
  end function&lt;br /&gt;
end class&lt;br /&gt;
 ...&lt;br /&gt;
%myAccount is object account&lt;br /&gt;
 ...&lt;br /&gt;
%balance = %myAccount:adjustBalance(50.00)&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
If the application does not need the new balance resulting from the &amp;lt;code&amp;gt;AdjustBalance&amp;lt;/code&amp;gt;, the last line could be written:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;%myAccount:adjustBalance(50.00) &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As when invoking &amp;lt;var&amp;gt;Variable&amp;lt;/var&amp;gt; members of a class, the colon (&amp;lt;tt&amp;gt;:&amp;lt;/tt&amp;gt;) that separates the object variable &amp;lt;code&amp;gt;%myaccount&amp;lt;/code&amp;gt; and the method &amp;lt;code&amp;gt;adjustBalance&amp;lt;/code&amp;gt;, above, may alternatively be specified with a single blank before and/or after it.&lt;br /&gt;
&lt;br /&gt;
====Property====&lt;br /&gt;
The following example illustrates a &amp;lt;var&amp;gt;Property&amp;lt;/var&amp;gt; that returns or sets a temperature in Fahrenheit, and that uses a public variable to retrieve or set the Celsius temperature. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;class thermometer&lt;br /&gt;
&lt;br /&gt;
public&lt;br /&gt;
  variable celsius is float&lt;br /&gt;
  property fahrenheit is float&lt;br /&gt;
end public&lt;br /&gt;
property fahrenheit is float&lt;br /&gt;
  get&lt;br /&gt;
    return (1.8 * %this:celsius) + 32&lt;br /&gt;
  end get&lt;br /&gt;
  set&lt;br /&gt;
    %this:celsius = (%fahrenheit - 32) / 1.8&lt;br /&gt;
  end set&lt;br /&gt;
end property fahrenheit&lt;br /&gt;
end class&lt;br /&gt;
 &lt;br /&gt;
%temp is object thermometer&lt;br /&gt;
%temp = new&lt;br /&gt;
 ...&lt;br /&gt;
%temp:fahrenheit = %input&lt;br /&gt;
 ...&lt;br /&gt;
print &#039;Temperature fahrenheit: &#039; %temp:fahrenheit&lt;br /&gt;
print &#039;Temperature celsius: &#039; %temp:celsius&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Inside a non-shared method, references to the implicit input object, &amp;lt;code&amp;gt;%this&amp;lt;/code&amp;gt;, can omit the &amp;amp;#x201C;this:&amp;amp;#x201D; and refer to public and private class variables as if they were local variables. For example, the above &amp;lt;code&amp;gt;Fahrenheit&amp;lt;/code&amp;gt; property could have been written as:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;property fahrenheit is float&lt;br /&gt;
get&lt;br /&gt;
return (1.8 * %celsius) + 32&lt;br /&gt;
end get&lt;br /&gt;
 ...&lt;br /&gt;
end property fahrenheit&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
Nevertheless, the &amp;lt;code&amp;gt;this:&amp;lt;/code&amp;gt; can be specified to make clear that a reference is to a class variable or to distinguish a class variable from a local variable:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;property fahrenheit is float&lt;br /&gt;
 ...&lt;br /&gt;
  set&lt;br /&gt;
    %celsius is fixed dp 2&lt;br /&gt;
    %this:celsius = (%fahrenheit - 32) / 1.8&lt;br /&gt;
    %celsius = %this:celsius&lt;br /&gt;
    print &#039;Temperature changed to &#039; %celsius&lt;br /&gt;
  end set&lt;br /&gt;
end property fahrenheit  &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Because a local variable is accessed instead of a class variable by the same name, the &amp;lt;code&amp;gt;%this&amp;lt;/code&amp;gt; is required to reference the class variable inside a class method. This precedence of local variables ahead of class variables means that public or private variables can be added to a class without fear of &amp;amp;#x201C;breaking&amp;amp;#x201D; methods that might have local variables with the same name. This might be important in very large classes with many methods. There are other cases where the &amp;lt;code&amp;gt;%this&amp;lt;/code&amp;gt; is required to access the method object.&lt;br /&gt;
&lt;br /&gt;
====Subroutine====&lt;br /&gt;
The following is an example of a &amp;lt;var&amp;gt;Subroutine&amp;lt;/var&amp;gt; that sets a private class variable and then displays all private variables in the class:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;class comic&lt;br /&gt;
  private&lt;br /&gt;
    variable name is string len 32&lt;br /&gt;
    variable pratfalls is fixed&lt;br /&gt;
    variable trademark is longstring&lt;br /&gt;
  end private&lt;br /&gt;
  public&lt;br /&gt;
    subroutine display(%newName is string len 32)&lt;br /&gt;
  end public&lt;br /&gt;
  subroutine display(%newName is string len 32)&lt;br /&gt;
    %name = %newName&lt;br /&gt;
    print &#039;Name = &#039; %name&lt;br /&gt;
    print &#039;Pratfalls = &#039; %pratfalls&lt;br /&gt;
    print &#039;Trademark = &#039; %trademark&lt;br /&gt;
  end subroutine display&lt;br /&gt;
end class&lt;br /&gt;
%stooge is object comic&lt;br /&gt;
 ...&lt;br /&gt;
%stooge:display(&#039;Curly&#039;)&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;b id=&amp;quot;optionalParams&amp;quot;&amp;gt;&amp;lt;/b&amp;gt;Optional and default parameters==&lt;br /&gt;
Methods support optional parameters, that is, parameters that do not need to be passed on every invocation of the method. For example, suppose a function returns the number of items in a bin. And suppose that function can be passed a number of items to add to the bin. Usually when the function is invoked, no items are added, but once in a while, they are. So the function can be declared as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;class bin&lt;br /&gt;
 ...&lt;br /&gt;
public&lt;br /&gt;
 ...&lt;br /&gt;
function numberOfItems(%add is fixed optional)&lt;br /&gt;
 ...&lt;br /&gt;
end public&lt;br /&gt;
 ...&lt;br /&gt;
end class &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Given this declaration, the function could be invoked as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;%yellow is object bin&lt;br /&gt;
 ...&lt;br /&gt;
%yellow = new&lt;br /&gt;
 ...&lt;br /&gt;
print %yellow:numberOfItems &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It can also be invoked as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;print %yellow:numberOfItems() &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And, finally, in cases where a value is to be passed to the method, it could be invoked as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;%items = %yellow:numberOfItems(%number) &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
When a parameter is optional and it is not passed by the invoker, that parameter has a standard value, based on its datatype, inside the method. This standard value is the standard initial value for a variable of the parameter&#039;s datatype. These initial values for each datatype are the following:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;dl&amp;gt;&lt;br /&gt;
&amp;lt;dt&amp;gt;String &amp;lt;dd&amp;gt;A null (zero-length) string.&lt;br /&gt;
&amp;lt;dt&amp;gt;Longstring &amp;lt;dd&amp;gt;A null (zero-length) string.&lt;br /&gt;
&amp;lt;dt&amp;gt;Float &amp;lt;dd&amp;gt;0.&lt;br /&gt;
&amp;lt;dt&amp;gt;Fixed &amp;lt;dd&amp;gt;0.&lt;br /&gt;
&amp;lt;dt&amp;gt;Object &amp;lt;dd&amp;gt;Null. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;note&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Note:&amp;lt;/b&amp;gt; Because specifying the &amp;lt;var&amp;gt;Optional&amp;lt;/var&amp;gt; keyword for an &amp;lt;var&amp;gt;Object&amp;lt;/var&amp;gt; parameter means that the absence of the parameter presents a null object parameter variable to the method, &amp;lt;var&amp;gt;Optional&amp;lt;/var&amp;gt; implies the &amp;lt;var&amp;gt;AllowNull&amp;lt;/var&amp;gt; keyword and, in fact, it cannot be specified along with &amp;lt;var&amp;gt;AllowNull&amp;lt;/var&amp;gt;. &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;dt&amp;gt;Structure &amp;lt;dd&amp;gt;Each item in the structure is given its default initial value, which is the same as indicated in this list for the other datatypes, unless an Initial clause was used in a structure item declaration in the structure definition. So, if a method is defined as follows: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;function square(%number is float optional)&lt;br /&gt;
 ...&lt;br /&gt;
return %number * %number&lt;br /&gt;
 ...&lt;br /&gt;
end function &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The following will print &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;print %object:square &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/dl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For the &amp;amp;#x201C;simple&amp;amp;#x201D; datatypes &amp;lt;var&amp;gt;Fixed&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;Float&amp;lt;/var&amp;gt;, or &amp;lt;var&amp;gt;String&amp;lt;/var&amp;gt;, it is possible to specify an alternative value to be passed to a method for an unspecified argument. This is done by specifying the &amp;lt;var&amp;gt;Default&amp;lt;/var&amp;gt; keyword instead of &amp;lt;var&amp;gt;Optional&amp;lt;/var&amp;gt;. As of Sirius Mods 7.1, default values can also be specified for &amp;lt;var&amp;gt;Enumeration&amp;lt;/var&amp;gt; parameters, including &amp;lt;var&amp;gt;Booleans&amp;lt;/var&amp;gt;. The &amp;lt;var&amp;gt;Default&amp;lt;/var&amp;gt; keyword must be followed by a string, numeric, or enumeration constant in parentheses:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;function square(%number is float default(-1))&lt;br /&gt;
 ...&lt;br /&gt;
return %number * %number&lt;br /&gt;
 ...&lt;br /&gt;
end function &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And the following statement prints &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; since the square of -1 is 1:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;print %object:square &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The following method declaration uses an alternative default string value:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;subroutine addCustomer(%lname is string len 32 -&lt;br /&gt;
default(&#039;***Unknown***&#039;) ) &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The following method indicates a default value of &amp;lt;code&amp;gt;Share&amp;lt;/code&amp;gt; for a &amp;lt;var&amp;gt;LockStrength&amp;lt;/var&amp;gt; enumeration parameter:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;function getRecord(%key is string len 10, -&lt;br /&gt;
%ls is enumeration lockstrength default(share)) -&lt;br /&gt;
    is object record in file foo &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Optional or default parameters are allowed on any kind of method: functions, subroutines, properties, or constructors. Constructors, especially, can often benefit greatly from optional parameters as there are often extra qualifiers for newly instantiated objects that might be present, but often are not. For example, one might have a constructor for a product object that allows, but does not require, the specification of a product code:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;constructor new(%productCode is string len 8 optional) &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In this example, the &amp;lt;code&amp;gt;New&amp;lt;/code&amp;gt; function could then be invoked with or without the optional&lt;br /&gt;
product code:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;%cake = new&lt;br /&gt;
 ...&lt;br /&gt;
%pie = new(&#039;31415929&#039;) &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;b id=&amp;quot;isPresent&amp;quot;&amp;gt;&amp;lt;/b&amp;gt;Is [Not] Present test for optional or default parameter===&lt;br /&gt;
&lt;br /&gt;
Generally, it is sufficient for a method to simply use the replacement value for an optional or default parameter without caring whether that value was specified explicitly or generated implicitly. For example, if a method is declared as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;subroutine increment(%amount is fixed default(1)) &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It probably does not matter whether it is invoked as&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;%object:increment(1) &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
or&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;%object:increment &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
However, there may be cases where a method wants to distinguish between the two cases. For example, consider the following class:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;class incident&lt;br /&gt;
  public&lt;br /&gt;
    subroutine setComment( -&lt;br /&gt;
      %comment is string len 64 optional)&lt;br /&gt;
      ...&lt;br /&gt;
  end public&lt;br /&gt;
  private&lt;br /&gt;
    variable haveComment is float&lt;br /&gt;
    variable comment is string len 64&lt;br /&gt;
    ...&lt;br /&gt;
  end private&lt;br /&gt;
  ...&lt;br /&gt;
end class &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A null string might be a valid comment, but it also might be useful to be able to use the &amp;lt;code&amp;gt;SetComment&amp;lt;/code&amp;gt; method defined above to indicate that there is no comment. So, it might be necessary to distinguish the following two invocations:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;%object:setComment&lt;br /&gt;
 ...&lt;br /&gt;
%object:setComment(&#039;&#039;) &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To make this possible, SOUL provides the &amp;lt;var&amp;gt;Is Present&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;Is Not Present&amp;lt;/var&amp;gt; tests for optional and default method parameters:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;subroutine setComment(%comment is string len 64 optional)&lt;br /&gt;
  if %comment is present then&lt;br /&gt;
    %this:haveComment = 1&lt;br /&gt;
    %this:comment = %comment&lt;br /&gt;
  else&lt;br /&gt;
    %this:haveComment = 0&lt;br /&gt;
    %this:comment = &#039;&#039;&lt;br /&gt;
  end if&lt;br /&gt;
end subroutine setComment &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;var&amp;gt;Is Present&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;Is Not Present&amp;lt;/var&amp;gt; tests can be especially useful in code where the default value is not a constant. The most common example of this is a date parameter that is usually the current date, but not always. For example, consider a constructor that sets the start date for a transaction to the current date, unless an optional date is passed&lt;br /&gt;
to the constructor:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;constructor new(%startDate is string len 8 optional)&lt;br /&gt;
if %startDate is not present then&lt;br /&gt;
  %startDate = $sir_date(&#039;YYYYMMDD&#039;)&lt;br /&gt;
end if &lt;br /&gt;
 ... &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
While the same thing could probably be accomplished, in this case, by checking for a null value, it is a bit neater to check for the presence of the parameter.&lt;br /&gt;
&lt;br /&gt;
==Named parameters==&lt;br /&gt;
Methods support &amp;lt;b&amp;gt;named parameters&amp;lt;/b&amp;gt;, that is, parameters that are passed by name rather than position. For example, one might have a method called &amp;lt;code&amp;gt;Roundabout&amp;lt;/code&amp;gt; that has a parameter that specifies a value for an exit. It might be invoked as follows:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;%bypass:roundabout(&#039;KIDLINGTON&#039;)&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
If the first parameter for this method were allowed to be invoked by name, this method might also be invoked as:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;%bypass:roundabout(exit=&#039;KIDLINGTON&#039;)&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
As this example illustrates, a named parameter is indicated by the name of the parameter followed by an equal sign, which is then followed by any expression that is to be assigned to the parameter.&lt;br /&gt;
&lt;br /&gt;
Named parameters are supported for both system and user-written methods.&lt;br /&gt;
&lt;br /&gt;
Arguments that are passed by name are called &amp;lt;b&amp;gt;named&amp;lt;/b&amp;gt; arguments, while those that are not are called &amp;lt;b&amp;gt;positional&amp;lt;/b&amp;gt; arguments, because their meaning is determined by their position in an argument list. While a method can be invoked with both positional and named arguments, all the positional arguments must precede the named arguments. That is, the following is valid because all the positional arguments precede the named ones:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;%mini:addPetrol(24, &#039;Stratford&#039;, price=89.5, brand=&#039;BP&#039;)&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
But the following is invalid because the named parameter litres precedes the positional parameter &amp;lt;code&amp;gt;Stratford&amp;lt;/code&amp;gt;.&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;%mini:addPetrol(litres=24, &#039;Stratford&#039;, price=89.5)&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
A name on an argument can be allowed or required. If allowed, the argument can be specified either positionally or by name. If required, the argument can only be specified by name. Whether the name on an argument is allowed or required has nothing to do with whether the argument is required. That is, just as positional parameters can be required, Optional, or Default, so too can named parameters. That said, named parameters will tend to be optional, since required parameters usually have a fixed position in a parameter list.&lt;br /&gt;
&lt;br /&gt;
As noted before, system methods can have named parameters. To determine which parameters on a system method are positional, name allowed, or name required, see the documentation for that method. An example of a system method with a name required parameter is the &amp;lt;var&amp;gt;ParseLines&amp;lt;/var&amp;gt; method, which has a name required (but optional) &amp;lt;var&amp;gt;StripTrailingNull&amp;lt;/var&amp;gt; parameter:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt; %list:parseLines(%string, stripTrailingNull=false)&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
For user-written methods, the distinction between positional, name allowed, and name required parameters is made on the method declaration and definition header. By default, the parameters in user-written methods are positional. For example, in the following method declaration, all parameters are positional:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;subroutine display(%customerId is string len 10, -&lt;br /&gt;
                   %startyear is float, -&lt;br /&gt;
                   %showFamily is enumeration boolean optional, -&lt;br /&gt;
                   %showEmployer is enumeration boolean optional, -&lt;br /&gt;
                   %showMedical is enumeration boolean optional)&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
So the method might be invoked as follows:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;%cust:display(%crn, %year, true, , true)&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
To indicate that a name can be used for a parameter, the &amp;lt;var&amp;gt;NameAllowed&amp;lt;/var&amp;gt; keyword should be specified on the parameter declaration:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;subroutine display(%customerId is string len 10, -&lt;br /&gt;
                   %startyear is float, -&lt;br /&gt;
                   %showFamily is enumeration boolean optional, -&lt;br /&gt;
                   %showEmployer is enumeration boolean optional, -&lt;br /&gt;
                   %showMedical is enumeration boolean optional nameAllowed)&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
So that the method could then be invoked either as before, or as follows:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;%cust:display(%crn, %year, true, , showMedical=true)&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;note&amp;quot;&amp;gt;&#039;&#039;&#039;Note:&#039;&#039;&#039; Even though the parameter name is declared with a leading percent character (&amp;lt;tt&amp;gt;%&amp;lt;/tt&amp;gt;), the name of the parameter when invoking the method should exclude the percent character. &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the &amp;lt;var&amp;gt;NameRequired&amp;lt;/var&amp;gt; keyword is specified on a parameter definition, the parameter must always be passed as a named argument rather than a positional one:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;subroutine display(%customerId is string len 10, -&lt;br /&gt;
                   %startyear is float, -&lt;br /&gt;
                   %showFamily is enumeration boolean optional, -&lt;br /&gt;
                   %showEmployer is enumeration boolean optional, -&lt;br /&gt;
                   %showMedical is enumeration boolean optional nameRequired)&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
If a parameter other than the last is specified with &amp;lt;var&amp;gt;NameAllowed&amp;lt;/var&amp;gt;, all parameters after that are also treated as if &amp;lt;var&amp;gt;NameAllowed&amp;lt;/var&amp;gt; were specified on their declarations. That is, the following two declarations are equivalent:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;subroutine display(%customerId is string len 10, -&lt;br /&gt;
                   %startyear is float, -&lt;br /&gt;
                   %showFamily is enumeration boolean optional nameAllowed, -&lt;br /&gt;
                   %showEmployer is enumeration boolean optional nameAllowed, -&lt;br /&gt;
                   %showMedical is enumeration boolean optional nameAllowed)&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;subroutine display(%customerId is string len 10, -&lt;br /&gt;
                   %startyear is float, -&lt;br /&gt;
                   %showFamily is enumeration boolean optional nameAllowed, -&lt;br /&gt;
                   %showEmployer is enumeration boolean optional, -&lt;br /&gt;
                   %showMedical is enumeration boolean optional)&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
Similarly, a &amp;lt;var&amp;gt;NameRequired&amp;lt;/var&amp;gt; keyword implies &amp;lt;var&amp;gt;NameRequired&amp;lt;/var&amp;gt; for all subsequent parameters. A NameRequired parameter can follow a NameAllowed parameter though, of course, all parameters after the NameRequired parameter are also assumed to be &amp;lt;var&amp;gt;NameRequired&amp;lt;/var&amp;gt;, whether or not that keyword is specified. A NameAllowed parameter cannot follow a NameRequired parameter. Named arguments can be specified in any order, so given the above declaration, the following two invocations are identical:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;%cust:display(%crn, %year, showFamily=true, showMedical=false)&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;%cust:display(%crn, %year, showMedical=false, showFamily=true)&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
There are many reasons to use named parameters. One is to make method invocations easier to understand. If a method has many parameters, the invocations can look like:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;%cust:display(%crn, %year, true, false)&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
And, if a programmer looking at this did not have the parameters for this method memorized, she would have to go to the method declaration to have an idea of what was being done here. But naming the arguments makes the code much clearer:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;%cust:display(%crn, %year, showFamily=true, showMedical=false)&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
As this example illustrates, named parameters can be particularly useful for boolean switches that alter the behavior of a method, especially when there are many of these switches.&lt;br /&gt;
&lt;br /&gt;
Another advantage of named parameters is that they are order independent. This means that place-holders do not have to be specified for optional parameters that are not specified on their invocation. This is especially important for methods with many optional parameters. For example, in the absence of named parameters, a method with seven optional parameters might be invoked as follows:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;%mini:drive(,,,,,,,65)&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
Such a call can be made much easier to read, and much less error prone, by using a named parameter:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;%mini:drive(speed=65)&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
Named parameters can also be useful to delay decisions about parameter order. That is, if a method has, say, two optional parameters, and it is not immediately obvious which one is most likely to be used more often (and thus be the first positional parameter), the parameters can be initially declared as NameRequired:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;subroutine add(%oil is float optional nameRequired, -&lt;br /&gt;
               %petrol is float optional nameRequired)&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
All invocations of the method would then have to use names:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;%mg:add(petrol=18)&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
If after some experience, it is determined that one parameter is much more commonly used than another, that parameter can be changed to a &amp;lt;var&amp;gt;NameAllowed&amp;lt;/var&amp;gt; parameter:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;subroutine add(%petrol is float optional &amp;lt;var&amp;gt;NameAllowed&amp;lt;/var&amp;gt;, -&lt;br /&gt;
               %oil is float optional nameRequired)&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
When that change is made, invocations of the method can use the &amp;lt;var&amp;gt;NameAllowed&amp;lt;/var&amp;gt; parameter positionally:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;%mg:add(18)&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
Note that this delaying tactic can even be useful with non-optional parameters, if there is a possibility that some of the non-optional parameters might be made optional some day &amp;amp;mdash; perhaps after appropriate defaults are determined.&lt;br /&gt;
&lt;br /&gt;
Finally, named parameters can be used to &amp;amp;#x201C;rescue&amp;amp;#x201D; a (retrospectively) bad decision about parameter order. For example, if after some use, it is determined that for a method with many parameters, the fifth parameter is more often specified than any of the earlier parameters, it can be turned into a &amp;lt;var&amp;gt;NameAllowed&amp;lt;/var&amp;gt; parameter, making it possible to specify that parameter without having to specify the earlier parameters. All this said, named parameters are not a panacea. There are some drawbacks to using named parameters:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;They make method invocations more verbose, sometimes with little or no benefit. This is especially true for methods with one or two parameters where the meaning of the parameter(s) are obvious from the name of the method.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Time and care must be taken to chose good parameter names. Once a parameter name is chosen for a named parameter, it can be quite difficult to change it, as this would require changing all code that specifies that parameter name in a method invocation.&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So, as with most programming constructs, the use of named parameters is an art rather than a science. As named parameters should be used where appropriate, they should be avoided where inappropriate. But other than the vague and not inviolate principle that named parameters are more likely to be useful in methods with more parameters, the appropriateness of named parameters is a subjective matter.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;note&amp;quot;&amp;gt;&#039;&#039;&#039;Note:&#039;&#039;&#039; A final point should be made about named parameters: their syntax is somewhat of an inconsistency in &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;User Language&amp;lt;/var&amp;gt;. In most contexts where user-written expressions are allowed, an equal sign is treated as a comparison operator. &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For example, in the following statement the variables &amp;lt;code&amp;gt;%value&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;%crn&amp;lt;/code&amp;gt; are compared, and, if equal, the global &amp;lt;code&amp;gt;CRN&amp;lt;/code&amp;gt; is set to 1, otherwise it is set to 0: &lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;$setg(&#039;CRN&#039;, %value=%crn)&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
If &amp;lt;code&amp;gt;%value&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;%crn&amp;lt;/code&amp;gt; were not defined, this statement would generate a compilation error.&lt;br /&gt;
&lt;br /&gt;
Given this syntactic structure, one might expect that a named argument in a method invocation would be interpreted as a comparison of a field name with a value. For example, one might expect the argument to the &amp;lt;var&amp;gt;New&amp;lt;/var&amp;gt; method to be the result of a comparison between field &amp;lt;code&amp;gt;Host&amp;lt;/code&amp;gt; and the variable &amp;lt;code&amp;gt;%target&amp;lt;/code&amp;gt;:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;%socket = new(host=%target)&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
The reality is that the use of the equal sign is almost always limited to conditions in an &amp;lt;var&amp;gt;If&amp;lt;/var&amp;gt; statement, so one probably wouldn&#039;t expect to find a comparison in the above context. Object-oriented SOUL takes one step further by interpreting any single token followed by an equal sign in a method parameter as a named argument, whether or not what is to the left of the equal sign is a valid parameter name. For example, the following will produce a compilation error, even if &amp;lt;code&amp;gt;%input&amp;lt;/code&amp;gt; is a defined variable, and even though it is not a valid parameter name:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;%object:doIfTrue(%input = 1)&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
In the odd cases where one really wants to pass the result of an equality comparison to a method, the alternative character comparison operator can be used:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;%object:doIfTrue(%input eq 1)&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
or, the comparison can be wrapped in an extra parenthesis:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;%object:doIfTrue((%input eq 1))&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;b id=&amp;quot;Internal parameter names&amp;quot;&amp;gt;&amp;lt;/b&amp;gt;Parameter description guidelines==&lt;br /&gt;
A method declaration contains a description of the method&#039;s parameters. A parameter description includes the parameter name, type, and attributes (&amp;lt;var&amp;gt;Optional&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;AllowNull&amp;lt;/var&amp;gt;, and so on). The names should be descriptive, as this makes it easier for users of a method to understand what the method does by looking at its declaration. For example, the following method declaration&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;subroutine fill(%petrol is float, %oil is float)&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
is much more helpful than this declaration:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;subroutine fill(%x is float, %y is float)&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
With the availability of named parameters, the use of meaningful parameter names becomes even more important, because the parameter names will actually appear in the method invocations:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;%multipla:fill(oil=0.5)&amp;lt;/p&amp;gt;&lt;br /&gt;
===&amp;lt;b id=&amp;quot;intNamesStmt&amp;quot;&amp;gt;&amp;lt;/b&amp;gt;InternalNames - map parameter names to names within the method=== &lt;br /&gt;
It is possible that the ideal names for method declarations are not the ideal names for the parameters inside the actual methods themselves. For example, one might have a standard that all parameters should start with &amp;lt;code&amp;gt;parm.&amp;lt;/code&amp;gt; in method code, so that it is easy to tell which variables are parameters. If this standard is extended to the names on the declaration, the result is ugly and redundant parameter names in declarations and method invocations:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;%multipla:fill(parm.oil=0.5)&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;var&amp;gt;InternalNames&amp;lt;/var&amp;gt; block is provided to allow mapping of parameter names on declarations to another name to be used inside the method, making it possible to use the optimal names on method declarations and inside methods, even if the two names are not the same.&lt;br /&gt;
&lt;br /&gt;
The syntax of the &amp;lt;var&amp;gt;InternalNames&amp;lt;/var&amp;gt; block is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;literal&amp;quot;&amp;gt;InternalNames&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;newName&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;squareb&amp;quot;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;literal&amp;quot;&amp;gt;Is&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;squareb&amp;quot;&amp;gt;]&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;parameterName&amp;lt;/span&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;span class=&amp;quot;literal&amp;quot;&amp;gt;End InternalNames&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Where:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;newName&amp;lt;/th&amp;gt;&amp;lt;td&amp;gt;The name to be assigned to that parameter for internal use.&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;parameterName&amp;lt;/th&amp;gt;&amp;lt;td&amp;gt;The name of the parameter as it appears in the method declaration.&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;var&amp;gt;InternalNames&amp;lt;/var&amp;gt; statement must be the first statement after a method definition header, which means that for properties it must appear before the &amp;lt;var&amp;gt;Get&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;Set&amp;lt;/var&amp;gt; blocks.&lt;br /&gt;
&lt;br /&gt;
For properties, the &amp;lt;var&amp;gt;InternalNames&amp;lt;/var&amp;gt; block changes the names of parameters for both the &amp;lt;var&amp;gt;Get&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;Set&amp;lt;/var&amp;gt; methods. &amp;lt;var&amp;gt;InternalNames&amp;lt;/var&amp;gt; can be used to rename implicit parameters, such as:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;%this, which is used to reference the method object. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;The input value parameter for properties, which has the same name as the property (preceded by a percent). &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the following example, the input variables &amp;lt;code&amp;gt;%petrol&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;%oil&amp;lt;/code&amp;gt; are mapped to the names &amp;lt;code&amp;gt;%parm.petrol&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;%parm.oil&amp;lt;/code&amp;gt;, respectively:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;subroutine add(%petrol is float nameRequired optional, -&lt;br /&gt;
  %oil is float nameRequired optional)&lt;br /&gt;
internalNames&lt;br /&gt;
  %parm.petrol is %petrol&lt;br /&gt;
  %parm.oil is %oil&lt;br /&gt;
end internalNames&lt;br /&gt;
...&lt;br /&gt;
%petrol = %petrol + %parm.petrol&lt;br /&gt;
%oil = %oil + %parm.oil&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This example illustrates how if &amp;lt;code&amp;gt;petrol&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;oil&amp;lt;/code&amp;gt; were private class variables, the &amp;lt;var&amp;gt;InternalNames&amp;lt;/var&amp;gt; block makes it possible to have parameters in a method declaration with the same name, but to avoid naming conflict or confusion between the private class variables and the parameter names.&lt;br /&gt;
&lt;br /&gt;
==Stringing method invocations together==&lt;br /&gt;
Often, a method will return an object, that is, an instance of a class. In such cases, it is possible to invoke another method against the result object by stringing together method invocations.&lt;br /&gt;
&lt;br /&gt;
In the following example, the method object for the &amp;lt;code&amp;gt;Slap&amp;lt;/code&amp;gt; subroutine is the object returned by the &amp;lt;code&amp;gt;Call&amp;lt;/code&amp;gt; function:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;class comic&lt;br /&gt;
  public&lt;br /&gt;
    function call(%name is string len 32) is object comic&lt;br /&gt;
    subroutine slap&lt;br /&gt;
    ...&lt;br /&gt;
  end public&lt;br /&gt;
  ...&lt;br /&gt;
end class&lt;br /&gt;
 ...&lt;br /&gt;
%moe is object comic&lt;br /&gt;
 ...&lt;br /&gt;
%moe:call(&#039;Curly):slap &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The same is true for stringing a method invocation to an object variable in a class:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;class comic&lt;br /&gt;
  public&lt;br /&gt;
    variable brother is object comic&lt;br /&gt;
    subroutine slap&lt;br /&gt;
    ...&lt;br /&gt;
  end public&lt;br /&gt;
  ...&lt;br /&gt;
end class&lt;br /&gt;
 ...&lt;br /&gt;
%moe is object comic&lt;br /&gt;
 ...&lt;br /&gt;
%moe:brother:slap &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This stringing of method/variable names can be extended indefinitely and is one of the big advantages of object-oriented syntax over standard procedure syntax. Procedural syntax accomplishes the same economy using nesting:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;call $slap($brother(%moe)) &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
With procedural syntax, the evaluation is from the inside out and should be read that way. Evaluation of strung-together class members is left to right, and so it can be read in that more natural order. If there is more than one input object to a method, object oriented syntax must also resort to nesting, but this is relatively rare and still requires one fewer nested object than procedural syntax.&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[[Classes and Objects]]&lt;br /&gt;
&amp;lt;li&amp;gt;[[Local and Common entities]]&lt;br /&gt;
&amp;lt;li&amp;gt;[[Enhancement methods]]&lt;br /&gt;
&amp;lt;li&amp;gt;[[Print, Audit, and Trace methods for user objects]]&lt;br /&gt;
&amp;lt;li&amp;gt;[[Object oriented programming in SOUL]]&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Overviews]]&lt;br /&gt;
[[Category:SOUL object-oriented programming topics]]&lt;/div&gt;</summary>
		<author><name>ELowell</name></author>
	</entry>
	<entry>
		<id>https://m204wiki.rocketsoftware.com/index.php?title=Release_notes_for_Model_204_version_7.8&amp;diff=117687</id>
		<title>Release notes for Model 204 version 7.8</title>
		<link rel="alternate" type="text/html" href="https://m204wiki.rocketsoftware.com/index.php?title=Release_notes_for_Model_204_version_7.8&amp;diff=117687"/>
		<updated>2019-09-18T16:15:59Z</updated>

		<summary type="html">&lt;p&gt;ELowell: /* Increase URL length that can be returned with $web_form_action */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
These release notes list the enhancements and other changes contained in Model 204 version 7.8. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;&amp;lt;b&amp;gt;******THIS IS A DRAFT DOCUMENT.******&amp;lt;/b&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
These release notes list the enhancements and other changes contained in Model 204 version 7.8, &amp;lt;b&amp;gt;&amp;lt;i&amp;gt;which is still in development&amp;lt;/i&amp;gt;&amp;lt;/b&amp;gt;. Until the commercial release of the software, Rocket reserves the right to add to, remove, or change anything described herein. &lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
These release notes contain installation and features information for the Rocket Model 204 version 7.8 release.&lt;br /&gt;
Before beginning your installation, please read through this information about product installation and changes.&lt;br /&gt;
&lt;br /&gt;
==SOUL enhancements==&lt;br /&gt;
===AmIndependent method===&lt;br /&gt;
The &amp;lt;var&amp;gt;AmIndependent&amp;lt;/var&amp;gt; method returns TRUE for daemons spawned by &amp;lt;var&amp;gt;[http://m204wiki.rocketsoftware.com/index.php/RunIndependently_(Daemon_subroutine) RunIndependently]&amp;lt;/var&amp;gt;. (The action of &amp;lt;var&amp;gt;[https://m204wiki.rocketsoftware.com/index.php/AmDaemon_(Daemon_property) AmDaemon]&amp;lt;/var&amp;gt; remains unchanged.)&lt;br /&gt;
&lt;br /&gt;
The following table shows the values returned by &amp;lt;var&amp;gt;AmIndependent&amp;lt;/var&amp;gt; versus &amp;lt;var&amp;gt;AmDaemon&amp;lt;/var&amp;gt; for different daemon types:&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Type&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;AmDaemon&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;AmIndependent&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;$COMBG&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;False&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;False&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Independent daemon&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;False&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;True&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Other daemon&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;True&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;False&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Web, etc.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;False&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;False&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===$ProcOpn===&lt;br /&gt;
&amp;lt;var&amp;gt;[https://m204wiki.rocketsoftware.com/index.php/$ProcOpn $ProcOpn]&amp;lt;/var&amp;gt; now supports the opening of a procedure with an all numeric name, and including a leading zero, e.g.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;%result = $procOpn(&#039;0123&#039;, &#039;MYFILE&#039;)&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Support for such procedures names was initially introduced at v7.7, and this feature of &amp;lt;var&amp;gt;$ProcOpn&amp;lt;/var&amp;gt; is also enabled within v7.7 with the application of zap 77z054.&lt;br /&gt;
&lt;br /&gt;
===Allow parentheses to surround a boolean enumeration object===&lt;br /&gt;
The following sample code&lt;br /&gt;
&lt;br /&gt;
   begin                                       &lt;br /&gt;
   variables are undefined                  &lt;br /&gt;
   %isValid is boolean initial (True)       &lt;br /&gt;
   if (%isValid) then                  &lt;br /&gt;
      print &#039;in IF&#039;                            &lt;br /&gt;
   end if                                   &lt;br /&gt;
   end         &lt;br /&gt;
&lt;br /&gt;
will now compile and run successfully, as &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;if (%isValid) then &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
is logically equivalent to&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;if %isValid then &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Prior to V7.8 the presence of parentheses surrounding the boolean enumeration object would have caused a compilation error. This change is enabled in V7.7 with the application of zap 77z370.&lt;br /&gt;
&lt;br /&gt;
===Support for copying Object class objects===&lt;br /&gt;
The Object class now supports the copy and deepCopy methods. For example, and Object object can be copied as follows&lt;br /&gt;
&lt;br /&gt;
   begin               &lt;br /&gt;
   %x is object object &lt;br /&gt;
   %y is object object &lt;br /&gt;
   %y = new            &lt;br /&gt;
   %x = %y:copy        &lt;br /&gt;
   end&lt;br /&gt;
&lt;br /&gt;
This change is enabled in v7.7 with the application of zap 77z076, and within V7.6 with the application of zap 76z412.&lt;br /&gt;
&lt;br /&gt;
===Assignment of enumeration values to method variables===&lt;br /&gt;
Enumerations values can now be assigned to method variables whose result is an enumeration.So for example the following code&lt;br /&gt;
&lt;br /&gt;
   begin                                               &lt;br /&gt;
   enumeration colour                                  &lt;br /&gt;
      public                                           &lt;br /&gt;
         value red                                     &lt;br /&gt;
         value white                                   &lt;br /&gt;
         value blue                                    &lt;br /&gt;
      end public                                       &lt;br /&gt;
   end enumeration                                     &lt;br /&gt;
   %func    is function getColour is enumeration colour&lt;br /&gt;
   local function getColour is enumeration colour      &lt;br /&gt;
      return blue                                      &lt;br /&gt;
   end function                                        &lt;br /&gt;
   %func    = getColour                                &lt;br /&gt;
   %func    = (colour):red                             &lt;br /&gt;
   printText {~=%(Local):(%func)}                      &lt;br /&gt;
   end  &lt;br /&gt;
&lt;br /&gt;
will produce the result&lt;br /&gt;
&lt;br /&gt;
   %(Local):(%func)=red&lt;br /&gt;
&lt;br /&gt;
whereas previously the line   &lt;br /&gt;
&lt;br /&gt;
   %func    = (colour):red    &lt;br /&gt;
&lt;br /&gt;
would have been rejected with the message&lt;br /&gt;
&lt;br /&gt;
   MSIR.0993: Assignment invalid: mismatch between method and method variable&lt;br /&gt;
&lt;br /&gt;
This change is enabled in V7.7 with the application of zap 77z128.&lt;br /&gt;
&lt;br /&gt;
==External Call Facility enhancements==&lt;br /&gt;
===Managing ECF tables more efficiently===&lt;br /&gt;
The are two new features to help manage ECF tables more efficiently, avoid conditions where the table can fill, and prevent the definition of further entities.&lt;br /&gt;
&lt;br /&gt;
The first feature is the new  &amp;lt;var&amp;gt;DISPLAY ECF&amp;lt;/var&amp;gt; command, which displays the contents of ECF tables and also the current status of users accessing ECF modules. See more details of the &amp;lt;var&amp;gt;[[#DISPLAY ECF|DISPLAY ECF]]&amp;lt;/var&amp;gt; command below.&lt;br /&gt;
&lt;br /&gt;
The second feature is a new &amp;lt;var&amp;gt;EXTERNAL REMOVE&amp;lt;/var&amp;gt; statement with the syntax&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;EXTERNAL REMOVE &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;modulename&amp;lt;/span&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This causes the entry for the named module to be removed from the module table. The table entry is then placed on a free chain of entries and can be reused by issuing the EXTERNAL MODULE statement. This allows the module table to be managed with redundant entries removed, without having to recycle the ONLINE.&lt;br /&gt;
&lt;br /&gt;
A EXTERNAL REMOVE statement will return $status/$statusd values of 0/0, and most other status values that can be returned by the EXTERNAL REMOVE statement are already documented in the ECF return codes table. If an EXTERNAL REMOVE is attempted against a module that is currently being called ( in use ), then $status/$statusd will return the values 20/1 ( module unavailable).&lt;br /&gt;
&lt;br /&gt;
==System enhancements==&lt;br /&gt;
&lt;br /&gt;
===New wait types for daemon/master waits===&lt;br /&gt;
&lt;br /&gt;
Two new wait types, viewable on the &amp;lt;var&amp;gt;[https://m204wiki.rocketsoftware.com/index.php/MONITOR_command MONITOR] USERS&amp;lt;/var&amp;gt; command output, have been implemented as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;57&amp;lt;/code&amp;gt; - Means a daemon thread waiting for its master thread  &amp;lt;br /&amp;gt;     &lt;br /&gt;
&amp;lt;code&amp;gt;58&amp;lt;/code&amp;gt; - Means a master thread waiting for one of its daemon threads&lt;br /&gt;
&lt;br /&gt;
This change is enabled in V7.7 with the application of zap 77z410.&lt;br /&gt;
&lt;br /&gt;
===Snap formatting changes===&lt;br /&gt;
Date/time stamps in the page headers of snaps will now be shown normal format, rather than in julian format as in previous releases. Thus in the following example a particular snap header under v7.7 or previous releases would show as &lt;br /&gt;
&lt;br /&gt;
   SNAPID    1   19226.060155  M204.0022: Bug .. nnnnn               PAGE     1&lt;br /&gt;
&lt;br /&gt;
whereas the same snap header under v7.8 would show as &lt;br /&gt;
&lt;br /&gt;
   SNAPID    1  2019/08/14 06:01:06   M204.0022: Bug .. nnnnn        PAGE     1&lt;br /&gt;
&lt;br /&gt;
Also, due to improvements in handling trailing blanks in snap output, a snap generated under v7.8 should be marginally smaller than the same snap generated under previous releases, assuming the same SNAPCTL settings.&lt;br /&gt;
&lt;br /&gt;
===Call stack trace for problem diagnosis===&lt;br /&gt;
A  call stack trace is now provided to help diagnose and resolve common errors. To enable the stack trace, do either of the following: &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Set the &amp;lt;var&amp;gt;[[SIRFACT parameter|SIRFACT]] X&#039;01&#039;&amp;lt;/var&amp;gt; bit.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Set the &amp;lt;var&amp;gt;[[DEBUGUL parameter|DEBUGL]]&amp;lt;/var&amp;gt; parameter. Note that the &amp;lt;var&amp;gt;DEBUGUL&amp;lt;/var&amp;gt; approach will introduce extra QTBL overhead. &amp;lt;p&amp;gt;(&amp;lt;var&amp;gt;DEBUGUL&amp;lt;/var&amp;gt; provides a similar facility with an include trace of procedures leading to the error, but this might not be potentially as useful as the call trace.)&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt; &lt;br /&gt;
&lt;br /&gt;
The call stack trace can assist in diagnosing run-time errors that might occur, as illustrated by the following &amp;quot;Variable too small for result&amp;quot; and &amp;quot;MBSCAN exceeded&amp;quot; examples.&lt;br /&gt;
&lt;br /&gt;
====Variable too small for result====&lt;br /&gt;
When the stack trace is enabled, a &amp;quot;variable too small&amp;quot; error results in the following message:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;M204.2966: Error at line n, procedure &#039;&#039;procname&#039;&#039; in file &#039;&#039;procfile&#039;&#039;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
which identifies the line within a procedure where the error is occurring, in addition to the usual message:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;M204.0552: Variable too small for result&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Any subsequent M204.2966 messages indicate the point in the code from where the code in error was called. For example, a stack of three subroutine calls leading to a &amp;quot;variable too small&amp;quot; error might result in the following messaging:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;   M204.0552: Variable too small for result                             &lt;br /&gt;
   M204.2966: Error at line 9, procedure MYPROC.LEVEL4 in file MYPROC   &lt;br /&gt;
   M204.2966: Called from line 5, procedure MYPROC.LEVEL3 in file MYPROC&lt;br /&gt;
   M204.2966: Called from line 5, procedure MYPROC.LEVEL2 in file MYPROC&lt;br /&gt;
   M204.2966: Called from line 5, procedure MYPROC.LEVEL1 in file MYPROC &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This information should help in diagnosing the problem. &lt;br /&gt;
&lt;br /&gt;
If the error occurs within a command level program rather than a procedure, then the M204.2966 message is replaced by an M204.2967 message, and a similar error condition to the above with a preceding call stack might be audited as follows:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;   M204.0552: Variable too small for result              &lt;br /&gt;
   M204.2967: Error at line 14 of command level program  &lt;br /&gt;
   M204.2967: Called from line 5 of command level program&lt;br /&gt;
   M204.2967: Called from line 3 of command level program &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If neither &amp;lt;var&amp;gt;SIRFACT X&#039;01&#039;&amp;lt;/var&amp;gt; nor &amp;lt;var&amp;gt;DEBUGUL&amp;lt;/var&amp;gt; is set, then the &amp;quot;variable too small&amp;quot; error produces the following messages:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;   M204.0552: Variable too small for result &lt;br /&gt;
   M204.2968: Error: no debug info &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====MBSCAN exceeded====&lt;br /&gt;
Similarly to the handling of the &amp;quot;variable too small for result&amp;quot; error, the call stack can also be used to diagnose errors where the value of &amp;lt;var&amp;gt;[[MBSCAN parameter|MBSCAN]]&amp;lt;/var&amp;gt; is exceeded as a result of a direct search of Table B records. &lt;br /&gt;
&amp;lt;p&amp;gt;Again, under V7.8, with either the &amp;lt;var&amp;gt;SIRFACT X&#039;01&#039;&amp;lt;/var&amp;gt; bit set or &amp;lt;var&amp;gt;DEBUGUL&amp;lt;/var&amp;gt; set, if a long request occurs as a result of exceeding &amp;lt;var&amp;gt;MBSCAN&amp;lt;/var&amp;gt;, then initially the following message is produced, as before:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;M204.0569: File &#039;&#039;filename&#039;&#039;, Find: Table B records to be searched = &#039;&#039;nnnn&#039;&#039;&amp;lt;/p&amp;gt;&lt;br /&gt;
followed by a DYRWT prompt message. If the user replies &#039;N&#039; to the prompt, or if the request is run in an environment (such as a batch job) where the default response is &#039;N&#039;, the following message is produced after the M204.0569 message:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;Cancelling request: M204.2969: MBSCAN (&#039;&#039;mm&#039;&#039;) exceeded, records to be searched = &#039;&#039;nnnn&#039;&#039;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
where &#039;&#039;mm&#039;&#039; is the current setting of &amp;lt;var&amp;gt;MBSCAN&amp;lt;/var&amp;gt;. The M204.2969 message is followed by M204.2966 messages displaying the call stack trace. Thus, if the following code is run from procedure MYPROC.MBSCAN against the demo database, with an &amp;lt;var&amp;gt;MBSCAN&amp;lt;/var&amp;gt; setting of 10:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;   b                           &lt;br /&gt;
   call sub1                   &lt;br /&gt;
   sub1: subroutine            &lt;br /&gt;
   fd1:                        &lt;br /&gt;
      in clients fd city = ONTARIO&lt;br /&gt;
              end find         &lt;br /&gt;
      fr fd1                      &lt;br /&gt;
         pai                      &lt;br /&gt;
         print                    &lt;br /&gt;
      end for                     &lt;br /&gt;
   end subroutine              &lt;br /&gt;
   end &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
then the following messages are produced, assuming any prompts are responded to with an &#039;N&#039;:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;   M204.0569: File CLIENTS, Find: Table B records to be searched = 3415&lt;br /&gt;
   Cancelling request: M204.2969: MBSCAN (10) exceeded, records to be searched = 3415  &lt;br /&gt;
   M204.2966: Error at line 6, procedure MYPROC.MBSCAN in file MYPROC&lt;br /&gt;
   M204.2966: Called from line 3, procedure MYPROC.MBSCAN in file MYPROC  &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===appendJournalData===&lt;br /&gt;
The &amp;lt;var&amp;gt;[[AppendJournalData_(Stringlist_function)|AppendJournalData]]&amp;lt;/var&amp;gt; function is now more tolerant of an outstanding BUMP request. Previously, if &amp;lt;var&amp;gt;AppendJournalData&amp;lt;/var&amp;gt; was called to inadvertently retrieve a large amount of journal data, typically when called implicitly from within SirScan, then any outstanding BUMP request wouldn&#039;t be honored until all of the data had been retrieved, at which point the BUMP request would be completed, and all data would be lost.&lt;br /&gt;
&lt;br /&gt;
Now, the &amp;lt;var&amp;gt;AppendJournalData&amp;lt;/var&amp;gt; process checks for outstanding BUMP requests before each track I/O is executed, thus avoiding excessive I/Os against the journal and long waits for the BUMP of such a process to complete.&lt;br /&gt;
&lt;br /&gt;
==AUDIT204 enhancements==&lt;br /&gt;
===FORMAT command===&lt;br /&gt;
TIMEHH is a new parameter used with the FORMAT command of the [[Tracking_system_activity_(CCAJRNL,_CCAAUDIT,_CCAJLOG)#AUDIT204_utility|AUDIT204]] utility.  It indicates that timestamps, printed at the beginning of each line of output, should include hundredths of a second. Requires no other arguments.&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;b&amp;gt;NOTE:&amp;lt;/b&amp;gt; This parameter and the 78 version (or later) of AUDIT204 may be used against a 77 (or later) CCAJRNL.&amp;lt;/p&amp;gt;&lt;br /&gt;
For example:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;//CCAIN DD *&lt;br /&gt;
FORMAT YEARFORM 4&lt;br /&gt;
TIMEHH&lt;br /&gt;
TYPE ER MS LI&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Recovery enhancements==&lt;br /&gt;
===Media Recovery in a multi-user environment===&lt;br /&gt;
It is now possible to perform media recovery by issuing the &amp;lt;var&amp;gt;REGENERATE&amp;lt;/var&amp;gt; command to roll forward selected files in a multi-user environment, with the media recovery being carried out by different users with system manager privileges. The new USING option allows for the specification of a ddname for the input journal stream to be used by the &amp;lt;var&amp;gt;REGENERATE&amp;lt;/var&amp;gt; command. Previously media recovery was restricted to single user batch jobs, using the CCAGEN ddname for the input journal. For more details, see the &amp;lt;var&amp;gt;[[#REGENERATE|REGENERATE]]&amp;lt;/var&amp;gt; command below.&lt;br /&gt;
&lt;br /&gt;
==Security enhancements==&lt;br /&gt;
===CA-Top Secret can disallow CCASTAT logins===&lt;br /&gt;
The [https://m204wiki.rocketsoftware.com/index.php/CA-Top_Secret_interface CA-Top Secret] interface now recognizes the &amp;lt;code&amp;gt;DEFACID=&amp;lt;/code&amp;gt;, setting and does not allow CCASTAT logins in the online if &amp;lt;code&amp;gt;DEFACID&amp;lt;/code&amp;gt; is set to null. (There is no attempt to log on M204USR.) Therefore, to disallow CCASTAT logons, set DEFACID=, in [https://m204wiki.rocketsoftware.com/index.php/CA-Top_Secret_interface#Preparing_a_TOPSPARM_parameter_module_with_TOPSGEN TOPSPARM]. CCASTAT will be opened because it contains file and group passwords, but it will not be used for logons if CCASTAT logons are not allowed.&lt;br /&gt;
&lt;br /&gt;
===CUSTOM=11 and mixed cased input===&lt;br /&gt;
The &amp;lt;var&amp;gt;[https://m204wiki.rocketsoftware.com/index.php/CUSTOM_parameter CUSTOM]&amp;lt;/var&amp;gt; parameter CUSTOM=11 setting no longer requires that a *LOWER command be issued prior to a LOGCTL command (to add or change a  password) to preserve mixed case input. Prior to this release, with CUSTOM=11 in place, *LOWER had to be issued before a LOGCTL command, otherwise any mixed case password strings would automatically be translated into uppercase. This change is enabled within V7.7 with the application of zap 77z108.&lt;br /&gt;
&lt;br /&gt;
===DEFUSER can specify a jobname not authorized to access M204===&lt;br /&gt;
When specifying DEFUSER=JOBNAME and VALIDAT=LOGON in the RACFGEN parms for an ONLINE, if the specified jobname ( the owning id for the ONLINE job ) isn&#039;t authorized to use Model 204 via RACF, any LOGIN commands specifying no userid will now succeed ( previously such a LOGON would have failed ). This enables users to submit jobs with USE $JOB, whereby the string USER=jobname  will be added to the submitted JCL, and this in turn is useful if the specified jobname has dataset access privileges to datasets required by the submitted jobs, even if the jobname itself isn&#039;t authorized to use M204.&lt;br /&gt;
&lt;br /&gt;
==Janus product enhancements==&lt;br /&gt;
&lt;br /&gt;
===Janus Web Server access rule===&lt;br /&gt;
The automatic &amp;lt;var&amp;gt;[[JANUS WEB ALLOW]]&amp;lt;/var&amp;gt; rule, which allowed any user to access the port without requiring a login, is changed &amp;lt;i&amp;gt;for non-SSL ports&amp;lt;/i&amp;gt; to the following:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;JANUS WEB &amp;lt;i&amp;gt;portname&amp;lt;/i&amp;gt; DISALLOW *&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
This rule requires a system administrator to explicitly define &amp;lt;var&amp;gt;ALLOW&amp;lt;/var&amp;gt; rules to enable users to access non-SSL ports.&lt;br /&gt;
The rule applies unless overridden by user-added rules. &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;blockquote class=&amp;quot;note&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;b&amp;gt;Note:&amp;lt;/b&amp;gt; To revert from this change in the JANUS DEFINE default and make the default &lt;br /&gt;
 non-SSL &amp;lt;var&amp;gt;ALLOW&amp;lt;/var&amp;gt; rule as it was in version 7.5 and earlier (&amp;lt;code&amp;gt;ALLOW *&amp;lt;/code&amp;gt;), turn on the 1 bit of the &amp;lt;var&amp;gt;[[WEBDFLT parameter|WEBDFLT]]&amp;lt;/var&amp;gt; parameter: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;RESET WEBDFLT=1&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Increase in pending accepts for Janus BPX ports===&lt;br /&gt;
The default number of pending accepts for Janus BPX server ports has been increased from 3 to 12, thus reducing the likelihood that a pending accept may fail with the message&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;MSIR.0019 Connection request rejected for port (port), MAXCON exceeded&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The actual number of pending accepts to be supported on the port can be set with the new parameter MAXPEND, set on the &amp;lt;var&amp;gt;[[JANUS_DEFINE|JANUS DEFINE]]&amp;lt;/var&amp;gt; command, where MAXPEND can vary from 3 up to a maximum value of 32. The change to the default value was enabled within V7.7 with the application of zap 77z269.&lt;br /&gt;
&lt;br /&gt;
===TCP listen backlog increased===&lt;br /&gt;
&lt;br /&gt;
The [https://m204wiki.rocketsoftware.com/index.php/Program_Communication_facilities#LISTEN_call TCP_listen] backlog has been increased from 16 to 1024 under z/OS.&lt;br /&gt;
&lt;br /&gt;
This update tells the TCP stack to queue up to 1024 of such requests up before dropping them, thus reducing, or in most cases eliminating, the likelihood of a connection request drop, other than in exceptional circumstances, such as a denial of service attack. This change was enabled within V7.7 with the application of zap 77z340.&lt;br /&gt;
&lt;br /&gt;
===Defer the freeing of XMLSCREEN input XML===&lt;br /&gt;
&lt;br /&gt;
The freeing of [https://m204wiki.rocketsoftware.com/index.php/XMLSCREEN_and_NOXMLSCREEN_(JANUS_DEFINE_parameters) XMLSCREEN] input XML is now deferred until the next Read Screen or session termination. This means that if an application error is detected, the input XML can be retrieved with [https://m204wiki.rocketsoftware.com/index.php/$Web_Input_Content $Web_Input_Content] and then logged for problem analysis. &lt;br /&gt;
&lt;br /&gt;
Prior to this release the XML received from the client is freed immediately after being used to set the input data for a Read Screen, rendering it unavailable for problem determination.&lt;br /&gt;
&lt;br /&gt;
This change is enabled in V7.7 with the application of zap 77z368.&lt;br /&gt;
&lt;br /&gt;
===XMLSCREEN and Janus Web Legacy blank stripping===&lt;br /&gt;
&lt;br /&gt;
xmlScreens and Janus Web Legacy screens now adhere to the same standard as standard screen processing in terms of stripping leading blanks from input fields defined as [https://m204wiki.rocketsoftware.com/index.php/Full-screen_feature#DEBLANK_or_NODEBLANK_option DEBLANK] (either explicitly or implicitly).&lt;br /&gt;
&lt;br /&gt;
This change is enabled in V7.7 with the application of zap 77z400.&lt;br /&gt;
&lt;br /&gt;
===SSL input buffer size===&lt;br /&gt;
&lt;br /&gt;
The default value of [https://m204wiki.rocketsoftware.com/index.php/SSLIBSIZE_(JANUS_DEFINE_parameter) SSLIBSIZE] has been increased to 16384 + 128, or 16512. This size should ensure correct communication with all TLS spec compliant applications. It is the maximum size allowed unless you use [https://m204wiki.rocketsoftware.com/index.php/CUSTOM_parameter#Using_CUSTOM.3D.2818.29 CUSTOM=18].    &lt;br /&gt;
&lt;br /&gt;
This changed is enabled within V7.7 with the application of zap 77z415.&lt;br /&gt;
&lt;br /&gt;
===Increasing LDAP buffers===&lt;br /&gt;
&lt;br /&gt;
The number of LDAP buffers allocated at startup can now be changed by setting the NLDAPBUF parameter in CCAIN. See below for details on [[#NLDAPBUF|NLDAPBUF]].&lt;br /&gt;
&lt;br /&gt;
===Increase URL length returned with $web_form_action===&lt;br /&gt;
With this release the maximum Janus Web Server incoming URL that can be handled by &amp;lt;var&amp;gt;$web_form_action&amp;lt;/var&amp;gt; is increased from 512 bytes to 1024 bytes. This change is enabled within V7.7 with the application of zap 77z424.&lt;br /&gt;
&lt;br /&gt;
==Debugger enhancements==&lt;br /&gt;
&lt;br /&gt;
===Access to exposed variables===&lt;br /&gt;
The debuggers can now view or watch the values of variables exposed to local routines/methods. Previously, any attempts to access an exposed variable would have displayed &amp;quot;%varname has no value&amp;quot; in the debugger session. (This feature is enabled within V7.7 with the application of zap 77z363.)&lt;br /&gt;
&lt;br /&gt;
==Performance enhancements==&lt;br /&gt;
&lt;br /&gt;
===MP/204 offload improvements===&lt;br /&gt;
Application code issuing the following SOUL statements will now now be fully offloadable:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;File Records In/On&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Remember&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt; &lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Position&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Sort Values&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;                                             &lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Reset Header/Trailer&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Find and Print Count&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Find All Values&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;For Each Value&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
the above improvements are also enabled within V7.7 with the application of zaps 77z419 and 77z420.&lt;br /&gt;
&lt;br /&gt;
===X3270OUT exit offloadable===&lt;br /&gt;
When running MP/204 (AMPSUBS&amp;gt;0) and using the [https://m204wiki.rocketsoftware.com/index.php/Coding_SNA_Communications_Server_conversion_exit_routines#X3270OUT_.28convert_output_from_3270_format.29 X3270OUT] exit to convert a 3270 output data stream to the appropriate device protocol, the exit can now run in parallel mode to improve performance. This change was enabled in V7.7 with the application of zap 77Z313.&lt;br /&gt;
&lt;br /&gt;
The X3270OUT exit must be written to be re-entrant.&lt;br /&gt;
&lt;br /&gt;
==New and changed commands==&lt;br /&gt;
===DISPLAY ECF===&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;DISPLAY ECF {{ M | N | U } like ?} &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This new command displays details from ECF tables, or the current status of users accessing ECF modules.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;syntax&amp;quot;&amp;gt;D ECF M&amp;lt;/span&amp;gt; displays the contents of the module table. For example:&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;    D ECF M &lt;br /&gt;
    Module   Loadlib  Address:Length     Loaded@      Lastused@   #Calls  Flags &lt;br /&gt;
    QATUM13C PROGLIB 2FB91FB8:00000028 19023:121506 19023:121506 00000001 &lt;br /&gt;
    QATUM13B PROGLIB 2FE65000:00009C18 19023:121506 19023:121506 00000001 &lt;br /&gt;
    QATUM13A PROGLIB 2FE6EC18:00001CD8 19023:121506 19023:121506 00000001  &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
(flags may be D=deleted; S=shared; H=halted; I=Idle)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;syntax&amp;quot;&amp;gt;D ECF N&amp;lt;/span&amp;gt; displays contents of the name table. For example: &amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;    D ECF N&lt;br /&gt;
    Module   Logical-call-name &lt;br /&gt;
    QATUM13C MOD_QATUM13C &lt;br /&gt;
    QATUM13B MOD_QATUM13B &lt;br /&gt;
    QATUM13A MOD_QATUM13A &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;syntax&amp;quot;&amp;gt;D ECF U&amp;lt;/span&amp;gt; displays details of users currently accessing ECF modules. This is also the default option, and so &amp;lt;span class=&amp;quot;syntax&amp;quot;&amp;gt;D ECF&amp;lt;/span&amp;gt; will display the same output as &amp;lt;span class=&amp;quot;syntax&amp;quot;&amp;gt;D ECF U&amp;lt;/span&amp;gt;. For example:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;    D ECF U                           &lt;br /&gt;
    User# Userid     Module   Parmlen &lt;br /&gt;
    00002 ADMIN      --none--         &lt;br /&gt;
    00003 ADMIN      COBSAMP1 00000002&lt;br /&gt;
    00004 ADMIN      COBSAMP1 00000002 &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;syntax&amp;quot;&amp;gt;D ECF LIKE ? &amp;lt;/span&amp;gt; (where &amp;lt;code&amp;gt;?&amp;lt;/code&amp;gt; is a valid pattern) displays details for entities that match the specified pattern.&lt;br /&gt;
&lt;br /&gt;
===REGENERATE===&lt;br /&gt;
The &amp;lt;var&amp;gt;REGENERATE&amp;lt;/var&amp;gt; command can now be run in a multi-user environment by multiple users with system manager privileges. A new option USING is provided to specify the ddname of the input journal, so that the full syntax is now as follows:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;  REGENERATE [USING ddname] FILE filename [FROM dumpname | IGNORE]&lt;br /&gt;
  [TO {LAST UPDATE [BEFORE yy.ddd hh:mm:ss.th] | LAST CHECKPOINT [BEFORE yy.dd hh:mm:ss.th] &lt;br /&gt;
  | UPDATE number OF yy.ddd hh:mm:ss.th | CHECKPOINT yy.ddd hh:mm:ss.th} ]&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The default for the using ddname is CCAGEN, but any ddname may be used to allocate an input journal and used. For example:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;  ALLOCATE REGEN1 WITH SCOPE=SYSTEM DSN=PROD1.GDGJ OLD SEQUENTIAL GEN=+2&lt;br /&gt;
  REGENERATE USING REGEN1 FILE TEST&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It is the user&#039;s responsibility to ensure that the file being regenerated is not in use, and so prior to usage, &amp;lt;var&amp;gt;BUMP FILE&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;STOP FILE&amp;lt;/var&amp;gt; should be used to isolate usage against the file. If the file is in use, the REGEN will fail with these messages:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;  M204.1430: Failed to open file TEST&lt;br /&gt;
  M204.1436: Stopped processing file TEST  &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
$STATUS will now be set for &amp;lt;var&amp;gt;REGENERATE&amp;lt;/var&amp;gt; with the following values:&lt;br /&gt;
&amp;lt;blockquote&amp;gt;    &lt;br /&gt;
    0 - Success &amp;lt;br/&amp;gt;&lt;br /&gt;
    1 - No files were processed &amp;lt;br/&amp;gt;&lt;br /&gt;
    2 - At least one file stopped processing &amp;lt;br/&amp;gt;&lt;br /&gt;
    4 - A serious error occurred, REGEN failed &lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Similarly, &amp;lt;var&amp;gt;SETGRC&amp;lt;/var&amp;gt; may be used to get the return code and error message.&lt;br /&gt;
&lt;br /&gt;
==New and changed parameters==&lt;br /&gt;
&lt;br /&gt;
===ECMODS===&lt;br /&gt;
The new minimum value for ECMODS, the allowable number of ECF modules, is 1. Prior to V7.8 the minimum value was 0. This changed was enabled in V7.7 with the application of zap 77z306.&lt;br /&gt;
&lt;br /&gt;
===ECNAMES===&lt;br /&gt;
The new minimum value for ECNAMES, the allowable number of ECF module names, is 1. Prior to V7.8 the minimum value was 0. This changed was enabled in V7.7 with the application of zap 77z306.&lt;br /&gt;
&lt;br /&gt;
===ECPSIZE===&lt;br /&gt;
The new minimum value for ECPSIZE, the initial storage allocation for ECF parameters, is 1024. Prior to V7.8 the minimum value was 0. This changed was enabled in V7.7 with the application of zap 77z306.&lt;br /&gt;
&lt;br /&gt;
===ENQTIME===&lt;br /&gt;
Millisecond duration of automatic record locking retry wait.&lt;br /&gt;
&lt;br /&gt;
Prior to this change, if record locking conflicts occur frequently in a busy online, any user with a non-zero value for &amp;lt;var&amp;gt;[[ENQRETRY parameter|ENQRETRY]]&amp;lt;/var&amp;gt; will wait at least 3 seconds before the conflict is dealt with. This can degrade overall system performance.      &lt;br /&gt;
                                                         &lt;br /&gt;
The &amp;lt;var&amp;gt;[[ENQTIME parameter|ENQTIME]]&amp;lt;/var&amp;gt; parameter specifies the number of milliseconds waited for each record locking retry wait. ENQTIME can be between 1 and 60000, corresponding to a minimum of 1 millisecond and a maximum of 1 minute. The default value of ENQTIME is 3000 (3 seconds).            &lt;br /&gt;
                                                         &lt;br /&gt;
For example, with ENQTIME = 100 and ENQRETRY = 7, after a record locking conflict occurs the thread will retry 7 times with wait intervals of .1 seconds, and so within at most .7 seconds either the lock becomes available or the conflict triggers an On unit or cancels the request.     &lt;br /&gt;
                                                         &lt;br /&gt;
The ENQTIME parameter may also be reset with $ResetN. &lt;br /&gt;
&lt;br /&gt;
This new parameter was enabled within V7.7 with the application of zap 77z299.&lt;br /&gt;
&lt;br /&gt;
===EVALOPT===&lt;br /&gt;
The new &amp;lt;var&amp;gt;EVALOPT&amp;lt;/var&amp;gt; parameter controls the cancellation of a request on truncation of string data. The default value is 0, and currently there is just one setting, 1, which means &amp;quot;cancel a request if truncation of string data occurs.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
For example, with the default of 0 in place, the following code &amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;    %x is string len 1   &lt;br /&gt;
    %y is string len 2   &lt;br /&gt;
    %y = &#039;ab&#039;            &lt;br /&gt;
    %x = %y              &lt;br /&gt;
    printtext {~} = {%x} &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
would cause silent truncation, and give the result&lt;br /&gt;
    &amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;%x = a &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If &amp;lt;var&amp;gt;EVALOPT&amp;lt;/var&amp;gt; is set to 1, then the above code produces the following message:&lt;br /&gt;
    &amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;M204.0552: Variable too small for result &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and the request is cancelled.&lt;br /&gt;
&lt;br /&gt;
===LFSCB===&lt;br /&gt;
LFSCB, the length of the full screen buffer, now has a new minimum value of 8 ( the previous minimum was 0 ). This change has been enabled within v7.7 with the application of zap 77z042, and within V7.6 with the application of zap 76z393.&lt;br /&gt;
&lt;br /&gt;
===MAXPRE, MAXBOUT, MAXSUBT===&lt;br /&gt;
&amp;lt;p&amp;gt;Introduced in zap 77Z257.&amp;lt;/p&amp;gt;&lt;br /&gt;
The new &amp;lt;var&amp;gt;MAXPRE&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;MAXBOUT&amp;lt;/var&amp;gt;, and &amp;lt;var&amp;gt;MAXSUBT&amp;lt;/var&amp;gt; parameters can be used to cancel a runaway transaction and prevent it from filling the checkpoint data set. &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;MAXPRE&amp;lt;/var&amp;gt;:  Maximum number of pre-images per transaction.  &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;MAXBOUT&amp;lt;/var&amp;gt;: Maximum number of backout pages per transaction. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;MAXSUBT&amp;lt;/var&amp;gt;: Maximum number of subtransaction checkpoints that a transaction can span.&amp;lt;/li&amp;gt;&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;Each new parameter defaults to unlimited. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;If a parameter value is set, a transaction is cancelled if that value is exceeded, and the following message is displayed:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;code&amp;gt;M204.0524: Maximum number (&amp;lt;i&amp;gt;num&amp;lt;/i&amp;gt;) of &amp;lt;i&amp;gt;parameter&amp;lt;/i&amp;gt; exceeded.&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
where &amp;lt;i&amp;gt;num&amp;lt;/i&amp;gt; is the value set for &amp;lt;i&amp;gt;parameter&amp;lt;/i&amp;gt; (&amp;lt;var&amp;gt;MAXPRE&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;MAXBOUT&amp;lt;/var&amp;gt;, or &amp;lt;var&amp;gt;MAXSUBT&amp;lt;/var&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
===NLDAPBUF===&lt;br /&gt;
This new parameter allows the number of LDAP buffers allocated during startup to be set in CCAIN. The default value is 2, and the settable value can range from 0 to 65535.&lt;br /&gt;
&lt;br /&gt;
===PUPDTH (new minimum value)===&lt;br /&gt;
If a user sets the &amp;lt;var&amp;gt;[[PUPDTH parameter|PUPDTH]]&amp;lt;/var&amp;gt; parameter to 0, it will now automatically be increased to 1, its minimum value.&lt;br /&gt;
&lt;br /&gt;
===SERV4G===&lt;br /&gt;
This parameter allows testing of server tables that span a 4-gigabyte boundary. For example, if SERV4G is X&#039;FFFFF000&#039;, each ATB server will begin at XX_FFFFF000. If SERV4G is X&#039;FFFF0000&#039;, each ATB server will begin at XX_FFFF0000. XX is determined by the storage available on the system. The parameter is set in CCAIN.&lt;br /&gt;
&lt;br /&gt;
The contents of the ATB server are specified by using the SERVGA parameter.&lt;br /&gt;
&lt;br /&gt;
For example. if you want VTBL to span the 4G boundary, you can use these settings: SERV4G=X&#039;FFFFF000&#039;, SERVGA=X&#039;00040000&#039;, and LVTBL=200 (6400 bytes, X&#039;1900&#039;). This will force each server&#039;s VTBL to begin at XX_FFFFF000 and end at XX+1_00000900.&lt;br /&gt;
&lt;br /&gt;
===WEBDFLT===&lt;br /&gt;
At V7.7, the default access rule for non-SSL ports was changed from ALLOW * to DISALLOW *, meaning that unless any ALLOW rules were in place resulting in a login/password prompt, the port couldn&#039;t be accessed. The new &amp;lt;var&amp;gt;[https://m204wiki.rocketsoftware.com/index.php/WEBDFLT_parameter WEBDFLT]&amp;lt;/var&amp;gt; parameter may be set to 1 for reversion to the old default of ALLOW *. Under V7.7, this new parameter was enabled with the application of zap 77z090. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;var&amp;gt;RESET WEBDFLT&amp;lt;/var&amp;gt; requires system administrator privileges. It is recommended to reset the 1 bit of &amp;lt;var&amp;gt;WEBDFLT&amp;lt;/var&amp;gt; to zero after issuing a series of &amp;lt;var&amp;gt;JANUS DEFINE&amp;lt;/var&amp;gt; commands which need WEBDFLT=1, as in the CCAIN input stream.&lt;br /&gt;
&lt;br /&gt;
==New and changed statistics==&lt;br /&gt;
===MPR, MBO, MCP, and RCV===&lt;br /&gt;
Introduced in zap 77Z257.&lt;br /&gt;
&amp;lt;p&amp;gt;These statistics provide high water mark transaction information. (Since-last values will not be available until V78 GA.)&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;They are useful in conjunction with the &amp;lt;var&amp;gt;MAXPRE&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;MAXBOUT&amp;lt;/var&amp;gt;, and &amp;lt;var&amp;gt;MAXSUBT&amp;lt;/var&amp;gt; parameters. &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
User/system statistics:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;MPR: High water mark of transaction pre-images. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;MBO: High water mark of transaction backout pages. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;MCP: High water mark of transaction chkpoint spans. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
System statistics: &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;RCV: Number of blocks needed for subtransaction recovery &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt; &lt;br /&gt;
&amp;lt;p class=&amp;quot;note&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Notes:&amp;lt;/b&amp;gt; M204.0843 now displays the RCV statistic for subtransaction checkpoints.&lt;br /&gt;
The size of recovery checkpoint must be greater than the sum of the last RCV value plus the number of records in [https://m204wiki.rocketsoftware.com/index.php/System_and_media_recovery#RESTART_recovery_considerations_for_sub-transaction_checkpoints RESTART and RESTARTS].&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
===DKWTS and DKWTMICS===&lt;br /&gt;
Introduced in zap 77z7289.&lt;br /&gt;
&amp;lt;p&amp;gt;The new system statistics DKWTS (DisK WaiTs) and DKWTMICS (DisK WaiT MICroSeconds) collect data to provide rough disk I/O service time numbers.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
DKWTS shows the number of disk I/O waits. DKWTMICS shows the total wait time for those waits in microseconds. Dividing the difference in DKWTMICS by the difference in DKWTS over an interval provides the average disk I/O wait time in microseconds.              &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;note&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Notes:&amp;lt;/b&amp;gt; &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The wait time does include internal Model 204 scheduler delays, so on a CPU bound Model 204 system, the service times calculated from DKWTS and DKWTMICS are likely to be an overestimate of actual service times.&amp;lt;/li&amp;gt;  &lt;br /&gt;
                                                                    &lt;br /&gt;
&amp;lt;li&amp;gt;DKWTS and DKWTMICS are not available in SirMon; use [https://m204wiki.rocketsoftware.com/index.php/MONITOR_command MONITOR] SYSTEM STATISTICS to view these statistics.&amp;lt;/li&amp;gt;&amp;lt;/ul&amp;gt;  &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Compatibility issues==&lt;br /&gt;
===&amp;lt;b id=&amp;quot;listNewInit&amp;quot;&amp;gt;&amp;lt;/b&amp;gt;$ListNew cannot be used in Initial clause===&lt;br /&gt;
It is now a compilation error if &amp;lt;var&amp;gt;$ListNew&amp;lt;/var&amp;gt; is attempted to be used in the &amp;lt;var&amp;gt;Initial&amp;lt;/var&amp;gt; clause of a &lt;br /&gt;
[https://m204wiki.rocketsoftware.com/index.php/Using_variables_and_values_in_computation#Declare_statements_for_.25variables declaration statement].&lt;br /&gt;
&amp;lt;p&amp;gt;This change is propagated by zap maintenance to versions 7.5 (zap 75Z487), 7.6 (zap 76Z514), and 7.7 (zap 77Z281) of Model 204.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote class=&amp;quot;note&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Note:&amp;lt;/b&amp;gt; Strictly speaking, this would not be considered a compilation error, because previously although &amp;lt;code&amp;gt;..&amp;amp;nbsp;Initial($ListNew)&amp;lt;/code&amp;gt; did not produce a compilation error, in almost all circumstances it would produce a snap if the initialized %variable were used with some other &amp;lt;var&amp;gt;$List&amp;lt;i&amp;gt;xxx&amp;lt;/i&amp;gt;&amp;lt;/var&amp;gt; invocation.&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Restricting the use of the CUSTOM=38 setting===&lt;br /&gt;
The [[CUSTOM parameter|CUSTOM=38]] parameter setting, introduced at V7.5, inadvertently provided System Manager privileges to all users via the RESET command. This CUSTOM setting is now restricted to the RESETting of the LAUDIT parameter.&lt;br /&gt;
&lt;br /&gt;
===Disabling of Closure support===&lt;br /&gt;
Due to a number of bugs related to Closure support, introduced at V7.7, this feature, which can best be described as exposed methods assigned to method variables, has been disabled in this release. This change was also made to V7.7 with application of zap 77z119.&lt;br /&gt;
&lt;br /&gt;
===Password delimiter enforced===&lt;br /&gt;
When using IFSTRTN to logon to a Model 204 online from an IFAM2 application, both the logonid and password must be followed by a semicolon - the delimiter.             &lt;br /&gt;
For example:      &lt;br /&gt;
                                      &lt;br /&gt;
CALL IFSTRTN(RC,&#039;logonid;password;&#039;...)&lt;br /&gt;
                 &lt;br /&gt;
If a semicolon does not follow the password string, the following message will now be issued&lt;br /&gt;
&lt;br /&gt;
M204.2964: Password missing or too long                  &lt;br /&gt;
                                                         &lt;br /&gt;
Previously, a semicolon following the password was not required and the first blank served as a password delimiter.  However, as of V7.7, embedded blanks are valid password characters and a semicolon is now required to delimit the password.&lt;br /&gt;
&lt;br /&gt;
This change has also been enabled within V7.7 with the application of zap 77z231.&lt;br /&gt;
&lt;br /&gt;
===PAGESZ parameter validated===&lt;br /&gt;
Previously it was possible to set the PAGESZ parameter to any value, although Model 204 internally supports one page size of 6184, and any deviation from this value would have led to problems during file creation. The value of this parameter is now controlled, such that setting it to any value other than 6184 will generate an M204.1149 message with the parameter being reset to 6184.&lt;br /&gt;
&lt;br /&gt;
===ECPRIV and the IDCAMS facility===&lt;br /&gt;
At V7.7 a security loophole was closed, whereby all ECF modules were run under external-authorizer profile of the calling user. Previously any ECF tasks were run under the owning job&#039;s external-authorizer profile, and in order for certain sites to retain that ability, a new setting of ECPRIV, value 4, was introduced to retain the ability to run ECF tasks using the job&#039;s security profile. &lt;br /&gt;
&lt;br /&gt;
The ECPRIV 4 setting potentially introduced a security loophole when calling the IDCAMS interface, based upon what the IDCAMS utility is able to do at a system level. Consequently as of this release, the ECPRIV 4 setting will be ignored when calling the IDCAMS facility via ECF, and such IDCAMS processes will always use the calling user&#039;s security profile. Any existing jobs that use ECF to call the IDCAMS utility with the ECFPRIV 4 bit set should be checked to ensure that the calling user&#039;s security profile still satisfies the job&#039;s requirements.&lt;br /&gt;
&lt;br /&gt;
===TCPOPTS is view only===&lt;br /&gt;
In previous releases the TCPOPTS parameter, which identifies the type of IP addressing in use ( v4 or v6 ), was resetable, although it was always documented as a view-only parameter. The parameter is now handled as a view-only parameter, and any attempts to reset the parameter will result in&lt;br /&gt;
&lt;br /&gt;
   M204.1123: Parameter TCPOPTS not reset&lt;br /&gt;
&lt;br /&gt;
===ZHPF command can only be issued by a system manager===&lt;br /&gt;
In previous releases it was possible to issue the ZHPF command without being logged on. From this release onwards, a user would have to be logged on with system manager privileges to be able to issue this command.&lt;br /&gt;
&lt;br /&gt;
Additionally, the command output will now only  display results for currently open files.&lt;br /&gt;
&lt;br /&gt;
This changes has been enabled within v7.7 with the application of zap 77z264.&lt;br /&gt;
&lt;br /&gt;
===Terminal MODEL reset failure===&lt;br /&gt;
If a reset of the terminal MODEL parameter fails due to an under sized output page buffer, then in addition to the existing messages that inform the user of this failure&lt;br /&gt;
&lt;br /&gt;
    M204.1875 UNABLE TO RESET MODEL TO %C &lt;br /&gt;
    M204.1123: Parameter MODEL not reset  &lt;br /&gt;
&lt;br /&gt;
the following message will now be issued&lt;br /&gt;
&lt;br /&gt;
    M204.1008: LOUTPB must be increased to at least &amp;lt;number&amp;gt; &lt;br /&gt;
                                                         &lt;br /&gt;
where &amp;lt;number&amp;gt; is the minimum value of LOUTPB necessary to support the terminal model.&lt;br /&gt;
&lt;br /&gt;
This change is enabled in V7.7 with the application of zap 77z309.&lt;br /&gt;
&lt;br /&gt;
==New and changed messages==&lt;br /&gt;
&lt;br /&gt;
See [[New and updated messages in Model 204 version 7.8|New and updated messages in Model 204 version 7.8]] for details.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category: Release notes]]&lt;/div&gt;</summary>
		<author><name>ELowell</name></author>
	</entry>
	<entry>
		<id>https://m204wiki.rocketsoftware.com/index.php?title=Release_notes_for_Model_204_version_7.8&amp;diff=117683</id>
		<title>Release notes for Model 204 version 7.8</title>
		<link rel="alternate" type="text/html" href="https://m204wiki.rocketsoftware.com/index.php?title=Release_notes_for_Model_204_version_7.8&amp;diff=117683"/>
		<updated>2019-09-17T16:09:49Z</updated>

		<summary type="html">&lt;p&gt;ELowell: /* Increase URL length that can be returned with $web_form_action */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
These release notes list the enhancements and other changes contained in Model 204 version 7.8. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;&amp;lt;b&amp;gt;******THIS IS A DRAFT DOCUMENT.******&amp;lt;/b&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
These release notes list the enhancements and other changes contained in Model 204 version 7.8, &amp;lt;b&amp;gt;&amp;lt;i&amp;gt;which is still in development&amp;lt;/i&amp;gt;&amp;lt;/b&amp;gt;. Until the commercial release of the software, Rocket reserves the right to add to, remove, or change anything described herein. &lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
These release notes contain installation and features information for the Rocket Model 204 version 7.8 release.&lt;br /&gt;
Before beginning your installation, please read through this information about product installation and changes.&lt;br /&gt;
&lt;br /&gt;
==SOUL enhancements==&lt;br /&gt;
===AmIndependent method===&lt;br /&gt;
The &amp;lt;var&amp;gt;AmIndependent&amp;lt;/var&amp;gt; method returns TRUE for daemons spawned by &amp;lt;var&amp;gt;[http://m204wiki.rocketsoftware.com/index.php/RunIndependently_(Daemon_subroutine) RunIndependently]&amp;lt;/var&amp;gt;. (The action of &amp;lt;var&amp;gt;[https://m204wiki.rocketsoftware.com/index.php/AmDaemon_(Daemon_property) AmDaemon]&amp;lt;/var&amp;gt; remains unchanged.)&lt;br /&gt;
&lt;br /&gt;
The following table shows the values returned by &amp;lt;var&amp;gt;AmIndependent&amp;lt;/var&amp;gt; versus &amp;lt;var&amp;gt;AmDaemon&amp;lt;/var&amp;gt; for different daemon types:&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Type&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;AmDaemon&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;AmIndependent&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;$COMBG&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;False&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;False&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Independent daemon&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;False&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;True&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Other daemon&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;True&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;False&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Web, etc.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;False&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;False&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===$ProcOpn===&lt;br /&gt;
&amp;lt;var&amp;gt;[https://m204wiki.rocketsoftware.com/index.php/$ProcOpn $ProcOpn]&amp;lt;/var&amp;gt; now supports the opening of a procedure with an all numeric name, and including a leading zero, e.g.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;%result = $procOpn(&#039;0123&#039;, &#039;MYFILE&#039;)&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Support for such procedures names was initially introduced at v7.7, and this feature of &amp;lt;var&amp;gt;$ProcOpn&amp;lt;/var&amp;gt; is also enabled within v7.7 with the application of zap 77z054.&lt;br /&gt;
&lt;br /&gt;
===Allow parentheses to surround a boolean enumeration object===&lt;br /&gt;
The following sample code&lt;br /&gt;
&lt;br /&gt;
   begin                                       &lt;br /&gt;
   variables are undefined                  &lt;br /&gt;
   %isValid is boolean initial (True)       &lt;br /&gt;
   if (%isValid) then                  &lt;br /&gt;
      print &#039;in IF&#039;                            &lt;br /&gt;
   end if                                   &lt;br /&gt;
   end         &lt;br /&gt;
&lt;br /&gt;
will now compile and run successfully, as &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;if (%isValid) then &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
is logically equivalent to&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;if %isValid then &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Prior to V7.8 the presence of parentheses surrounding the boolean enumeration object would have caused a compilation error. This change is enabled in V7.7 with the application of zap 77z370.&lt;br /&gt;
&lt;br /&gt;
===Support for copying Object class objects===&lt;br /&gt;
The Object class now supports the copy and deepCopy methods. For example, and Object object can be copied as follows&lt;br /&gt;
&lt;br /&gt;
   begin               &lt;br /&gt;
   %x is object object &lt;br /&gt;
   %y is object object &lt;br /&gt;
   %y = new            &lt;br /&gt;
   %x = %y:copy        &lt;br /&gt;
   end&lt;br /&gt;
&lt;br /&gt;
This change is enabled in v7.7 with the application of zap 77z076, and within V7.6 with the application of zap 76z412.&lt;br /&gt;
&lt;br /&gt;
===Assignment of enumeration values to method variables===&lt;br /&gt;
Enumerations values can now be assigned to method variables whose result is an enumeration.So for example the following code&lt;br /&gt;
&lt;br /&gt;
   begin                                               &lt;br /&gt;
   enumeration colour                                  &lt;br /&gt;
      public                                           &lt;br /&gt;
         value red                                     &lt;br /&gt;
         value white                                   &lt;br /&gt;
         value blue                                    &lt;br /&gt;
      end public                                       &lt;br /&gt;
   end enumeration                                     &lt;br /&gt;
   %func    is function getColour is enumeration colour&lt;br /&gt;
   local function getColour is enumeration colour      &lt;br /&gt;
      return blue                                      &lt;br /&gt;
   end function                                        &lt;br /&gt;
   %func    = getColour                                &lt;br /&gt;
   %func    = (colour):red                             &lt;br /&gt;
   printText {~=%(Local):(%func)}                      &lt;br /&gt;
   end  &lt;br /&gt;
&lt;br /&gt;
will produce the result&lt;br /&gt;
&lt;br /&gt;
   %(Local):(%func)=red&lt;br /&gt;
&lt;br /&gt;
whereas previously the line   &lt;br /&gt;
&lt;br /&gt;
   %func    = (colour):red    &lt;br /&gt;
&lt;br /&gt;
would have been rejected with the message&lt;br /&gt;
&lt;br /&gt;
   MSIR.0993: Assignment invalid: mismatch between method and method variable&lt;br /&gt;
&lt;br /&gt;
This change is enabled in V7.7 with the application of zap 77z128.&lt;br /&gt;
&lt;br /&gt;
==External Call Facility enhancements==&lt;br /&gt;
===Managing ECF tables more efficiently===&lt;br /&gt;
The are two new features to help manage ECF tables more efficiently, avoid conditions where the table can fill, and prevent the definition of further entities.&lt;br /&gt;
&lt;br /&gt;
The first feature is the new  &amp;lt;var&amp;gt;DISPLAY ECF&amp;lt;/var&amp;gt; command, which displays the contents of ECF tables and also the current status of users accessing ECF modules. See more details of the &amp;lt;var&amp;gt;[[#DISPLAY ECF|DISPLAY ECF]]&amp;lt;/var&amp;gt; command below.&lt;br /&gt;
&lt;br /&gt;
The second feature is a new &amp;lt;var&amp;gt;EXTERNAL REMOVE&amp;lt;/var&amp;gt; statement with the syntax&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;EXTERNAL REMOVE &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;modulename&amp;lt;/span&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This causes the entry for the named module to be removed from the module table. The table entry is then placed on a free chain of entries and can be reused by issuing the EXTERNAL MODULE statement. This allows the module table to be managed with redundant entries removed, without having to recycle the ONLINE.&lt;br /&gt;
&lt;br /&gt;
A EXTERNAL REMOVE statement will return $status/$statusd values of 0/0, and most other status values that can be returned by the EXTERNAL REMOVE statement are already documented in the ECF return codes table. If an EXTERNAL REMOVE is attempted against a module that is currently being called ( in use ), then $status/$statusd will return the values 20/1 ( module unavailable).&lt;br /&gt;
&lt;br /&gt;
==System enhancements==&lt;br /&gt;
&lt;br /&gt;
===New wait types for daemon/master waits===&lt;br /&gt;
&lt;br /&gt;
Two new wait types, viewable on the &amp;lt;var&amp;gt;[https://m204wiki.rocketsoftware.com/index.php/MONITOR_command MONITOR] USERS&amp;lt;/var&amp;gt; command output, have been implemented as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;57&amp;lt;/code&amp;gt; - Means a daemon thread waiting for its master thread  &amp;lt;br /&amp;gt;     &lt;br /&gt;
&amp;lt;code&amp;gt;58&amp;lt;/code&amp;gt; - Means a master thread waiting for one of its daemon threads&lt;br /&gt;
&lt;br /&gt;
This change is enabled in V7.7 with the application of zap 77z410.&lt;br /&gt;
&lt;br /&gt;
===Snap formatting changes===&lt;br /&gt;
Date/time stamps in the page headers of snaps will now be shown normal format, rather than in julian format as in previous releases. Thus in the following example a particular snap header under v7.7 or previous releases would show as &lt;br /&gt;
&lt;br /&gt;
   SNAPID    1   19226.060155  M204.0022: Bug .. nnnnn               PAGE     1&lt;br /&gt;
&lt;br /&gt;
whereas the same snap header under v7.8 would show as &lt;br /&gt;
&lt;br /&gt;
   SNAPID    1  2019/08/14 06:01:06   M204.0022: Bug .. nnnnn        PAGE     1&lt;br /&gt;
&lt;br /&gt;
Also, due to improvements in handling trailing blanks in snap output, a snap generated under v7.8 should be marginally smaller than the same snap generated under previous releases, assuming the same SNAPCTL settings.&lt;br /&gt;
&lt;br /&gt;
===Call stack trace for problem diagnosis===&lt;br /&gt;
A  call stack trace is now provided to help diagnose and resolve common errors. To enable the stack trace, do either of the following: &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Set the &amp;lt;var&amp;gt;[[SIRFACT parameter|SIRFACT]] X&#039;01&#039;&amp;lt;/var&amp;gt; bit.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Set the &amp;lt;var&amp;gt;[[DEBUGUL parameter|DEBUGL]]&amp;lt;/var&amp;gt; parameter. Note that the &amp;lt;var&amp;gt;DEBUGUL&amp;lt;/var&amp;gt; approach will introduce extra QTBL overhead. &amp;lt;p&amp;gt;(&amp;lt;var&amp;gt;DEBUGUL&amp;lt;/var&amp;gt; provides a similar facility with an include trace of procedures leading to the error, but this might not be potentially as useful as the call trace.)&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt; &lt;br /&gt;
&lt;br /&gt;
The call stack trace can assist in diagnosing run-time errors that might occur, as illustrated by the following &amp;quot;Variable too small for result&amp;quot; and &amp;quot;MBSCAN exceeded&amp;quot; examples.&lt;br /&gt;
&lt;br /&gt;
====Variable too small for result====&lt;br /&gt;
When the stack trace is enabled, a &amp;quot;variable too small&amp;quot; error results in the following message:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;M204.2966: Error at line n, procedure &#039;&#039;procname&#039;&#039; in file &#039;&#039;procfile&#039;&#039;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
which identifies the line within a procedure where the error is occurring, in addition to the usual message:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;M204.0552: Variable too small for result&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Any subsequent M204.2966 messages indicate the point in the code from where the code in error was called. For example, a stack of three subroutine calls leading to a &amp;quot;variable too small&amp;quot; error might result in the following messaging:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;   M204.0552: Variable too small for result                             &lt;br /&gt;
   M204.2966: Error at line 9, procedure MYPROC.LEVEL4 in file MYPROC   &lt;br /&gt;
   M204.2966: Called from line 5, procedure MYPROC.LEVEL3 in file MYPROC&lt;br /&gt;
   M204.2966: Called from line 5, procedure MYPROC.LEVEL2 in file MYPROC&lt;br /&gt;
   M204.2966: Called from line 5, procedure MYPROC.LEVEL1 in file MYPROC &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This information should help in diagnosing the problem. &lt;br /&gt;
&lt;br /&gt;
If the error occurs within a command level program rather than a procedure, then the M204.2966 message is replaced by an M204.2967 message, and a similar error condition to the above with a preceding call stack might be audited as follows:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;   M204.0552: Variable too small for result              &lt;br /&gt;
   M204.2967: Error at line 14 of command level program  &lt;br /&gt;
   M204.2967: Called from line 5 of command level program&lt;br /&gt;
   M204.2967: Called from line 3 of command level program &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If neither &amp;lt;var&amp;gt;SIRFACT X&#039;01&#039;&amp;lt;/var&amp;gt; nor &amp;lt;var&amp;gt;DEBUGUL&amp;lt;/var&amp;gt; is set, then the &amp;quot;variable too small&amp;quot; error produces the following messages:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;   M204.0552: Variable too small for result &lt;br /&gt;
   M204.2968: Error: no debug info &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====MBSCAN exceeded====&lt;br /&gt;
Similarly to the handling of the &amp;quot;variable too small for result&amp;quot; error, the call stack can also be used to diagnose errors where the value of &amp;lt;var&amp;gt;[[MBSCAN parameter|MBSCAN]]&amp;lt;/var&amp;gt; is exceeded as a result of a direct search of Table B records. &lt;br /&gt;
&amp;lt;p&amp;gt;Again, under V7.8, with either the &amp;lt;var&amp;gt;SIRFACT X&#039;01&#039;&amp;lt;/var&amp;gt; bit set or &amp;lt;var&amp;gt;DEBUGUL&amp;lt;/var&amp;gt; set, if a long request occurs as a result of exceeding &amp;lt;var&amp;gt;MBSCAN&amp;lt;/var&amp;gt;, then initially the following message is produced, as before:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;M204.0569: File &#039;&#039;filename&#039;&#039;, Find: Table B records to be searched = &#039;&#039;nnnn&#039;&#039;&amp;lt;/p&amp;gt;&lt;br /&gt;
followed by a DYRWT prompt message. If the user replies &#039;N&#039; to the prompt, or if the request is run in an environment (such as a batch job) where the default response is &#039;N&#039;, the following message is produced after the M204.0569 message:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;Cancelling request: M204.2969: MBSCAN (&#039;&#039;mm&#039;&#039;) exceeded, records to be searched = &#039;&#039;nnnn&#039;&#039;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
where &#039;&#039;mm&#039;&#039; is the current setting of &amp;lt;var&amp;gt;MBSCAN&amp;lt;/var&amp;gt;. The M204.2969 message is followed by M204.2966 messages displaying the call stack trace. Thus, if the following code is run from procedure MYPROC.MBSCAN against the demo database, with an &amp;lt;var&amp;gt;MBSCAN&amp;lt;/var&amp;gt; setting of 10:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;   b                           &lt;br /&gt;
   call sub1                   &lt;br /&gt;
   sub1: subroutine            &lt;br /&gt;
   fd1:                        &lt;br /&gt;
      in clients fd city = ONTARIO&lt;br /&gt;
              end find         &lt;br /&gt;
      fr fd1                      &lt;br /&gt;
         pai                      &lt;br /&gt;
         print                    &lt;br /&gt;
      end for                     &lt;br /&gt;
   end subroutine              &lt;br /&gt;
   end &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
then the following messages are produced, assuming any prompts are responded to with an &#039;N&#039;:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;   M204.0569: File CLIENTS, Find: Table B records to be searched = 3415&lt;br /&gt;
   Cancelling request: M204.2969: MBSCAN (10) exceeded, records to be searched = 3415  &lt;br /&gt;
   M204.2966: Error at line 6, procedure MYPROC.MBSCAN in file MYPROC&lt;br /&gt;
   M204.2966: Called from line 3, procedure MYPROC.MBSCAN in file MYPROC  &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===appendJournalData===&lt;br /&gt;
The &amp;lt;var&amp;gt;[[AppendJournalData_(Stringlist_function)|AppendJournalData]]&amp;lt;/var&amp;gt; function is now more tolerant of an outstanding BUMP request. Previously, if &amp;lt;var&amp;gt;AppendJournalData&amp;lt;/var&amp;gt; was called to inadvertently retrieve a large amount of journal data, typically when called implicitly from within SirScan, then any outstanding BUMP request wouldn&#039;t be honored until all of the data had been retrieved, at which point the BUMP request would be completed, and all data would be lost.&lt;br /&gt;
&lt;br /&gt;
Now, the &amp;lt;var&amp;gt;AppendJournalData&amp;lt;/var&amp;gt; process checks for outstanding BUMP requests before each track I/O is executed, thus avoiding excessive I/Os against the journal and long waits for the BUMP of such a process to complete.&lt;br /&gt;
&lt;br /&gt;
==AUDIT204 enhancements==&lt;br /&gt;
===FORMAT command===&lt;br /&gt;
TIMEHH is a new parameter used with the FORMAT command of the [[Tracking_system_activity_(CCAJRNL,_CCAAUDIT,_CCAJLOG)#AUDIT204_utility|AUDIT204]] utility.  It indicates that timestamps, printed at the beginning of each line of output, should include hundredths of a second. Requires no other arguments.&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;b&amp;gt;NOTE:&amp;lt;/b&amp;gt; This parameter and the 78 version (or later) of AUDIT204 may be used against a 77 (or later) CCAJRNL.&amp;lt;/p&amp;gt;&lt;br /&gt;
For example:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;//CCAIN DD *&lt;br /&gt;
FORMAT YEARFORM 4&lt;br /&gt;
TIMEHH&lt;br /&gt;
TYPE ER MS LI&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Recovery enhancements==&lt;br /&gt;
===Media Recovery in a multi-user environment===&lt;br /&gt;
It is now possible to perform media recovery by issuing the &amp;lt;var&amp;gt;REGENERATE&amp;lt;/var&amp;gt; command to roll forward selected files in a multi-user environment, with the media recovery being carried out by different users with system manager privileges. The new USING option allows for the specification of a ddname for the input journal stream to be used by the &amp;lt;var&amp;gt;REGENERATE&amp;lt;/var&amp;gt; command. Previously media recovery was restricted to single user batch jobs, using the CCAGEN ddname for the input journal. For more details, see the &amp;lt;var&amp;gt;[[#REGENERATE|REGENERATE]]&amp;lt;/var&amp;gt; command below.&lt;br /&gt;
&lt;br /&gt;
==Security enhancements==&lt;br /&gt;
===CA-Top Secret can disallow CCASTAT logins===&lt;br /&gt;
The [https://m204wiki.rocketsoftware.com/index.php/CA-Top_Secret_interface CA-Top Secret] interface now recognizes the &amp;lt;code&amp;gt;DEFACID=&amp;lt;/code&amp;gt;, setting and does not allow CCASTAT logins in the online if &amp;lt;code&amp;gt;DEFACID&amp;lt;/code&amp;gt; is set to null. (There is no attempt to log on M204USR.) Therefore, to disallow CCASTAT logons, set DEFACID=, in [https://m204wiki.rocketsoftware.com/index.php/CA-Top_Secret_interface#Preparing_a_TOPSPARM_parameter_module_with_TOPSGEN TOPSPARM]. CCASTAT will be opened because it contains file and group passwords, but it will not be used for logons if CCASTAT logons are not allowed.&lt;br /&gt;
&lt;br /&gt;
===CUSTOM=11 and mixed cased input===&lt;br /&gt;
The &amp;lt;var&amp;gt;[https://m204wiki.rocketsoftware.com/index.php/CUSTOM_parameter CUSTOM]&amp;lt;/var&amp;gt; parameter CUSTOM=11 setting no longer requires that a *LOWER command be issued prior to a LOGCTL command (to add or change a  password) to preserve mixed case input. Prior to this release, with CUSTOM=11 in place, *LOWER had to be issued before a LOGCTL command, otherwise any mixed case password strings would automatically be translated into uppercase. This change is enabled within V7.7 with the application of zap 77z108.&lt;br /&gt;
&lt;br /&gt;
===DEFUSER can specify a jobname not authorized to access M204===&lt;br /&gt;
When specifying DEFUSER=JOBNAME and VALIDAT=LOGON in the RACFGEN parms for an ONLINE, if the specified jobname ( the owning id for the ONLINE job ) isn&#039;t authorized to use Model 204 via RACF, any LOGIN commands specifying no userid will now succeed ( previously such a LOGON would have failed ). This enables users to submit jobs with USE $JOB, whereby the string USER=jobname  will be added to the submitted JCL, and this in turn is useful if the specified jobname has dataset access privileges to datasets required by the submitted jobs, even if the jobname itself isn&#039;t authorized to use M204.&lt;br /&gt;
&lt;br /&gt;
==Janus product enhancements==&lt;br /&gt;
&lt;br /&gt;
===Janus Web Server access rule===&lt;br /&gt;
The automatic &amp;lt;var&amp;gt;[[JANUS WEB ALLOW]]&amp;lt;/var&amp;gt; rule, which allowed any user to access the port without requiring a login, is changed &amp;lt;i&amp;gt;for non-SSL ports&amp;lt;/i&amp;gt; to the following:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;JANUS WEB &amp;lt;i&amp;gt;portname&amp;lt;/i&amp;gt; DISALLOW *&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
This rule requires a system administrator to explicitly define &amp;lt;var&amp;gt;ALLOW&amp;lt;/var&amp;gt; rules to enable users to access non-SSL ports.&lt;br /&gt;
The rule applies unless overridden by user-added rules. &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;blockquote class=&amp;quot;note&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;b&amp;gt;Note:&amp;lt;/b&amp;gt; To revert from this change in the JANUS DEFINE default and make the default &lt;br /&gt;
 non-SSL &amp;lt;var&amp;gt;ALLOW&amp;lt;/var&amp;gt; rule as it was in version 7.5 and earlier (&amp;lt;code&amp;gt;ALLOW *&amp;lt;/code&amp;gt;), turn on the 1 bit of the &amp;lt;var&amp;gt;[[WEBDFLT parameter|WEBDFLT]]&amp;lt;/var&amp;gt; parameter: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;RESET WEBDFLT=1&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Increase in pending accepts for Janus BPX ports===&lt;br /&gt;
The default number of pending accepts for Janus BPX server ports has been increased from 3 to 12, thus reducing the likelihood that a pending accept may fail with the message&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;MSIR.0019 Connection request rejected for port (port), MAXCON exceeded&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The actual number of pending accepts to be supported on the port can be set with the new parameter MAXPEND, set on the &amp;lt;var&amp;gt;[[JANUS_DEFINE|JANUS DEFINE]]&amp;lt;/var&amp;gt; command, where MAXPEND can vary from 3 up to a maximum value of 32. The change to the default value was enabled within V7.7 with the application of zap 77z269.&lt;br /&gt;
&lt;br /&gt;
===TCP listen backlog increased===&lt;br /&gt;
&lt;br /&gt;
The [https://m204wiki.rocketsoftware.com/index.php/Program_Communication_facilities#LISTEN_call TCP_listen] backlog has been increased from 16 to 1024 under z/OS.&lt;br /&gt;
&lt;br /&gt;
This update tells the TCP stack to queue up to 1024 of such requests up before dropping them, thus reducing, or in most cases eliminating, the likelihood of a connection request drop, other than in exceptional circumstances, such as a denial of service attack. This change was enabled within V7.7 with the application of zap 77z340.&lt;br /&gt;
&lt;br /&gt;
===Defer the freeing of XMLSCREEN input XML===&lt;br /&gt;
&lt;br /&gt;
The freeing of [https://m204wiki.rocketsoftware.com/index.php/XMLSCREEN_and_NOXMLSCREEN_(JANUS_DEFINE_parameters) XMLSCREEN] input XML is now deferred until the next Read Screen or session termination. This means that if an application error is detected, the input XML can be retrieved with [https://m204wiki.rocketsoftware.com/index.php/$Web_Input_Content $Web_Input_Content] and then logged for problem analysis. &lt;br /&gt;
&lt;br /&gt;
Prior to this release the XML received from the client is freed immediately after being used to set the input data for a Read Screen, rendering it unavailable for problem determination.&lt;br /&gt;
&lt;br /&gt;
This change is enabled in V7.7 with the application of zap 77z368.&lt;br /&gt;
&lt;br /&gt;
===XMLSCREEN and Janus Web Legacy blank stripping===&lt;br /&gt;
&lt;br /&gt;
xmlScreens and Janus Web Legacy screens now adhere to the same standard as standard screen processing in terms of stripping leading blanks from input fields defined as [https://m204wiki.rocketsoftware.com/index.php/Full-screen_feature#DEBLANK_or_NODEBLANK_option DEBLANK] (either explicitly or implicitly).&lt;br /&gt;
&lt;br /&gt;
This change is enabled in V7.7 with the application of zap 77z400.&lt;br /&gt;
&lt;br /&gt;
===SSL input buffer size===&lt;br /&gt;
&lt;br /&gt;
The default value of [https://m204wiki.rocketsoftware.com/index.php/SSLIBSIZE_(JANUS_DEFINE_parameter) SSLIBSIZE] has been increased to 16384 + 128, or 16512. This size should ensure correct communication with all TLS spec compliant applications. It is the maximum size allowed unless you use [https://m204wiki.rocketsoftware.com/index.php/CUSTOM_parameter#Using_CUSTOM.3D.2818.29 CUSTOM=18].    &lt;br /&gt;
&lt;br /&gt;
This changed is enabled within V7.7 with the application of zap 77z415.&lt;br /&gt;
&lt;br /&gt;
===Increasing LDAP buffers===&lt;br /&gt;
&lt;br /&gt;
The number of LDAP buffers allocated at startup can now be changed by setting the NLDAPBUF parameter in CCAIN. See below for details on [[#NLDAPBUF|NLDAPBUF]].&lt;br /&gt;
&lt;br /&gt;
===Increase URL length that can be returned with $web_form_action===&lt;br /&gt;
With this release the maximum Janus Web Server incoming URL that can be handled by &amp;lt;var&amp;gt;$web_form_action&amp;lt;/var&amp;gt; is increased from 512 bytes to 1024 bytes.&lt;br /&gt;
&lt;br /&gt;
==Debugger enhancements==&lt;br /&gt;
&lt;br /&gt;
===Access to exposed variables===&lt;br /&gt;
The debuggers can now view or watch the values of variables exposed to local routines/methods. Previously, any attempts to access an exposed variable would have displayed &amp;quot;%varname has no value&amp;quot; in the debugger session. (This feature is enabled within V7.7 with the application of zap 77z363.)&lt;br /&gt;
&lt;br /&gt;
==Performance enhancements==&lt;br /&gt;
&lt;br /&gt;
===MP/204 offload improvements===&lt;br /&gt;
Application code issuing the following SOUL statements will now now be fully offloadable:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;File Records In/On&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Remember&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt; &lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Position&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Sort Values&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;                                             &lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Reset Header/Trailer&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===X3270OUT exit offloadable===&lt;br /&gt;
When running MP/204 (AMPSUBS&amp;gt;0) and using the [https://m204wiki.rocketsoftware.com/index.php/Coding_SNA_Communications_Server_conversion_exit_routines#X3270OUT_.28convert_output_from_3270_format.29 X3270OUT] exit to convert a 3270 output data stream to the appropriate device protocol, the exit can now run in parallel mode to improve performance. This change was enabled in V7.7 with the application of zap 77Z313.&lt;br /&gt;
&lt;br /&gt;
The X3270OUT exit must be written to be re-entrant.&lt;br /&gt;
&lt;br /&gt;
==New and changed commands==&lt;br /&gt;
===DISPLAY ECF===&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;DISPLAY ECF {{ M | N | U } like ?} &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This new command displays details from ECF tables, or the current status of users accessing ECF modules.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;syntax&amp;quot;&amp;gt;D ECF M&amp;lt;/span&amp;gt; displays the contents of the module table. For example:&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;    D ECF M &lt;br /&gt;
    Module   Loadlib  Address:Length     Loaded@      Lastused@   #Calls  Flags &lt;br /&gt;
    QATUM13C PROGLIB 2FB91FB8:00000028 19023:121506 19023:121506 00000001 &lt;br /&gt;
    QATUM13B PROGLIB 2FE65000:00009C18 19023:121506 19023:121506 00000001 &lt;br /&gt;
    QATUM13A PROGLIB 2FE6EC18:00001CD8 19023:121506 19023:121506 00000001  &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
(flags may be D=deleted; S=shared; H=halted; I=Idle)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;syntax&amp;quot;&amp;gt;D ECF N&amp;lt;/span&amp;gt; displays contents of the name table. For example: &amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;    D ECF N&lt;br /&gt;
    Module   Logical-call-name &lt;br /&gt;
    QATUM13C MOD_QATUM13C &lt;br /&gt;
    QATUM13B MOD_QATUM13B &lt;br /&gt;
    QATUM13A MOD_QATUM13A &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;syntax&amp;quot;&amp;gt;D ECF U&amp;lt;/span&amp;gt; displays details of users currently accessing ECF modules. This is also the default option, and so &amp;lt;span class=&amp;quot;syntax&amp;quot;&amp;gt;D ECF&amp;lt;/span&amp;gt; will display the same output as &amp;lt;span class=&amp;quot;syntax&amp;quot;&amp;gt;D ECF U&amp;lt;/span&amp;gt;. For example:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;    D ECF U                           &lt;br /&gt;
    User# Userid     Module   Parmlen &lt;br /&gt;
    00002 ADMIN      --none--         &lt;br /&gt;
    00003 ADMIN      COBSAMP1 00000002&lt;br /&gt;
    00004 ADMIN      COBSAMP1 00000002 &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;syntax&amp;quot;&amp;gt;D ECF LIKE ? &amp;lt;/span&amp;gt; (where &amp;lt;code&amp;gt;?&amp;lt;/code&amp;gt; is a valid pattern) displays details for entities that match the specified pattern.&lt;br /&gt;
&lt;br /&gt;
===REGENERATE===&lt;br /&gt;
The &amp;lt;var&amp;gt;REGENERATE&amp;lt;/var&amp;gt; command can now be run in a multi-user environment by multiple users with system manager privileges. A new option USING is provided to specify the ddname of the input journal, so that the full syntax is now as follows:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;  REGENERATE [USING ddname] FILE filename [FROM dumpname | IGNORE]&lt;br /&gt;
  [TO {LAST UPDATE [BEFORE yy.ddd hh:mm:ss.th] | LAST CHECKPOINT [BEFORE yy.dd hh:mm:ss.th] &lt;br /&gt;
  | UPDATE number OF yy.ddd hh:mm:ss.th | CHECKPOINT yy.ddd hh:mm:ss.th} ]&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The default for the using ddname is CCAGEN, but any ddname may be used to allocate an input journal and used. For example:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;  ALLOCATE REGEN1 WITH SCOPE=SYSTEM DSN=PROD1.GDGJ OLD SEQUENTIAL GEN=+2&lt;br /&gt;
  REGENERATE USING REGEN1 FILE TEST&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It is the user&#039;s responsibility to ensure that the file being regenerated is not in use, and so prior to usage, &amp;lt;var&amp;gt;BUMP FILE&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;STOP FILE&amp;lt;/var&amp;gt; should be used to isolate usage against the file. If the file is in use, the REGEN will fail with these messages:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;  M204.1430: Failed to open file TEST&lt;br /&gt;
  M204.1436: Stopped processing file TEST  &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
$STATUS will now be set for &amp;lt;var&amp;gt;REGENERATE&amp;lt;/var&amp;gt; with the following values:&lt;br /&gt;
&amp;lt;blockquote&amp;gt;    &lt;br /&gt;
    0 - Success &amp;lt;br/&amp;gt;&lt;br /&gt;
    1 - No files were processed &amp;lt;br/&amp;gt;&lt;br /&gt;
    2 - At least one file stopped processing &amp;lt;br/&amp;gt;&lt;br /&gt;
    4 - A serious error occurred, REGEN failed &lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Similarly, &amp;lt;var&amp;gt;SETGRC&amp;lt;/var&amp;gt; may be used to get the return code and error message.&lt;br /&gt;
&lt;br /&gt;
==New and changed parameters==&lt;br /&gt;
&lt;br /&gt;
===ECMODS===&lt;br /&gt;
The new minimum value for ECMODS, the allowable number of ECF modules, is 1. Prior to V7.8 the minimum value was 0. This changed was enabled in V7.7 with the application of zap 77z306.&lt;br /&gt;
&lt;br /&gt;
===ECNAMES===&lt;br /&gt;
The new minimum value for ECNAMES, the allowable number of ECF module names, is 1. Prior to V7.8 the minimum value was 0. This changed was enabled in V7.7 with the application of zap 77z306.&lt;br /&gt;
&lt;br /&gt;
===ECPSIZE===&lt;br /&gt;
The new minimum value for ECPSIZE, the initial storage allocation for ECF parameters, is 1024. Prior to V7.8 the minimum value was 0. This changed was enabled in V7.7 with the application of zap 77z306.&lt;br /&gt;
&lt;br /&gt;
===ENQTIME===&lt;br /&gt;
Millisecond duration of automatic record locking retry wait.&lt;br /&gt;
&lt;br /&gt;
Prior to this change, if record locking conflicts occur frequently in a busy online, any user with a non-zero value for &amp;lt;var&amp;gt;[[ENQRETRY parameter|ENQRETRY]]&amp;lt;/var&amp;gt; will wait at least 3 seconds before the conflict is dealt with. This can degrade overall system performance.      &lt;br /&gt;
                                                         &lt;br /&gt;
The &amp;lt;var&amp;gt;[[ENQTIME parameter|ENQTIME]]&amp;lt;/var&amp;gt; parameter specifies the number of milliseconds waited for each record locking retry wait. ENQTIME can be between 1 and 60000, corresponding to a minimum of 1 millisecond and a maximum of 1 minute. The default value of ENQTIME is 3000 (3 seconds).            &lt;br /&gt;
                                                         &lt;br /&gt;
For example, with ENQTIME = 100 and ENQRETRY = 7, after a record locking conflict occurs the thread will retry 7 times with wait intervals of .1 seconds, and so within at most .7 seconds either the lock becomes available or the conflict triggers an On unit or cancels the request.     &lt;br /&gt;
                                                         &lt;br /&gt;
The ENQTIME parameter may also be reset with $ResetN. &lt;br /&gt;
&lt;br /&gt;
This new parameter was enabled within V7.7 with the application of zap 77z299.&lt;br /&gt;
&lt;br /&gt;
===EVALOPT===&lt;br /&gt;
The new &amp;lt;var&amp;gt;EVALOPT&amp;lt;/var&amp;gt; parameter controls the cancellation of a request on truncation of string data. The default value is 0, and currently there is just one setting, 1, which means &amp;quot;cancel a request if truncation of string data occurs.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
For example, with the default of 0 in place, the following code &amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;    %x is string len 1   &lt;br /&gt;
    %y is string len 2   &lt;br /&gt;
    %y = &#039;ab&#039;            &lt;br /&gt;
    %x = %y              &lt;br /&gt;
    printtext {~} = {%x} &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
would cause silent truncation, and give the result&lt;br /&gt;
    &amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;%x = a &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If &amp;lt;var&amp;gt;EVALOPT&amp;lt;/var&amp;gt; is set to 1, then the above code produces the following message:&lt;br /&gt;
    &amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;M204.0552: Variable too small for result &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and the request is cancelled.&lt;br /&gt;
&lt;br /&gt;
===LFSCB===&lt;br /&gt;
LFSCB, the length of the full screen buffer, now has a new minimum value of 8 ( the previous minimum was 0 ). This change has been enabled within v7.7 with the application of zap 77z042, and within V7.6 with the application of zap 76z393.&lt;br /&gt;
&lt;br /&gt;
===MAXPRE, MAXBOUT, MAXSUBT===&lt;br /&gt;
&amp;lt;p&amp;gt;Introduced in zap 77Z257.&amp;lt;/p&amp;gt;&lt;br /&gt;
The new &amp;lt;var&amp;gt;MAXPRE&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;MAXBOUT&amp;lt;/var&amp;gt;, and &amp;lt;var&amp;gt;MAXSUBT&amp;lt;/var&amp;gt; parameters can be used to cancel a runaway transaction and prevent it from filling the checkpoint data set. &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;MAXPRE&amp;lt;/var&amp;gt;:  Maximum number of pre-images per transaction.  &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;MAXBOUT&amp;lt;/var&amp;gt;: Maximum number of backout pages per transaction. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;MAXSUBT&amp;lt;/var&amp;gt;: Maximum number of subtransaction checkpoints that a transaction can span.&amp;lt;/li&amp;gt;&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;Each new parameter defaults to unlimited. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;If a parameter value is set, a transaction is cancelled if that value is exceeded, and the following message is displayed:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;code&amp;gt;M204.0524: Maximum number (&amp;lt;i&amp;gt;num&amp;lt;/i&amp;gt;) of &amp;lt;i&amp;gt;parameter&amp;lt;/i&amp;gt; exceeded.&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
where &amp;lt;i&amp;gt;num&amp;lt;/i&amp;gt; is the value set for &amp;lt;i&amp;gt;parameter&amp;lt;/i&amp;gt; (&amp;lt;var&amp;gt;MAXPRE&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;MAXBOUT&amp;lt;/var&amp;gt;, or &amp;lt;var&amp;gt;MAXSUBT&amp;lt;/var&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
===NLDAPBUF===&lt;br /&gt;
This new parameter allows the number of LDAP buffers allocated during startup to be set in CCAIN. The default value is 2, and the settable value can range from 0 to 65535.&lt;br /&gt;
&lt;br /&gt;
===PUPDTH (new minimum value)===&lt;br /&gt;
If a user sets the &amp;lt;var&amp;gt;[[PUPDTH parameter|PUPDTH]]&amp;lt;/var&amp;gt; parameter to 0, it will now automatically be increased to 1, its minimum value.&lt;br /&gt;
&lt;br /&gt;
===SERV4G===&lt;br /&gt;
This parameter allows testing of server tables that span a 4-gigabyte boundary. For example, if SERV4G is X&#039;FFFFF000&#039;, each ATB server will begin at XX_FFFFF000. If SERV4G is X&#039;FFFF0000&#039;, each ATB server will begin at XX_FFFF0000. XX is determined by the storage available on the system. The parameter is set in CCAIN.&lt;br /&gt;
&lt;br /&gt;
The contents of the ATB server are specified by using the SERVGA parameter.&lt;br /&gt;
&lt;br /&gt;
For example. if you want VTBL to span the 4G boundary, you can use these settings: SERV4G=X&#039;FFFFF000&#039;, SERVGA=X&#039;00040000&#039;, and LVTBL=200 (6400 bytes, X&#039;1900&#039;). This will force each server&#039;s VTBL to begin at XX_FFFFF000 and end at XX+1_00000900.&lt;br /&gt;
&lt;br /&gt;
===WEBDFLT===&lt;br /&gt;
At V7.7, the default access rule for non-SSL ports was changed from ALLOW * to DISALLOW *, meaning that unless any ALLOW rules were in place resulting in a login/password prompt, the port couldn&#039;t be accessed. The new &amp;lt;var&amp;gt;[https://m204wiki.rocketsoftware.com/index.php/WEBDFLT_parameter WEBDFLT]&amp;lt;/var&amp;gt; parameter may be set to 1 for reversion to the old default of ALLOW *. Under V7.7, this new parameter was enabled with the application of zap 77z090. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;var&amp;gt;RESET WEBDFLT&amp;lt;/var&amp;gt; requires system administrator privileges. It is recommended to reset the 1 bit of &amp;lt;var&amp;gt;WEBDFLT&amp;lt;/var&amp;gt; to zero after issuing a series of &amp;lt;var&amp;gt;JANUS DEFINE&amp;lt;/var&amp;gt; commands which need WEBDFLT=1, as in the CCAIN input stream.&lt;br /&gt;
&lt;br /&gt;
==New and changed statistics==&lt;br /&gt;
===MPR, MBO, MCP, and RCV===&lt;br /&gt;
Introduced in zap 77Z257.&lt;br /&gt;
&amp;lt;p&amp;gt;These statistics provide high water mark transaction information. (Since-last values will not be available until V78 GA.)&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;They are useful in conjunction with the &amp;lt;var&amp;gt;MAXPRE&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;MAXBOUT&amp;lt;/var&amp;gt;, and &amp;lt;var&amp;gt;MAXSUBT&amp;lt;/var&amp;gt; parameters. &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
User/system statistics:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;MPR: High water mark of transaction pre-images. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;MBO: High water mark of transaction backout pages. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;MCP: High water mark of transaction chkpoint spans. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
System statistics: &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;RCV: Number of blocks needed for subtransaction recovery &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt; &lt;br /&gt;
&amp;lt;p class=&amp;quot;note&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Notes:&amp;lt;/b&amp;gt; M204.0843 now displays the RCV statistic for subtransaction checkpoints.&lt;br /&gt;
The size of recovery checkpoint must be greater than the sum of the last RCV value plus the number of records in [https://m204wiki.rocketsoftware.com/index.php/System_and_media_recovery#RESTART_recovery_considerations_for_sub-transaction_checkpoints RESTART and RESTARTS].&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
===DKWTS and DKWTMICS===&lt;br /&gt;
Introduced in zap 77z7289.&lt;br /&gt;
&amp;lt;p&amp;gt;The new system statistics DKWTS (DisK WaiTs) and DKWTMICS (DisK WaiT MICroSeconds) collect data to provide rough disk I/O service time numbers.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
DKWTS shows the number of disk I/O waits. DKWTMICS shows the total wait time for those waits in microseconds. Dividing the difference in DKWTMICS by the difference in DKWTS over an interval provides the average disk I/O wait time in microseconds.              &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;note&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Notes:&amp;lt;/b&amp;gt; &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The wait time does include internal Model 204 scheduler delays, so on a CPU bound Model 204 system, the service times calculated from DKWTS and DKWTMICS are likely to be an overestimate of actual service times.&amp;lt;/li&amp;gt;  &lt;br /&gt;
                                                                    &lt;br /&gt;
&amp;lt;li&amp;gt;DKWTS and DKWTMICS are not available in SirMon; use [https://m204wiki.rocketsoftware.com/index.php/MONITOR_command MONITOR] SYSTEM STATISTICS to view these statistics.&amp;lt;/li&amp;gt;&amp;lt;/ul&amp;gt;  &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Compatibility issues==&lt;br /&gt;
===&amp;lt;b id=&amp;quot;listNewInit&amp;quot;&amp;gt;&amp;lt;/b&amp;gt;$ListNew cannot be used in Initial clause===&lt;br /&gt;
It is now a compilation error if &amp;lt;var&amp;gt;$ListNew&amp;lt;/var&amp;gt; is attempted to be used in the &amp;lt;var&amp;gt;Initial&amp;lt;/var&amp;gt; clause of a &lt;br /&gt;
[https://m204wiki.rocketsoftware.com/index.php/Using_variables_and_values_in_computation#Declare_statements_for_.25variables declaration statement].&lt;br /&gt;
&amp;lt;p&amp;gt;This change is propagated by zap maintenance to versions 7.5 (zap 75Z487), 7.6 (zap 76Z514), and 7.7 (zap 77Z281) of Model 204.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote class=&amp;quot;note&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Note:&amp;lt;/b&amp;gt; Strictly speaking, this would not be considered a compilation error, because previously although &amp;lt;code&amp;gt;..&amp;amp;nbsp;Initial($ListNew)&amp;lt;/code&amp;gt; did not produce a compilation error, in almost all circumstances it would produce a snap if the initialized %variable were used with some other &amp;lt;var&amp;gt;$List&amp;lt;i&amp;gt;xxx&amp;lt;/i&amp;gt;&amp;lt;/var&amp;gt; invocation.&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Restricting the use of the CUSTOM=38 setting===&lt;br /&gt;
The [[CUSTOM parameter|CUSTOM=38]] parameter setting, introduced at V7.5, inadvertently provided System Manager privileges to all users via the RESET command. This CUSTOM setting is now restricted to the RESETting of the LAUDIT parameter.&lt;br /&gt;
&lt;br /&gt;
===Disabling of Closure support===&lt;br /&gt;
Due to a number of bugs related to Closure support, introduced at V7.7, this feature, which can best be described as exposed methods assigned to method variables, has been disabled in this release. This change was also made to V7.7 with application of zap 77z119.&lt;br /&gt;
&lt;br /&gt;
===Password delimiter enforced===&lt;br /&gt;
When using IFSTRTN to logon to a Model 204 online from an IFAM2 application, both the logonid and password must be followed by a semicolon - the delimiter.             &lt;br /&gt;
For example:      &lt;br /&gt;
                                      &lt;br /&gt;
CALL IFSTRTN(RC,&#039;logonid;password;&#039;...)&lt;br /&gt;
                 &lt;br /&gt;
If a semicolon does not follow the password string, the following message will now be issued&lt;br /&gt;
&lt;br /&gt;
M204.2964: Password missing or too long                  &lt;br /&gt;
                                                         &lt;br /&gt;
Previously, a semicolon following the password was not required and the first blank served as a password delimiter.  However, as of V7.7, embedded blanks are valid password characters and a semicolon is now required to delimit the password.&lt;br /&gt;
&lt;br /&gt;
This change has also been enabled within V7.7 with the application of zap 77z231.&lt;br /&gt;
&lt;br /&gt;
===PAGESZ parameter validated===&lt;br /&gt;
Previously it was possible to set the PAGESZ parameter to any value, although Model 204 internally supports one page size of 6184, and any deviation from this value would have led to problems during file creation. The value of this parameter is now controlled, such that setting it to any value other than 6184 will generate an M204.1149 message with the parameter being reset to 6184.&lt;br /&gt;
&lt;br /&gt;
===ECPRIV and the IDCAMS facility===&lt;br /&gt;
At V7.7 a security loophole was closed, whereby all ECF modules were run under external-authorizer profile of the calling user. Previously any ECF tasks were run under the owning job&#039;s external-authorizer profile, and in order for certain sites to retain that ability, a new setting of ECPRIV, value 4, was introduced to retain the ability to run ECF tasks using the job&#039;s security profile. &lt;br /&gt;
&lt;br /&gt;
The ECPRIV 4 setting potentially introduced a security loophole when calling the IDCAMS interface, based upon what the IDCAMS utility is able to do at a system level. Consequently as of this release, the ECPRIV 4 setting will be ignored when calling the IDCAMS facility via ECF, and such IDCAMS processes will always use the calling user&#039;s security profile. Any existing jobs that use ECF to call the IDCAMS utility with the ECFPRIV 4 bit set should be checked to ensure that the calling user&#039;s security profile still satisfies the job&#039;s requirements.&lt;br /&gt;
&lt;br /&gt;
===TCPOPTS is view only===&lt;br /&gt;
In previous releases the TCPOPTS parameter, which identifies the type of IP addressing in use ( v4 or v6 ), was resetable, although it was always documented as a view-only parameter. The parameter is now handled as a view-only parameter, and any attempts to reset the parameter will result in&lt;br /&gt;
&lt;br /&gt;
   M204.1123: Parameter TCPOPTS not reset&lt;br /&gt;
&lt;br /&gt;
===ZHPF command can only be issued by a system manager===&lt;br /&gt;
In previous releases it was possible to issue the ZHPF command without being logged on. From this release onwards, a user would have to be logged on with system manager privileges to be able to issue this command.&lt;br /&gt;
&lt;br /&gt;
Additionally, the command output will now only  display results for currently open files.&lt;br /&gt;
&lt;br /&gt;
This changes has been enabled within v7.7 with the application of zap 77z264.&lt;br /&gt;
&lt;br /&gt;
===Terminal MODEL reset failure===&lt;br /&gt;
If a reset of the terminal MODEL parameter fails due to an under sized output page buffer, then in addition to the existing messages that inform the user of this failure&lt;br /&gt;
&lt;br /&gt;
    M204.1875 UNABLE TO RESET MODEL TO %C &lt;br /&gt;
    M204.1123: Parameter MODEL not reset  &lt;br /&gt;
&lt;br /&gt;
the following message will now be issued&lt;br /&gt;
&lt;br /&gt;
    M204.1008: LOUTPB must be increased to at least &amp;lt;number&amp;gt; &lt;br /&gt;
                                                         &lt;br /&gt;
where &amp;lt;number&amp;gt; is the minimum value of LOUTPB necessary to support the terminal model.&lt;br /&gt;
&lt;br /&gt;
This change is enabled in V7.7 with the application of zap 77z309.&lt;br /&gt;
&lt;br /&gt;
==New and changed messages==&lt;br /&gt;
&lt;br /&gt;
See [[New and updated messages in Model 204 version 7.8|New and updated messages in Model 204 version 7.8]] for details.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category: Release notes]]&lt;/div&gt;</summary>
		<author><name>ELowell</name></author>
	</entry>
	<entry>
		<id>https://m204wiki.rocketsoftware.com/index.php?title=Release_notes_for_Model_204_version_7.8&amp;diff=117682</id>
		<title>Release notes for Model 204 version 7.8</title>
		<link rel="alternate" type="text/html" href="https://m204wiki.rocketsoftware.com/index.php?title=Release_notes_for_Model_204_version_7.8&amp;diff=117682"/>
		<updated>2019-09-17T16:07:40Z</updated>

		<summary type="html">&lt;p&gt;ELowell: /* MP/204 offload improvements */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
These release notes list the enhancements and other changes contained in Model 204 version 7.8. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;&amp;lt;b&amp;gt;******THIS IS A DRAFT DOCUMENT.******&amp;lt;/b&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
These release notes list the enhancements and other changes contained in Model 204 version 7.8, &amp;lt;b&amp;gt;&amp;lt;i&amp;gt;which is still in development&amp;lt;/i&amp;gt;&amp;lt;/b&amp;gt;. Until the commercial release of the software, Rocket reserves the right to add to, remove, or change anything described herein. &lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
These release notes contain installation and features information for the Rocket Model 204 version 7.8 release.&lt;br /&gt;
Before beginning your installation, please read through this information about product installation and changes.&lt;br /&gt;
&lt;br /&gt;
==SOUL enhancements==&lt;br /&gt;
===AmIndependent method===&lt;br /&gt;
The &amp;lt;var&amp;gt;AmIndependent&amp;lt;/var&amp;gt; method returns TRUE for daemons spawned by &amp;lt;var&amp;gt;[http://m204wiki.rocketsoftware.com/index.php/RunIndependently_(Daemon_subroutine) RunIndependently]&amp;lt;/var&amp;gt;. (The action of &amp;lt;var&amp;gt;[https://m204wiki.rocketsoftware.com/index.php/AmDaemon_(Daemon_property) AmDaemon]&amp;lt;/var&amp;gt; remains unchanged.)&lt;br /&gt;
&lt;br /&gt;
The following table shows the values returned by &amp;lt;var&amp;gt;AmIndependent&amp;lt;/var&amp;gt; versus &amp;lt;var&amp;gt;AmDaemon&amp;lt;/var&amp;gt; for different daemon types:&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Type&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;AmDaemon&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;AmIndependent&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;$COMBG&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;False&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;False&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Independent daemon&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;False&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;True&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Other daemon&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;True&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;False&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Web, etc.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;False&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;False&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===$ProcOpn===&lt;br /&gt;
&amp;lt;var&amp;gt;[https://m204wiki.rocketsoftware.com/index.php/$ProcOpn $ProcOpn]&amp;lt;/var&amp;gt; now supports the opening of a procedure with an all numeric name, and including a leading zero, e.g.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;%result = $procOpn(&#039;0123&#039;, &#039;MYFILE&#039;)&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Support for such procedures names was initially introduced at v7.7, and this feature of &amp;lt;var&amp;gt;$ProcOpn&amp;lt;/var&amp;gt; is also enabled within v7.7 with the application of zap 77z054.&lt;br /&gt;
&lt;br /&gt;
===Allow parentheses to surround a boolean enumeration object===&lt;br /&gt;
The following sample code&lt;br /&gt;
&lt;br /&gt;
   begin                                       &lt;br /&gt;
   variables are undefined                  &lt;br /&gt;
   %isValid is boolean initial (True)       &lt;br /&gt;
   if (%isValid) then                  &lt;br /&gt;
      print &#039;in IF&#039;                            &lt;br /&gt;
   end if                                   &lt;br /&gt;
   end         &lt;br /&gt;
&lt;br /&gt;
will now compile and run successfully, as &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;if (%isValid) then &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
is logically equivalent to&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;if %isValid then &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Prior to V7.8 the presence of parentheses surrounding the boolean enumeration object would have caused a compilation error. This change is enabled in V7.7 with the application of zap 77z370.&lt;br /&gt;
&lt;br /&gt;
===Support for copying Object class objects===&lt;br /&gt;
The Object class now supports the copy and deepCopy methods. For example, and Object object can be copied as follows&lt;br /&gt;
&lt;br /&gt;
   begin               &lt;br /&gt;
   %x is object object &lt;br /&gt;
   %y is object object &lt;br /&gt;
   %y = new            &lt;br /&gt;
   %x = %y:copy        &lt;br /&gt;
   end&lt;br /&gt;
&lt;br /&gt;
This change is enabled in v7.7 with the application of zap 77z076, and within V7.6 with the application of zap 76z412.&lt;br /&gt;
&lt;br /&gt;
===Assignment of enumeration values to method variables===&lt;br /&gt;
Enumerations values can now be assigned to method variables whose result is an enumeration.So for example the following code&lt;br /&gt;
&lt;br /&gt;
   begin                                               &lt;br /&gt;
   enumeration colour                                  &lt;br /&gt;
      public                                           &lt;br /&gt;
         value red                                     &lt;br /&gt;
         value white                                   &lt;br /&gt;
         value blue                                    &lt;br /&gt;
      end public                                       &lt;br /&gt;
   end enumeration                                     &lt;br /&gt;
   %func    is function getColour is enumeration colour&lt;br /&gt;
   local function getColour is enumeration colour      &lt;br /&gt;
      return blue                                      &lt;br /&gt;
   end function                                        &lt;br /&gt;
   %func    = getColour                                &lt;br /&gt;
   %func    = (colour):red                             &lt;br /&gt;
   printText {~=%(Local):(%func)}                      &lt;br /&gt;
   end  &lt;br /&gt;
&lt;br /&gt;
will produce the result&lt;br /&gt;
&lt;br /&gt;
   %(Local):(%func)=red&lt;br /&gt;
&lt;br /&gt;
whereas previously the line   &lt;br /&gt;
&lt;br /&gt;
   %func    = (colour):red    &lt;br /&gt;
&lt;br /&gt;
would have been rejected with the message&lt;br /&gt;
&lt;br /&gt;
   MSIR.0993: Assignment invalid: mismatch between method and method variable&lt;br /&gt;
&lt;br /&gt;
This change is enabled in V7.7 with the application of zap 77z128.&lt;br /&gt;
&lt;br /&gt;
==External Call Facility enhancements==&lt;br /&gt;
===Managing ECF tables more efficiently===&lt;br /&gt;
The are two new features to help manage ECF tables more efficiently, avoid conditions where the table can fill, and prevent the definition of further entities.&lt;br /&gt;
&lt;br /&gt;
The first feature is the new  &amp;lt;var&amp;gt;DISPLAY ECF&amp;lt;/var&amp;gt; command, which displays the contents of ECF tables and also the current status of users accessing ECF modules. See more details of the &amp;lt;var&amp;gt;[[#DISPLAY ECF|DISPLAY ECF]]&amp;lt;/var&amp;gt; command below.&lt;br /&gt;
&lt;br /&gt;
The second feature is a new &amp;lt;var&amp;gt;EXTERNAL REMOVE&amp;lt;/var&amp;gt; statement with the syntax&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;EXTERNAL REMOVE &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;modulename&amp;lt;/span&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This causes the entry for the named module to be removed from the module table. The table entry is then placed on a free chain of entries and can be reused by issuing the EXTERNAL MODULE statement. This allows the module table to be managed with redundant entries removed, without having to recycle the ONLINE.&lt;br /&gt;
&lt;br /&gt;
A EXTERNAL REMOVE statement will return $status/$statusd values of 0/0, and most other status values that can be returned by the EXTERNAL REMOVE statement are already documented in the ECF return codes table. If an EXTERNAL REMOVE is attempted against a module that is currently being called ( in use ), then $status/$statusd will return the values 20/1 ( module unavailable).&lt;br /&gt;
&lt;br /&gt;
==System enhancements==&lt;br /&gt;
&lt;br /&gt;
===New wait types for daemon/master waits===&lt;br /&gt;
&lt;br /&gt;
Two new wait types, viewable on the &amp;lt;var&amp;gt;[https://m204wiki.rocketsoftware.com/index.php/MONITOR_command MONITOR] USERS&amp;lt;/var&amp;gt; command output, have been implemented as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;57&amp;lt;/code&amp;gt; - Means a daemon thread waiting for its master thread  &amp;lt;br /&amp;gt;     &lt;br /&gt;
&amp;lt;code&amp;gt;58&amp;lt;/code&amp;gt; - Means a master thread waiting for one of its daemon threads&lt;br /&gt;
&lt;br /&gt;
This change is enabled in V7.7 with the application of zap 77z410.&lt;br /&gt;
&lt;br /&gt;
===Snap formatting changes===&lt;br /&gt;
Date/time stamps in the page headers of snaps will now be shown normal format, rather than in julian format as in previous releases. Thus in the following example a particular snap header under v7.7 or previous releases would show as &lt;br /&gt;
&lt;br /&gt;
   SNAPID    1   19226.060155  M204.0022: Bug .. nnnnn               PAGE     1&lt;br /&gt;
&lt;br /&gt;
whereas the same snap header under v7.8 would show as &lt;br /&gt;
&lt;br /&gt;
   SNAPID    1  2019/08/14 06:01:06   M204.0022: Bug .. nnnnn        PAGE     1&lt;br /&gt;
&lt;br /&gt;
Also, due to improvements in handling trailing blanks in snap output, a snap generated under v7.8 should be marginally smaller than the same snap generated under previous releases, assuming the same SNAPCTL settings.&lt;br /&gt;
&lt;br /&gt;
===Call stack trace for problem diagnosis===&lt;br /&gt;
A  call stack trace is now provided to help diagnose and resolve common errors. To enable the stack trace, do either of the following: &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Set the &amp;lt;var&amp;gt;[[SIRFACT parameter|SIRFACT]] X&#039;01&#039;&amp;lt;/var&amp;gt; bit.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Set the &amp;lt;var&amp;gt;[[DEBUGUL parameter|DEBUGL]]&amp;lt;/var&amp;gt; parameter. Note that the &amp;lt;var&amp;gt;DEBUGUL&amp;lt;/var&amp;gt; approach will introduce extra QTBL overhead. &amp;lt;p&amp;gt;(&amp;lt;var&amp;gt;DEBUGUL&amp;lt;/var&amp;gt; provides a similar facility with an include trace of procedures leading to the error, but this might not be potentially as useful as the call trace.)&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt; &lt;br /&gt;
&lt;br /&gt;
The call stack trace can assist in diagnosing run-time errors that might occur, as illustrated by the following &amp;quot;Variable too small for result&amp;quot; and &amp;quot;MBSCAN exceeded&amp;quot; examples.&lt;br /&gt;
&lt;br /&gt;
====Variable too small for result====&lt;br /&gt;
When the stack trace is enabled, a &amp;quot;variable too small&amp;quot; error results in the following message:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;M204.2966: Error at line n, procedure &#039;&#039;procname&#039;&#039; in file &#039;&#039;procfile&#039;&#039;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
which identifies the line within a procedure where the error is occurring, in addition to the usual message:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;M204.0552: Variable too small for result&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Any subsequent M204.2966 messages indicate the point in the code from where the code in error was called. For example, a stack of three subroutine calls leading to a &amp;quot;variable too small&amp;quot; error might result in the following messaging:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;   M204.0552: Variable too small for result                             &lt;br /&gt;
   M204.2966: Error at line 9, procedure MYPROC.LEVEL4 in file MYPROC   &lt;br /&gt;
   M204.2966: Called from line 5, procedure MYPROC.LEVEL3 in file MYPROC&lt;br /&gt;
   M204.2966: Called from line 5, procedure MYPROC.LEVEL2 in file MYPROC&lt;br /&gt;
   M204.2966: Called from line 5, procedure MYPROC.LEVEL1 in file MYPROC &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This information should help in diagnosing the problem. &lt;br /&gt;
&lt;br /&gt;
If the error occurs within a command level program rather than a procedure, then the M204.2966 message is replaced by an M204.2967 message, and a similar error condition to the above with a preceding call stack might be audited as follows:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;   M204.0552: Variable too small for result              &lt;br /&gt;
   M204.2967: Error at line 14 of command level program  &lt;br /&gt;
   M204.2967: Called from line 5 of command level program&lt;br /&gt;
   M204.2967: Called from line 3 of command level program &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If neither &amp;lt;var&amp;gt;SIRFACT X&#039;01&#039;&amp;lt;/var&amp;gt; nor &amp;lt;var&amp;gt;DEBUGUL&amp;lt;/var&amp;gt; is set, then the &amp;quot;variable too small&amp;quot; error produces the following messages:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;   M204.0552: Variable too small for result &lt;br /&gt;
   M204.2968: Error: no debug info &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====MBSCAN exceeded====&lt;br /&gt;
Similarly to the handling of the &amp;quot;variable too small for result&amp;quot; error, the call stack can also be used to diagnose errors where the value of &amp;lt;var&amp;gt;[[MBSCAN parameter|MBSCAN]]&amp;lt;/var&amp;gt; is exceeded as a result of a direct search of Table B records. &lt;br /&gt;
&amp;lt;p&amp;gt;Again, under V7.8, with either the &amp;lt;var&amp;gt;SIRFACT X&#039;01&#039;&amp;lt;/var&amp;gt; bit set or &amp;lt;var&amp;gt;DEBUGUL&amp;lt;/var&amp;gt; set, if a long request occurs as a result of exceeding &amp;lt;var&amp;gt;MBSCAN&amp;lt;/var&amp;gt;, then initially the following message is produced, as before:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;M204.0569: File &#039;&#039;filename&#039;&#039;, Find: Table B records to be searched = &#039;&#039;nnnn&#039;&#039;&amp;lt;/p&amp;gt;&lt;br /&gt;
followed by a DYRWT prompt message. If the user replies &#039;N&#039; to the prompt, or if the request is run in an environment (such as a batch job) where the default response is &#039;N&#039;, the following message is produced after the M204.0569 message:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;Cancelling request: M204.2969: MBSCAN (&#039;&#039;mm&#039;&#039;) exceeded, records to be searched = &#039;&#039;nnnn&#039;&#039;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
where &#039;&#039;mm&#039;&#039; is the current setting of &amp;lt;var&amp;gt;MBSCAN&amp;lt;/var&amp;gt;. The M204.2969 message is followed by M204.2966 messages displaying the call stack trace. Thus, if the following code is run from procedure MYPROC.MBSCAN against the demo database, with an &amp;lt;var&amp;gt;MBSCAN&amp;lt;/var&amp;gt; setting of 10:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;   b                           &lt;br /&gt;
   call sub1                   &lt;br /&gt;
   sub1: subroutine            &lt;br /&gt;
   fd1:                        &lt;br /&gt;
      in clients fd city = ONTARIO&lt;br /&gt;
              end find         &lt;br /&gt;
      fr fd1                      &lt;br /&gt;
         pai                      &lt;br /&gt;
         print                    &lt;br /&gt;
      end for                     &lt;br /&gt;
   end subroutine              &lt;br /&gt;
   end &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
then the following messages are produced, assuming any prompts are responded to with an &#039;N&#039;:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;   M204.0569: File CLIENTS, Find: Table B records to be searched = 3415&lt;br /&gt;
   Cancelling request: M204.2969: MBSCAN (10) exceeded, records to be searched = 3415  &lt;br /&gt;
   M204.2966: Error at line 6, procedure MYPROC.MBSCAN in file MYPROC&lt;br /&gt;
   M204.2966: Called from line 3, procedure MYPROC.MBSCAN in file MYPROC  &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===appendJournalData===&lt;br /&gt;
The &amp;lt;var&amp;gt;[[AppendJournalData_(Stringlist_function)|AppendJournalData]]&amp;lt;/var&amp;gt; function is now more tolerant of an outstanding BUMP request. Previously, if &amp;lt;var&amp;gt;AppendJournalData&amp;lt;/var&amp;gt; was called to inadvertently retrieve a large amount of journal data, typically when called implicitly from within SirScan, then any outstanding BUMP request wouldn&#039;t be honored until all of the data had been retrieved, at which point the BUMP request would be completed, and all data would be lost.&lt;br /&gt;
&lt;br /&gt;
Now, the &amp;lt;var&amp;gt;AppendJournalData&amp;lt;/var&amp;gt; process checks for outstanding BUMP requests before each track I/O is executed, thus avoiding excessive I/Os against the journal and long waits for the BUMP of such a process to complete.&lt;br /&gt;
&lt;br /&gt;
==AUDIT204 enhancements==&lt;br /&gt;
===FORMAT command===&lt;br /&gt;
TIMEHH is a new parameter used with the FORMAT command of the [[Tracking_system_activity_(CCAJRNL,_CCAAUDIT,_CCAJLOG)#AUDIT204_utility|AUDIT204]] utility.  It indicates that timestamps, printed at the beginning of each line of output, should include hundredths of a second. Requires no other arguments.&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;b&amp;gt;NOTE:&amp;lt;/b&amp;gt; This parameter and the 78 version (or later) of AUDIT204 may be used against a 77 (or later) CCAJRNL.&amp;lt;/p&amp;gt;&lt;br /&gt;
For example:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;//CCAIN DD *&lt;br /&gt;
FORMAT YEARFORM 4&lt;br /&gt;
TIMEHH&lt;br /&gt;
TYPE ER MS LI&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Recovery enhancements==&lt;br /&gt;
===Media Recovery in a multi-user environment===&lt;br /&gt;
It is now possible to perform media recovery by issuing the &amp;lt;var&amp;gt;REGENERATE&amp;lt;/var&amp;gt; command to roll forward selected files in a multi-user environment, with the media recovery being carried out by different users with system manager privileges. The new USING option allows for the specification of a ddname for the input journal stream to be used by the &amp;lt;var&amp;gt;REGENERATE&amp;lt;/var&amp;gt; command. Previously media recovery was restricted to single user batch jobs, using the CCAGEN ddname for the input journal. For more details, see the &amp;lt;var&amp;gt;[[#REGENERATE|REGENERATE]]&amp;lt;/var&amp;gt; command below.&lt;br /&gt;
&lt;br /&gt;
==Security enhancements==&lt;br /&gt;
===CA-Top Secret can disallow CCASTAT logins===&lt;br /&gt;
The [https://m204wiki.rocketsoftware.com/index.php/CA-Top_Secret_interface CA-Top Secret] interface now recognizes the &amp;lt;code&amp;gt;DEFACID=&amp;lt;/code&amp;gt;, setting and does not allow CCASTAT logins in the online if &amp;lt;code&amp;gt;DEFACID&amp;lt;/code&amp;gt; is set to null. (There is no attempt to log on M204USR.) Therefore, to disallow CCASTAT logons, set DEFACID=, in [https://m204wiki.rocketsoftware.com/index.php/CA-Top_Secret_interface#Preparing_a_TOPSPARM_parameter_module_with_TOPSGEN TOPSPARM]. CCASTAT will be opened because it contains file and group passwords, but it will not be used for logons if CCASTAT logons are not allowed.&lt;br /&gt;
&lt;br /&gt;
===CUSTOM=11 and mixed cased input===&lt;br /&gt;
The &amp;lt;var&amp;gt;[https://m204wiki.rocketsoftware.com/index.php/CUSTOM_parameter CUSTOM]&amp;lt;/var&amp;gt; parameter CUSTOM=11 setting no longer requires that a *LOWER command be issued prior to a LOGCTL command (to add or change a  password) to preserve mixed case input. Prior to this release, with CUSTOM=11 in place, *LOWER had to be issued before a LOGCTL command, otherwise any mixed case password strings would automatically be translated into uppercase. This change is enabled within V7.7 with the application of zap 77z108.&lt;br /&gt;
&lt;br /&gt;
===DEFUSER can specify a jobname not authorized to access M204===&lt;br /&gt;
When specifying DEFUSER=JOBNAME and VALIDAT=LOGON in the RACFGEN parms for an ONLINE, if the specified jobname ( the owning id for the ONLINE job ) isn&#039;t authorized to use Model 204 via RACF, any LOGIN commands specifying no userid will now succeed ( previously such a LOGON would have failed ). This enables users to submit jobs with USE $JOB, whereby the string USER=jobname  will be added to the submitted JCL, and this in turn is useful if the specified jobname has dataset access privileges to datasets required by the submitted jobs, even if the jobname itself isn&#039;t authorized to use M204.&lt;br /&gt;
&lt;br /&gt;
==Janus product enhancements==&lt;br /&gt;
&lt;br /&gt;
===Janus Web Server access rule===&lt;br /&gt;
The automatic &amp;lt;var&amp;gt;[[JANUS WEB ALLOW]]&amp;lt;/var&amp;gt; rule, which allowed any user to access the port without requiring a login, is changed &amp;lt;i&amp;gt;for non-SSL ports&amp;lt;/i&amp;gt; to the following:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;JANUS WEB &amp;lt;i&amp;gt;portname&amp;lt;/i&amp;gt; DISALLOW *&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
This rule requires a system administrator to explicitly define &amp;lt;var&amp;gt;ALLOW&amp;lt;/var&amp;gt; rules to enable users to access non-SSL ports.&lt;br /&gt;
The rule applies unless overridden by user-added rules. &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;blockquote class=&amp;quot;note&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;b&amp;gt;Note:&amp;lt;/b&amp;gt; To revert from this change in the JANUS DEFINE default and make the default &lt;br /&gt;
 non-SSL &amp;lt;var&amp;gt;ALLOW&amp;lt;/var&amp;gt; rule as it was in version 7.5 and earlier (&amp;lt;code&amp;gt;ALLOW *&amp;lt;/code&amp;gt;), turn on the 1 bit of the &amp;lt;var&amp;gt;[[WEBDFLT parameter|WEBDFLT]]&amp;lt;/var&amp;gt; parameter: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;RESET WEBDFLT=1&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Increase in pending accepts for Janus BPX ports===&lt;br /&gt;
The default number of pending accepts for Janus BPX server ports has been increased from 3 to 12, thus reducing the likelihood that a pending accept may fail with the message&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;MSIR.0019 Connection request rejected for port (port), MAXCON exceeded&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The actual number of pending accepts to be supported on the port can be set with the new parameter MAXPEND, set on the &amp;lt;var&amp;gt;[[JANUS_DEFINE|JANUS DEFINE]]&amp;lt;/var&amp;gt; command, where MAXPEND can vary from 3 up to a maximum value of 32. The change to the default value was enabled within V7.7 with the application of zap 77z269.&lt;br /&gt;
&lt;br /&gt;
===TCP listen backlog increased===&lt;br /&gt;
&lt;br /&gt;
The [https://m204wiki.rocketsoftware.com/index.php/Program_Communication_facilities#LISTEN_call TCP_listen] backlog has been increased from 16 to 1024 under z/OS.&lt;br /&gt;
&lt;br /&gt;
This update tells the TCP stack to queue up to 1024 of such requests up before dropping them, thus reducing, or in most cases eliminating, the likelihood of a connection request drop, other than in exceptional circumstances, such as a denial of service attack. This change was enabled within V7.7 with the application of zap 77z340.&lt;br /&gt;
&lt;br /&gt;
===Defer the freeing of XMLSCREEN input XML===&lt;br /&gt;
&lt;br /&gt;
The freeing of [https://m204wiki.rocketsoftware.com/index.php/XMLSCREEN_and_NOXMLSCREEN_(JANUS_DEFINE_parameters) XMLSCREEN] input XML is now deferred until the next Read Screen or session termination. This means that if an application error is detected, the input XML can be retrieved with [https://m204wiki.rocketsoftware.com/index.php/$Web_Input_Content $Web_Input_Content] and then logged for problem analysis. &lt;br /&gt;
&lt;br /&gt;
Prior to this release the XML received from the client is freed immediately after being used to set the input data for a Read Screen, rendering it unavailable for problem determination.&lt;br /&gt;
&lt;br /&gt;
This change is enabled in V7.7 with the application of zap 77z368.&lt;br /&gt;
&lt;br /&gt;
===XMLSCREEN and Janus Web Legacy blank stripping===&lt;br /&gt;
&lt;br /&gt;
xmlScreens and Janus Web Legacy screens now adhere to the same standard as standard screen processing in terms of stripping leading blanks from input fields defined as [https://m204wiki.rocketsoftware.com/index.php/Full-screen_feature#DEBLANK_or_NODEBLANK_option DEBLANK] (either explicitly or implicitly).&lt;br /&gt;
&lt;br /&gt;
This change is enabled in V7.7 with the application of zap 77z400.&lt;br /&gt;
&lt;br /&gt;
===SSL input buffer size===&lt;br /&gt;
&lt;br /&gt;
The default value of [https://m204wiki.rocketsoftware.com/index.php/SSLIBSIZE_(JANUS_DEFINE_parameter) SSLIBSIZE] has been increased to 16384 + 128, or 16512. This size should ensure correct communication with all TLS spec compliant applications. It is the maximum size allowed unless you use [https://m204wiki.rocketsoftware.com/index.php/CUSTOM_parameter#Using_CUSTOM.3D.2818.29 CUSTOM=18].    &lt;br /&gt;
&lt;br /&gt;
This changed is enabled within V7.7 with the application of zap 77z415.&lt;br /&gt;
&lt;br /&gt;
===Increasing LDAP buffers===&lt;br /&gt;
&lt;br /&gt;
The number of LDAP buffers allocated at startup can now be changed by setting the NLDAPBUF parameter in CCAIN. See below for details on [[#NLDAPBUF|NLDAPBUF]].&lt;br /&gt;
&lt;br /&gt;
===Increase URL length that can be returned with $web_form_action===&lt;br /&gt;
With this release the maximum Janus Web Server incoming URL thatbe handled by $web_form_action is increased from 512 bytes to 1024 bytes.&lt;br /&gt;
&lt;br /&gt;
==Debugger enhancements==&lt;br /&gt;
&lt;br /&gt;
===Access to exposed variables===&lt;br /&gt;
The debuggers can now view or watch the values of variables exposed to local routines/methods. Previously, any attempts to access an exposed variable would have displayed &amp;quot;%varname has no value&amp;quot; in the debugger session. (This feature is enabled within V7.7 with the application of zap 77z363.)&lt;br /&gt;
&lt;br /&gt;
==Performance enhancements==&lt;br /&gt;
&lt;br /&gt;
===MP/204 offload improvements===&lt;br /&gt;
Application code issuing the following SOUL statements will now now be fully offloadable:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;File Records In/On&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Remember&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt; &lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Position&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Sort Values&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;                                             &lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Reset Header/Trailer&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===X3270OUT exit offloadable===&lt;br /&gt;
When running MP/204 (AMPSUBS&amp;gt;0) and using the [https://m204wiki.rocketsoftware.com/index.php/Coding_SNA_Communications_Server_conversion_exit_routines#X3270OUT_.28convert_output_from_3270_format.29 X3270OUT] exit to convert a 3270 output data stream to the appropriate device protocol, the exit can now run in parallel mode to improve performance. This change was enabled in V7.7 with the application of zap 77Z313.&lt;br /&gt;
&lt;br /&gt;
The X3270OUT exit must be written to be re-entrant.&lt;br /&gt;
&lt;br /&gt;
==New and changed commands==&lt;br /&gt;
===DISPLAY ECF===&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;DISPLAY ECF {{ M | N | U } like ?} &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This new command displays details from ECF tables, or the current status of users accessing ECF modules.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;syntax&amp;quot;&amp;gt;D ECF M&amp;lt;/span&amp;gt; displays the contents of the module table. For example:&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;    D ECF M &lt;br /&gt;
    Module   Loadlib  Address:Length     Loaded@      Lastused@   #Calls  Flags &lt;br /&gt;
    QATUM13C PROGLIB 2FB91FB8:00000028 19023:121506 19023:121506 00000001 &lt;br /&gt;
    QATUM13B PROGLIB 2FE65000:00009C18 19023:121506 19023:121506 00000001 &lt;br /&gt;
    QATUM13A PROGLIB 2FE6EC18:00001CD8 19023:121506 19023:121506 00000001  &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
(flags may be D=deleted; S=shared; H=halted; I=Idle)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;syntax&amp;quot;&amp;gt;D ECF N&amp;lt;/span&amp;gt; displays contents of the name table. For example: &amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;    D ECF N&lt;br /&gt;
    Module   Logical-call-name &lt;br /&gt;
    QATUM13C MOD_QATUM13C &lt;br /&gt;
    QATUM13B MOD_QATUM13B &lt;br /&gt;
    QATUM13A MOD_QATUM13A &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;syntax&amp;quot;&amp;gt;D ECF U&amp;lt;/span&amp;gt; displays details of users currently accessing ECF modules. This is also the default option, and so &amp;lt;span class=&amp;quot;syntax&amp;quot;&amp;gt;D ECF&amp;lt;/span&amp;gt; will display the same output as &amp;lt;span class=&amp;quot;syntax&amp;quot;&amp;gt;D ECF U&amp;lt;/span&amp;gt;. For example:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;    D ECF U                           &lt;br /&gt;
    User# Userid     Module   Parmlen &lt;br /&gt;
    00002 ADMIN      --none--         &lt;br /&gt;
    00003 ADMIN      COBSAMP1 00000002&lt;br /&gt;
    00004 ADMIN      COBSAMP1 00000002 &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;syntax&amp;quot;&amp;gt;D ECF LIKE ? &amp;lt;/span&amp;gt; (where &amp;lt;code&amp;gt;?&amp;lt;/code&amp;gt; is a valid pattern) displays details for entities that match the specified pattern.&lt;br /&gt;
&lt;br /&gt;
===REGENERATE===&lt;br /&gt;
The &amp;lt;var&amp;gt;REGENERATE&amp;lt;/var&amp;gt; command can now be run in a multi-user environment by multiple users with system manager privileges. A new option USING is provided to specify the ddname of the input journal, so that the full syntax is now as follows:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;  REGENERATE [USING ddname] FILE filename [FROM dumpname | IGNORE]&lt;br /&gt;
  [TO {LAST UPDATE [BEFORE yy.ddd hh:mm:ss.th] | LAST CHECKPOINT [BEFORE yy.dd hh:mm:ss.th] &lt;br /&gt;
  | UPDATE number OF yy.ddd hh:mm:ss.th | CHECKPOINT yy.ddd hh:mm:ss.th} ]&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The default for the using ddname is CCAGEN, but any ddname may be used to allocate an input journal and used. For example:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;  ALLOCATE REGEN1 WITH SCOPE=SYSTEM DSN=PROD1.GDGJ OLD SEQUENTIAL GEN=+2&lt;br /&gt;
  REGENERATE USING REGEN1 FILE TEST&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It is the user&#039;s responsibility to ensure that the file being regenerated is not in use, and so prior to usage, &amp;lt;var&amp;gt;BUMP FILE&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;STOP FILE&amp;lt;/var&amp;gt; should be used to isolate usage against the file. If the file is in use, the REGEN will fail with these messages:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;  M204.1430: Failed to open file TEST&lt;br /&gt;
  M204.1436: Stopped processing file TEST  &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
$STATUS will now be set for &amp;lt;var&amp;gt;REGENERATE&amp;lt;/var&amp;gt; with the following values:&lt;br /&gt;
&amp;lt;blockquote&amp;gt;    &lt;br /&gt;
    0 - Success &amp;lt;br/&amp;gt;&lt;br /&gt;
    1 - No files were processed &amp;lt;br/&amp;gt;&lt;br /&gt;
    2 - At least one file stopped processing &amp;lt;br/&amp;gt;&lt;br /&gt;
    4 - A serious error occurred, REGEN failed &lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Similarly, &amp;lt;var&amp;gt;SETGRC&amp;lt;/var&amp;gt; may be used to get the return code and error message.&lt;br /&gt;
&lt;br /&gt;
==New and changed parameters==&lt;br /&gt;
&lt;br /&gt;
===ECMODS===&lt;br /&gt;
The new minimum value for ECMODS, the allowable number of ECF modules, is 1. Prior to V7.8 the minimum value was 0. This changed was enabled in V7.7 with the application of zap 77z306.&lt;br /&gt;
&lt;br /&gt;
===ECNAMES===&lt;br /&gt;
The new minimum value for ECNAMES, the allowable number of ECF module names, is 1. Prior to V7.8 the minimum value was 0. This changed was enabled in V7.7 with the application of zap 77z306.&lt;br /&gt;
&lt;br /&gt;
===ECPSIZE===&lt;br /&gt;
The new minimum value for ECPSIZE, the initial storage allocation for ECF parameters, is 1024. Prior to V7.8 the minimum value was 0. This changed was enabled in V7.7 with the application of zap 77z306.&lt;br /&gt;
&lt;br /&gt;
===ENQTIME===&lt;br /&gt;
Millisecond duration of automatic record locking retry wait.&lt;br /&gt;
&lt;br /&gt;
Prior to this change, if record locking conflicts occur frequently in a busy online, any user with a non-zero value for &amp;lt;var&amp;gt;[[ENQRETRY parameter|ENQRETRY]]&amp;lt;/var&amp;gt; will wait at least 3 seconds before the conflict is dealt with. This can degrade overall system performance.      &lt;br /&gt;
                                                         &lt;br /&gt;
The &amp;lt;var&amp;gt;[[ENQTIME parameter|ENQTIME]]&amp;lt;/var&amp;gt; parameter specifies the number of milliseconds waited for each record locking retry wait. ENQTIME can be between 1 and 60000, corresponding to a minimum of 1 millisecond and a maximum of 1 minute. The default value of ENQTIME is 3000 (3 seconds).            &lt;br /&gt;
                                                         &lt;br /&gt;
For example, with ENQTIME = 100 and ENQRETRY = 7, after a record locking conflict occurs the thread will retry 7 times with wait intervals of .1 seconds, and so within at most .7 seconds either the lock becomes available or the conflict triggers an On unit or cancels the request.     &lt;br /&gt;
                                                         &lt;br /&gt;
The ENQTIME parameter may also be reset with $ResetN. &lt;br /&gt;
&lt;br /&gt;
This new parameter was enabled within V7.7 with the application of zap 77z299.&lt;br /&gt;
&lt;br /&gt;
===EVALOPT===&lt;br /&gt;
The new &amp;lt;var&amp;gt;EVALOPT&amp;lt;/var&amp;gt; parameter controls the cancellation of a request on truncation of string data. The default value is 0, and currently there is just one setting, 1, which means &amp;quot;cancel a request if truncation of string data occurs.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
For example, with the default of 0 in place, the following code &amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;    %x is string len 1   &lt;br /&gt;
    %y is string len 2   &lt;br /&gt;
    %y = &#039;ab&#039;            &lt;br /&gt;
    %x = %y              &lt;br /&gt;
    printtext {~} = {%x} &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
would cause silent truncation, and give the result&lt;br /&gt;
    &amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;%x = a &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If &amp;lt;var&amp;gt;EVALOPT&amp;lt;/var&amp;gt; is set to 1, then the above code produces the following message:&lt;br /&gt;
    &amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;M204.0552: Variable too small for result &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and the request is cancelled.&lt;br /&gt;
&lt;br /&gt;
===LFSCB===&lt;br /&gt;
LFSCB, the length of the full screen buffer, now has a new minimum value of 8 ( the previous minimum was 0 ). This change has been enabled within v7.7 with the application of zap 77z042, and within V7.6 with the application of zap 76z393.&lt;br /&gt;
&lt;br /&gt;
===MAXPRE, MAXBOUT, MAXSUBT===&lt;br /&gt;
&amp;lt;p&amp;gt;Introduced in zap 77Z257.&amp;lt;/p&amp;gt;&lt;br /&gt;
The new &amp;lt;var&amp;gt;MAXPRE&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;MAXBOUT&amp;lt;/var&amp;gt;, and &amp;lt;var&amp;gt;MAXSUBT&amp;lt;/var&amp;gt; parameters can be used to cancel a runaway transaction and prevent it from filling the checkpoint data set. &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;MAXPRE&amp;lt;/var&amp;gt;:  Maximum number of pre-images per transaction.  &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;MAXBOUT&amp;lt;/var&amp;gt;: Maximum number of backout pages per transaction. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;MAXSUBT&amp;lt;/var&amp;gt;: Maximum number of subtransaction checkpoints that a transaction can span.&amp;lt;/li&amp;gt;&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;Each new parameter defaults to unlimited. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;If a parameter value is set, a transaction is cancelled if that value is exceeded, and the following message is displayed:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;code&amp;gt;M204.0524: Maximum number (&amp;lt;i&amp;gt;num&amp;lt;/i&amp;gt;) of &amp;lt;i&amp;gt;parameter&amp;lt;/i&amp;gt; exceeded.&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
where &amp;lt;i&amp;gt;num&amp;lt;/i&amp;gt; is the value set for &amp;lt;i&amp;gt;parameter&amp;lt;/i&amp;gt; (&amp;lt;var&amp;gt;MAXPRE&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;MAXBOUT&amp;lt;/var&amp;gt;, or &amp;lt;var&amp;gt;MAXSUBT&amp;lt;/var&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
===NLDAPBUF===&lt;br /&gt;
This new parameter allows the number of LDAP buffers allocated during startup to be set in CCAIN. The default value is 2, and the settable value can range from 0 to 65535.&lt;br /&gt;
&lt;br /&gt;
===PUPDTH (new minimum value)===&lt;br /&gt;
If a user sets the &amp;lt;var&amp;gt;[[PUPDTH parameter|PUPDTH]]&amp;lt;/var&amp;gt; parameter to 0, it will now automatically be increased to 1, its minimum value.&lt;br /&gt;
&lt;br /&gt;
===SERV4G===&lt;br /&gt;
This parameter allows testing of server tables that span a 4-gigabyte boundary. For example, if SERV4G is X&#039;FFFFF000&#039;, each ATB server will begin at XX_FFFFF000. If SERV4G is X&#039;FFFF0000&#039;, each ATB server will begin at XX_FFFF0000. XX is determined by the storage available on the system. The parameter is set in CCAIN.&lt;br /&gt;
&lt;br /&gt;
The contents of the ATB server are specified by using the SERVGA parameter.&lt;br /&gt;
&lt;br /&gt;
For example. if you want VTBL to span the 4G boundary, you can use these settings: SERV4G=X&#039;FFFFF000&#039;, SERVGA=X&#039;00040000&#039;, and LVTBL=200 (6400 bytes, X&#039;1900&#039;). This will force each server&#039;s VTBL to begin at XX_FFFFF000 and end at XX+1_00000900.&lt;br /&gt;
&lt;br /&gt;
===WEBDFLT===&lt;br /&gt;
At V7.7, the default access rule for non-SSL ports was changed from ALLOW * to DISALLOW *, meaning that unless any ALLOW rules were in place resulting in a login/password prompt, the port couldn&#039;t be accessed. The new &amp;lt;var&amp;gt;[https://m204wiki.rocketsoftware.com/index.php/WEBDFLT_parameter WEBDFLT]&amp;lt;/var&amp;gt; parameter may be set to 1 for reversion to the old default of ALLOW *. Under V7.7, this new parameter was enabled with the application of zap 77z090. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;var&amp;gt;RESET WEBDFLT&amp;lt;/var&amp;gt; requires system administrator privileges. It is recommended to reset the 1 bit of &amp;lt;var&amp;gt;WEBDFLT&amp;lt;/var&amp;gt; to zero after issuing a series of &amp;lt;var&amp;gt;JANUS DEFINE&amp;lt;/var&amp;gt; commands which need WEBDFLT=1, as in the CCAIN input stream.&lt;br /&gt;
&lt;br /&gt;
==New and changed statistics==&lt;br /&gt;
===MPR, MBO, MCP, and RCV===&lt;br /&gt;
Introduced in zap 77Z257.&lt;br /&gt;
&amp;lt;p&amp;gt;These statistics provide high water mark transaction information. (Since-last values will not be available until V78 GA.)&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;They are useful in conjunction with the &amp;lt;var&amp;gt;MAXPRE&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;MAXBOUT&amp;lt;/var&amp;gt;, and &amp;lt;var&amp;gt;MAXSUBT&amp;lt;/var&amp;gt; parameters. &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
User/system statistics:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;MPR: High water mark of transaction pre-images. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;MBO: High water mark of transaction backout pages. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;MCP: High water mark of transaction chkpoint spans. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
System statistics: &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;RCV: Number of blocks needed for subtransaction recovery &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt; &lt;br /&gt;
&amp;lt;p class=&amp;quot;note&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Notes:&amp;lt;/b&amp;gt; M204.0843 now displays the RCV statistic for subtransaction checkpoints.&lt;br /&gt;
The size of recovery checkpoint must be greater than the sum of the last RCV value plus the number of records in [https://m204wiki.rocketsoftware.com/index.php/System_and_media_recovery#RESTART_recovery_considerations_for_sub-transaction_checkpoints RESTART and RESTARTS].&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
===DKWTS and DKWTMICS===&lt;br /&gt;
Introduced in zap 77z7289.&lt;br /&gt;
&amp;lt;p&amp;gt;The new system statistics DKWTS (DisK WaiTs) and DKWTMICS (DisK WaiT MICroSeconds) collect data to provide rough disk I/O service time numbers.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
DKWTS shows the number of disk I/O waits. DKWTMICS shows the total wait time for those waits in microseconds. Dividing the difference in DKWTMICS by the difference in DKWTS over an interval provides the average disk I/O wait time in microseconds.              &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;note&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Notes:&amp;lt;/b&amp;gt; &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The wait time does include internal Model 204 scheduler delays, so on a CPU bound Model 204 system, the service times calculated from DKWTS and DKWTMICS are likely to be an overestimate of actual service times.&amp;lt;/li&amp;gt;  &lt;br /&gt;
                                                                    &lt;br /&gt;
&amp;lt;li&amp;gt;DKWTS and DKWTMICS are not available in SirMon; use [https://m204wiki.rocketsoftware.com/index.php/MONITOR_command MONITOR] SYSTEM STATISTICS to view these statistics.&amp;lt;/li&amp;gt;&amp;lt;/ul&amp;gt;  &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Compatibility issues==&lt;br /&gt;
===&amp;lt;b id=&amp;quot;listNewInit&amp;quot;&amp;gt;&amp;lt;/b&amp;gt;$ListNew cannot be used in Initial clause===&lt;br /&gt;
It is now a compilation error if &amp;lt;var&amp;gt;$ListNew&amp;lt;/var&amp;gt; is attempted to be used in the &amp;lt;var&amp;gt;Initial&amp;lt;/var&amp;gt; clause of a &lt;br /&gt;
[https://m204wiki.rocketsoftware.com/index.php/Using_variables_and_values_in_computation#Declare_statements_for_.25variables declaration statement].&lt;br /&gt;
&amp;lt;p&amp;gt;This change is propagated by zap maintenance to versions 7.5 (zap 75Z487), 7.6 (zap 76Z514), and 7.7 (zap 77Z281) of Model 204.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote class=&amp;quot;note&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Note:&amp;lt;/b&amp;gt; Strictly speaking, this would not be considered a compilation error, because previously although &amp;lt;code&amp;gt;..&amp;amp;nbsp;Initial($ListNew)&amp;lt;/code&amp;gt; did not produce a compilation error, in almost all circumstances it would produce a snap if the initialized %variable were used with some other &amp;lt;var&amp;gt;$List&amp;lt;i&amp;gt;xxx&amp;lt;/i&amp;gt;&amp;lt;/var&amp;gt; invocation.&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Restricting the use of the CUSTOM=38 setting===&lt;br /&gt;
The [[CUSTOM parameter|CUSTOM=38]] parameter setting, introduced at V7.5, inadvertently provided System Manager privileges to all users via the RESET command. This CUSTOM setting is now restricted to the RESETting of the LAUDIT parameter.&lt;br /&gt;
&lt;br /&gt;
===Disabling of Closure support===&lt;br /&gt;
Due to a number of bugs related to Closure support, introduced at V7.7, this feature, which can best be described as exposed methods assigned to method variables, has been disabled in this release. This change was also made to V7.7 with application of zap 77z119.&lt;br /&gt;
&lt;br /&gt;
===Password delimiter enforced===&lt;br /&gt;
When using IFSTRTN to logon to a Model 204 online from an IFAM2 application, both the logonid and password must be followed by a semicolon - the delimiter.             &lt;br /&gt;
For example:      &lt;br /&gt;
                                      &lt;br /&gt;
CALL IFSTRTN(RC,&#039;logonid;password;&#039;...)&lt;br /&gt;
                 &lt;br /&gt;
If a semicolon does not follow the password string, the following message will now be issued&lt;br /&gt;
&lt;br /&gt;
M204.2964: Password missing or too long                  &lt;br /&gt;
                                                         &lt;br /&gt;
Previously, a semicolon following the password was not required and the first blank served as a password delimiter.  However, as of V7.7, embedded blanks are valid password characters and a semicolon is now required to delimit the password.&lt;br /&gt;
&lt;br /&gt;
This change has also been enabled within V7.7 with the application of zap 77z231.&lt;br /&gt;
&lt;br /&gt;
===PAGESZ parameter validated===&lt;br /&gt;
Previously it was possible to set the PAGESZ parameter to any value, although Model 204 internally supports one page size of 6184, and any deviation from this value would have led to problems during file creation. The value of this parameter is now controlled, such that setting it to any value other than 6184 will generate an M204.1149 message with the parameter being reset to 6184.&lt;br /&gt;
&lt;br /&gt;
===ECPRIV and the IDCAMS facility===&lt;br /&gt;
At V7.7 a security loophole was closed, whereby all ECF modules were run under external-authorizer profile of the calling user. Previously any ECF tasks were run under the owning job&#039;s external-authorizer profile, and in order for certain sites to retain that ability, a new setting of ECPRIV, value 4, was introduced to retain the ability to run ECF tasks using the job&#039;s security profile. &lt;br /&gt;
&lt;br /&gt;
The ECPRIV 4 setting potentially introduced a security loophole when calling the IDCAMS interface, based upon what the IDCAMS utility is able to do at a system level. Consequently as of this release, the ECPRIV 4 setting will be ignored when calling the IDCAMS facility via ECF, and such IDCAMS processes will always use the calling user&#039;s security profile. Any existing jobs that use ECF to call the IDCAMS utility with the ECFPRIV 4 bit set should be checked to ensure that the calling user&#039;s security profile still satisfies the job&#039;s requirements.&lt;br /&gt;
&lt;br /&gt;
===TCPOPTS is view only===&lt;br /&gt;
In previous releases the TCPOPTS parameter, which identifies the type of IP addressing in use ( v4 or v6 ), was resetable, although it was always documented as a view-only parameter. The parameter is now handled as a view-only parameter, and any attempts to reset the parameter will result in&lt;br /&gt;
&lt;br /&gt;
   M204.1123: Parameter TCPOPTS not reset&lt;br /&gt;
&lt;br /&gt;
===ZHPF command can only be issued by a system manager===&lt;br /&gt;
In previous releases it was possible to issue the ZHPF command without being logged on. From this release onwards, a user would have to be logged on with system manager privileges to be able to issue this command.&lt;br /&gt;
&lt;br /&gt;
Additionally, the command output will now only  display results for currently open files.&lt;br /&gt;
&lt;br /&gt;
This changes has been enabled within v7.7 with the application of zap 77z264.&lt;br /&gt;
&lt;br /&gt;
===Terminal MODEL reset failure===&lt;br /&gt;
If a reset of the terminal MODEL parameter fails due to an under sized output page buffer, then in addition to the existing messages that inform the user of this failure&lt;br /&gt;
&lt;br /&gt;
    M204.1875 UNABLE TO RESET MODEL TO %C &lt;br /&gt;
    M204.1123: Parameter MODEL not reset  &lt;br /&gt;
&lt;br /&gt;
the following message will now be issued&lt;br /&gt;
&lt;br /&gt;
    M204.1008: LOUTPB must be increased to at least &amp;lt;number&amp;gt; &lt;br /&gt;
                                                         &lt;br /&gt;
where &amp;lt;number&amp;gt; is the minimum value of LOUTPB necessary to support the terminal model.&lt;br /&gt;
&lt;br /&gt;
This change is enabled in V7.7 with the application of zap 77z309.&lt;br /&gt;
&lt;br /&gt;
==New and changed messages==&lt;br /&gt;
&lt;br /&gt;
See [[New and updated messages in Model 204 version 7.8|New and updated messages in Model 204 version 7.8]] for details.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category: Release notes]]&lt;/div&gt;</summary>
		<author><name>ELowell</name></author>
	</entry>
	<entry>
		<id>https://m204wiki.rocketsoftware.com/index.php?title=Release_notes_for_Model_204_version_7.8&amp;diff=117671</id>
		<title>Release notes for Model 204 version 7.8</title>
		<link rel="alternate" type="text/html" href="https://m204wiki.rocketsoftware.com/index.php?title=Release_notes_for_Model_204_version_7.8&amp;diff=117671"/>
		<updated>2019-09-04T20:41:33Z</updated>

		<summary type="html">&lt;p&gt;ELowell: /* AUDIT204 enhancements */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
These release notes list the enhancements and other changes contained in Model 204 version 7.8. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;&amp;lt;b&amp;gt;******THIS IS A DRAFT DOCUMENT.******&amp;lt;/b&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
These release notes list the enhancements and other changes contained in Model 204 version 7.8, &amp;lt;b&amp;gt;&amp;lt;i&amp;gt;which is still in development&amp;lt;/i&amp;gt;&amp;lt;/b&amp;gt;. Until the commercial release of the software, Rocket reserves the right to add to, remove, or change anything described herein. &lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
These release notes contain installation and features information for the Rocket Model 204 version 7.8 release.&lt;br /&gt;
Before beginning your installation, please read through this information about product installation and changes.&lt;br /&gt;
&lt;br /&gt;
==SOUL enhancements==&lt;br /&gt;
===AmIndependent method===&lt;br /&gt;
The &amp;lt;var&amp;gt;AmIndependent&amp;lt;/var&amp;gt; method returns TRUE for daemons spawned by &amp;lt;var&amp;gt;[http://m204wiki.rocketsoftware.com/index.php/RunIndependently_(Daemon_subroutine) RunIndependently]&amp;lt;/var&amp;gt;. (The action of &amp;lt;var&amp;gt;[https://m204wiki.rocketsoftware.com/index.php/AmDaemon_(Daemon_property) AmDaemon]&amp;lt;/var&amp;gt; remains unchanged.)&lt;br /&gt;
&lt;br /&gt;
The following table shows the values returned by &amp;lt;var&amp;gt;AmIndependent&amp;lt;/var&amp;gt; versus &amp;lt;var&amp;gt;AmDaemon&amp;lt;/var&amp;gt; for different daemon types:&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Type&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;AmDaemon&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;AmIndependent&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;$COMBG&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;False&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;False&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Independent daemon&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;False&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;True&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Other daemon&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;True&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;False&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Web, etc.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;False&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;False&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===$ProcOpn===&lt;br /&gt;
&amp;lt;var&amp;gt;[https://m204wiki.rocketsoftware.com/index.php/$ProcOpn $ProcOpn]&amp;lt;/var&amp;gt; now supports the opening of a procedure with an all numeric name, and including a leading zero, e.g.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;%result = $procOpn(&#039;0123&#039;, &#039;MYFILE&#039;)&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Support for such procedures names was initially introduced at v7.7, and this feature of &amp;lt;var&amp;gt;$ProcOpn&amp;lt;/var&amp;gt; is also enabled within v7.7 with the application of zap 77z054.&lt;br /&gt;
&lt;br /&gt;
===Allow parentheses to surround a boolean enumeration object===&lt;br /&gt;
The following sample code&lt;br /&gt;
&lt;br /&gt;
   begin                                       &lt;br /&gt;
   variables are undefined                  &lt;br /&gt;
   %isValid is boolean initial (True)       &lt;br /&gt;
   if (%isValid) then                  &lt;br /&gt;
      print &#039;in IF&#039;                            &lt;br /&gt;
   end if                                   &lt;br /&gt;
   end         &lt;br /&gt;
&lt;br /&gt;
will now compile and run successfully, as &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;if (%isValid) then &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
is logically equivalent to&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;if %isValid then &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Prior to V7.8 the presence of parentheses surrounding the boolean enumeration object would have caused a compilation error. This change is enabled in V7.7 with the application of zap 77z370.&lt;br /&gt;
&lt;br /&gt;
===Support for copying Object class objects===&lt;br /&gt;
The Object class now supports the copy and deepCopy methods. For example, and Object object can be copied as follows&lt;br /&gt;
&lt;br /&gt;
   begin               &lt;br /&gt;
   %x is object object &lt;br /&gt;
   %y is object object &lt;br /&gt;
   %y = new            &lt;br /&gt;
   %x = %y:copy        &lt;br /&gt;
   end&lt;br /&gt;
&lt;br /&gt;
This change is enabled in v7.7 with the application of zap 77z076, and within V7.6 with the application of zap 76z412.&lt;br /&gt;
&lt;br /&gt;
===Assignment of enumeration values to method variables===&lt;br /&gt;
Enumerations values can now be assigned to method variables whose result is an enumeration.So for example the following code&lt;br /&gt;
&lt;br /&gt;
   begin                                               &lt;br /&gt;
   enumeration colour                                  &lt;br /&gt;
      public                                           &lt;br /&gt;
         value red                                     &lt;br /&gt;
         value white                                   &lt;br /&gt;
         value blue                                    &lt;br /&gt;
      end public                                       &lt;br /&gt;
   end enumeration                                     &lt;br /&gt;
   %func    is function getColour is enumeration colour&lt;br /&gt;
   local function getColour is enumeration colour      &lt;br /&gt;
      return blue                                      &lt;br /&gt;
   end function                                        &lt;br /&gt;
   %func    = getColour                                &lt;br /&gt;
   %func    = (colour):red                             &lt;br /&gt;
   printText {~=%(Local):(%func)}                      &lt;br /&gt;
   end  &lt;br /&gt;
&lt;br /&gt;
will produce the result&lt;br /&gt;
&lt;br /&gt;
   %(Local):(%func)=red&lt;br /&gt;
&lt;br /&gt;
whereas previously the line   &lt;br /&gt;
&lt;br /&gt;
   %func    = (colour):red    &lt;br /&gt;
&lt;br /&gt;
would have been rejected with the message&lt;br /&gt;
&lt;br /&gt;
   MSIR.0993: Assignment invalid: mismatch between method and method variable&lt;br /&gt;
&lt;br /&gt;
This change is enabled in V7.7 with the application of zap 77z128.&lt;br /&gt;
&lt;br /&gt;
==External Call Facility enhancements==&lt;br /&gt;
===Managing ECF tables more efficiently===&lt;br /&gt;
The are two new features to help manage ECF tables more efficiently, avoid conditions where the table can fill, and prevent the definition of further entities.&lt;br /&gt;
&lt;br /&gt;
The first feature is the new  &amp;lt;var&amp;gt;DISPLAY ECF&amp;lt;/var&amp;gt; command, which displays the contents of ECF tables and also the current status of users accessing ECF modules. See more details of the &amp;lt;var&amp;gt;[[#DISPLAY ECF|DISPLAY ECF]]&amp;lt;/var&amp;gt; command below.&lt;br /&gt;
&lt;br /&gt;
The second feature is a new &amp;lt;var&amp;gt;EXTERNAL REMOVE&amp;lt;/var&amp;gt; statement with the syntax&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;EXTERNAL REMOVE &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;modulename&amp;lt;/span&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This causes the entry for the named module to be removed from the module table. The table entry is then placed on a free chain of entries and can be reused by issuing the EXTERNAL MODULE statement. This allows the module table to be managed with redundant entries removed, without having to recycle the ONLINE.&lt;br /&gt;
&lt;br /&gt;
A EXTERNAL REMOVE statement will return $status/$statusd values of 0/0, and most other status values that can be returned by the EXTERNAL REMOVE statement are already documented in the ECF return codes table. If an EXTERNAL REMOVE is attempted against a module that is currently being called ( in use ), then $status/$statusd will return the values 20/1 ( module unavailable).&lt;br /&gt;
&lt;br /&gt;
==System enhancements==&lt;br /&gt;
&lt;br /&gt;
===New wait types for daemon/master waits===&lt;br /&gt;
&lt;br /&gt;
Two new wait types, viewable on the &amp;lt;var&amp;gt;[https://m204wiki.rocketsoftware.com/index.php/MONITOR_command MONITOR] USERS&amp;lt;/var&amp;gt; command output, have been implemented as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;57&amp;lt;/code&amp;gt; - Means a daemon thread waiting for its master thread  &amp;lt;br /&amp;gt;     &lt;br /&gt;
&amp;lt;code&amp;gt;58&amp;lt;/code&amp;gt; - Means a master thread waiting for one of its daemon threads&lt;br /&gt;
&lt;br /&gt;
This change is enabled in V7.7 with the application of zap 77z410.&lt;br /&gt;
&lt;br /&gt;
===Snap formatting changes===&lt;br /&gt;
Date/time stamps in the page headers of snaps will now be shown normal format, rather than in julian format as in previous releases. Thus in the following example a particular snap header under v7.7 or previous releases would show as &lt;br /&gt;
&lt;br /&gt;
   SNAPID    1   19226.060155  M204.0022: Bug .. nnnnn               PAGE     1&lt;br /&gt;
&lt;br /&gt;
whereas the same snap header under v7.8 would show as &lt;br /&gt;
&lt;br /&gt;
   SNAPID    1  2019/08/14 06:01:06   M204.0022: Bug .. nnnnn        PAGE     1&lt;br /&gt;
&lt;br /&gt;
Also, due to improvements in handling trailing blanks in snap output, a snap generated under v7.8 should be marginally smaller than the same snap generated under previous releases, assuming the same SNAPCTL settings.&lt;br /&gt;
&lt;br /&gt;
===Call stack trace for problem diagnosis===&lt;br /&gt;
A  call stack trace is now provided to help diagnose and resolve common errors. To enable the stack trace, do either of the following: &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Set the &amp;lt;var&amp;gt;[[SIRFACT parameter|SIRFACT]] X&#039;01&#039;&amp;lt;/var&amp;gt; bit.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Set the &amp;lt;var&amp;gt;[[DEBUGUL parameter|DEBUGL]]&amp;lt;/var&amp;gt; parameter. Note that the &amp;lt;var&amp;gt;DEBUGUL&amp;lt;/var&amp;gt; approach will introduce extra QTBL overhead. &amp;lt;p&amp;gt;(&amp;lt;var&amp;gt;DEBUGUL&amp;lt;/var&amp;gt; provides a similar facility with an include trace of procedures leading to the error, but this might not be potentially as useful as the call trace.)&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt; &lt;br /&gt;
&lt;br /&gt;
The call stack trace can assist in diagnosing run-time errors that might occur, as illustrated by the following &amp;quot;Variable too small for result&amp;quot; and &amp;quot;MBSCAN exceeded&amp;quot; examples.&lt;br /&gt;
&lt;br /&gt;
====Variable too small for result====&lt;br /&gt;
When the stack trace is enabled, a &amp;quot;variable too small&amp;quot; error results in the following message:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;M204.2966: Error at line n, procedure &#039;&#039;procname&#039;&#039; in file &#039;&#039;procfile&#039;&#039;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
which identifies the line within a procedure where the error is occurring, in addition to the usual message:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;M204.0552: Variable too small for result&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Any subsequent M204.2966 messages indicate the point in the code from where the code in error was called. For example, a stack of three subroutine calls leading to a &amp;quot;variable too small&amp;quot; error might result in the following messaging:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;   M204.0552: Variable too small for result                             &lt;br /&gt;
   M204.2966: Error at line 9, procedure MYPROC.LEVEL4 in file MYPROC   &lt;br /&gt;
   M204.2966: Called from line 5, procedure MYPROC.LEVEL3 in file MYPROC&lt;br /&gt;
   M204.2966: Called from line 5, procedure MYPROC.LEVEL2 in file MYPROC&lt;br /&gt;
   M204.2966: Called from line 5, procedure MYPROC.LEVEL1 in file MYPROC &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This information should help in diagnosing the problem. &lt;br /&gt;
&lt;br /&gt;
If the error occurs within a command level program rather than a procedure, then the M204.2966 message is replaced by an M204.2967 message, and a similar error condition to the above with a preceding call stack might be audited as follows:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;   M204.0552: Variable too small for result              &lt;br /&gt;
   M204.2967: Error at line 14 of command level program  &lt;br /&gt;
   M204.2967: Called from line 5 of command level program&lt;br /&gt;
   M204.2967: Called from line 3 of command level program &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If neither &amp;lt;var&amp;gt;SIRFACT X&#039;01&#039;&amp;lt;/var&amp;gt; nor &amp;lt;var&amp;gt;DEBUGUL&amp;lt;/var&amp;gt; is set, then the &amp;quot;variable too small&amp;quot; error produces the following messages:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;   M204.0552: Variable too small for result &lt;br /&gt;
   M204.2968: Error: no debug info &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====MBSCAN exceeded====&lt;br /&gt;
Similarly to the handling of the &amp;quot;variable too small for result&amp;quot; error, the call stack can also be used to diagnose errors where the value of &amp;lt;var&amp;gt;[[MBSCAN parameter|MBSCAN]]&amp;lt;/var&amp;gt; is exceeded as a result of a direct search of Table B records. &lt;br /&gt;
&amp;lt;p&amp;gt;Again, under V7.8, with either the &amp;lt;var&amp;gt;SIRFACT X&#039;01&#039;&amp;lt;/var&amp;gt; bit set or &amp;lt;var&amp;gt;DEBUGUL&amp;lt;/var&amp;gt; set, if a long request occurs as a result of exceeding &amp;lt;var&amp;gt;MBSCAN&amp;lt;/var&amp;gt;, then initially the following message is produced, as before:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;M204.0569: File &#039;&#039;filename&#039;&#039;, Find: Table B records to be searched = &#039;&#039;nnnn&#039;&#039;&amp;lt;/p&amp;gt;&lt;br /&gt;
followed by a DYRWT prompt message. If the user replies &#039;N&#039; to the prompt, or if the request is run in an environment (such as a batch job) where the default response is &#039;N&#039;, the following message is produced after the M204.0569 message:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;Cancelling request: M204.2969: MBSCAN (&#039;&#039;mm&#039;&#039;) exceeded, records to be searched = &#039;&#039;nnnn&#039;&#039;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
where &#039;&#039;mm&#039;&#039; is the current setting of &amp;lt;var&amp;gt;MBSCAN&amp;lt;/var&amp;gt;. The M204.2969 message is followed by M204.2966 messages displaying the call stack trace. Thus, if the following code is run from procedure MYPROC.MBSCAN against the demo database, with an &amp;lt;var&amp;gt;MBSCAN&amp;lt;/var&amp;gt; setting of 10:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;   b                           &lt;br /&gt;
   call sub1                   &lt;br /&gt;
   sub1: subroutine            &lt;br /&gt;
   fd1:                        &lt;br /&gt;
      in clients fd city = ONTARIO&lt;br /&gt;
              end find         &lt;br /&gt;
      fr fd1                      &lt;br /&gt;
         pai                      &lt;br /&gt;
         print                    &lt;br /&gt;
      end for                     &lt;br /&gt;
   end subroutine              &lt;br /&gt;
   end &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
then the following messages are produced, assuming any prompts are responded to with an &#039;N&#039;:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;   M204.0569: File CLIENTS, Find: Table B records to be searched = 3415&lt;br /&gt;
   Cancelling request: M204.2969: MBSCAN (10) exceeded, records to be searched = 3415  &lt;br /&gt;
   M204.2966: Error at line 6, procedure MYPROC.MBSCAN in file MYPROC&lt;br /&gt;
   M204.2966: Called from line 3, procedure MYPROC.MBSCAN in file MYPROC  &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===appendJournalData===&lt;br /&gt;
The &amp;lt;var&amp;gt;[[AppendJournalData_(Stringlist_function)|AppendJournalData]]&amp;lt;/var&amp;gt; function is now more tolerant of an outstanding BUMP request. Previously, if &amp;lt;var&amp;gt;AppendJournalData&amp;lt;/var&amp;gt; was called to inadvertently retrieve a large amount of journal data, typically when called implicitly from within SirScan, then any outstanding BUMP request wouldn&#039;t be honored until all of the data had been retrieved, at which point the BUMP request would be completed, and all data would be lost.&lt;br /&gt;
&lt;br /&gt;
Now, the &amp;lt;var&amp;gt;AppendJournalData&amp;lt;/var&amp;gt; process checks for outstanding BUMP requests before each track I/O is executed, thus avoiding excessive I/Os against the journal and long waits for the BUMP of such a process to complete.&lt;br /&gt;
&lt;br /&gt;
==AUDIT204 enhancements==&lt;br /&gt;
===FORMAT command===&lt;br /&gt;
TIMEHH is a new parameter used with the FORMAT command of the [[Tracking_system_activity_(CCAJRNL,_CCAAUDIT,_CCAJLOG)#AUDIT204_utility|AUDIT204]] utility.  It indicates that timestamps, printed at the beginning of each line of output, should include hundredths of a second. Requires no other arguments.&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;b&amp;gt;NOTE:&amp;lt;/b&amp;gt; This parameter and the 78 version (or later) of AUDIT204 may be used against a 77 (or later) CCAJRNL.&amp;lt;/p&amp;gt;&lt;br /&gt;
For example:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;//CCAIN DD *&lt;br /&gt;
FORMAT YEARFORM 4&lt;br /&gt;
TIMEHH&lt;br /&gt;
TYPE ER MS LI&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Recovery enhancements==&lt;br /&gt;
===Media Recovery in a multi-user environment===&lt;br /&gt;
It is now possible to perform media recovery by issuing the &amp;lt;var&amp;gt;REGENERATE&amp;lt;/var&amp;gt; command to roll forward selected files in a multi-user environment, with the media recovery being carried out by different users with system manager privileges. The new USING option allows for the specification of a ddname for the input journal stream to be used by the &amp;lt;var&amp;gt;REGENERATE&amp;lt;/var&amp;gt; command. Previously media recovery was restricted to single user batch jobs, using the CCAGEN ddname for the input journal. For more details, see the &amp;lt;var&amp;gt;[[#REGENERATE|REGENERATE]]&amp;lt;/var&amp;gt; command below.&lt;br /&gt;
&lt;br /&gt;
==Security enhancements==&lt;br /&gt;
===CA-Top Secret can disallow CCASTAT logins===&lt;br /&gt;
The [https://m204wiki.rocketsoftware.com/index.php/CA-Top_Secret_interface CA-Top Secret] interface now recognizes the &amp;lt;code&amp;gt;DEFACID=&amp;lt;/code&amp;gt;, setting and does not allow CCASTAT logins in the online if &amp;lt;code&amp;gt;DEFACID&amp;lt;/code&amp;gt; is set to null. (There is no attempt to log on M204USR.) Therefore, to disallow CCASTAT logons, set DEFACID=, in [https://m204wiki.rocketsoftware.com/index.php/CA-Top_Secret_interface#Preparing_a_TOPSPARM_parameter_module_with_TOPSGEN TOPSPARM]. CCASTAT will be opened because it contains file and group passwords, but it will not be used for logons if CCASTAT logons are not allowed.&lt;br /&gt;
&lt;br /&gt;
===CUSTOM=11 and mixed cased input===&lt;br /&gt;
The &amp;lt;var&amp;gt;[https://m204wiki.rocketsoftware.com/index.php/CUSTOM_parameter CUSTOM]&amp;lt;/var&amp;gt; parameter CUSTOM=11 setting no longer requires that a *LOWER command be issued prior to a LOGCTL command (to add or change a  password) to preserve mixed case input. Prior to this release, with CUSTOM=11 in place, *LOWER had to be issued before a LOGCTL command, otherwise any mixed case password strings would automatically be translated into uppercase. This change is enabled within V7.7 with the application of zap 77z108.&lt;br /&gt;
&lt;br /&gt;
===DEFUSER can specify a jobname not authorized to access M204===&lt;br /&gt;
When specifying DEFUSER=JOBNAME and VALIDAT=LOGON in the RACFGEN parms for an ONLINE, if the specified jobname ( the owning id for the ONLINE job ) isn&#039;t authorized to use Model 204 via RACF, any LOGIN commands specifying no userid will now succeed ( previously such a LOGON would have failed ). This enables users to submit jobs with USE $JOB, whereby the string USER=jobname  will be added to the submitted JCL, and this in turn is useful if the specified jobname has dataset access privileges to datasets required by the submitted jobs, even if the jobname itself isn&#039;t authorized to use M204.&lt;br /&gt;
&lt;br /&gt;
==Janus product enhancements==&lt;br /&gt;
&lt;br /&gt;
===Janus Web Server access rule===&lt;br /&gt;
The automatic &amp;lt;var&amp;gt;[[JANUS WEB ALLOW]]&amp;lt;/var&amp;gt; rule, which allowed any user to access the port without requiring a login, is changed &amp;lt;i&amp;gt;for non-SSL ports&amp;lt;/i&amp;gt; to the following:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;JANUS WEB &amp;lt;i&amp;gt;portname&amp;lt;/i&amp;gt; DISALLOW *&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
This rule requires a system administrator to explicitly define &amp;lt;var&amp;gt;ALLOW&amp;lt;/var&amp;gt; rules to enable users to access non-SSL ports.&lt;br /&gt;
The rule applies unless overridden by user-added rules. &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;blockquote class=&amp;quot;note&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;b&amp;gt;Note:&amp;lt;/b&amp;gt; To revert from this change in the JANUS DEFINE default and make the default &lt;br /&gt;
 non-SSL &amp;lt;var&amp;gt;ALLOW&amp;lt;/var&amp;gt; rule as it was in version 7.5 and earlier (&amp;lt;code&amp;gt;ALLOW *&amp;lt;/code&amp;gt;), turn on the 1 bit of the &amp;lt;var&amp;gt;[[WEBDFLT parameter|WEBDFLT]]&amp;lt;/var&amp;gt; parameter: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;RESET WEBDFLT=1&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Increase in pending accepts for Janus BPX ports===&lt;br /&gt;
The default number of pending accepts for Janus BPX server ports has been increased from 3 to 12, thus reducing the likelihood that a pending accept may fail with the message&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;MSIR.0019 Connection request rejected for port (port), MAXCON exceeded&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The actual number of pending accepts to be supported on the port can be set with the new parameter MAXPEND, set on the &amp;lt;var&amp;gt;[[JANUS_DEFINE|JANUS DEFINE]]&amp;lt;/var&amp;gt; command, where MAXPEND can vary from 3 up to a maximum value of 32. The change to the default value was enabled within V7.7 with the application of zap 77z269.&lt;br /&gt;
&lt;br /&gt;
===TCP listen backlog increased===&lt;br /&gt;
&lt;br /&gt;
The [https://m204wiki.rocketsoftware.com/index.php/Program_Communication_facilities#LISTEN_call TCP_listen] backlog has been increased from 16 to 1024 under z/OS.&lt;br /&gt;
&lt;br /&gt;
This update tells the TCP stack to queue up to 1024 of such requests up before dropping them, thus reducing, or in most cases eliminating, the likelihood of a connection request drop, other than in exceptional circumstances, such as a denial of service attack. This change was enabled within V7.7 with the application of zap 77z340.&lt;br /&gt;
&lt;br /&gt;
===Defer the freeing of XMLSCREEN input XML===&lt;br /&gt;
&lt;br /&gt;
The freeing of [https://m204wiki.rocketsoftware.com/index.php/XMLSCREEN_and_NOXMLSCREEN_(JANUS_DEFINE_parameters) XMLSCREEN] input XML is now deferred until the next Read Screen or session termination. This means that if an application error is detected, the input XML can be retrieved with [https://m204wiki.rocketsoftware.com/index.php/$Web_Input_Content $Web_Input_Content] and then logged for problem analysis. &lt;br /&gt;
&lt;br /&gt;
Prior to this release the XML received from the client is freed immediately after being used to set the input data for a Read Screen, rendering it unavailable for problem determination.&lt;br /&gt;
&lt;br /&gt;
This change is enabled in V7.7 with the application of zap 77z368.&lt;br /&gt;
&lt;br /&gt;
===XMLSCREEN and Janus Web Legacy blank stripping===&lt;br /&gt;
&lt;br /&gt;
xmlScreens and Janus Web Legacy screens now adhere to the same standard as standard screen processing in terms of stripping leading blanks from input fields defined as [https://m204wiki.rocketsoftware.com/index.php/Full-screen_feature#DEBLANK_or_NODEBLANK_option DEBLANK] (either explicitly or implicitly).&lt;br /&gt;
&lt;br /&gt;
This change is enabled in V7.7 with the application of zap 77z400.&lt;br /&gt;
&lt;br /&gt;
===SSL input buffer size===&lt;br /&gt;
&lt;br /&gt;
The default value of [https://m204wiki.rocketsoftware.com/index.php/SSLIBSIZE_(JANUS_DEFINE_parameter) SSLIBSIZE] has been increased to 16384 + 128, or 16512. This size should ensure correct communication with all TLS spec compliant applications. It is the maximum size allowed unless you use [https://m204wiki.rocketsoftware.com/index.php/CUSTOM_parameter#Using_CUSTOM.3D.2818.29 CUSTOM=18].    &lt;br /&gt;
&lt;br /&gt;
This changed is enabled within V7.7 with the application of zap 77z415.&lt;br /&gt;
&lt;br /&gt;
===Increasing LDAP buffers===&lt;br /&gt;
&lt;br /&gt;
The number of LDAP buffers allocated at startup can now be changed by setting the NLDAPBUF parameter in CCAIN. See below for details on [[#NLDAPBUF|NLDAPBUF]].&lt;br /&gt;
&lt;br /&gt;
==Debugger enhancements==&lt;br /&gt;
&lt;br /&gt;
===Access to exposed variables===&lt;br /&gt;
The debuggers can now view or watch the values of variables exposed to local routines/methods. Previously, any attempts to access an exposed variable would have displayed &amp;quot;%varname has no value&amp;quot; in the debugger session. (This feature is enabled within V7.7 with the application of zap 77z363.)&lt;br /&gt;
&lt;br /&gt;
==Performance enhancements==&lt;br /&gt;
&lt;br /&gt;
===X3270OUT exit offloadable===&lt;br /&gt;
When running MP/204 (AMPSUBS&amp;gt;0) and using the [https://m204wiki.rocketsoftware.com/index.php/Coding_SNA_Communications_Server_conversion_exit_routines#X3270OUT_.28convert_output_from_3270_format.29 X3270OUT] exit to convert a 3270 output data stream to the appropriate device protocol, the exit can now run in parallel mode to improve performance. This change was enabled in V7.7 with the application of zap 77Z313.&lt;br /&gt;
&lt;br /&gt;
The X3270OUT exit must be written to be re-entrant.&lt;br /&gt;
&lt;br /&gt;
==New and changed commands==&lt;br /&gt;
===DISPLAY ECF===&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;DISPLAY ECF {{ M | N | U } like ?} &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This new command displays details from ECF tables, or the current status of users accessing ECF modules.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;syntax&amp;quot;&amp;gt;D ECF M&amp;lt;/span&amp;gt; displays the contents of the module table. For example:&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;    D ECF M &lt;br /&gt;
    Module   Loadlib  Address:Length     Loaded@      Lastused@   #Calls  Flags &lt;br /&gt;
    QATUM13C PROGLIB 2FB91FB8:00000028 19023:121506 19023:121506 00000001 &lt;br /&gt;
    QATUM13B PROGLIB 2FE65000:00009C18 19023:121506 19023:121506 00000001 &lt;br /&gt;
    QATUM13A PROGLIB 2FE6EC18:00001CD8 19023:121506 19023:121506 00000001  &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
(flags may be D=deleted; S=shared; H=halted; I=Idle)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;syntax&amp;quot;&amp;gt;D ECF N&amp;lt;/span&amp;gt; displays contents of the name table. For example: &amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;    D ECF N&lt;br /&gt;
    Module   Logical-call-name &lt;br /&gt;
    QATUM13C MOD_QATUM13C &lt;br /&gt;
    QATUM13B MOD_QATUM13B &lt;br /&gt;
    QATUM13A MOD_QATUM13A &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;syntax&amp;quot;&amp;gt;D ECF U&amp;lt;/span&amp;gt; displays details of users currently accessing ECF modules. This is also the default option, and so &amp;lt;span class=&amp;quot;syntax&amp;quot;&amp;gt;D ECF&amp;lt;/span&amp;gt; will display the same output as &amp;lt;span class=&amp;quot;syntax&amp;quot;&amp;gt;D ECF U&amp;lt;/span&amp;gt;. For example:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;    D ECF U                           &lt;br /&gt;
    User# Userid     Module   Parmlen &lt;br /&gt;
    00002 ADMIN      --none--         &lt;br /&gt;
    00003 ADMIN      COBSAMP1 00000002&lt;br /&gt;
    00004 ADMIN      COBSAMP1 00000002 &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;syntax&amp;quot;&amp;gt;D ECF LIKE ? &amp;lt;/span&amp;gt; (where &amp;lt;code&amp;gt;?&amp;lt;/code&amp;gt; is a valid pattern) displays details for entities that match the specified pattern.&lt;br /&gt;
&lt;br /&gt;
===REGENERATE===&lt;br /&gt;
The &amp;lt;var&amp;gt;REGENERATE&amp;lt;/var&amp;gt; command can now be run in a multi-user environment by multiple users with system manager privileges. A new option USING is provided to specify the ddname of the input journal, so that the full syntax is now as follows:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;  REGENERATE [USING ddname] FILE filename [FROM dumpname | IGNORE]&lt;br /&gt;
  [TO {LAST UPDATE [BEFORE yy.ddd hh:mm:ss.th] | LAST CHECKPOINT [BEFORE yy.dd hh:mm:ss.th] &lt;br /&gt;
  | UPDATE number OF yy.ddd hh:mm:ss.th | CHECKPOINT yy.ddd hh:mm:ss.th} ]&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The default for the using ddname is CCAGEN, but any ddname may be used to allocate an input journal and used. For example:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;  ALLOCATE REGEN1 WITH SCOPE=SYSTEM DSN=PROD1.GDGJ OLD SEQUENTIAL GEN=+2&lt;br /&gt;
  REGENERATE USING REGEN1 FILE TEST&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It is the user&#039;s responsibility to ensure that the file being regenerated is not in use, and so prior to usage, &amp;lt;var&amp;gt;BUMP FILE&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;STOP FILE&amp;lt;/var&amp;gt; should be used to isolate usage against the file. If the file is in use, the REGEN will fail with these messages:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;  M204.1430: Failed to open file TEST&lt;br /&gt;
  M204.1436: Stopped processing file TEST  &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
$STATUS will now be set for &amp;lt;var&amp;gt;REGENERATE&amp;lt;/var&amp;gt; with the following values:&lt;br /&gt;
&amp;lt;blockquote&amp;gt;    &lt;br /&gt;
    0 - Success &amp;lt;br/&amp;gt;&lt;br /&gt;
    1 - No files were processed &amp;lt;br/&amp;gt;&lt;br /&gt;
    2 - At least one file stopped processing &amp;lt;br/&amp;gt;&lt;br /&gt;
    4 - A serious error occurred, REGEN failed &lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Similarly, &amp;lt;var&amp;gt;SETGRC&amp;lt;/var&amp;gt; may be used to get the return code and error message.&lt;br /&gt;
&lt;br /&gt;
==New and changed parameters==&lt;br /&gt;
&lt;br /&gt;
===ECMODS===&lt;br /&gt;
The new minimum value for ECMODS, the allowable number of ECF modules, is 1. Prior to V7.8 the minimum value was 0. This changed was enabled in V7.7 with the application of zap 77z306.&lt;br /&gt;
&lt;br /&gt;
===ECNAMES===&lt;br /&gt;
The new minimum value for ECNAMES, the allowable number of ECF module names, is 1. Prior to V7.8 the minimum value was 0. This changed was enabled in V7.7 with the application of zap 77z306.&lt;br /&gt;
&lt;br /&gt;
===ECPSIZE===&lt;br /&gt;
The new minimum value for ECPSIZE, the initial storage allocation for ECF parameters, is 1024. Prior to V7.8 the minimum value was 0. This changed was enabled in V7.7 with the application of zap 77z306.&lt;br /&gt;
&lt;br /&gt;
===ENQTIME===&lt;br /&gt;
Millisecond duration of automatic record locking retry wait.&lt;br /&gt;
&lt;br /&gt;
Prior to this change, if record locking conflicts occur frequently in a busy online, any user with a non-zero value for &amp;lt;var&amp;gt;[[ENQRETRY parameter|ENQRETRY]]&amp;lt;/var&amp;gt; will wait at least 3 seconds before the conflict is dealt with. This can degrade overall system performance.      &lt;br /&gt;
                                                         &lt;br /&gt;
The &amp;lt;var&amp;gt;[[ENQTIME parameter|ENQTIME]]&amp;lt;/var&amp;gt; parameter specifies the number of milliseconds waited for each record locking retry wait. ENQTIME can be between 1 and 60000, corresponding to a minimum of 1 millisecond and a maximum of 1 minute. The default value of ENQTIME is 3000 (3 seconds).            &lt;br /&gt;
                                                         &lt;br /&gt;
For example, with ENQTIME = 100 and ENQRETRY = 7, after a record locking conflict occurs the thread will retry 7 times with wait intervals of .1 seconds, and so within at most .7 seconds either the lock becomes available or the conflict triggers an On unit or cancels the request.     &lt;br /&gt;
                                                         &lt;br /&gt;
The ENQTIME parameter may also be reset with $ResetN. &lt;br /&gt;
&lt;br /&gt;
This new parameter was enabled within V7.7 with the application of zap 77z299.&lt;br /&gt;
&lt;br /&gt;
===EVALOPT===&lt;br /&gt;
The new &amp;lt;var&amp;gt;EVALOPT&amp;lt;/var&amp;gt; parameter controls the cancellation of a request on truncation of string data. The default value is 0, and currently there is just one setting, 1, which means &amp;quot;cancel a request if truncation of string data occurs.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
For example, with the default of 0 in place, the following code &amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;    %x is string len 1   &lt;br /&gt;
    %y is string len 2   &lt;br /&gt;
    %y = &#039;ab&#039;            &lt;br /&gt;
    %x = %y              &lt;br /&gt;
    printtext {~} = {%x} &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
would cause silent truncation, and give the result&lt;br /&gt;
    &amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;%x = a &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If &amp;lt;var&amp;gt;EVALOPT&amp;lt;/var&amp;gt; is set to 1, then the above code produces the following message:&lt;br /&gt;
    &amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;M204.0552: Variable too small for result &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and the request is cancelled.&lt;br /&gt;
&lt;br /&gt;
===LFSCB===&lt;br /&gt;
LFSCB, the length of the full screen buffer, now has a new minimum value of 8 ( the previous minimum was 0 ). This change has been enabled within v7.7 with the application of zap 77z042, and within V7.6 with the application of zap 76z393.&lt;br /&gt;
&lt;br /&gt;
===MAXPRE, MAXBOUT, MAXSUBT===&lt;br /&gt;
&amp;lt;p&amp;gt;Introduced in zap 77Z257.&amp;lt;/p&amp;gt;&lt;br /&gt;
The new &amp;lt;var&amp;gt;MAXPRE&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;MAXBOUT&amp;lt;/var&amp;gt;, and &amp;lt;var&amp;gt;MAXSUBT&amp;lt;/var&amp;gt; parameters can be used to cancel a runaway transaction and prevent it from filling the checkpoint data set. &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;MAXPRE&amp;lt;/var&amp;gt;:  Maximum number of pre-images per transaction.  &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;MAXBOUT&amp;lt;/var&amp;gt;: Maximum number of backout pages per transaction. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;MAXSUBT&amp;lt;/var&amp;gt;: Maximum number of subtransaction checkpoints that a transaction can span.&amp;lt;/li&amp;gt;&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;Each new parameter defaults to unlimited. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;If a parameter value is set, a transaction is cancelled if that value is exceeded, and the following message is displayed:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;code&amp;gt;M204.0524: Maximum number (&amp;lt;i&amp;gt;num&amp;lt;/i&amp;gt;) of &amp;lt;i&amp;gt;parameter&amp;lt;/i&amp;gt; exceeded.&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
where &amp;lt;i&amp;gt;num&amp;lt;/i&amp;gt; is the value set for &amp;lt;i&amp;gt;parameter&amp;lt;/i&amp;gt; (&amp;lt;var&amp;gt;MAXPRE&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;MAXBOUT&amp;lt;/var&amp;gt;, or &amp;lt;var&amp;gt;MAXSUBT&amp;lt;/var&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
===NLDAPBUF===&lt;br /&gt;
This new parameter allows the number of LDAP buffers allocated during startup to be set in CCAIN. The default value is 2, and the settable value can range from 0 to 65535.&lt;br /&gt;
&lt;br /&gt;
===PUPDTH (new minimum value)===&lt;br /&gt;
If a user sets the &amp;lt;var&amp;gt;[[PUPDTH parameter|PUPDTH]]&amp;lt;/var&amp;gt; parameter to 0, it will now automatically be increased to 1, its minimum value.&lt;br /&gt;
&lt;br /&gt;
===SERV4G===&lt;br /&gt;
This parameter allows testing of server tables that span a 4-gigabyte boundary. For example, if SERV4G is X&#039;FFFFF000&#039;, each ATB server will begin at XX_FFFFF000. If SERV4G is X&#039;FFFF0000&#039;, each ATB server will begin at XX_FFFF0000. XX is determined by the storage available on the system. The parameter is set in CCAIN.&lt;br /&gt;
&lt;br /&gt;
The contents of the ATB server are specified by using the SERVGA parameter.&lt;br /&gt;
&lt;br /&gt;
For example. if you want VTBL to span the 4G boundary, you can use these settings: SERV4G=X&#039;FFFFF000&#039;, SERVGA=X&#039;00040000&#039;, and LVTBL=200 (6400 bytes, X&#039;1900&#039;). This will force each server&#039;s VTBL to begin at XX_FFFFF000 and end at XX+1_00000900.&lt;br /&gt;
&lt;br /&gt;
===WEBDFLT===&lt;br /&gt;
At V7.7, the default access rule for non-SSL ports was changed from ALLOW * to DISALLOW *, meaning that unless any ALLOW rules were in place resulting in a login/password prompt, the port couldn&#039;t be accessed. The new &amp;lt;var&amp;gt;[https://m204wiki.rocketsoftware.com/index.php/WEBDFLT_parameter WEBDFLT]&amp;lt;/var&amp;gt; parameter may be set to 1 for reversion to the old default of ALLOW *. Under V7.7, this new parameter was enabled with the application of zap 77z090. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;var&amp;gt;RESET WEBDFLT&amp;lt;/var&amp;gt; requires system administrator privileges. It is recommended to reset the 1 bit of &amp;lt;var&amp;gt;WEBDFLT&amp;lt;/var&amp;gt; to zero after issuing a series of &amp;lt;var&amp;gt;JANUS DEFINE&amp;lt;/var&amp;gt; commands which need WEBDFLT=1, as in the CCAIN input stream.&lt;br /&gt;
&lt;br /&gt;
==New and changed statistics==&lt;br /&gt;
===MPR, MBO, MCP, and RCV===&lt;br /&gt;
Introduced in zap 77Z257.&lt;br /&gt;
&amp;lt;p&amp;gt;These statistics provide high water mark transaction information. (Since-last values will not be available until V78 GA.)&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;They are useful in conjunction with the &amp;lt;var&amp;gt;MAXPRE&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;MAXBOUT&amp;lt;/var&amp;gt;, and &amp;lt;var&amp;gt;MAXSUBT&amp;lt;/var&amp;gt; parameters. &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
User/system statistics:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;MPR: High water mark of transaction pre-images. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;MBO: High water mark of transaction backout pages. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;MCP: High water mark of transaction chkpoint spans. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
System statistics: &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;RCV: Number of blocks needed for subtransaction recovery &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt; &lt;br /&gt;
&amp;lt;p class=&amp;quot;note&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Notes:&amp;lt;/b&amp;gt; M204.0843 now displays the RCV statistic for subtransaction checkpoints.&lt;br /&gt;
The size of recovery checkpoint must be greater than the sum of the last RCV value plus the number of records in [https://m204wiki.rocketsoftware.com/index.php/System_and_media_recovery#RESTART_recovery_considerations_for_sub-transaction_checkpoints RESTART and RESTARTS].&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
===DKWTS and DKWTMICS===&lt;br /&gt;
Introduced in zap 77z7289.&lt;br /&gt;
&amp;lt;p&amp;gt;The new system statistics DKWTS (DisK WaiTs) and DKWTMICS (DisK WaiT MICroSeconds) collect data to provide rough disk I/O service time numbers.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
DKWTS shows the number of disk I/O waits. DKWTMICS shows the total wait time for those waits in microseconds. Dividing the difference in DKWTMICS by the difference in DKWTS over an interval provides the average disk I/O wait time in microseconds.              &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;note&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Notes:&amp;lt;/b&amp;gt; &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The wait time does include internal Model 204 scheduler delays, so on a CPU bound Model 204 system, the service times calculated from DKWTS and DKWTMICS are likely to be an overestimate of actual service times.&amp;lt;/li&amp;gt;  &lt;br /&gt;
                                                                    &lt;br /&gt;
&amp;lt;li&amp;gt;DKWTS and DKWTMICS are not available in SirMon; use [https://m204wiki.rocketsoftware.com/index.php/MONITOR_command MONITOR] SYSTEM STATISTICS to view these statistics.&amp;lt;/li&amp;gt;&amp;lt;/ul&amp;gt;  &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Compatibility issues==&lt;br /&gt;
===&amp;lt;b id=&amp;quot;listNewInit&amp;quot;&amp;gt;&amp;lt;/b&amp;gt;$ListNew cannot be used in Initial clause===&lt;br /&gt;
It is now a compilation error if &amp;lt;var&amp;gt;$ListNew&amp;lt;/var&amp;gt; is attempted to be used in the &amp;lt;var&amp;gt;Initial&amp;lt;/var&amp;gt; clause of a &lt;br /&gt;
[https://m204wiki.rocketsoftware.com/index.php/Using_variables_and_values_in_computation#Declare_statements_for_.25variables declaration statement].&lt;br /&gt;
&amp;lt;p&amp;gt;This change is propagated by zap maintenance to versions 7.5 (zap 75Z487), 7.6 (zap 76Z514), and 7.7 (zap 77Z281) of Model 204.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote class=&amp;quot;note&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Note:&amp;lt;/b&amp;gt; Strictly speaking, this would not be considered a compilation error, because previously although &amp;lt;code&amp;gt;..&amp;amp;nbsp;Initial($ListNew)&amp;lt;/code&amp;gt; did not produce a compilation error, in almost all circumstances it would produce a snap if the initialized %variable were used with some other &amp;lt;var&amp;gt;$List&amp;lt;i&amp;gt;xxx&amp;lt;/i&amp;gt;&amp;lt;/var&amp;gt; invocation.&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Restricting the use of the CUSTOM=38 setting===&lt;br /&gt;
The [[CUSTOM parameter|CUSTOM=38]] parameter setting, introduced at V7.5, inadvertently provided System Manager privileges to all users via the RESET command. This CUSTOM setting is now restricted to the RESETting of the LAUDIT parameter.&lt;br /&gt;
&lt;br /&gt;
===Disabling of Closure support===&lt;br /&gt;
Due to a number of bugs related to Closure support, introduced at V7.7, this feature, which can best be described as exposed methods assigned to method variables, has been disabled in this release. This change was also made to V7.7 with application of zap 77z119.&lt;br /&gt;
&lt;br /&gt;
===Password delimiter enforced===&lt;br /&gt;
When using IFSTRTN to logon to a Model 204 online from an IFAM2 application, both the logonid and password must be followed by a semicolon - the delimiter.             &lt;br /&gt;
For example:      &lt;br /&gt;
                                      &lt;br /&gt;
CALL IFSTRTN(RC,&#039;logonid;password;&#039;...)&lt;br /&gt;
                 &lt;br /&gt;
If a semicolon does not follow the password string, the following message will now be issued&lt;br /&gt;
&lt;br /&gt;
M204.2964: Password missing or too long                  &lt;br /&gt;
                                                         &lt;br /&gt;
Previously, a semicolon following the password was not required and the first blank served as a password delimiter.  However, as of V7.7, embedded blanks are valid password characters and a semicolon is now required to delimit the password.&lt;br /&gt;
&lt;br /&gt;
This change has also been enabled within V7.7 with the application of zap 77z231.&lt;br /&gt;
&lt;br /&gt;
===PAGESZ parameter validated===&lt;br /&gt;
Previously it was possible to set the PAGESZ parameter to any value, although Model 204 internally supports one page size of 6184, and any deviation from this value would have led to problems during file creation. The value of this parameter is now controlled, such that setting it to any value other than 6184 will generate an M204.1149 message with the parameter being reset to 6184.&lt;br /&gt;
&lt;br /&gt;
===ECPRIV and the IDCAMS facility===&lt;br /&gt;
At V7.7 a security loophole was closed, whereby all ECF modules were run under external-authorizer profile of the calling user. Previously any ECF tasks were run under the owning job&#039;s external-authorizer profile, and in order for certain sites to retain that ability, a new setting of ECPRIV, value 4, was introduced to retain the ability to run ECF tasks using the job&#039;s security profile. &lt;br /&gt;
&lt;br /&gt;
The ECPRIV 4 setting potentially introduced a security loophole when calling the IDCAMS interface, based upon what the IDCAMS utility is able to do at a system level. Consequently as of this release, the ECPRIV 4 setting will be ignored when calling the IDCAMS facility via ECF, and such IDCAMS processes will always use the calling user&#039;s security profile. Any existing jobs that use ECF to call the IDCAMS utility with the ECFPRIV 4 bit set should be checked to ensure that the calling user&#039;s security profile still satisfies the job&#039;s requirements.&lt;br /&gt;
&lt;br /&gt;
===TCPOPTS is view only===&lt;br /&gt;
In previous releases the TCPOPTS parameter, which identifies the type of IP addressing in use ( v4 or v6 ), was resetable, although it was always documented as a view-only parameter. The parameter is now handled as a view-only parameter, and any attempts to reset the parameter will result in&lt;br /&gt;
&lt;br /&gt;
   M204.1123: Parameter TCPOPTS not reset&lt;br /&gt;
&lt;br /&gt;
===ZHPF command can only be issued by a system manager===&lt;br /&gt;
In previous releases it was possible to issue the ZHPF command without being logged on. From this release onwards, a user would have to be logged on with system manager privileges to be able to issue this command.&lt;br /&gt;
&lt;br /&gt;
Additionally, the command output will now only  display results for currently open files.&lt;br /&gt;
&lt;br /&gt;
This changes has been enabled within v7.7 with the application of zap 77z264.&lt;br /&gt;
&lt;br /&gt;
===Terminal MODEL reset failure===&lt;br /&gt;
If a reset of the terminal MODEL parameter fails due to an under sized output page buffer, then in addition to the existing messages that inform the user of this failure&lt;br /&gt;
&lt;br /&gt;
    M204.1875 UNABLE TO RESET MODEL TO %C &lt;br /&gt;
    M204.1123: Parameter MODEL not reset  &lt;br /&gt;
&lt;br /&gt;
the following message will now be issued&lt;br /&gt;
&lt;br /&gt;
    M204.1008: LOUTPB must be increased to at least &amp;lt;number&amp;gt; &lt;br /&gt;
                                                         &lt;br /&gt;
where &amp;lt;number&amp;gt; is the minimum value of LOUTPB necessary to support the terminal model.&lt;br /&gt;
&lt;br /&gt;
This change is enabled in V7.7 with the application of zap 77z309.&lt;br /&gt;
&lt;br /&gt;
==New and changed messages==&lt;br /&gt;
&lt;br /&gt;
See [[New and updated messages in Model 204 version 7.8|New and updated messages in Model 204 version 7.8]] for details.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category: Release notes]]&lt;/div&gt;</summary>
		<author><name>ELowell</name></author>
	</entry>
	<entry>
		<id>https://m204wiki.rocketsoftware.com/index.php?title=Release_notes_for_Model_204_version_7.8&amp;diff=117663</id>
		<title>Release notes for Model 204 version 7.8</title>
		<link rel="alternate" type="text/html" href="https://m204wiki.rocketsoftware.com/index.php?title=Release_notes_for_Model_204_version_7.8&amp;diff=117663"/>
		<updated>2019-08-28T22:43:10Z</updated>

		<summary type="html">&lt;p&gt;ELowell: /* MBSCAN exceeded */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
These release notes list the enhancements and other changes contained in Model 204 version 7.8. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;&amp;lt;b&amp;gt;******THIS IS A DRAFT DOCUMENT.******&amp;lt;/b&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
These release notes list the enhancements and other changes contained in Model 204 version 7.8, &amp;lt;b&amp;gt;&amp;lt;i&amp;gt;which is still in development&amp;lt;/i&amp;gt;&amp;lt;/b&amp;gt;. Until the commercial release of the software, Rocket reserves the right to add to, remove, or change anything described herein. &lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
These release notes contain installation and features information for the Rocket Model 204 version 7.8 release.&lt;br /&gt;
Before beginning your installation, please read through this information about product installation and changes.&lt;br /&gt;
&lt;br /&gt;
==SOUL enhancements==&lt;br /&gt;
===AmIndependent method===&lt;br /&gt;
The &amp;lt;var&amp;gt;AmIndependent&amp;lt;/var&amp;gt; method returns TRUE for daemons spawned by &amp;lt;var&amp;gt;[http://m204wiki.rocketsoftware.com/index.php/RunIndependently_(Daemon_subroutine) RunIndependently]&amp;lt;/var&amp;gt;. (The action of &amp;lt;var&amp;gt;[https://m204wiki.rocketsoftware.com/index.php/AmDaemon_(Daemon_property) AmDaemon]&amp;lt;/var&amp;gt; remains unchanged.)&lt;br /&gt;
&lt;br /&gt;
The following table shows the values returned by &amp;lt;var&amp;gt;AmIndependent&amp;lt;/var&amp;gt; versus &amp;lt;var&amp;gt;AmDaemon&amp;lt;/var&amp;gt; for different daemon types:&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Type&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;AmDaemon&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;AmIndependent&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;$COMBG&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;False&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;False&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Independent daemon&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;False&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;True&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Other daemon&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;True&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;False&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Web, etc.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;False&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;False&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===$ProcOpn===&lt;br /&gt;
&amp;lt;var&amp;gt;[https://m204wiki.rocketsoftware.com/index.php/$ProcOpn $ProcOpn]&amp;lt;/var&amp;gt; now supports the opening of a procedure with an all numeric name, and including a leading zero, e.g.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;%result = $procOpn(&#039;0123&#039;, &#039;MYFILE&#039;)&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Support for such procedures names was initially introduced at v7.7, and this feature of &amp;lt;var&amp;gt;$ProcOpn&amp;lt;/var&amp;gt; is also enabled within v7.7 with the application of zap 77z054.&lt;br /&gt;
&lt;br /&gt;
===Allow parentheses to surround a boolean enumeration object===&lt;br /&gt;
The following sample code&lt;br /&gt;
&lt;br /&gt;
   begin                                       &lt;br /&gt;
   variables are undefined                  &lt;br /&gt;
   %isValid is boolean initial (True)       &lt;br /&gt;
   if (%isValid) then                  &lt;br /&gt;
      print &#039;in IF&#039;                            &lt;br /&gt;
   end if                                   &lt;br /&gt;
   end         &lt;br /&gt;
&lt;br /&gt;
will now compile and run successfully, as &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;if (%isValid) then &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
is logically equivalent to&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;if %isValid then &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Prior to V7.8 the presence of parentheses surrounding the boolean enumeration object would have caused a compilation error. This change is enabled in V7.7 with the application of zap 77z370.&lt;br /&gt;
&lt;br /&gt;
===Support for copying Object class objects===&lt;br /&gt;
The Object class now supports the copy and deepCopy methods. For example, and Object object can be copied as follows&lt;br /&gt;
&lt;br /&gt;
   begin               &lt;br /&gt;
   %x is object object &lt;br /&gt;
   %y is object object &lt;br /&gt;
   %y = new            &lt;br /&gt;
   %x = %y:copy        &lt;br /&gt;
   end&lt;br /&gt;
&lt;br /&gt;
This change is enabled in v7.7 with the application of zap 77z076, and within V7.6 with the application of zap 76z412.&lt;br /&gt;
&lt;br /&gt;
===Assignment of enumeration values to method variables===&lt;br /&gt;
Enumerations values can now be assigned to method variables whose result is an enumeration.So for example the following code&lt;br /&gt;
&lt;br /&gt;
   begin                                               &lt;br /&gt;
   enumeration colour                                  &lt;br /&gt;
      public                                           &lt;br /&gt;
         value red                                     &lt;br /&gt;
         value white                                   &lt;br /&gt;
         value blue                                    &lt;br /&gt;
      end public                                       &lt;br /&gt;
   end enumeration                                     &lt;br /&gt;
   %func    is function getColour is enumeration colour&lt;br /&gt;
   local function getColour is enumeration colour      &lt;br /&gt;
      return blue                                      &lt;br /&gt;
   end function                                        &lt;br /&gt;
   %func    = getColour                                &lt;br /&gt;
   %func    = (colour):red                             &lt;br /&gt;
   printText {~=%(Local):(%func)}                      &lt;br /&gt;
   end  &lt;br /&gt;
&lt;br /&gt;
will produce the result&lt;br /&gt;
&lt;br /&gt;
   %(Local):(%func)=red&lt;br /&gt;
&lt;br /&gt;
whereas previously the line   &lt;br /&gt;
&lt;br /&gt;
   %func    = (colour):red    &lt;br /&gt;
&lt;br /&gt;
would have been rejected with the message&lt;br /&gt;
&lt;br /&gt;
   MSIR.0993: Assignment invalid: mismatch between method and method variable&lt;br /&gt;
&lt;br /&gt;
This change is enabled in V7.7 with the application of zap 77z128.&lt;br /&gt;
&lt;br /&gt;
==External Call Facility enhancements==&lt;br /&gt;
===Managing ECF tables more efficiently===&lt;br /&gt;
The are two new features to help manage ECF tables more efficiently, avoid conditions where the table can fill, and prevent the definition of further entities.&lt;br /&gt;
&lt;br /&gt;
The first feature is the new  &amp;lt;var&amp;gt;DISPLAY ECF&amp;lt;/var&amp;gt; command, which displays the contents of ECF tables and also the current status of users accessing ECF modules. See more details of the &amp;lt;var&amp;gt;[[#DISPLAY ECF|DISPLAY ECF]]&amp;lt;/var&amp;gt; command below.&lt;br /&gt;
&lt;br /&gt;
The second feature is a new &amp;lt;var&amp;gt;EXTERNAL REMOVE&amp;lt;/var&amp;gt; statement with the syntax&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;EXTERNAL REMOVE &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;modulename&amp;lt;/span&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This causes the entry for the named module to be removed from the module table. The table entry is then placed on a free chain of entries and can be reused by issuing the EXTERNAL MODULE statement. This allows the module table to be managed with redundant entries removed, without having to recycle the ONLINE.&lt;br /&gt;
&lt;br /&gt;
A EXTERNAL REMOVE statement will return $status/$statusd values of 0/0, and most other status values that can be returned by the EXTERNAL REMOVE statement are already documented in the ECF return codes table. If an EXTERNAL REMOVE is attempted against a module that is currently being called ( in use ), then $status/$statusd will return the values 20/1 ( module unavailable).&lt;br /&gt;
&lt;br /&gt;
==System enhancements==&lt;br /&gt;
&lt;br /&gt;
===New wait types for daemon/master waits===&lt;br /&gt;
&lt;br /&gt;
Two new wait types, viewable on the &amp;lt;var&amp;gt;[https://m204wiki.rocketsoftware.com/index.php/MONITOR_command MONITOR] USERS&amp;lt;/var&amp;gt; command output, have been implemented as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;57&amp;lt;/code&amp;gt; - Means a daemon thread waiting for its master thread  &amp;lt;br /&amp;gt;     &lt;br /&gt;
&amp;lt;code&amp;gt;58&amp;lt;/code&amp;gt; - Means a master thread waiting for one of its daemon threads&lt;br /&gt;
&lt;br /&gt;
This change is enabled in V7.7 with the application of zap 77z410.&lt;br /&gt;
&lt;br /&gt;
===Snap formatting changes===&lt;br /&gt;
Date/time stamps in the page headers of snaps will now be shown normal format, rather than in julian format as in previous releases. Thus in the following example a particular snap header under v7.7 or previous releases would show as &lt;br /&gt;
&lt;br /&gt;
   SNAPID    1   19226.060155  M204.0022: Bug .. nnnnn               PAGE     1&lt;br /&gt;
&lt;br /&gt;
whereas the same snap header under v7.8 would show as &lt;br /&gt;
&lt;br /&gt;
   SNAPID    1  2019/08/14 06:01:06   M204.0022: Bug .. nnnnn        PAGE     1&lt;br /&gt;
&lt;br /&gt;
Also, due to improvements in handling trailing blanks in snap output, a snap generated under v7.8 should be marginally smaller than the same snap generated under previous releases, assuming the same SNAPCTL settings.&lt;br /&gt;
&lt;br /&gt;
===Call stack trace for problem diagnosis===&lt;br /&gt;
A  call stack trace is now provided to help diagnose and resolve common errors. To enable the stack trace, do either of the following: &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Set the &amp;lt;var&amp;gt;[[SIRFACT parameter|SIRFACT]] X&#039;01&#039;&amp;lt;/var&amp;gt; bit.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Set the &amp;lt;var&amp;gt;[[DEBUGUL parameter|DEBUGL]]&amp;lt;/var&amp;gt; parameter. Note that the &amp;lt;var&amp;gt;DEBUGUL&amp;lt;/var&amp;gt; approach will introduce extra QTBL overhead. &amp;lt;p&amp;gt;(&amp;lt;var&amp;gt;DEBUGUL&amp;lt;/var&amp;gt; provides a similar facility with an include trace of procedures leading to the error, but this might not be potentially as useful as the call trace.)&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt; &lt;br /&gt;
&lt;br /&gt;
The call stack trace can assist in diagnosing run-time errors that might occur, as illustrated by the following &amp;quot;Variable too small for result&amp;quot; and &amp;quot;MBSCAN exceeded&amp;quot; examples.&lt;br /&gt;
&lt;br /&gt;
====Variable too small for result====&lt;br /&gt;
When the stack trace is enabled, a &amp;quot;variable too small&amp;quot; error results in the following message:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;M204.2966: Error at line n, procedure &#039;&#039;procname&#039;&#039; in file &#039;&#039;procfile&#039;&#039;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
which identifies the line within a procedure where the error is occurring, in addition to the usual message:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;M204.0552: Variable too small for result&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Any subsequent M204.2966 messages indicate the point in the code from where the code in error was called. For example, a stack of three subroutine calls leading to a &amp;quot;variable too small&amp;quot; error might result in the following messaging:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;   M204.0552: Variable too small for result                             &lt;br /&gt;
   M204.2966: Error at line 9, procedure MYPROC.LEVEL4 in file MYPROC   &lt;br /&gt;
   M204.2966: Called from line 5, procedure MYPROC.LEVEL3 in file MYPROC&lt;br /&gt;
   M204.2966: Called from line 5, procedure MYPROC.LEVEL2 in file MYPROC&lt;br /&gt;
   M204.2966: Called from line 5, procedure MYPROC.LEVEL1 in file MYPROC &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This information should help in diagnosing the problem. &lt;br /&gt;
&lt;br /&gt;
If the error occurs within a command level program rather than a procedure, then the M204.2966 message is replaced by an M204.2967 message, and a similar error condition to the above with a preceding call stack might be audited as follows:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;   M204.0552: Variable too small for result              &lt;br /&gt;
   M204.2967: Error at line 14 of command level program  &lt;br /&gt;
   M204.2967: Called from line 5 of command level program&lt;br /&gt;
   M204.2967: Called from line 3 of command level program &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If neither &amp;lt;var&amp;gt;SIRFACT X&#039;01&#039;&amp;lt;/var&amp;gt; nor &amp;lt;var&amp;gt;DEBUGUL&amp;lt;/var&amp;gt; is set, then the &amp;quot;variable too small&amp;quot; error produces the following messages:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;   M204.0552: Variable too small for result &lt;br /&gt;
   M204.2968: Error: no debug info &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====MBSCAN exceeded====&lt;br /&gt;
Similarly to the handling of the &amp;quot;variable too small for result&amp;quot; error, the call stack can also be used to diagnose errors where the value of &amp;lt;var&amp;gt;[[MBSCAN parameter|MBSCAN]]&amp;lt;/var&amp;gt; is exceeded as a result of a direct search of Table B records. &lt;br /&gt;
&amp;lt;p&amp;gt;Again, under V7.8, with either the &amp;lt;var&amp;gt;SIRFACT X&#039;01&#039;&amp;lt;/var&amp;gt; bit set or &amp;lt;var&amp;gt;DEBUGUL&amp;lt;/var&amp;gt; set, if a long request occurs as a result of exceeding &amp;lt;var&amp;gt;MBSCAN&amp;lt;/var&amp;gt;, then initially the following message is produced, as before:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;M204.0569: File &#039;&#039;filename&#039;&#039;, Find: Table B records to be searched = &#039;&#039;nnnn&#039;&#039;&amp;lt;/p&amp;gt;&lt;br /&gt;
followed by a DYRWT prompt message. If the user replies &#039;N&#039; to the prompt, or if the request is run in an environment (such as a batch job) where the default response is &#039;N&#039;, the following message is produced after the M204.0569 message:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;Cancelling request: M204.2969: MBSCAN (&#039;&#039;mm&#039;&#039;) exceeded, records to be searched = &#039;&#039;nnnn&#039;&#039;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
where &#039;&#039;mm&#039;&#039; is the current setting of &amp;lt;var&amp;gt;MBSCAN&amp;lt;/var&amp;gt;. The M204.2969 message is followed by M204.2966 messages displaying the call stack trace. Thus, if the following code is run from procedure MYPROC.MBSCAN against the demo database, with an &amp;lt;var&amp;gt;MBSCAN&amp;lt;/var&amp;gt; setting of 10:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;   b                           &lt;br /&gt;
   call sub1                   &lt;br /&gt;
   sub1: subroutine            &lt;br /&gt;
   fd1:                        &lt;br /&gt;
      in clients fd city = ONTARIO&lt;br /&gt;
              end find         &lt;br /&gt;
      fr fd1                      &lt;br /&gt;
         pai                      &lt;br /&gt;
         print                    &lt;br /&gt;
      end for                     &lt;br /&gt;
   end subroutine              &lt;br /&gt;
   end &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
then the following messages are produced, assuming any prompts are responded to with an &#039;N&#039;:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;   M204.0569: File CLIENTS, Find: Table B records to be searched = 3415&lt;br /&gt;
   Cancelling request: M204.2969: MBSCAN (10) exceeded, records to be searched = 3415  &lt;br /&gt;
   M204.2966: Error at line 6, procedure MYPROC.MBSCAN in file MYPROC&lt;br /&gt;
   M204.2966: Called from line 3, procedure MYPROC.MBSCAN in file MYPROC  &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===appendJournalData===&lt;br /&gt;
The &amp;lt;var&amp;gt;[[AppendJournalData_(Stringlist_function)|AppendJournalData]]&amp;lt;/var&amp;gt; function is now more tolerant of an outstanding BUMP request. Previously, if &amp;lt;var&amp;gt;AppendJournalData&amp;lt;/var&amp;gt; was called to inadvertently retrieve a large amount of journal data, typically when called implicitly from within SirScan, then any outstanding BUMP request wouldn&#039;t be honored until all of the data had been retrieved, at which point the BUMP request would be completed, and all data would be lost.&lt;br /&gt;
&lt;br /&gt;
Now, the &amp;lt;var&amp;gt;AppendJournalData&amp;lt;/var&amp;gt; process checks for outstanding BUMP requests before each track I/O is executed, thus avoiding excessive I/Os against the journal and long waits for the BUMP of such a process to complete.&lt;br /&gt;
&lt;br /&gt;
==Recovery enhancements==&lt;br /&gt;
===Media Recovery in a multi-user environment===&lt;br /&gt;
It is now possible to perform media recovery by issuing the &amp;lt;var&amp;gt;REGENERATE&amp;lt;/var&amp;gt; command to roll forward selected files in a multi-user environment, with the media recovery being carried out by different users with system manager privileges. The new USING option allows for the specification of a ddname for the input journal stream to be used by the &amp;lt;var&amp;gt;REGENERATE&amp;lt;/var&amp;gt; command. Previously media recovery was restricted to single user batch jobs, using the CCAGEN ddname for the input journal. For more details, see the &amp;lt;var&amp;gt;[[#REGENERATE|REGENERATE]]&amp;lt;/var&amp;gt; command below.&lt;br /&gt;
&lt;br /&gt;
==Security enhancements==&lt;br /&gt;
===CA-Top Secret can disallow CCASTAT logins===&lt;br /&gt;
The [https://m204wiki.rocketsoftware.com/index.php/CA-Top_Secret_interface CA-Top Secret] interface now recognizes the &amp;lt;code&amp;gt;DEFACID=&amp;lt;/code&amp;gt;, setting and does not allow CCASTAT logins in the online if &amp;lt;code&amp;gt;DEFACID&amp;lt;/code&amp;gt; is set to null. (There is no attempt to log on M204USR.) Therefore, to disallow CCASTAT logons, set DEFACID=, in [https://m204wiki.rocketsoftware.com/index.php/CA-Top_Secret_interface#Preparing_a_TOPSPARM_parameter_module_with_TOPSGEN TOPSPARM]. CCASTAT will be opened because it contains file and group passwords, but it will not be used for logons if CCASTAT logons are not allowed.&lt;br /&gt;
&lt;br /&gt;
===CUSTOM=11 and mixed cased input===&lt;br /&gt;
The &amp;lt;var&amp;gt;[https://m204wiki.rocketsoftware.com/index.php/CUSTOM_parameter CUSTOM]&amp;lt;/var&amp;gt; parameter CUSTOM=11 setting no longer requires that a *LOWER command be issued prior to a LOGCTL command (to add or change a  password) to preserve mixed case input. Prior to this release, with CUSTOM=11 in place, *LOWER had to be issued before a LOGCTL command, otherwise any mixed case password strings would automatically be translated into uppercase. This change is enabled within V7.7 with the application of zap 77z108.&lt;br /&gt;
&lt;br /&gt;
===DEFUSER can specify a jobname not authorized to access M204===&lt;br /&gt;
When specifying DEFUSER=JOBNAME and VALIDAT=LOGON in the RACFGEN parms for an ONLINE, if the specified jobname ( the owning id for the ONLINE job ) isn&#039;t authorized to use Model 204 via RACF, any LOGIN commands specifying no userid will now succeed ( previously such a LOGON would have failed ). This enables users to submit jobs with USE $JOB, whereby the string USER=jobname  will be added to the submitted JCL, and this in turn is useful if the specified jobname has dataset access privileges to datasets required by the submitted jobs, even if the jobname itself isn&#039;t authorized to use M204.&lt;br /&gt;
&lt;br /&gt;
==Janus product enhancements==&lt;br /&gt;
&lt;br /&gt;
===Janus Web Server access rule===&lt;br /&gt;
The automatic &amp;lt;var&amp;gt;[[JANUS WEB ALLOW]]&amp;lt;/var&amp;gt; rule, which allowed any user to access the port without requiring a login, is changed &amp;lt;i&amp;gt;for non-SSL ports&amp;lt;/i&amp;gt; to the following:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;JANUS WEB &amp;lt;i&amp;gt;portname&amp;lt;/i&amp;gt; DISALLOW *&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
This rule requires a system administrator to explicitly define &amp;lt;var&amp;gt;ALLOW&amp;lt;/var&amp;gt; rules to enable users to access non-SSL ports.&lt;br /&gt;
The rule applies unless overridden by user-added rules. &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;blockquote class=&amp;quot;note&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;b&amp;gt;Note:&amp;lt;/b&amp;gt; To revert from this change in the JANUS DEFINE default and make the default &lt;br /&gt;
 non-SSL &amp;lt;var&amp;gt;ALLOW&amp;lt;/var&amp;gt; rule as it was in version 7.5 and earlier (&amp;lt;code&amp;gt;ALLOW *&amp;lt;/code&amp;gt;), turn on the 1 bit of the &amp;lt;var&amp;gt;[[WEBDFLT parameter|WEBDFLT]]&amp;lt;/var&amp;gt; parameter: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;RESET WEBDFLT=1&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Increase in pending accepts for Janus BPX ports===&lt;br /&gt;
The default number of pending accepts for Janus BPX server ports has been increased from 3 to 12, thus reducing the likelihood that a pending accept may fail with the message&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;MSIR.0019 Connection request rejected for port (port), MAXCON exceeded&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The actual number of pending accepts to be supported on the port can be set with the new parameter MAXPEND, set on the &amp;lt;var&amp;gt;[[JANUS_DEFINE|JANUS DEFINE]]&amp;lt;/var&amp;gt; command, where MAXPEND can vary from 3 up to a maximum value of 32. The change to the default value was enabled within V7.7 with the application of zap 77z269.&lt;br /&gt;
&lt;br /&gt;
===TCP listen backlog increased===&lt;br /&gt;
&lt;br /&gt;
The [https://m204wiki.rocketsoftware.com/index.php/Program_Communication_facilities#LISTEN_call TCP_listen] backlog has been increased from 16 to 1024 under z/OS.&lt;br /&gt;
&lt;br /&gt;
This update tells the TCP stack to queue up to 1024 of such requests up before dropping them, thus reducing, or in most cases eliminating, the likelihood of a connection request drop, other than in exceptional circumstances, such as a denial of service attack. This change was enabled within V7.7 with the application of zap 77z340.&lt;br /&gt;
&lt;br /&gt;
===Defer the freeing of XMLSCREEN input XML===&lt;br /&gt;
&lt;br /&gt;
The freeing of [https://m204wiki.rocketsoftware.com/index.php/XMLSCREEN_and_NOXMLSCREEN_(JANUS_DEFINE_parameters) XMLSCREEN] input XML is now deferred until the next Read Screen or session termination. This means that if an application error is detected, the input XML can be retrieved with [https://m204wiki.rocketsoftware.com/index.php/$Web_Input_Content $Web_Input_Content] and then logged for problem analysis. &lt;br /&gt;
&lt;br /&gt;
Prior to this release the XML received from the client is freed immediately after being used to set the input data for a Read Screen, rendering it unavailable for problem determination.&lt;br /&gt;
&lt;br /&gt;
This change is enabled in V7.7 with the application of zap 77z368.&lt;br /&gt;
&lt;br /&gt;
===XMLSCREEN and Janus Web Legacy blank stripping===&lt;br /&gt;
&lt;br /&gt;
xmlScreens and Janus Web Legacy screens now adhere to the same standard as standard screen processing in terms of stripping leading blanks from input fields defined as [https://m204wiki.rocketsoftware.com/index.php/Full-screen_feature#DEBLANK_or_NODEBLANK_option DEBLANK] (either explicitly or implicitly).&lt;br /&gt;
&lt;br /&gt;
This change is enabled in V7.7 with the application of zap 77z400.&lt;br /&gt;
&lt;br /&gt;
===SSL input buffer size===&lt;br /&gt;
&lt;br /&gt;
The default value of [https://m204wiki.rocketsoftware.com/index.php/SSLIBSIZE_(JANUS_DEFINE_parameter) SSLIBSIZE] has been increased to 16384 + 128, or 16512. This size should ensure correct communication with all TLS spec compliant applications. It is the maximum size allowed unless you use [https://m204wiki.rocketsoftware.com/index.php/CUSTOM_parameter#Using_CUSTOM.3D.2818.29 CUSTOM=18].    &lt;br /&gt;
&lt;br /&gt;
This changed is enabled within V7.7 with the application of zap 77z415.&lt;br /&gt;
&lt;br /&gt;
===Increasing LDAP buffers===&lt;br /&gt;
&lt;br /&gt;
The number of LDAP buffers allocated at startup can now be changed by setting the NLDAPBUF parameter in CCAIN. See below for details on [[#NLDAPBUF|NLDAPBUF]].&lt;br /&gt;
&lt;br /&gt;
==Debugger enhancements==&lt;br /&gt;
&lt;br /&gt;
===Access to exposed variables===&lt;br /&gt;
The debuggers can now view or watch the values of variables exposed to local routines/methods. Previously, any attempts to access an exposed variable would have displayed &amp;quot;%varname has no value&amp;quot; in the debugger session. (This feature is enabled within V7.7 with the application of zap 77z363.)&lt;br /&gt;
&lt;br /&gt;
==Performance enhancements==&lt;br /&gt;
&lt;br /&gt;
===X3270OUT exit offloadable===&lt;br /&gt;
When running MP/204 (AMPSUBS&amp;gt;0) and using the [https://m204wiki.rocketsoftware.com/index.php/Coding_SNA_Communications_Server_conversion_exit_routines#X3270OUT_.28convert_output_from_3270_format.29 X3270OUT] exit to convert a 3270 output data stream to the appropriate device protocol, the exit can now run in parallel mode to improve performance. This change was enabled in V7.7 with the application of zap 77Z313.&lt;br /&gt;
&lt;br /&gt;
The X3270OUT exit must be written to be re-entrant.&lt;br /&gt;
&lt;br /&gt;
==New and changed commands==&lt;br /&gt;
===DISPLAY ECF===&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;DISPLAY ECF {{ M | N | U } like ?} &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This new command displays details from ECF tables, or the current status of users accessing ECF modules.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;syntax&amp;quot;&amp;gt;D ECF M&amp;lt;/span&amp;gt; displays the contents of the module table. For example:&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;    D ECF M &lt;br /&gt;
    Module   Loadlib  Address:Length     Loaded@      Lastused@   #Calls  Flags &lt;br /&gt;
    QATUM13C PROGLIB 2FB91FB8:00000028 19023:121506 19023:121506 00000001 &lt;br /&gt;
    QATUM13B PROGLIB 2FE65000:00009C18 19023:121506 19023:121506 00000001 &lt;br /&gt;
    QATUM13A PROGLIB 2FE6EC18:00001CD8 19023:121506 19023:121506 00000001  &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
(flags may be D=deleted; S=shared; H=halted; I=Idle)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;syntax&amp;quot;&amp;gt;D ECF N&amp;lt;/span&amp;gt; displays contents of the name table. For example: &amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;    D ECF N&lt;br /&gt;
    Module   Logical-call-name &lt;br /&gt;
    QATUM13C MOD_QATUM13C &lt;br /&gt;
    QATUM13B MOD_QATUM13B &lt;br /&gt;
    QATUM13A MOD_QATUM13A &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;syntax&amp;quot;&amp;gt;D ECF U&amp;lt;/span&amp;gt; displays details of users currently accessing ECF modules. This is also the default option, and so &amp;lt;span class=&amp;quot;syntax&amp;quot;&amp;gt;D ECF&amp;lt;/span&amp;gt; will display the same output as &amp;lt;span class=&amp;quot;syntax&amp;quot;&amp;gt;D ECF U&amp;lt;/span&amp;gt;. For example:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;    D ECF U                           &lt;br /&gt;
    User# Userid     Module   Parmlen &lt;br /&gt;
    00002 ADMIN      --none--         &lt;br /&gt;
    00003 ADMIN      COBSAMP1 00000002&lt;br /&gt;
    00004 ADMIN      COBSAMP1 00000002 &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;syntax&amp;quot;&amp;gt;D ECF LIKE ? &amp;lt;/span&amp;gt; (where &amp;lt;code&amp;gt;?&amp;lt;/code&amp;gt; is a valid pattern) displays details for entities that match the specified pattern.&lt;br /&gt;
&lt;br /&gt;
===REGENERATE===&lt;br /&gt;
The &amp;lt;var&amp;gt;REGENERATE&amp;lt;/var&amp;gt; command can now be run in a multi-user environment by multiple users with system manager privileges. A new option USING is provided to specify the ddname of the input journal, so that the full syntax is now as follows:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;  REGENERATE [USING ddname] FILE filename [FROM dumpname | IGNORE]&lt;br /&gt;
  [TO {LAST UPDATE [BEFORE yy.ddd hh:mm:ss.th] | LAST CHECKPOINT [BEFORE yy.dd hh:mm:ss.th] &lt;br /&gt;
  | UPDATE number OF yy.ddd hh:mm:ss.th | CHECKPOINT yy.ddd hh:mm:ss.th} ]&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The default for the using ddname is CCAGEN, but any ddname may be used to allocate an input journal and used. For example:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;  ALLOCATE REGEN1 WITH SCOPE=SYSTEM DSN=PROD1.GDGJ OLD SEQUENTIAL GEN=+2&lt;br /&gt;
  REGENERATE USING REGEN1 FILE TEST&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It is the user&#039;s responsibility to ensure that the file being regenerated is not in use, and so prior to usage, &amp;lt;var&amp;gt;BUMP FILE&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;STOP FILE&amp;lt;/var&amp;gt; should be used to isolate usage against the file. If the file is in use, the REGEN will fail with these messages:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;  M204.1430: Failed to open file TEST&lt;br /&gt;
  M204.1436: Stopped processing file TEST  &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
$STATUS will now be set for &amp;lt;var&amp;gt;REGENERATE&amp;lt;/var&amp;gt; with the following values:&lt;br /&gt;
&amp;lt;blockquote&amp;gt;    &lt;br /&gt;
    0 - Success &amp;lt;br/&amp;gt;&lt;br /&gt;
    1 - No files were processed &amp;lt;br/&amp;gt;&lt;br /&gt;
    2 - At least one file stopped processing &amp;lt;br/&amp;gt;&lt;br /&gt;
    4 - A serious error occurred, REGEN failed &lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Similarly, &amp;lt;var&amp;gt;SETGRC&amp;lt;/var&amp;gt; may be used to get the return code and error message.&lt;br /&gt;
&lt;br /&gt;
==New and changed parameters==&lt;br /&gt;
&lt;br /&gt;
===ECMODS===&lt;br /&gt;
The new minimum value for ECMODS, the allowable number of ECF modules, is 1. Prior to V7.8 the minimum value was 0. This changed was enabled in V7.7 with the application of zap 77z306.&lt;br /&gt;
&lt;br /&gt;
===ECNAMES===&lt;br /&gt;
The new minimum value for ECNAMES, the allowable number of ECF module names, is 1. Prior to V7.8 the minimum value was 0. This changed was enabled in V7.7 with the application of zap 77z306.&lt;br /&gt;
&lt;br /&gt;
===ECPSIZE===&lt;br /&gt;
The new minimum value for ECPSIZE, the initial storage allocation for ECF parameters, is 1024. Prior to V7.8 the minimum value was 0. This changed was enabled in V7.7 with the application of zap 77z306.&lt;br /&gt;
&lt;br /&gt;
===ENQTIME===&lt;br /&gt;
Millisecond duration of automatic record locking retry wait.&lt;br /&gt;
&lt;br /&gt;
Prior to this change, if record locking conflicts occur frequently in a busy online, any user with a non-zero value for &amp;lt;var&amp;gt;[[ENQRETRY parameter|ENQRETRY]]&amp;lt;/var&amp;gt; will wait at least 3 seconds before the conflict is dealt with. This can degrade overall system performance.      &lt;br /&gt;
                                                         &lt;br /&gt;
The &amp;lt;var&amp;gt;[[ENQTIME parameter|ENQTIME]]&amp;lt;/var&amp;gt; parameter specifies the number of milliseconds waited for each record locking retry wait. ENQTIME can be between 1 and 60000, corresponding to a minimum of 1 millisecond and a maximum of 1 minute. The default value of ENQTIME is 3000 (3 seconds).            &lt;br /&gt;
                                                         &lt;br /&gt;
For example, with ENQTIME = 100 and ENQRETRY = 7, after a record locking conflict occurs the thread will retry 7 times with wait intervals of .1 seconds, and so within at most .7 seconds either the lock becomes available or the conflict triggers an On unit or cancels the request.     &lt;br /&gt;
                                                         &lt;br /&gt;
The ENQTIME parameter may also be reset with $ResetN. &lt;br /&gt;
&lt;br /&gt;
This new parameter was enabled within V7.7 with the application of zap 77z299.&lt;br /&gt;
&lt;br /&gt;
===EVALOPT===&lt;br /&gt;
The new &amp;lt;var&amp;gt;EVALOPT&amp;lt;/var&amp;gt; parameter controls the cancellation of a request on truncation of string data. The default value is 0, and currently there is just one setting, 1, which means &amp;quot;cancel a request if truncation of string data occurs.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
For example, with the default of 0 in place, the following code &amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;    %x is string len 1   &lt;br /&gt;
    %y is string len 2   &lt;br /&gt;
    %y = &#039;ab&#039;            &lt;br /&gt;
    %x = %y              &lt;br /&gt;
    printtext {~} = {%x} &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
would cause silent truncation, and give the result&lt;br /&gt;
    &amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;%x = a &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If &amp;lt;var&amp;gt;EVALOPT&amp;lt;/var&amp;gt; is set to 1, then the above code produces the following message:&lt;br /&gt;
    &amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;M204.0552: Variable too small for result &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and the request is cancelled.&lt;br /&gt;
&lt;br /&gt;
===LFSCB===&lt;br /&gt;
LFSCB, the length of the full screen buffer, now has a new minimum value of 8 ( the previous minimum was 0 ). This change has been enabled within v7.7 with the application of zap 77z042, and within V7.6 with the application of zap 76z393.&lt;br /&gt;
&lt;br /&gt;
===MAXPRE, MAXBOUT, MAXSUBT===&lt;br /&gt;
&amp;lt;p&amp;gt;Introduced in zap 77Z257.&amp;lt;/p&amp;gt;&lt;br /&gt;
The new &amp;lt;var&amp;gt;MAXPRE&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;MAXBOUT&amp;lt;/var&amp;gt;, and &amp;lt;var&amp;gt;MAXSUBT&amp;lt;/var&amp;gt; parameters can be used to cancel a runaway transaction and prevent it from filling the checkpoint data set. &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;MAXPRE&amp;lt;/var&amp;gt;:  Maximum number of pre-images per transaction.  &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;MAXBOUT&amp;lt;/var&amp;gt;: Maximum number of backout pages per transaction. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;MAXSUBT&amp;lt;/var&amp;gt;: Maximum number of subtransaction checkpoints that a transaction can span.&amp;lt;/li&amp;gt;&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;Each new parameter defaults to unlimited. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;If a parameter value is set, a transaction is cancelled if that value is exceeded, and the following message is displayed:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;code&amp;gt;M204.0524: Maximum number (&amp;lt;i&amp;gt;num&amp;lt;/i&amp;gt;) of &amp;lt;i&amp;gt;parameter&amp;lt;/i&amp;gt; exceeded.&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
where &amp;lt;i&amp;gt;num&amp;lt;/i&amp;gt; is the value set for &amp;lt;i&amp;gt;parameter&amp;lt;/i&amp;gt; (&amp;lt;var&amp;gt;MAXPRE&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;MAXBOUT&amp;lt;/var&amp;gt;, or &amp;lt;var&amp;gt;MAXSUBT&amp;lt;/var&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
===NLDAPBUF===&lt;br /&gt;
This new parameter allows the number of LDAP buffers allocated during startup to be set in CCAIN. The default value is 2, and the settable value can range from 0 to 65535.&lt;br /&gt;
&lt;br /&gt;
===PUPDTH (new minimum value)===&lt;br /&gt;
If a user sets the &amp;lt;var&amp;gt;[[PUPDTH parameter|PUPDTH]]&amp;lt;/var&amp;gt; parameter to 0, it will now automatically be increased to 1, its minimum value.&lt;br /&gt;
&lt;br /&gt;
===SERV4G===&lt;br /&gt;
This parameter allows testing of server tables that span a 4-gigabyte boundary. For example, if SERV4G is X&#039;FFFFF000&#039;, each ATB server will begin at XX_FFFFF000. If SERV4G is X&#039;FFFF0000&#039;, each ATB server will begin at XX_FFFF0000. XX is determined by the storage available on the system. The parameter is set in CCAIN.&lt;br /&gt;
&lt;br /&gt;
The contents of the ATB server are specified by using the SERVGA parameter.&lt;br /&gt;
&lt;br /&gt;
For example. if you want VTBL to span the 4G boundary, you can use these settings: SERV4G=X&#039;FFFFF000&#039;, SERVGA=X&#039;00040000&#039;, and LVTBL=200 (6400 bytes, X&#039;1900&#039;). This will force each server&#039;s VTBL to begin at XX_FFFFF000 and end at XX+1_00000900.&lt;br /&gt;
&lt;br /&gt;
===WEBDFLT===&lt;br /&gt;
At V7.7, the default access rule for non-SSL ports was changed from ALLOW * to DISALLOW *, meaning that unless any ALLOW rules were in place resulting in a login/password prompt, the port couldn&#039;t be accessed. The new &amp;lt;var&amp;gt;[https://m204wiki.rocketsoftware.com/index.php/WEBDFLT_parameter WEBDFLT]&amp;lt;/var&amp;gt; parameter may be set to 1 for reversion to the old default of ALLOW *. Under V7.7, this new parameter was enabled with the application of zap 77z090. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;var&amp;gt;RESET WEBDFLT&amp;lt;/var&amp;gt; requires system administrator privileges. It is recommended to reset the 1 bit of &amp;lt;var&amp;gt;WEBDFLT&amp;lt;/var&amp;gt; to zero after issuing a series of &amp;lt;var&amp;gt;JANUS DEFINE&amp;lt;/var&amp;gt; commands which need WEBDFLT=1, as in the CCAIN input stream.&lt;br /&gt;
&lt;br /&gt;
==New and changed statistics==&lt;br /&gt;
===MPR, MBO, MCP, and RCV===&lt;br /&gt;
Introduced in zap 77Z257.&lt;br /&gt;
&amp;lt;p&amp;gt;These statistics provide high water mark transaction information. (Since-last values will not be available until V78 GA.)&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;They are useful in conjunction with the &amp;lt;var&amp;gt;MAXPRE&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;MAXBOUT&amp;lt;/var&amp;gt;, and &amp;lt;var&amp;gt;MAXSUBT&amp;lt;/var&amp;gt; parameters. &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
User/system statistics:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;MPR: High water mark of transaction pre-images. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;MBO: High water mark of transaction backout pages. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;MCP: High water mark of transaction chkpoint spans. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
System statistics: &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;RCV: Number of blocks needed for subtransaction recovery &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt; &lt;br /&gt;
&amp;lt;p class=&amp;quot;note&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Notes:&amp;lt;/b&amp;gt; M204.0843 now displays the RCV statistic for subtransaction checkpoints.&lt;br /&gt;
The size of recovery checkpoint must be greater than the sum of the last RCV value plus the number of records in [https://m204wiki.rocketsoftware.com/index.php/System_and_media_recovery#RESTART_recovery_considerations_for_sub-transaction_checkpoints RESTART and RESTARTS].&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
===DKWTS and DKWTMICS===&lt;br /&gt;
Introduced in zap 77z7289.&lt;br /&gt;
&amp;lt;p&amp;gt;The new system statistics DKWTS (DisK WaiTs) and DKWTMICS (DisK WaiT MICroSeconds) collect data to provide rough disk I/O service time numbers.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
DKWTS shows the number of disk I/O waits. DKWTMICS shows the total wait time for those waits in microseconds. Dividing the difference in DKWTMICS by the difference in DKWTS over an interval provides the average disk I/O wait time in microseconds.              &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;note&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Notes:&amp;lt;/b&amp;gt; &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The wait time does include internal Model 204 scheduler delays, so on a CPU bound Model 204 system, the service times calculated from DKWTS and DKWTMICS are likely to be an overestimate of actual service times.&amp;lt;/li&amp;gt;  &lt;br /&gt;
                                                                    &lt;br /&gt;
&amp;lt;li&amp;gt;DKWTS and DKWTMICS are not available in SirMon; use [https://m204wiki.rocketsoftware.com/index.php/MONITOR_command MONITOR] SYSTEM STATISTICS to view these statistics.&amp;lt;/li&amp;gt;&amp;lt;/ul&amp;gt;  &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Compatibility issues==&lt;br /&gt;
===&amp;lt;b id=&amp;quot;listNewInit&amp;quot;&amp;gt;&amp;lt;/b&amp;gt;$ListNew cannot be used in Initial clause===&lt;br /&gt;
It is now a compilation error if &amp;lt;var&amp;gt;$ListNew&amp;lt;/var&amp;gt; is attempted to be used in the &amp;lt;var&amp;gt;Initial&amp;lt;/var&amp;gt; clause of a &lt;br /&gt;
[https://m204wiki.rocketsoftware.com/index.php/Using_variables_and_values_in_computation#Declare_statements_for_.25variables declaration statement].&lt;br /&gt;
&amp;lt;p&amp;gt;This change is propagated by zap maintenance to versions 7.5 (zap 75Z487), 7.6 (zap 76Z514), and 7.7 (zap 77Z281) of Model 204.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote class=&amp;quot;note&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Note:&amp;lt;/b&amp;gt; Strictly speaking, this would not be considered a compilation error, because previously although &amp;lt;code&amp;gt;..&amp;amp;nbsp;Initial($ListNew)&amp;lt;/code&amp;gt; did not produce a compilation error, in almost all circumstances it would produce a snap if the initialized %variable were used with some other &amp;lt;var&amp;gt;$List&amp;lt;i&amp;gt;xxx&amp;lt;/i&amp;gt;&amp;lt;/var&amp;gt; invocation.&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Restricting the use of the CUSTOM=38 setting===&lt;br /&gt;
The [[CUSTOM parameter|CUSTOM=38]] parameter setting, introduced at V7.5, inadvertently provided System Manager privileges to all users via the RESET command. This CUSTOM setting is now restricted to the RESETting of the LAUDIT parameter.&lt;br /&gt;
&lt;br /&gt;
===Disabling of Closure support===&lt;br /&gt;
Due to a number of bugs related to Closure support, introduced at V7.7, this feature, which can best be described as exposed methods assigned to method variables, has been disabled in this release. This change was also made to V7.7 with application of zap 77z119.&lt;br /&gt;
&lt;br /&gt;
===Password delimiter enforced===&lt;br /&gt;
When using IFSTRTN to logon to a Model 204 online from an IFAM2 application, both the logonid and password must be followed by a semicolon - the delimiter.             &lt;br /&gt;
For example:      &lt;br /&gt;
                                      &lt;br /&gt;
CALL IFSTRTN(RC,&#039;logonid;password;&#039;...)&lt;br /&gt;
                 &lt;br /&gt;
If a semicolon does not follow the password string, the following message will now be issued&lt;br /&gt;
&lt;br /&gt;
M204.2964: Password missing or too long                  &lt;br /&gt;
                                                         &lt;br /&gt;
Previously, a semicolon following the password was not required and the first blank served as a password delimiter.  However, as of V7.7, embedded blanks are valid password characters and a semicolon is now required to delimit the password.&lt;br /&gt;
&lt;br /&gt;
This change has also been enabled within V7.7 with the application of zap 77z231.&lt;br /&gt;
&lt;br /&gt;
===PAGESZ parameter validated===&lt;br /&gt;
Previously it was possible to set the PAGESZ parameter to any value, although Model 204 internally supports one page size of 6184, and any deviation from this value would have led to problems during file creation. The value of this parameter is now controlled, such that setting it to any value other than 6184 will generate an M204.1149 message with the parameter being reset to 6184.&lt;br /&gt;
&lt;br /&gt;
===ECPRIV and the IDCAMS facility===&lt;br /&gt;
At V7.7 a security loophole was closed, whereby all ECF modules were run under external-authorizer profile of the calling user. Previously any ECF tasks were run under the owning job&#039;s external-authorizer profile, and in order for certain sites to retain that ability, a new setting of ECPRIV, value 4, was introduced to retain the ability to run ECF tasks using the job&#039;s security profile. &lt;br /&gt;
&lt;br /&gt;
The ECPRIV 4 setting potentially introduced a security loophole when calling the IDCAMS interface, based upon what the IDCAMS utility is able to do at a system level. Consequently as of this release, the ECPRIV 4 setting will be ignored when calling the IDCAMS facility via ECF, and such IDCAMS processes will always use the calling user&#039;s security profile. Any existing jobs that use ECF to call the IDCAMS utility with the ECFPRIV 4 bit set should be checked to ensure that the calling user&#039;s security profile still satisfies the job&#039;s requirements.&lt;br /&gt;
&lt;br /&gt;
===TCPOPTS is view only===&lt;br /&gt;
In previous releases the TCPOPTS parameter, which identifies the type of IP addressing in use ( v4 or v6 ), was resetable, although it was always documented as a view-only parameter. The parameter is now handled as a view-only parameter, and any attempts to reset the parameter will result in&lt;br /&gt;
&lt;br /&gt;
   M204.1123: Parameter TCPOPTS not reset&lt;br /&gt;
&lt;br /&gt;
===ZHPF command can only be issued by a system manager===&lt;br /&gt;
In previous releases it was possible to issue the ZHPF command without being logged on. From this release onwards, a user would have to be logged on with system manager privileges to be able to issue this command.&lt;br /&gt;
&lt;br /&gt;
Additionally, the command output will now only  display results for currently open files.&lt;br /&gt;
&lt;br /&gt;
This changes has been enabled within v7.7 with the application of zap 77z264.&lt;br /&gt;
&lt;br /&gt;
===Terminal MODEL reset failure===&lt;br /&gt;
If a reset of the terminal MODEL parameter fails due to an under sized output page buffer, then in addition to the existing messages that inform the user of this failure&lt;br /&gt;
&lt;br /&gt;
    M204.1875 UNABLE TO RESET MODEL TO %C &lt;br /&gt;
    M204.1123: Parameter MODEL not reset  &lt;br /&gt;
&lt;br /&gt;
the following message will now be issued&lt;br /&gt;
&lt;br /&gt;
    M204.1008: LOUTPB must be increased to at least &amp;lt;number&amp;gt; &lt;br /&gt;
                                                         &lt;br /&gt;
where &amp;lt;number&amp;gt; is the minimum value of LOUTPB necessary to support the terminal model.&lt;br /&gt;
&lt;br /&gt;
This change is enabled in V7.7 with the application of zap 77z309.&lt;br /&gt;
&lt;br /&gt;
==New and changed messages==&lt;br /&gt;
&lt;br /&gt;
See [[New and updated messages in Model 204 version 7.8|New and updated messages in Model 204 version 7.8]] for details.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category: Release notes]]&lt;/div&gt;</summary>
		<author><name>ELowell</name></author>
	</entry>
	<entry>
		<id>https://m204wiki.rocketsoftware.com/index.php?title=Release_notes_for_Model_204_version_7.8&amp;diff=117662</id>
		<title>Release notes for Model 204 version 7.8</title>
		<link rel="alternate" type="text/html" href="https://m204wiki.rocketsoftware.com/index.php?title=Release_notes_for_Model_204_version_7.8&amp;diff=117662"/>
		<updated>2019-08-28T22:12:14Z</updated>

		<summary type="html">&lt;p&gt;ELowell: /* appendJournalData */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
These release notes list the enhancements and other changes contained in Model 204 version 7.8. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;&amp;lt;b&amp;gt;******THIS IS A DRAFT DOCUMENT.******&amp;lt;/b&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
These release notes list the enhancements and other changes contained in Model 204 version 7.8, &amp;lt;b&amp;gt;&amp;lt;i&amp;gt;which is still in development&amp;lt;/i&amp;gt;&amp;lt;/b&amp;gt;. Until the commercial release of the software, Rocket reserves the right to add to, remove, or change anything described herein. &lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
These release notes contain installation and features information for the Rocket Model 204 version 7.8 release.&lt;br /&gt;
Before beginning your installation, please read through this information about product installation and changes.&lt;br /&gt;
&lt;br /&gt;
==SOUL enhancements==&lt;br /&gt;
===AmIndependent method===&lt;br /&gt;
The &amp;lt;var&amp;gt;AmIndependent&amp;lt;/var&amp;gt; method returns TRUE for daemons spawned by &amp;lt;var&amp;gt;[http://m204wiki.rocketsoftware.com/index.php/RunIndependently_(Daemon_subroutine) RunIndependently]&amp;lt;/var&amp;gt;. (The action of &amp;lt;var&amp;gt;[https://m204wiki.rocketsoftware.com/index.php/AmDaemon_(Daemon_property) AmDaemon]&amp;lt;/var&amp;gt; remains unchanged.)&lt;br /&gt;
&lt;br /&gt;
The following table shows the values returned by &amp;lt;var&amp;gt;AmIndependent&amp;lt;/var&amp;gt; versus &amp;lt;var&amp;gt;AmDaemon&amp;lt;/var&amp;gt; for different daemon types:&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Type&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;AmDaemon&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;AmIndependent&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;$COMBG&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;False&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;False&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Independent daemon&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;False&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;True&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Other daemon&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;True&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;False&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Web, etc.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;False&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;False&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===$ProcOpn===&lt;br /&gt;
&amp;lt;var&amp;gt;[https://m204wiki.rocketsoftware.com/index.php/$ProcOpn $ProcOpn]&amp;lt;/var&amp;gt; now supports the opening of a procedure with an all numeric name, and including a leading zero, e.g.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;%result = $procOpn(&#039;0123&#039;, &#039;MYFILE&#039;)&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Support for such procedures names was initially introduced at v7.7, and this feature of &amp;lt;var&amp;gt;$ProcOpn&amp;lt;/var&amp;gt; is also enabled within v7.7 with the application of zap 77z054.&lt;br /&gt;
&lt;br /&gt;
===Allow parentheses to surround a boolean enumeration object===&lt;br /&gt;
The following sample code&lt;br /&gt;
&lt;br /&gt;
   begin                                       &lt;br /&gt;
   variables are undefined                  &lt;br /&gt;
   %isValid is boolean initial (True)       &lt;br /&gt;
   if (%isValid) then                  &lt;br /&gt;
      print &#039;in IF&#039;                            &lt;br /&gt;
   end if                                   &lt;br /&gt;
   end         &lt;br /&gt;
&lt;br /&gt;
will now compile and run successfully, as &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;if (%isValid) then &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
is logically equivalent to&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;if %isValid then &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Prior to V7.8 the presence of parentheses surrounding the boolean enumeration object would have caused a compilation error. This change is enabled in V7.7 with the application of zap 77z370.&lt;br /&gt;
&lt;br /&gt;
===Support for copying Object class objects===&lt;br /&gt;
The Object class now supports the copy and deepCopy methods. For example, and Object object can be copied as follows&lt;br /&gt;
&lt;br /&gt;
   begin               &lt;br /&gt;
   %x is object object &lt;br /&gt;
   %y is object object &lt;br /&gt;
   %y = new            &lt;br /&gt;
   %x = %y:copy        &lt;br /&gt;
   end&lt;br /&gt;
&lt;br /&gt;
This change is enabled in v7.7 with the application of zap 77z076, and within V7.6 with the application of zap 76z412.&lt;br /&gt;
&lt;br /&gt;
===Assignment of enumeration values to method variables===&lt;br /&gt;
Enumerations values can now be assigned to method variables whose result is an enumeration.So for example the following code&lt;br /&gt;
&lt;br /&gt;
   begin                                               &lt;br /&gt;
   enumeration colour                                  &lt;br /&gt;
      public                                           &lt;br /&gt;
         value red                                     &lt;br /&gt;
         value white                                   &lt;br /&gt;
         value blue                                    &lt;br /&gt;
      end public                                       &lt;br /&gt;
   end enumeration                                     &lt;br /&gt;
   %func    is function getColour is enumeration colour&lt;br /&gt;
   local function getColour is enumeration colour      &lt;br /&gt;
      return blue                                      &lt;br /&gt;
   end function                                        &lt;br /&gt;
   %func    = getColour                                &lt;br /&gt;
   %func    = (colour):red                             &lt;br /&gt;
   printText {~=%(Local):(%func)}                      &lt;br /&gt;
   end  &lt;br /&gt;
&lt;br /&gt;
will produce the result&lt;br /&gt;
&lt;br /&gt;
   %(Local):(%func)=red&lt;br /&gt;
&lt;br /&gt;
whereas previously the line   &lt;br /&gt;
&lt;br /&gt;
   %func    = (colour):red    &lt;br /&gt;
&lt;br /&gt;
would have been rejected with the message&lt;br /&gt;
&lt;br /&gt;
   MSIR.0993: Assignment invalid: mismatch between method and method variable&lt;br /&gt;
&lt;br /&gt;
This change is enabled in V7.7 with the application of zap 77z128.&lt;br /&gt;
&lt;br /&gt;
==External Call Facility enhancements==&lt;br /&gt;
===Managing ECF tables more efficiently===&lt;br /&gt;
The are two new features to help manage ECF tables more efficiently, avoid conditions where the table can fill, and prevent the definition of further entities.&lt;br /&gt;
&lt;br /&gt;
The first feature is the new  &amp;lt;var&amp;gt;DISPLAY ECF&amp;lt;/var&amp;gt; command, which displays the contents of ECF tables and also the current status of users accessing ECF modules. See more details of the &amp;lt;var&amp;gt;[[#DISPLAY ECF|DISPLAY ECF]]&amp;lt;/var&amp;gt; command below.&lt;br /&gt;
&lt;br /&gt;
The second feature is a new &amp;lt;var&amp;gt;EXTERNAL REMOVE&amp;lt;/var&amp;gt; statement with the syntax&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;EXTERNAL REMOVE &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;modulename&amp;lt;/span&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This causes the entry for the named module to be removed from the module table. The table entry is then placed on a free chain of entries and can be reused by issuing the EXTERNAL MODULE statement. This allows the module table to be managed with redundant entries removed, without having to recycle the ONLINE.&lt;br /&gt;
&lt;br /&gt;
A EXTERNAL REMOVE statement will return $status/$statusd values of 0/0, and most other status values that can be returned by the EXTERNAL REMOVE statement are already documented in the ECF return codes table. If an EXTERNAL REMOVE is attempted against a module that is currently being called ( in use ), then $status/$statusd will return the values 20/1 ( module unavailable).&lt;br /&gt;
&lt;br /&gt;
==System enhancements==&lt;br /&gt;
&lt;br /&gt;
===New wait types for daemon/master waits===&lt;br /&gt;
&lt;br /&gt;
Two new wait types, viewable on the &amp;lt;var&amp;gt;[https://m204wiki.rocketsoftware.com/index.php/MONITOR_command MONITOR] USERS&amp;lt;/var&amp;gt; command output, have been implemented as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;57&amp;lt;/code&amp;gt; - Means a daemon thread waiting for its master thread  &amp;lt;br /&amp;gt;     &lt;br /&gt;
&amp;lt;code&amp;gt;58&amp;lt;/code&amp;gt; - Means a master thread waiting for one of its daemon threads&lt;br /&gt;
&lt;br /&gt;
This change is enabled in V7.7 with the application of zap 77z410.&lt;br /&gt;
&lt;br /&gt;
===Snap formatting changes===&lt;br /&gt;
Date/time stamps in the page headers of snaps will now be shown normal format, rather than in julian format as in previous releases. Thus in the following example a particular snap header under v7.7 or previous releases would show as &lt;br /&gt;
&lt;br /&gt;
   SNAPID    1   19226.060155  M204.0022: Bug .. nnnnn               PAGE     1&lt;br /&gt;
&lt;br /&gt;
whereas the same snap header under v7.8 would show as &lt;br /&gt;
&lt;br /&gt;
   SNAPID    1  2019/08/14 06:01:06   M204.0022: Bug .. nnnnn        PAGE     1&lt;br /&gt;
&lt;br /&gt;
Also, due to improvements in handling trailing blanks in snap output, a snap generated under v7.8 should be marginally smaller than the same snap generated under previous releases, assuming the same SNAPCTL settings.&lt;br /&gt;
&lt;br /&gt;
===Call stack trace for problem diagnosis===&lt;br /&gt;
A  call stack trace is now provided to help diagnose and resolve common errors. To enable the stack trace, do either of the following: &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Set the &amp;lt;var&amp;gt;[[SIRFACT parameter|SIRFACT]] X&#039;01&#039;&amp;lt;/var&amp;gt; bit.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Set the &amp;lt;var&amp;gt;[[DEBUGUL parameter|DEBUGL]]&amp;lt;/var&amp;gt; parameter. Note that the &amp;lt;var&amp;gt;DEBUGUL&amp;lt;/var&amp;gt; approach will introduce extra QTBL overhead. &amp;lt;p&amp;gt;(&amp;lt;var&amp;gt;DEBUGUL&amp;lt;/var&amp;gt; provides a similar facility with an include trace of procedures leading to the error, but this might not be potentially as useful as the call trace.)&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt; &lt;br /&gt;
&lt;br /&gt;
The call stack trace can assist in diagnosing run-time errors that might occur, as illustrated by the following &amp;quot;Variable too small for result&amp;quot; and &amp;quot;MBSCAN exceeded&amp;quot; examples.&lt;br /&gt;
&lt;br /&gt;
====Variable too small for result====&lt;br /&gt;
When the stack trace is enabled, a &amp;quot;variable too small&amp;quot; error results in the following message:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;M204.2966: Error at line n, procedure &#039;&#039;procname&#039;&#039; in file &#039;&#039;procfile&#039;&#039;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
which identifies the line within a procedure where the error is occurring, in addition to the usual message:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;M204.0552: Variable too small for result&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Any subsequent M204.2966 messages indicate the point in the code from where the code in error was called. For example, a stack of three subroutine calls leading to a &amp;quot;variable too small&amp;quot; error might result in the following messaging:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;   M204.0552: Variable too small for result                             &lt;br /&gt;
   M204.2966: Error at line 9, procedure MYPROC.LEVEL4 in file MYPROC   &lt;br /&gt;
   M204.2966: Called from line 5, procedure MYPROC.LEVEL3 in file MYPROC&lt;br /&gt;
   M204.2966: Called from line 5, procedure MYPROC.LEVEL2 in file MYPROC&lt;br /&gt;
   M204.2966: Called from line 5, procedure MYPROC.LEVEL1 in file MYPROC &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This information should help in diagnosing the problem. &lt;br /&gt;
&lt;br /&gt;
If the error occurs within a command level program rather than a procedure, then the M204.2966 message is replaced by an M204.2967 message, and a similar error condition to the above with a preceding call stack might be audited as follows:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;   M204.0552: Variable too small for result              &lt;br /&gt;
   M204.2967: Error at line 14 of command level program  &lt;br /&gt;
   M204.2967: Called from line 5 of command level program&lt;br /&gt;
   M204.2967: Called from line 3 of command level program &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If neither &amp;lt;var&amp;gt;SIRFACT X&#039;01&#039;&amp;lt;/var&amp;gt; nor &amp;lt;var&amp;gt;DEBUGUL&amp;lt;/var&amp;gt; is set, then the &amp;quot;variable too small&amp;quot; error produces the following messages:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;   M204.0552: Variable too small for result &lt;br /&gt;
   M204.2968: Error: no debug info &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====MBSCAN exceeded====&lt;br /&gt;
Similarly to the handling of the &amp;quot;variable too small for result&amp;quot; error, the call stack can also be used to diagnose errors where MBSCAN is exceeded as a result of a direct search of Table B records. Again, under V7.8, if either the &amp;lt;var&amp;gt;SIRFACT X&#039;01&#039;&amp;lt;/var&amp;gt; bit is set, or &amp;lt;var&amp;gt;DEBUGUL&amp;lt;/var&amp;gt; is set, then if a long request occurs as a result of exceeding MBSCAN, then initially the following message is produced:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;   M204.0569: File &#039;&#039;filename&#039;&#039;, Find: Table B records to be searched = &#039;&#039;nnnn&#039;&#039;&amp;lt;/p&amp;gt;&lt;br /&gt;
as before, with a DYRWT prompt message. If the user replies &#039;N&#039; to the prompt, or if the request is run in an environment (for example a batch job) where the default response is &#039;N&#039;, the following message is produced after the M204.0569 message:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;Cancelling request: M204.2969: MBSCAN (&#039;&#039;mm&#039;&#039;) exceeded, records to be searched = &#039;&#039;nnnn&#039;&#039;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
where &#039;&#039;mm&#039;&#039; is the current setting of MBSCAN. The M204.2969 will be followed by M204.2966 messages display the call stack trace. Thus, if the following code &lt;br /&gt;
&lt;br /&gt;
   b                           &lt;br /&gt;
   call sub1                   &lt;br /&gt;
   sub1: subroutine            &lt;br /&gt;
   fd1:                        &lt;br /&gt;
      in clients fd city = ONTARIO&lt;br /&gt;
              end find         &lt;br /&gt;
      fr fd1                      &lt;br /&gt;
         pai                      &lt;br /&gt;
         print                    &lt;br /&gt;
      end for                     &lt;br /&gt;
   end subroutine              &lt;br /&gt;
   end  &lt;br /&gt;
&lt;br /&gt;
is run from proc MYPROC.MBSCAN aganst the demo database with an MBSCAN setting of 10, then the following messages will be produced, assuming any prompts are responded to with an &#039;N&#039;&lt;br /&gt;
&lt;br /&gt;
   M204.0569: File CLIENTS, Find: Table B records to be searched = 3415&lt;br /&gt;
   Cancelling request: M204.2969: MBSCAN (10) exceeded, records to be searched = 3415                       &lt;br /&gt;
   M204.2966: Error at line 6, procedure MYPROC.MBSCAN in file MYPROC&lt;br /&gt;
   M204.2966: Called from line 3, procedure MYPROC.MBSCAN in file MYPROC&lt;br /&gt;
&lt;br /&gt;
===appendJournalData===&lt;br /&gt;
The &amp;lt;var&amp;gt;[[AppendJournalData_(Stringlist_function)|AppendJournalData]]&amp;lt;/var&amp;gt; function is now more tolerant of an outstanding BUMP request. Previously, if &amp;lt;var&amp;gt;AppendJournalData&amp;lt;/var&amp;gt; was called to inadvertently retrieve a large amount of journal data, typically when called implicitly from within SirScan, then any outstanding BUMP request wouldn&#039;t be honored until all of the data had been retrieved, at which point the BUMP request would be completed, and all data would be lost.&lt;br /&gt;
&lt;br /&gt;
Now, the &amp;lt;var&amp;gt;AppendJournalData&amp;lt;/var&amp;gt; process checks for outstanding BUMP requests before each track I/O is executed, thus avoiding excessive I/Os against the journal and long waits for the BUMP of such a process to complete.&lt;br /&gt;
&lt;br /&gt;
==Recovery enhancements==&lt;br /&gt;
===Media Recovery in a multi-user environment===&lt;br /&gt;
It is now possible to perform media recovery by issuing the &amp;lt;var&amp;gt;REGENERATE&amp;lt;/var&amp;gt; command to roll forward selected files in a multi-user environment, with the media recovery being carried out by different users with system manager privileges. The new USING option allows for the specification of a ddname for the input journal stream to be used by the &amp;lt;var&amp;gt;REGENERATE&amp;lt;/var&amp;gt; command. Previously media recovery was restricted to single user batch jobs, using the CCAGEN ddname for the input journal. For more details, see the &amp;lt;var&amp;gt;[[#REGENERATE|REGENERATE]]&amp;lt;/var&amp;gt; command below.&lt;br /&gt;
&lt;br /&gt;
==Security enhancements==&lt;br /&gt;
===CA-Top Secret can disallow CCASTAT logins===&lt;br /&gt;
The [https://m204wiki.rocketsoftware.com/index.php/CA-Top_Secret_interface CA-Top Secret] interface now recognizes the &amp;lt;code&amp;gt;DEFACID=&amp;lt;/code&amp;gt;, setting and does not allow CCASTAT logins in the online if &amp;lt;code&amp;gt;DEFACID&amp;lt;/code&amp;gt; is set to null. (There is no attempt to log on M204USR.) Therefore, to disallow CCASTAT logons, set DEFACID=, in [https://m204wiki.rocketsoftware.com/index.php/CA-Top_Secret_interface#Preparing_a_TOPSPARM_parameter_module_with_TOPSGEN TOPSPARM]. CCASTAT will be opened because it contains file and group passwords, but it will not be used for logons if CCASTAT logons are not allowed.&lt;br /&gt;
&lt;br /&gt;
===CUSTOM=11 and mixed cased input===&lt;br /&gt;
The &amp;lt;var&amp;gt;[https://m204wiki.rocketsoftware.com/index.php/CUSTOM_parameter CUSTOM]&amp;lt;/var&amp;gt; parameter CUSTOM=11 setting no longer requires that a *LOWER command be issued prior to a LOGCTL command (to add or change a  password) to preserve mixed case input. Prior to this release, with CUSTOM=11 in place, *LOWER had to be issued before a LOGCTL command, otherwise any mixed case password strings would automatically be translated into uppercase. This change is enabled within V7.7 with the application of zap 77z108.&lt;br /&gt;
&lt;br /&gt;
===DEFUSER can specify a jobname not authorized to access M204===&lt;br /&gt;
When specifying DEFUSER=JOBNAME and VALIDAT=LOGON in the RACFGEN parms for an ONLINE, if the specified jobname ( the owning id for the ONLINE job ) isn&#039;t authorized to use Model 204 via RACF, any LOGIN commands specifying no userid will now succeed ( previously such a LOGON would have failed ). This enables users to submit jobs with USE $JOB, whereby the string USER=jobname  will be added to the submitted JCL, and this in turn is useful if the specified jobname has dataset access privileges to datasets required by the submitted jobs, even if the jobname itself isn&#039;t authorized to use M204.&lt;br /&gt;
&lt;br /&gt;
==Janus product enhancements==&lt;br /&gt;
&lt;br /&gt;
===Janus Web Server access rule===&lt;br /&gt;
The automatic &amp;lt;var&amp;gt;[[JANUS WEB ALLOW]]&amp;lt;/var&amp;gt; rule, which allowed any user to access the port without requiring a login, is changed &amp;lt;i&amp;gt;for non-SSL ports&amp;lt;/i&amp;gt; to the following:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;JANUS WEB &amp;lt;i&amp;gt;portname&amp;lt;/i&amp;gt; DISALLOW *&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
This rule requires a system administrator to explicitly define &amp;lt;var&amp;gt;ALLOW&amp;lt;/var&amp;gt; rules to enable users to access non-SSL ports.&lt;br /&gt;
The rule applies unless overridden by user-added rules. &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;blockquote class=&amp;quot;note&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;b&amp;gt;Note:&amp;lt;/b&amp;gt; To revert from this change in the JANUS DEFINE default and make the default &lt;br /&gt;
 non-SSL &amp;lt;var&amp;gt;ALLOW&amp;lt;/var&amp;gt; rule as it was in version 7.5 and earlier (&amp;lt;code&amp;gt;ALLOW *&amp;lt;/code&amp;gt;), turn on the 1 bit of the &amp;lt;var&amp;gt;[[WEBDFLT parameter|WEBDFLT]]&amp;lt;/var&amp;gt; parameter: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;RESET WEBDFLT=1&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Increase in pending accepts for Janus BPX ports===&lt;br /&gt;
The default number of pending accepts for Janus BPX server ports has been increased from 3 to 12, thus reducing the likelihood that a pending accept may fail with the message&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;MSIR.0019 Connection request rejected for port (port), MAXCON exceeded&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The actual number of pending accepts to be supported on the port can be set with the new parameter MAXPEND, set on the &amp;lt;var&amp;gt;[[JANUS_DEFINE|JANUS DEFINE]]&amp;lt;/var&amp;gt; command, where MAXPEND can vary from 3 up to a maximum value of 32. The change to the default value was enabled within V7.7 with the application of zap 77z269.&lt;br /&gt;
&lt;br /&gt;
===TCP listen backlog increased===&lt;br /&gt;
&lt;br /&gt;
The [https://m204wiki.rocketsoftware.com/index.php/Program_Communication_facilities#LISTEN_call TCP_listen] backlog has been increased from 16 to 1024 under z/OS.&lt;br /&gt;
&lt;br /&gt;
This update tells the TCP stack to queue up to 1024 of such requests up before dropping them, thus reducing, or in most cases eliminating, the likelihood of a connection request drop, other than in exceptional circumstances, such as a denial of service attack. This change was enabled within V7.7 with the application of zap 77z340.&lt;br /&gt;
&lt;br /&gt;
===Defer the freeing of XMLSCREEN input XML===&lt;br /&gt;
&lt;br /&gt;
The freeing of [https://m204wiki.rocketsoftware.com/index.php/XMLSCREEN_and_NOXMLSCREEN_(JANUS_DEFINE_parameters) XMLSCREEN] input XML is now deferred until the next Read Screen or session termination. This means that if an application error is detected, the input XML can be retrieved with [https://m204wiki.rocketsoftware.com/index.php/$Web_Input_Content $Web_Input_Content] and then logged for problem analysis. &lt;br /&gt;
&lt;br /&gt;
Prior to this release the XML received from the client is freed immediately after being used to set the input data for a Read Screen, rendering it unavailable for problem determination.&lt;br /&gt;
&lt;br /&gt;
This change is enabled in V7.7 with the application of zap 77z368.&lt;br /&gt;
&lt;br /&gt;
===XMLSCREEN and Janus Web Legacy blank stripping===&lt;br /&gt;
&lt;br /&gt;
xmlScreens and Janus Web Legacy screens now adhere to the same standard as standard screen processing in terms of stripping leading blanks from input fields defined as [https://m204wiki.rocketsoftware.com/index.php/Full-screen_feature#DEBLANK_or_NODEBLANK_option DEBLANK] (either explicitly or implicitly).&lt;br /&gt;
&lt;br /&gt;
This change is enabled in V7.7 with the application of zap 77z400.&lt;br /&gt;
&lt;br /&gt;
===SSL input buffer size===&lt;br /&gt;
&lt;br /&gt;
The default value of [https://m204wiki.rocketsoftware.com/index.php/SSLIBSIZE_(JANUS_DEFINE_parameter) SSLIBSIZE] has been increased to 16384 + 128, or 16512. This size should ensure correct communication with all TLS spec compliant applications. It is the maximum size allowed unless you use [https://m204wiki.rocketsoftware.com/index.php/CUSTOM_parameter#Using_CUSTOM.3D.2818.29 CUSTOM=18].    &lt;br /&gt;
&lt;br /&gt;
This changed is enabled within V7.7 with the application of zap 77z415.&lt;br /&gt;
&lt;br /&gt;
===Increasing LDAP buffers===&lt;br /&gt;
&lt;br /&gt;
The number of LDAP buffers allocated at startup can now be changed by setting the NLDAPBUF parameter in CCAIN. See below for details on [[#NLDAPBUF|NLDAPBUF]].&lt;br /&gt;
&lt;br /&gt;
==Debugger enhancements==&lt;br /&gt;
&lt;br /&gt;
===Access to exposed variables===&lt;br /&gt;
The debuggers can now view or watch the values of variables exposed to local routines/methods. Previously, any attempts to access an exposed variable would have displayed &amp;quot;%varname has no value&amp;quot; in the debugger session. (This feature is enabled within V7.7 with the application of zap 77z363.)&lt;br /&gt;
&lt;br /&gt;
==Performance enhancements==&lt;br /&gt;
&lt;br /&gt;
===X3270OUT exit offloadable===&lt;br /&gt;
When running MP/204 (AMPSUBS&amp;gt;0) and using the [https://m204wiki.rocketsoftware.com/index.php/Coding_SNA_Communications_Server_conversion_exit_routines#X3270OUT_.28convert_output_from_3270_format.29 X3270OUT] exit to convert a 3270 output data stream to the appropriate device protocol, the exit can now run in parallel mode to improve performance. This change was enabled in V7.7 with the application of zap 77Z313.&lt;br /&gt;
&lt;br /&gt;
The X3270OUT exit must be written to be re-entrant.&lt;br /&gt;
&lt;br /&gt;
==New and changed commands==&lt;br /&gt;
===DISPLAY ECF===&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;DISPLAY ECF {{ M | N | U } like ?} &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This new command displays details from ECF tables, or the current status of users accessing ECF modules.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;syntax&amp;quot;&amp;gt;D ECF M&amp;lt;/span&amp;gt; displays the contents of the module table. For example:&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;    D ECF M &lt;br /&gt;
    Module   Loadlib  Address:Length     Loaded@      Lastused@   #Calls  Flags &lt;br /&gt;
    QATUM13C PROGLIB 2FB91FB8:00000028 19023:121506 19023:121506 00000001 &lt;br /&gt;
    QATUM13B PROGLIB 2FE65000:00009C18 19023:121506 19023:121506 00000001 &lt;br /&gt;
    QATUM13A PROGLIB 2FE6EC18:00001CD8 19023:121506 19023:121506 00000001  &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
(flags may be D=deleted; S=shared; H=halted; I=Idle)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;syntax&amp;quot;&amp;gt;D ECF N&amp;lt;/span&amp;gt; displays contents of the name table. For example: &amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;    D ECF N&lt;br /&gt;
    Module   Logical-call-name &lt;br /&gt;
    QATUM13C MOD_QATUM13C &lt;br /&gt;
    QATUM13B MOD_QATUM13B &lt;br /&gt;
    QATUM13A MOD_QATUM13A &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;syntax&amp;quot;&amp;gt;D ECF U&amp;lt;/span&amp;gt; displays details of users currently accessing ECF modules. This is also the default option, and so &amp;lt;span class=&amp;quot;syntax&amp;quot;&amp;gt;D ECF&amp;lt;/span&amp;gt; will display the same output as &amp;lt;span class=&amp;quot;syntax&amp;quot;&amp;gt;D ECF U&amp;lt;/span&amp;gt;. For example:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;    D ECF U                           &lt;br /&gt;
    User# Userid     Module   Parmlen &lt;br /&gt;
    00002 ADMIN      --none--         &lt;br /&gt;
    00003 ADMIN      COBSAMP1 00000002&lt;br /&gt;
    00004 ADMIN      COBSAMP1 00000002 &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;syntax&amp;quot;&amp;gt;D ECF LIKE ? &amp;lt;/span&amp;gt; (where &amp;lt;code&amp;gt;?&amp;lt;/code&amp;gt; is a valid pattern) displays details for entities that match the specified pattern.&lt;br /&gt;
&lt;br /&gt;
===REGENERATE===&lt;br /&gt;
The &amp;lt;var&amp;gt;REGENERATE&amp;lt;/var&amp;gt; command can now be run in a multi-user environment by multiple users with system manager privileges. A new option USING is provided to specify the ddname of the input journal, so that the full syntax is now as follows:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;  REGENERATE [USING ddname] FILE filename [FROM dumpname | IGNORE]&lt;br /&gt;
  [TO {LAST UPDATE [BEFORE yy.ddd hh:mm:ss.th] | LAST CHECKPOINT [BEFORE yy.dd hh:mm:ss.th] &lt;br /&gt;
  | UPDATE number OF yy.ddd hh:mm:ss.th | CHECKPOINT yy.ddd hh:mm:ss.th} ]&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The default for the using ddname is CCAGEN, but any ddname may be used to allocate an input journal and used. For example:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;  ALLOCATE REGEN1 WITH SCOPE=SYSTEM DSN=PROD1.GDGJ OLD SEQUENTIAL GEN=+2&lt;br /&gt;
  REGENERATE USING REGEN1 FILE TEST&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It is the user&#039;s responsibility to ensure that the file being regenerated is not in use, and so prior to usage, &amp;lt;var&amp;gt;BUMP FILE&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;STOP FILE&amp;lt;/var&amp;gt; should be used to isolate usage against the file. If the file is in use, the REGEN will fail with these messages:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;  M204.1430: Failed to open file TEST&lt;br /&gt;
  M204.1436: Stopped processing file TEST  &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
$STATUS will now be set for &amp;lt;var&amp;gt;REGENERATE&amp;lt;/var&amp;gt; with the following values:&lt;br /&gt;
&amp;lt;blockquote&amp;gt;    &lt;br /&gt;
    0 - Success &amp;lt;br/&amp;gt;&lt;br /&gt;
    1 - No files were processed &amp;lt;br/&amp;gt;&lt;br /&gt;
    2 - At least one file stopped processing &amp;lt;br/&amp;gt;&lt;br /&gt;
    4 - A serious error occurred, REGEN failed &lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Similarly, &amp;lt;var&amp;gt;SETGRC&amp;lt;/var&amp;gt; may be used to get the return code and error message.&lt;br /&gt;
&lt;br /&gt;
==New and changed parameters==&lt;br /&gt;
&lt;br /&gt;
===ECMODS===&lt;br /&gt;
The new minimum value for ECMODS, the allowable number of ECF modules, is 1. Prior to V7.8 the minimum value was 0. This changed was enabled in V7.7 with the application of zap 77z306.&lt;br /&gt;
&lt;br /&gt;
===ECNAMES===&lt;br /&gt;
The new minimum value for ECNAMES, the allowable number of ECF module names, is 1. Prior to V7.8 the minimum value was 0. This changed was enabled in V7.7 with the application of zap 77z306.&lt;br /&gt;
&lt;br /&gt;
===ECPSIZE===&lt;br /&gt;
The new minimum value for ECPSIZE, the initial storage allocation for ECF parameters, is 1024. Prior to V7.8 the minimum value was 0. This changed was enabled in V7.7 with the application of zap 77z306.&lt;br /&gt;
&lt;br /&gt;
===ENQTIME===&lt;br /&gt;
Millisecond duration of automatic record locking retry wait.&lt;br /&gt;
&lt;br /&gt;
Prior to this change, if record locking conflicts occur frequently in a busy online, any user with a non-zero value for &amp;lt;var&amp;gt;[[ENQRETRY parameter|ENQRETRY]]&amp;lt;/var&amp;gt; will wait at least 3 seconds before the conflict is dealt with. This can degrade overall system performance.      &lt;br /&gt;
                                                         &lt;br /&gt;
The &amp;lt;var&amp;gt;[[ENQTIME parameter|ENQTIME]]&amp;lt;/var&amp;gt; parameter specifies the number of milliseconds waited for each record locking retry wait. ENQTIME can be between 1 and 60000, corresponding to a minimum of 1 millisecond and a maximum of 1 minute. The default value of ENQTIME is 3000 (3 seconds).            &lt;br /&gt;
                                                         &lt;br /&gt;
For example, with ENQTIME = 100 and ENQRETRY = 7, after a record locking conflict occurs the thread will retry 7 times with wait intervals of .1 seconds, and so within at most .7 seconds either the lock becomes available or the conflict triggers an On unit or cancels the request.     &lt;br /&gt;
                                                         &lt;br /&gt;
The ENQTIME parameter may also be reset with $ResetN. &lt;br /&gt;
&lt;br /&gt;
This new parameter was enabled within V7.7 with the application of zap 77z299.&lt;br /&gt;
&lt;br /&gt;
===EVALOPT===&lt;br /&gt;
The new &amp;lt;var&amp;gt;EVALOPT&amp;lt;/var&amp;gt; parameter controls the cancellation of a request on truncation of string data. The default value is 0, and currently there is just one setting, 1, which means &amp;quot;cancel a request if truncation of string data occurs.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
For example, with the default of 0 in place, the following code &amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;    %x is string len 1   &lt;br /&gt;
    %y is string len 2   &lt;br /&gt;
    %y = &#039;ab&#039;            &lt;br /&gt;
    %x = %y              &lt;br /&gt;
    printtext {~} = {%x} &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
would cause silent truncation, and give the result&lt;br /&gt;
    &amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;%x = a &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If &amp;lt;var&amp;gt;EVALOPT&amp;lt;/var&amp;gt; is set to 1, then the above code produces the following message:&lt;br /&gt;
    &amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;M204.0552: Variable too small for result &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and the request is cancelled.&lt;br /&gt;
&lt;br /&gt;
===LFSCB===&lt;br /&gt;
LFSCB, the length of the full screen buffer, now has a new minimum value of 8 ( the previous minimum was 0 ). This change has been enabled within v7.7 with the application of zap 77z042, and within V7.6 with the application of zap 76z393.&lt;br /&gt;
&lt;br /&gt;
===MAXPRE, MAXBOUT, MAXSUBT===&lt;br /&gt;
&amp;lt;p&amp;gt;Introduced in zap 77Z257.&amp;lt;/p&amp;gt;&lt;br /&gt;
The new &amp;lt;var&amp;gt;MAXPRE&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;MAXBOUT&amp;lt;/var&amp;gt;, and &amp;lt;var&amp;gt;MAXSUBT&amp;lt;/var&amp;gt; parameters can be used to cancel a runaway transaction and prevent it from filling the checkpoint data set. &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;MAXPRE&amp;lt;/var&amp;gt;:  Maximum number of pre-images per transaction.  &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;MAXBOUT&amp;lt;/var&amp;gt;: Maximum number of backout pages per transaction. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;MAXSUBT&amp;lt;/var&amp;gt;: Maximum number of subtransaction checkpoints that a transaction can span.&amp;lt;/li&amp;gt;&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;Each new parameter defaults to unlimited. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;If a parameter value is set, a transaction is cancelled if that value is exceeded, and the following message is displayed:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;code&amp;gt;M204.0524: Maximum number (&amp;lt;i&amp;gt;num&amp;lt;/i&amp;gt;) of &amp;lt;i&amp;gt;parameter&amp;lt;/i&amp;gt; exceeded.&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
where &amp;lt;i&amp;gt;num&amp;lt;/i&amp;gt; is the value set for &amp;lt;i&amp;gt;parameter&amp;lt;/i&amp;gt; (&amp;lt;var&amp;gt;MAXPRE&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;MAXBOUT&amp;lt;/var&amp;gt;, or &amp;lt;var&amp;gt;MAXSUBT&amp;lt;/var&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
===NLDAPBUF===&lt;br /&gt;
This new parameter allows the number of LDAP buffers allocated during startup to be set in CCAIN. The default value is 2, and the settable value can range from 0 to 65535.&lt;br /&gt;
&lt;br /&gt;
===PUPDTH (new minimum value)===&lt;br /&gt;
If a user sets the &amp;lt;var&amp;gt;[[PUPDTH parameter|PUPDTH]]&amp;lt;/var&amp;gt; parameter to 0, it will now automatically be increased to 1, its minimum value.&lt;br /&gt;
&lt;br /&gt;
===SERV4G===&lt;br /&gt;
This parameter allows testing of server tables that span a 4-gigabyte boundary. For example, if SERV4G is X&#039;FFFFF000&#039;, each ATB server will begin at XX_FFFFF000. If SERV4G is X&#039;FFFF0000&#039;, each ATB server will begin at XX_FFFF0000. XX is determined by the storage available on the system. The parameter is set in CCAIN.&lt;br /&gt;
&lt;br /&gt;
The contents of the ATB server are specified by using the SERVGA parameter.&lt;br /&gt;
&lt;br /&gt;
For example. if you want VTBL to span the 4G boundary, you can use these settings: SERV4G=X&#039;FFFFF000&#039;, SERVGA=X&#039;00040000&#039;, and LVTBL=200 (6400 bytes, X&#039;1900&#039;). This will force each server&#039;s VTBL to begin at XX_FFFFF000 and end at XX+1_00000900.&lt;br /&gt;
&lt;br /&gt;
===WEBDFLT===&lt;br /&gt;
At V7.7, the default access rule for non-SSL ports was changed from ALLOW * to DISALLOW *, meaning that unless any ALLOW rules were in place resulting in a login/password prompt, the port couldn&#039;t be accessed. The new &amp;lt;var&amp;gt;[https://m204wiki.rocketsoftware.com/index.php/WEBDFLT_parameter WEBDFLT]&amp;lt;/var&amp;gt; parameter may be set to 1 for reversion to the old default of ALLOW *. Under V7.7, this new parameter was enabled with the application of zap 77z090. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;var&amp;gt;RESET WEBDFLT&amp;lt;/var&amp;gt; requires system administrator privileges. It is recommended to reset the 1 bit of &amp;lt;var&amp;gt;WEBDFLT&amp;lt;/var&amp;gt; to zero after issuing a series of &amp;lt;var&amp;gt;JANUS DEFINE&amp;lt;/var&amp;gt; commands which need WEBDFLT=1, as in the CCAIN input stream.&lt;br /&gt;
&lt;br /&gt;
==New and changed statistics==&lt;br /&gt;
===MPR, MBO, MCP, and RCV===&lt;br /&gt;
Introduced in zap 77Z257.&lt;br /&gt;
&amp;lt;p&amp;gt;These statistics provide high water mark transaction information. (Since-last values will not be available until V78 GA.)&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;They are useful in conjunction with the &amp;lt;var&amp;gt;MAXPRE&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;MAXBOUT&amp;lt;/var&amp;gt;, and &amp;lt;var&amp;gt;MAXSUBT&amp;lt;/var&amp;gt; parameters. &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
User/system statistics:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;MPR: High water mark of transaction pre-images. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;MBO: High water mark of transaction backout pages. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;MCP: High water mark of transaction chkpoint spans. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
System statistics: &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;RCV: Number of blocks needed for subtransaction recovery &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt; &lt;br /&gt;
&amp;lt;p class=&amp;quot;note&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Notes:&amp;lt;/b&amp;gt; M204.0843 now displays the RCV statistic for subtransaction checkpoints.&lt;br /&gt;
The size of recovery checkpoint must be greater than the sum of the last RCV value plus the number of records in [https://m204wiki.rocketsoftware.com/index.php/System_and_media_recovery#RESTART_recovery_considerations_for_sub-transaction_checkpoints RESTART and RESTARTS].&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
===DKWTS and DKWTMICS===&lt;br /&gt;
Introduced in zap 77z7289.&lt;br /&gt;
&amp;lt;p&amp;gt;The new system statistics DKWTS (DisK WaiTs) and DKWTMICS (DisK WaiT MICroSeconds) collect data to provide rough disk I/O service time numbers.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
DKWTS shows the number of disk I/O waits. DKWTMICS shows the total wait time for those waits in microseconds. Dividing the difference in DKWTMICS by the difference in DKWTS over an interval provides the average disk I/O wait time in microseconds.              &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;note&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Notes:&amp;lt;/b&amp;gt; &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The wait time does include internal Model 204 scheduler delays, so on a CPU bound Model 204 system, the service times calculated from DKWTS and DKWTMICS are likely to be an overestimate of actual service times.&amp;lt;/li&amp;gt;  &lt;br /&gt;
                                                                    &lt;br /&gt;
&amp;lt;li&amp;gt;DKWTS and DKWTMICS are not available in SirMon; use [https://m204wiki.rocketsoftware.com/index.php/MONITOR_command MONITOR] SYSTEM STATISTICS to view these statistics.&amp;lt;/li&amp;gt;&amp;lt;/ul&amp;gt;  &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Compatibility issues==&lt;br /&gt;
===&amp;lt;b id=&amp;quot;listNewInit&amp;quot;&amp;gt;&amp;lt;/b&amp;gt;$ListNew cannot be used in Initial clause===&lt;br /&gt;
It is now a compilation error if &amp;lt;var&amp;gt;$ListNew&amp;lt;/var&amp;gt; is attempted to be used in the &amp;lt;var&amp;gt;Initial&amp;lt;/var&amp;gt; clause of a &lt;br /&gt;
[https://m204wiki.rocketsoftware.com/index.php/Using_variables_and_values_in_computation#Declare_statements_for_.25variables declaration statement].&lt;br /&gt;
&amp;lt;p&amp;gt;This change is propagated by zap maintenance to versions 7.5 (zap 75Z487), 7.6 (zap 76Z514), and 7.7 (zap 77Z281) of Model 204.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote class=&amp;quot;note&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Note:&amp;lt;/b&amp;gt; Strictly speaking, this would not be considered a compilation error, because previously although &amp;lt;code&amp;gt;..&amp;amp;nbsp;Initial($ListNew)&amp;lt;/code&amp;gt; did not produce a compilation error, in almost all circumstances it would produce a snap if the initialized %variable were used with some other &amp;lt;var&amp;gt;$List&amp;lt;i&amp;gt;xxx&amp;lt;/i&amp;gt;&amp;lt;/var&amp;gt; invocation.&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Restricting the use of the CUSTOM=38 setting===&lt;br /&gt;
The [[CUSTOM parameter|CUSTOM=38]] parameter setting, introduced at V7.5, inadvertently provided System Manager privileges to all users via the RESET command. This CUSTOM setting is now restricted to the RESETting of the LAUDIT parameter.&lt;br /&gt;
&lt;br /&gt;
===Disabling of Closure support===&lt;br /&gt;
Due to a number of bugs related to Closure support, introduced at V7.7, this feature, which can best be described as exposed methods assigned to method variables, has been disabled in this release. This change was also made to V7.7 with application of zap 77z119.&lt;br /&gt;
&lt;br /&gt;
===Password delimiter enforced===&lt;br /&gt;
When using IFSTRTN to logon to a Model 204 online from an IFAM2 application, both the logonid and password must be followed by a semicolon - the delimiter.             &lt;br /&gt;
For example:      &lt;br /&gt;
                                      &lt;br /&gt;
CALL IFSTRTN(RC,&#039;logonid;password;&#039;...)&lt;br /&gt;
                 &lt;br /&gt;
If a semicolon does not follow the password string, the following message will now be issued&lt;br /&gt;
&lt;br /&gt;
M204.2964: Password missing or too long                  &lt;br /&gt;
                                                         &lt;br /&gt;
Previously, a semicolon following the password was not required and the first blank served as a password delimiter.  However, as of V7.7, embedded blanks are valid password characters and a semicolon is now required to delimit the password.&lt;br /&gt;
&lt;br /&gt;
This change has also been enabled within V7.7 with the application of zap 77z231.&lt;br /&gt;
&lt;br /&gt;
===PAGESZ parameter validated===&lt;br /&gt;
Previously it was possible to set the PAGESZ parameter to any value, although Model 204 internally supports one page size of 6184, and any deviation from this value would have led to problems during file creation. The value of this parameter is now controlled, such that setting it to any value other than 6184 will generate an M204.1149 message with the parameter being reset to 6184.&lt;br /&gt;
&lt;br /&gt;
===ECPRIV and the IDCAMS facility===&lt;br /&gt;
At V7.7 a security loophole was closed, whereby all ECF modules were run under external-authorizer profile of the calling user. Previously any ECF tasks were run under the owning job&#039;s external-authorizer profile, and in order for certain sites to retain that ability, a new setting of ECPRIV, value 4, was introduced to retain the ability to run ECF tasks using the job&#039;s security profile. &lt;br /&gt;
&lt;br /&gt;
The ECPRIV 4 setting potentially introduced a security loophole when calling the IDCAMS interface, based upon what the IDCAMS utility is able to do at a system level. Consequently as of this release, the ECPRIV 4 setting will be ignored when calling the IDCAMS facility via ECF, and such IDCAMS processes will always use the calling user&#039;s security profile. Any existing jobs that use ECF to call the IDCAMS utility with the ECFPRIV 4 bit set should be checked to ensure that the calling user&#039;s security profile still satisfies the job&#039;s requirements.&lt;br /&gt;
&lt;br /&gt;
===TCPOPTS is view only===&lt;br /&gt;
In previous releases the TCPOPTS parameter, which identifies the type of IP addressing in use ( v4 or v6 ), was resetable, although it was always documented as a view-only parameter. The parameter is now handled as a view-only parameter, and any attempts to reset the parameter will result in&lt;br /&gt;
&lt;br /&gt;
   M204.1123: Parameter TCPOPTS not reset&lt;br /&gt;
&lt;br /&gt;
===ZHPF command can only be issued by a system manager===&lt;br /&gt;
In previous releases it was possible to issue the ZHPF command without being logged on. From this release onwards, a user would have to be logged on with system manager privileges to be able to issue this command.&lt;br /&gt;
&lt;br /&gt;
Additionally, the command output will now only  display results for currently open files.&lt;br /&gt;
&lt;br /&gt;
This changes has been enabled within v7.7 with the application of zap 77z264.&lt;br /&gt;
&lt;br /&gt;
===Terminal MODEL reset failure===&lt;br /&gt;
If a reset of the terminal MODEL parameter fails due to an under sized output page buffer, then in addition to the existing messages that inform the user of this failure&lt;br /&gt;
&lt;br /&gt;
    M204.1875 UNABLE TO RESET MODEL TO %C &lt;br /&gt;
    M204.1123: Parameter MODEL not reset  &lt;br /&gt;
&lt;br /&gt;
the following message will now be issued&lt;br /&gt;
&lt;br /&gt;
    M204.1008: LOUTPB must be increased to at least &amp;lt;number&amp;gt; &lt;br /&gt;
                                                         &lt;br /&gt;
where &amp;lt;number&amp;gt; is the minimum value of LOUTPB necessary to support the terminal model.&lt;br /&gt;
&lt;br /&gt;
This change is enabled in V7.7 with the application of zap 77z309.&lt;br /&gt;
&lt;br /&gt;
==New and changed messages==&lt;br /&gt;
&lt;br /&gt;
See [[New and updated messages in Model 204 version 7.8|New and updated messages in Model 204 version 7.8]] for details.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category: Release notes]]&lt;/div&gt;</summary>
		<author><name>ELowell</name></author>
	</entry>
	<entry>
		<id>https://m204wiki.rocketsoftware.com/index.php?title=Release_notes_for_Model_204_version_7.8&amp;diff=117661</id>
		<title>Release notes for Model 204 version 7.8</title>
		<link rel="alternate" type="text/html" href="https://m204wiki.rocketsoftware.com/index.php?title=Release_notes_for_Model_204_version_7.8&amp;diff=117661"/>
		<updated>2019-08-28T22:06:35Z</updated>

		<summary type="html">&lt;p&gt;ELowell: /* Call stack trace for problem diagnosis */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
These release notes list the enhancements and other changes contained in Model 204 version 7.8. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;&amp;lt;b&amp;gt;******THIS IS A DRAFT DOCUMENT.******&amp;lt;/b&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
These release notes list the enhancements and other changes contained in Model 204 version 7.8, &amp;lt;b&amp;gt;&amp;lt;i&amp;gt;which is still in development&amp;lt;/i&amp;gt;&amp;lt;/b&amp;gt;. Until the commercial release of the software, Rocket reserves the right to add to, remove, or change anything described herein. &lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
These release notes contain installation and features information for the Rocket Model 204 version 7.8 release.&lt;br /&gt;
Before beginning your installation, please read through this information about product installation and changes.&lt;br /&gt;
&lt;br /&gt;
==SOUL enhancements==&lt;br /&gt;
===AmIndependent method===&lt;br /&gt;
The &amp;lt;var&amp;gt;AmIndependent&amp;lt;/var&amp;gt; method returns TRUE for daemons spawned by &amp;lt;var&amp;gt;[http://m204wiki.rocketsoftware.com/index.php/RunIndependently_(Daemon_subroutine) RunIndependently]&amp;lt;/var&amp;gt;. (The action of &amp;lt;var&amp;gt;[https://m204wiki.rocketsoftware.com/index.php/AmDaemon_(Daemon_property) AmDaemon]&amp;lt;/var&amp;gt; remains unchanged.)&lt;br /&gt;
&lt;br /&gt;
The following table shows the values returned by &amp;lt;var&amp;gt;AmIndependent&amp;lt;/var&amp;gt; versus &amp;lt;var&amp;gt;AmDaemon&amp;lt;/var&amp;gt; for different daemon types:&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Type&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;AmDaemon&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;AmIndependent&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;$COMBG&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;False&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;False&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Independent daemon&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;False&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;True&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Other daemon&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;True&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;False&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Web, etc.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;False&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;False&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===$ProcOpn===&lt;br /&gt;
&amp;lt;var&amp;gt;[https://m204wiki.rocketsoftware.com/index.php/$ProcOpn $ProcOpn]&amp;lt;/var&amp;gt; now supports the opening of a procedure with an all numeric name, and including a leading zero, e.g.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;%result = $procOpn(&#039;0123&#039;, &#039;MYFILE&#039;)&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Support for such procedures names was initially introduced at v7.7, and this feature of &amp;lt;var&amp;gt;$ProcOpn&amp;lt;/var&amp;gt; is also enabled within v7.7 with the application of zap 77z054.&lt;br /&gt;
&lt;br /&gt;
===Allow parentheses to surround a boolean enumeration object===&lt;br /&gt;
The following sample code&lt;br /&gt;
&lt;br /&gt;
   begin                                       &lt;br /&gt;
   variables are undefined                  &lt;br /&gt;
   %isValid is boolean initial (True)       &lt;br /&gt;
   if (%isValid) then                  &lt;br /&gt;
      print &#039;in IF&#039;                            &lt;br /&gt;
   end if                                   &lt;br /&gt;
   end         &lt;br /&gt;
&lt;br /&gt;
will now compile and run successfully, as &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;if (%isValid) then &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
is logically equivalent to&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;if %isValid then &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Prior to V7.8 the presence of parentheses surrounding the boolean enumeration object would have caused a compilation error. This change is enabled in V7.7 with the application of zap 77z370.&lt;br /&gt;
&lt;br /&gt;
===Support for copying Object class objects===&lt;br /&gt;
The Object class now supports the copy and deepCopy methods. For example, and Object object can be copied as follows&lt;br /&gt;
&lt;br /&gt;
   begin               &lt;br /&gt;
   %x is object object &lt;br /&gt;
   %y is object object &lt;br /&gt;
   %y = new            &lt;br /&gt;
   %x = %y:copy        &lt;br /&gt;
   end&lt;br /&gt;
&lt;br /&gt;
This change is enabled in v7.7 with the application of zap 77z076, and within V7.6 with the application of zap 76z412.&lt;br /&gt;
&lt;br /&gt;
===Assignment of enumeration values to method variables===&lt;br /&gt;
Enumerations values can now be assigned to method variables whose result is an enumeration.So for example the following code&lt;br /&gt;
&lt;br /&gt;
   begin                                               &lt;br /&gt;
   enumeration colour                                  &lt;br /&gt;
      public                                           &lt;br /&gt;
         value red                                     &lt;br /&gt;
         value white                                   &lt;br /&gt;
         value blue                                    &lt;br /&gt;
      end public                                       &lt;br /&gt;
   end enumeration                                     &lt;br /&gt;
   %func    is function getColour is enumeration colour&lt;br /&gt;
   local function getColour is enumeration colour      &lt;br /&gt;
      return blue                                      &lt;br /&gt;
   end function                                        &lt;br /&gt;
   %func    = getColour                                &lt;br /&gt;
   %func    = (colour):red                             &lt;br /&gt;
   printText {~=%(Local):(%func)}                      &lt;br /&gt;
   end  &lt;br /&gt;
&lt;br /&gt;
will produce the result&lt;br /&gt;
&lt;br /&gt;
   %(Local):(%func)=red&lt;br /&gt;
&lt;br /&gt;
whereas previously the line   &lt;br /&gt;
&lt;br /&gt;
   %func    = (colour):red    &lt;br /&gt;
&lt;br /&gt;
would have been rejected with the message&lt;br /&gt;
&lt;br /&gt;
   MSIR.0993: Assignment invalid: mismatch between method and method variable&lt;br /&gt;
&lt;br /&gt;
This change is enabled in V7.7 with the application of zap 77z128.&lt;br /&gt;
&lt;br /&gt;
==External Call Facility enhancements==&lt;br /&gt;
===Managing ECF tables more efficiently===&lt;br /&gt;
The are two new features to help manage ECF tables more efficiently, avoid conditions where the table can fill, and prevent the definition of further entities.&lt;br /&gt;
&lt;br /&gt;
The first feature is the new  &amp;lt;var&amp;gt;DISPLAY ECF&amp;lt;/var&amp;gt; command, which displays the contents of ECF tables and also the current status of users accessing ECF modules. See more details of the &amp;lt;var&amp;gt;[[#DISPLAY ECF|DISPLAY ECF]]&amp;lt;/var&amp;gt; command below.&lt;br /&gt;
&lt;br /&gt;
The second feature is a new &amp;lt;var&amp;gt;EXTERNAL REMOVE&amp;lt;/var&amp;gt; statement with the syntax&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;EXTERNAL REMOVE &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;modulename&amp;lt;/span&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This causes the entry for the named module to be removed from the module table. The table entry is then placed on a free chain of entries and can be reused by issuing the EXTERNAL MODULE statement. This allows the module table to be managed with redundant entries removed, without having to recycle the ONLINE.&lt;br /&gt;
&lt;br /&gt;
A EXTERNAL REMOVE statement will return $status/$statusd values of 0/0, and most other status values that can be returned by the EXTERNAL REMOVE statement are already documented in the ECF return codes table. If an EXTERNAL REMOVE is attempted against a module that is currently being called ( in use ), then $status/$statusd will return the values 20/1 ( module unavailable).&lt;br /&gt;
&lt;br /&gt;
==System enhancements==&lt;br /&gt;
&lt;br /&gt;
===New wait types for daemon/master waits===&lt;br /&gt;
&lt;br /&gt;
Two new wait types, viewable on the &amp;lt;var&amp;gt;[https://m204wiki.rocketsoftware.com/index.php/MONITOR_command MONITOR] USERS&amp;lt;/var&amp;gt; command output, have been implemented as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;57&amp;lt;/code&amp;gt; - Means a daemon thread waiting for its master thread  &amp;lt;br /&amp;gt;     &lt;br /&gt;
&amp;lt;code&amp;gt;58&amp;lt;/code&amp;gt; - Means a master thread waiting for one of its daemon threads&lt;br /&gt;
&lt;br /&gt;
This change is enabled in V7.7 with the application of zap 77z410.&lt;br /&gt;
&lt;br /&gt;
===Snap formatting changes===&lt;br /&gt;
Date/time stamps in the page headers of snaps will now be shown normal format, rather than in julian format as in previous releases. Thus in the following example a particular snap header under v7.7 or previous releases would show as &lt;br /&gt;
&lt;br /&gt;
   SNAPID    1   19226.060155  M204.0022: Bug .. nnnnn               PAGE     1&lt;br /&gt;
&lt;br /&gt;
whereas the same snap header under v7.8 would show as &lt;br /&gt;
&lt;br /&gt;
   SNAPID    1  2019/08/14 06:01:06   M204.0022: Bug .. nnnnn        PAGE     1&lt;br /&gt;
&lt;br /&gt;
Also, due to improvements in handling trailing blanks in snap output, a snap generated under v7.8 should be marginally smaller than the same snap generated under previous releases, assuming the same SNAPCTL settings.&lt;br /&gt;
&lt;br /&gt;
===Call stack trace for problem diagnosis===&lt;br /&gt;
A  call stack trace is now provided to help diagnose and resolve common errors. To enable the stack trace, do either of the following: &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Set the &amp;lt;var&amp;gt;[[SIRFACT parameter|SIRFACT]] X&#039;01&#039;&amp;lt;/var&amp;gt; bit.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Set the &amp;lt;var&amp;gt;[[DEBUGUL parameter|DEBUGL]]&amp;lt;/var&amp;gt; parameter. Note that the &amp;lt;var&amp;gt;DEBUGUL&amp;lt;/var&amp;gt; approach will introduce extra QTBL overhead. &amp;lt;p&amp;gt;(&amp;lt;var&amp;gt;DEBUGUL&amp;lt;/var&amp;gt; provides a similar facility with an include trace of procedures leading to the error, but this might not be potentially as useful as the call trace.)&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt; &lt;br /&gt;
&lt;br /&gt;
The call stack trace can assist in diagnosing run-time errors that might occur, as illustrated by the following &amp;quot;Variable too small for result&amp;quot; and &amp;quot;MBSCAN exceeded&amp;quot; examples.&lt;br /&gt;
&lt;br /&gt;
====Variable too small for result====&lt;br /&gt;
When the stack trace is enabled, a &amp;quot;variable too small&amp;quot; error results in the following message:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;M204.2966: Error at line n, procedure &#039;&#039;procname&#039;&#039; in file &#039;&#039;procfile&#039;&#039;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
which identifies the line within a procedure where the error is occurring, in addition to the usual message:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;M204.0552: Variable too small for result&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Any subsequent M204.2966 messages indicate the point in the code from where the code in error was called. For example, a stack of three subroutine calls leading to a &amp;quot;variable too small&amp;quot; error might result in the following messaging:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;   M204.0552: Variable too small for result                             &lt;br /&gt;
   M204.2966: Error at line 9, procedure MYPROC.LEVEL4 in file MYPROC   &lt;br /&gt;
   M204.2966: Called from line 5, procedure MYPROC.LEVEL3 in file MYPROC&lt;br /&gt;
   M204.2966: Called from line 5, procedure MYPROC.LEVEL2 in file MYPROC&lt;br /&gt;
   M204.2966: Called from line 5, procedure MYPROC.LEVEL1 in file MYPROC &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This information should help in diagnosing the problem. &lt;br /&gt;
&lt;br /&gt;
If the error occurs within a command level program rather than a procedure, then the M204.2966 message is replaced by an M204.2967 message, and a similar error condition to the above with a preceding call stack might be audited as follows:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;   M204.0552: Variable too small for result              &lt;br /&gt;
   M204.2967: Error at line 14 of command level program  &lt;br /&gt;
   M204.2967: Called from line 5 of command level program&lt;br /&gt;
   M204.2967: Called from line 3 of command level program &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If neither &amp;lt;var&amp;gt;SIRFACT X&#039;01&#039;&amp;lt;/var&amp;gt; nor &amp;lt;var&amp;gt;DEBUGUL&amp;lt;/var&amp;gt; is set, then the &amp;quot;variable too small&amp;quot; error produces the following messages:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;   M204.0552: Variable too small for result &lt;br /&gt;
   M204.2968: Error: no debug info &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====MBSCAN exceeded====&lt;br /&gt;
Similarly to the handling of the &amp;quot;variable too small for result&amp;quot; error, the call stack can also be used to diagnose errors where MBSCAN is exceeded as a result of a direct search of Table B records. Again, under V7.8, if either the &amp;lt;var&amp;gt;SIRFACT X&#039;01&#039;&amp;lt;/var&amp;gt; bit is set, or &amp;lt;var&amp;gt;DEBUGUL&amp;lt;/var&amp;gt; is set, then if a long request occurs as a result of exceeding MBSCAN, then initially the following message is produced:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;   M204.0569: File &#039;&#039;filename&#039;&#039;, Find: Table B records to be searched = &#039;&#039;nnnn&#039;&#039;&amp;lt;/p&amp;gt;&lt;br /&gt;
as before, with a DYRWT prompt message. If the user replies &#039;N&#039; to the prompt, or if the request is run in an environment (for example a batch job) where the default response is &#039;N&#039;, the following message is produced after the M204.0569 message:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;Cancelling request: M204.2969: MBSCAN (&#039;&#039;mm&#039;&#039;) exceeded, records to be searched = &#039;&#039;nnnn&#039;&#039;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
where &#039;&#039;mm&#039;&#039; is the current setting of MBSCAN. The M204.2969 will be followed by M204.2966 messages display the call stack trace. Thus, if the following code &lt;br /&gt;
&lt;br /&gt;
   b                           &lt;br /&gt;
   call sub1                   &lt;br /&gt;
   sub1: subroutine            &lt;br /&gt;
   fd1:                        &lt;br /&gt;
      in clients fd city = ONTARIO&lt;br /&gt;
              end find         &lt;br /&gt;
      fr fd1                      &lt;br /&gt;
         pai                      &lt;br /&gt;
         print                    &lt;br /&gt;
      end for                     &lt;br /&gt;
   end subroutine              &lt;br /&gt;
   end  &lt;br /&gt;
&lt;br /&gt;
is run from proc MYPROC.MBSCAN aganst the demo database with an MBSCAN setting of 10, then the following messages will be produced, assuming any prompts are responded to with an &#039;N&#039;&lt;br /&gt;
&lt;br /&gt;
   M204.0569: File CLIENTS, Find: Table B records to be searched = 3415&lt;br /&gt;
   Cancelling request: M204.2969: MBSCAN (10) exceeded, records to be searched = 3415                       &lt;br /&gt;
   M204.2966: Error at line 6, procedure MYPROC.MBSCAN in file MYPROC&lt;br /&gt;
   M204.2966: Called from line 3, procedure MYPROC.MBSCAN in file MYPROC&lt;br /&gt;
&lt;br /&gt;
===appendJournalData===&lt;br /&gt;
The &amp;lt;var&amp;gt;[[AppendJournalData_(Stringlist_function)|AppendJournalData]]&amp;lt;/var&amp;gt; function is now more tolerant of an outstanding BUMP request. Previously, if &amp;lt;var&amp;gt;AppendJournalData&amp;lt;/var&amp;gt; was called to inadvertently retrieve a large amount of journal data, typically when called implicitly from within SirScan, then any outstanding BUMP request wouldn&#039;t be honored until all of the data had been retrieved, at which point the BUMP request would be completed, and all data would be lost.&lt;br /&gt;
&lt;br /&gt;
Now, the &amp;lt;var&amp;gt;AppendJournalData&amp;lt;/var&amp;gt; process will check for outstanding BUMP requests before each track I/O is executed, thus avoiding excessive I/Os against the journal and long waits for the BUMP of such a process to complete.&lt;br /&gt;
&lt;br /&gt;
==Recovery enhancements==&lt;br /&gt;
===Media Recovery in a multi-user environment===&lt;br /&gt;
It is now possible to perform media recovery by issuing the &amp;lt;var&amp;gt;REGENERATE&amp;lt;/var&amp;gt; command to roll forward selected files in a multi-user environment, with the media recovery being carried out by different users with system manager privileges. The new USING option allows for the specification of a ddname for the input journal stream to be used by the &amp;lt;var&amp;gt;REGENERATE&amp;lt;/var&amp;gt; command. Previously media recovery was restricted to single user batch jobs, using the CCAGEN ddname for the input journal. For more details, see the &amp;lt;var&amp;gt;[[#REGENERATE|REGENERATE]]&amp;lt;/var&amp;gt; command below.&lt;br /&gt;
&lt;br /&gt;
==Security enhancements==&lt;br /&gt;
===CA-Top Secret can disallow CCASTAT logins===&lt;br /&gt;
The [https://m204wiki.rocketsoftware.com/index.php/CA-Top_Secret_interface CA-Top Secret] interface now recognizes the &amp;lt;code&amp;gt;DEFACID=&amp;lt;/code&amp;gt;, setting and does not allow CCASTAT logins in the online if &amp;lt;code&amp;gt;DEFACID&amp;lt;/code&amp;gt; is set to null. (There is no attempt to log on M204USR.) Therefore, to disallow CCASTAT logons, set DEFACID=, in [https://m204wiki.rocketsoftware.com/index.php/CA-Top_Secret_interface#Preparing_a_TOPSPARM_parameter_module_with_TOPSGEN TOPSPARM]. CCASTAT will be opened because it contains file and group passwords, but it will not be used for logons if CCASTAT logons are not allowed.&lt;br /&gt;
&lt;br /&gt;
===CUSTOM=11 and mixed cased input===&lt;br /&gt;
The &amp;lt;var&amp;gt;[https://m204wiki.rocketsoftware.com/index.php/CUSTOM_parameter CUSTOM]&amp;lt;/var&amp;gt; parameter CUSTOM=11 setting no longer requires that a *LOWER command be issued prior to a LOGCTL command (to add or change a  password) to preserve mixed case input. Prior to this release, with CUSTOM=11 in place, *LOWER had to be issued before a LOGCTL command, otherwise any mixed case password strings would automatically be translated into uppercase. This change is enabled within V7.7 with the application of zap 77z108.&lt;br /&gt;
&lt;br /&gt;
===DEFUSER can specify a jobname not authorized to access M204===&lt;br /&gt;
When specifying DEFUSER=JOBNAME and VALIDAT=LOGON in the RACFGEN parms for an ONLINE, if the specified jobname ( the owning id for the ONLINE job ) isn&#039;t authorized to use Model 204 via RACF, any LOGIN commands specifying no userid will now succeed ( previously such a LOGON would have failed ). This enables users to submit jobs with USE $JOB, whereby the string USER=jobname  will be added to the submitted JCL, and this in turn is useful if the specified jobname has dataset access privileges to datasets required by the submitted jobs, even if the jobname itself isn&#039;t authorized to use M204.&lt;br /&gt;
&lt;br /&gt;
==Janus product enhancements==&lt;br /&gt;
&lt;br /&gt;
===Janus Web Server access rule===&lt;br /&gt;
The automatic &amp;lt;var&amp;gt;[[JANUS WEB ALLOW]]&amp;lt;/var&amp;gt; rule, which allowed any user to access the port without requiring a login, is changed &amp;lt;i&amp;gt;for non-SSL ports&amp;lt;/i&amp;gt; to the following:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;JANUS WEB &amp;lt;i&amp;gt;portname&amp;lt;/i&amp;gt; DISALLOW *&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
This rule requires a system administrator to explicitly define &amp;lt;var&amp;gt;ALLOW&amp;lt;/var&amp;gt; rules to enable users to access non-SSL ports.&lt;br /&gt;
The rule applies unless overridden by user-added rules. &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;blockquote class=&amp;quot;note&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;b&amp;gt;Note:&amp;lt;/b&amp;gt; To revert from this change in the JANUS DEFINE default and make the default &lt;br /&gt;
 non-SSL &amp;lt;var&amp;gt;ALLOW&amp;lt;/var&amp;gt; rule as it was in version 7.5 and earlier (&amp;lt;code&amp;gt;ALLOW *&amp;lt;/code&amp;gt;), turn on the 1 bit of the &amp;lt;var&amp;gt;[[WEBDFLT parameter|WEBDFLT]]&amp;lt;/var&amp;gt; parameter: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;RESET WEBDFLT=1&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Increase in pending accepts for Janus BPX ports===&lt;br /&gt;
The default number of pending accepts for Janus BPX server ports has been increased from 3 to 12, thus reducing the likelihood that a pending accept may fail with the message&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;MSIR.0019 Connection request rejected for port (port), MAXCON exceeded&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The actual number of pending accepts to be supported on the port can be set with the new parameter MAXPEND, set on the &amp;lt;var&amp;gt;[[JANUS_DEFINE|JANUS DEFINE]]&amp;lt;/var&amp;gt; command, where MAXPEND can vary from 3 up to a maximum value of 32. The change to the default value was enabled within V7.7 with the application of zap 77z269.&lt;br /&gt;
&lt;br /&gt;
===TCP listen backlog increased===&lt;br /&gt;
&lt;br /&gt;
The [https://m204wiki.rocketsoftware.com/index.php/Program_Communication_facilities#LISTEN_call TCP_listen] backlog has been increased from 16 to 1024 under z/OS.&lt;br /&gt;
&lt;br /&gt;
This update tells the TCP stack to queue up to 1024 of such requests up before dropping them, thus reducing, or in most cases eliminating, the likelihood of a connection request drop, other than in exceptional circumstances, such as a denial of service attack. This change was enabled within V7.7 with the application of zap 77z340.&lt;br /&gt;
&lt;br /&gt;
===Defer the freeing of XMLSCREEN input XML===&lt;br /&gt;
&lt;br /&gt;
The freeing of [https://m204wiki.rocketsoftware.com/index.php/XMLSCREEN_and_NOXMLSCREEN_(JANUS_DEFINE_parameters) XMLSCREEN] input XML is now deferred until the next Read Screen or session termination. This means that if an application error is detected, the input XML can be retrieved with [https://m204wiki.rocketsoftware.com/index.php/$Web_Input_Content $Web_Input_Content] and then logged for problem analysis. &lt;br /&gt;
&lt;br /&gt;
Prior to this release the XML received from the client is freed immediately after being used to set the input data for a Read Screen, rendering it unavailable for problem determination.&lt;br /&gt;
&lt;br /&gt;
This change is enabled in V7.7 with the application of zap 77z368.&lt;br /&gt;
&lt;br /&gt;
===XMLSCREEN and Janus Web Legacy blank stripping===&lt;br /&gt;
&lt;br /&gt;
xmlScreens and Janus Web Legacy screens now adhere to the same standard as standard screen processing in terms of stripping leading blanks from input fields defined as [https://m204wiki.rocketsoftware.com/index.php/Full-screen_feature#DEBLANK_or_NODEBLANK_option DEBLANK] (either explicitly or implicitly).&lt;br /&gt;
&lt;br /&gt;
This change is enabled in V7.7 with the application of zap 77z400.&lt;br /&gt;
&lt;br /&gt;
===SSL input buffer size===&lt;br /&gt;
&lt;br /&gt;
The default value of [https://m204wiki.rocketsoftware.com/index.php/SSLIBSIZE_(JANUS_DEFINE_parameter) SSLIBSIZE] has been increased to 16384 + 128, or 16512. This size should ensure correct communication with all TLS spec compliant applications. It is the maximum size allowed unless you use [https://m204wiki.rocketsoftware.com/index.php/CUSTOM_parameter#Using_CUSTOM.3D.2818.29 CUSTOM=18].    &lt;br /&gt;
&lt;br /&gt;
This changed is enabled within V7.7 with the application of zap 77z415.&lt;br /&gt;
&lt;br /&gt;
===Increasing LDAP buffers===&lt;br /&gt;
&lt;br /&gt;
The number of LDAP buffers allocated at startup can now be changed by setting the NLDAPBUF parameter in CCAIN. See below for details on [[#NLDAPBUF|NLDAPBUF]].&lt;br /&gt;
&lt;br /&gt;
==Debugger enhancements==&lt;br /&gt;
&lt;br /&gt;
===Access to exposed variables===&lt;br /&gt;
The debuggers can now view or watch the values of variables exposed to local routines/methods. Previously, any attempts to access an exposed variable would have displayed &amp;quot;%varname has no value&amp;quot; in the debugger session. (This feature is enabled within V7.7 with the application of zap 77z363.)&lt;br /&gt;
&lt;br /&gt;
==Performance enhancements==&lt;br /&gt;
&lt;br /&gt;
===X3270OUT exit offloadable===&lt;br /&gt;
When running MP/204 (AMPSUBS&amp;gt;0) and using the [https://m204wiki.rocketsoftware.com/index.php/Coding_SNA_Communications_Server_conversion_exit_routines#X3270OUT_.28convert_output_from_3270_format.29 X3270OUT] exit to convert a 3270 output data stream to the appropriate device protocol, the exit can now run in parallel mode to improve performance. This change was enabled in V7.7 with the application of zap 77Z313.&lt;br /&gt;
&lt;br /&gt;
The X3270OUT exit must be written to be re-entrant.&lt;br /&gt;
&lt;br /&gt;
==New and changed commands==&lt;br /&gt;
===DISPLAY ECF===&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;DISPLAY ECF {{ M | N | U } like ?} &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This new command displays details from ECF tables, or the current status of users accessing ECF modules.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;syntax&amp;quot;&amp;gt;D ECF M&amp;lt;/span&amp;gt; displays the contents of the module table. For example:&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;    D ECF M &lt;br /&gt;
    Module   Loadlib  Address:Length     Loaded@      Lastused@   #Calls  Flags &lt;br /&gt;
    QATUM13C PROGLIB 2FB91FB8:00000028 19023:121506 19023:121506 00000001 &lt;br /&gt;
    QATUM13B PROGLIB 2FE65000:00009C18 19023:121506 19023:121506 00000001 &lt;br /&gt;
    QATUM13A PROGLIB 2FE6EC18:00001CD8 19023:121506 19023:121506 00000001  &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
(flags may be D=deleted; S=shared; H=halted; I=Idle)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;syntax&amp;quot;&amp;gt;D ECF N&amp;lt;/span&amp;gt; displays contents of the name table. For example: &amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;    D ECF N&lt;br /&gt;
    Module   Logical-call-name &lt;br /&gt;
    QATUM13C MOD_QATUM13C &lt;br /&gt;
    QATUM13B MOD_QATUM13B &lt;br /&gt;
    QATUM13A MOD_QATUM13A &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;syntax&amp;quot;&amp;gt;D ECF U&amp;lt;/span&amp;gt; displays details of users currently accessing ECF modules. This is also the default option, and so &amp;lt;span class=&amp;quot;syntax&amp;quot;&amp;gt;D ECF&amp;lt;/span&amp;gt; will display the same output as &amp;lt;span class=&amp;quot;syntax&amp;quot;&amp;gt;D ECF U&amp;lt;/span&amp;gt;. For example:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;    D ECF U                           &lt;br /&gt;
    User# Userid     Module   Parmlen &lt;br /&gt;
    00002 ADMIN      --none--         &lt;br /&gt;
    00003 ADMIN      COBSAMP1 00000002&lt;br /&gt;
    00004 ADMIN      COBSAMP1 00000002 &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;syntax&amp;quot;&amp;gt;D ECF LIKE ? &amp;lt;/span&amp;gt; (where &amp;lt;code&amp;gt;?&amp;lt;/code&amp;gt; is a valid pattern) displays details for entities that match the specified pattern.&lt;br /&gt;
&lt;br /&gt;
===REGENERATE===&lt;br /&gt;
The &amp;lt;var&amp;gt;REGENERATE&amp;lt;/var&amp;gt; command can now be run in a multi-user environment by multiple users with system manager privileges. A new option USING is provided to specify the ddname of the input journal, so that the full syntax is now as follows:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;  REGENERATE [USING ddname] FILE filename [FROM dumpname | IGNORE]&lt;br /&gt;
  [TO {LAST UPDATE [BEFORE yy.ddd hh:mm:ss.th] | LAST CHECKPOINT [BEFORE yy.dd hh:mm:ss.th] &lt;br /&gt;
  | UPDATE number OF yy.ddd hh:mm:ss.th | CHECKPOINT yy.ddd hh:mm:ss.th} ]&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The default for the using ddname is CCAGEN, but any ddname may be used to allocate an input journal and used. For example:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;  ALLOCATE REGEN1 WITH SCOPE=SYSTEM DSN=PROD1.GDGJ OLD SEQUENTIAL GEN=+2&lt;br /&gt;
  REGENERATE USING REGEN1 FILE TEST&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It is the user&#039;s responsibility to ensure that the file being regenerated is not in use, and so prior to usage, &amp;lt;var&amp;gt;BUMP FILE&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;STOP FILE&amp;lt;/var&amp;gt; should be used to isolate usage against the file. If the file is in use, the REGEN will fail with these messages:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;  M204.1430: Failed to open file TEST&lt;br /&gt;
  M204.1436: Stopped processing file TEST  &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
$STATUS will now be set for &amp;lt;var&amp;gt;REGENERATE&amp;lt;/var&amp;gt; with the following values:&lt;br /&gt;
&amp;lt;blockquote&amp;gt;    &lt;br /&gt;
    0 - Success &amp;lt;br/&amp;gt;&lt;br /&gt;
    1 - No files were processed &amp;lt;br/&amp;gt;&lt;br /&gt;
    2 - At least one file stopped processing &amp;lt;br/&amp;gt;&lt;br /&gt;
    4 - A serious error occurred, REGEN failed &lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Similarly, &amp;lt;var&amp;gt;SETGRC&amp;lt;/var&amp;gt; may be used to get the return code and error message.&lt;br /&gt;
&lt;br /&gt;
==New and changed parameters==&lt;br /&gt;
&lt;br /&gt;
===ECMODS===&lt;br /&gt;
The new minimum value for ECMODS, the allowable number of ECF modules, is 1. Prior to V7.8 the minimum value was 0. This changed was enabled in V7.7 with the application of zap 77z306.&lt;br /&gt;
&lt;br /&gt;
===ECNAMES===&lt;br /&gt;
The new minimum value for ECNAMES, the allowable number of ECF module names, is 1. Prior to V7.8 the minimum value was 0. This changed was enabled in V7.7 with the application of zap 77z306.&lt;br /&gt;
&lt;br /&gt;
===ECPSIZE===&lt;br /&gt;
The new minimum value for ECPSIZE, the initial storage allocation for ECF parameters, is 1024. Prior to V7.8 the minimum value was 0. This changed was enabled in V7.7 with the application of zap 77z306.&lt;br /&gt;
&lt;br /&gt;
===ENQTIME===&lt;br /&gt;
Millisecond duration of automatic record locking retry wait.&lt;br /&gt;
&lt;br /&gt;
Prior to this change, if record locking conflicts occur frequently in a busy online, any user with a non-zero value for &amp;lt;var&amp;gt;[[ENQRETRY parameter|ENQRETRY]]&amp;lt;/var&amp;gt; will wait at least 3 seconds before the conflict is dealt with. This can degrade overall system performance.      &lt;br /&gt;
                                                         &lt;br /&gt;
The &amp;lt;var&amp;gt;[[ENQTIME parameter|ENQTIME]]&amp;lt;/var&amp;gt; parameter specifies the number of milliseconds waited for each record locking retry wait. ENQTIME can be between 1 and 60000, corresponding to a minimum of 1 millisecond and a maximum of 1 minute. The default value of ENQTIME is 3000 (3 seconds).            &lt;br /&gt;
                                                         &lt;br /&gt;
For example, with ENQTIME = 100 and ENQRETRY = 7, after a record locking conflict occurs the thread will retry 7 times with wait intervals of .1 seconds, and so within at most .7 seconds either the lock becomes available or the conflict triggers an On unit or cancels the request.     &lt;br /&gt;
                                                         &lt;br /&gt;
The ENQTIME parameter may also be reset with $ResetN. &lt;br /&gt;
&lt;br /&gt;
This new parameter was enabled within V7.7 with the application of zap 77z299.&lt;br /&gt;
&lt;br /&gt;
===EVALOPT===&lt;br /&gt;
The new &amp;lt;var&amp;gt;EVALOPT&amp;lt;/var&amp;gt; parameter controls the cancellation of a request on truncation of string data. The default value is 0, and currently there is just one setting, 1, which means &amp;quot;cancel a request if truncation of string data occurs.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
For example, with the default of 0 in place, the following code &amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;    %x is string len 1   &lt;br /&gt;
    %y is string len 2   &lt;br /&gt;
    %y = &#039;ab&#039;            &lt;br /&gt;
    %x = %y              &lt;br /&gt;
    printtext {~} = {%x} &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
would cause silent truncation, and give the result&lt;br /&gt;
    &amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;%x = a &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If &amp;lt;var&amp;gt;EVALOPT&amp;lt;/var&amp;gt; is set to 1, then the above code produces the following message:&lt;br /&gt;
    &amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;M204.0552: Variable too small for result &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and the request is cancelled.&lt;br /&gt;
&lt;br /&gt;
===LFSCB===&lt;br /&gt;
LFSCB, the length of the full screen buffer, now has a new minimum value of 8 ( the previous minimum was 0 ). This change has been enabled within v7.7 with the application of zap 77z042, and within V7.6 with the application of zap 76z393.&lt;br /&gt;
&lt;br /&gt;
===MAXPRE, MAXBOUT, MAXSUBT===&lt;br /&gt;
&amp;lt;p&amp;gt;Introduced in zap 77Z257.&amp;lt;/p&amp;gt;&lt;br /&gt;
The new &amp;lt;var&amp;gt;MAXPRE&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;MAXBOUT&amp;lt;/var&amp;gt;, and &amp;lt;var&amp;gt;MAXSUBT&amp;lt;/var&amp;gt; parameters can be used to cancel a runaway transaction and prevent it from filling the checkpoint data set. &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;MAXPRE&amp;lt;/var&amp;gt;:  Maximum number of pre-images per transaction.  &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;MAXBOUT&amp;lt;/var&amp;gt;: Maximum number of backout pages per transaction. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;MAXSUBT&amp;lt;/var&amp;gt;: Maximum number of subtransaction checkpoints that a transaction can span.&amp;lt;/li&amp;gt;&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;Each new parameter defaults to unlimited. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;If a parameter value is set, a transaction is cancelled if that value is exceeded, and the following message is displayed:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;code&amp;gt;M204.0524: Maximum number (&amp;lt;i&amp;gt;num&amp;lt;/i&amp;gt;) of &amp;lt;i&amp;gt;parameter&amp;lt;/i&amp;gt; exceeded.&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
where &amp;lt;i&amp;gt;num&amp;lt;/i&amp;gt; is the value set for &amp;lt;i&amp;gt;parameter&amp;lt;/i&amp;gt; (&amp;lt;var&amp;gt;MAXPRE&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;MAXBOUT&amp;lt;/var&amp;gt;, or &amp;lt;var&amp;gt;MAXSUBT&amp;lt;/var&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
===NLDAPBUF===&lt;br /&gt;
This new parameter allows the number of LDAP buffers allocated during startup to be set in CCAIN. The default value is 2, and the settable value can range from 0 to 65535.&lt;br /&gt;
&lt;br /&gt;
===PUPDTH (new minimum value)===&lt;br /&gt;
If a user sets the &amp;lt;var&amp;gt;[[PUPDTH parameter|PUPDTH]]&amp;lt;/var&amp;gt; parameter to 0, it will now automatically be increased to 1, its minimum value.&lt;br /&gt;
&lt;br /&gt;
===SERV4G===&lt;br /&gt;
This parameter allows testing of server tables that span a 4-gigabyte boundary. For example, if SERV4G is X&#039;FFFFF000&#039;, each ATB server will begin at XX_FFFFF000. If SERV4G is X&#039;FFFF0000&#039;, each ATB server will begin at XX_FFFF0000. XX is determined by the storage available on the system. The parameter is set in CCAIN.&lt;br /&gt;
&lt;br /&gt;
The contents of the ATB server are specified by using the SERVGA parameter.&lt;br /&gt;
&lt;br /&gt;
For example. if you want VTBL to span the 4G boundary, you can use these settings: SERV4G=X&#039;FFFFF000&#039;, SERVGA=X&#039;00040000&#039;, and LVTBL=200 (6400 bytes, X&#039;1900&#039;). This will force each server&#039;s VTBL to begin at XX_FFFFF000 and end at XX+1_00000900.&lt;br /&gt;
&lt;br /&gt;
===WEBDFLT===&lt;br /&gt;
At V7.7, the default access rule for non-SSL ports was changed from ALLOW * to DISALLOW *, meaning that unless any ALLOW rules were in place resulting in a login/password prompt, the port couldn&#039;t be accessed. The new &amp;lt;var&amp;gt;[https://m204wiki.rocketsoftware.com/index.php/WEBDFLT_parameter WEBDFLT]&amp;lt;/var&amp;gt; parameter may be set to 1 for reversion to the old default of ALLOW *. Under V7.7, this new parameter was enabled with the application of zap 77z090. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;var&amp;gt;RESET WEBDFLT&amp;lt;/var&amp;gt; requires system administrator privileges. It is recommended to reset the 1 bit of &amp;lt;var&amp;gt;WEBDFLT&amp;lt;/var&amp;gt; to zero after issuing a series of &amp;lt;var&amp;gt;JANUS DEFINE&amp;lt;/var&amp;gt; commands which need WEBDFLT=1, as in the CCAIN input stream.&lt;br /&gt;
&lt;br /&gt;
==New and changed statistics==&lt;br /&gt;
===MPR, MBO, MCP, and RCV===&lt;br /&gt;
Introduced in zap 77Z257.&lt;br /&gt;
&amp;lt;p&amp;gt;These statistics provide high water mark transaction information. (Since-last values will not be available until V78 GA.)&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;They are useful in conjunction with the &amp;lt;var&amp;gt;MAXPRE&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;MAXBOUT&amp;lt;/var&amp;gt;, and &amp;lt;var&amp;gt;MAXSUBT&amp;lt;/var&amp;gt; parameters. &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
User/system statistics:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;MPR: High water mark of transaction pre-images. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;MBO: High water mark of transaction backout pages. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;MCP: High water mark of transaction chkpoint spans. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
System statistics: &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;RCV: Number of blocks needed for subtransaction recovery &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt; &lt;br /&gt;
&amp;lt;p class=&amp;quot;note&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Notes:&amp;lt;/b&amp;gt; M204.0843 now displays the RCV statistic for subtransaction checkpoints.&lt;br /&gt;
The size of recovery checkpoint must be greater than the sum of the last RCV value plus the number of records in [https://m204wiki.rocketsoftware.com/index.php/System_and_media_recovery#RESTART_recovery_considerations_for_sub-transaction_checkpoints RESTART and RESTARTS].&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
===DKWTS and DKWTMICS===&lt;br /&gt;
Introduced in zap 77z7289.&lt;br /&gt;
&amp;lt;p&amp;gt;The new system statistics DKWTS (DisK WaiTs) and DKWTMICS (DisK WaiT MICroSeconds) collect data to provide rough disk I/O service time numbers.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
DKWTS shows the number of disk I/O waits. DKWTMICS shows the total wait time for those waits in microseconds. Dividing the difference in DKWTMICS by the difference in DKWTS over an interval provides the average disk I/O wait time in microseconds.              &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;note&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Notes:&amp;lt;/b&amp;gt; &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The wait time does include internal Model 204 scheduler delays, so on a CPU bound Model 204 system, the service times calculated from DKWTS and DKWTMICS are likely to be an overestimate of actual service times.&amp;lt;/li&amp;gt;  &lt;br /&gt;
                                                                    &lt;br /&gt;
&amp;lt;li&amp;gt;DKWTS and DKWTMICS are not available in SirMon; use [https://m204wiki.rocketsoftware.com/index.php/MONITOR_command MONITOR] SYSTEM STATISTICS to view these statistics.&amp;lt;/li&amp;gt;&amp;lt;/ul&amp;gt;  &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Compatibility issues==&lt;br /&gt;
===&amp;lt;b id=&amp;quot;listNewInit&amp;quot;&amp;gt;&amp;lt;/b&amp;gt;$ListNew cannot be used in Initial clause===&lt;br /&gt;
It is now a compilation error if &amp;lt;var&amp;gt;$ListNew&amp;lt;/var&amp;gt; is attempted to be used in the &amp;lt;var&amp;gt;Initial&amp;lt;/var&amp;gt; clause of a &lt;br /&gt;
[https://m204wiki.rocketsoftware.com/index.php/Using_variables_and_values_in_computation#Declare_statements_for_.25variables declaration statement].&lt;br /&gt;
&amp;lt;p&amp;gt;This change is propagated by zap maintenance to versions 7.5 (zap 75Z487), 7.6 (zap 76Z514), and 7.7 (zap 77Z281) of Model 204.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote class=&amp;quot;note&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Note:&amp;lt;/b&amp;gt; Strictly speaking, this would not be considered a compilation error, because previously although &amp;lt;code&amp;gt;..&amp;amp;nbsp;Initial($ListNew)&amp;lt;/code&amp;gt; did not produce a compilation error, in almost all circumstances it would produce a snap if the initialized %variable were used with some other &amp;lt;var&amp;gt;$List&amp;lt;i&amp;gt;xxx&amp;lt;/i&amp;gt;&amp;lt;/var&amp;gt; invocation.&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Restricting the use of the CUSTOM=38 setting===&lt;br /&gt;
The [[CUSTOM parameter|CUSTOM=38]] parameter setting, introduced at V7.5, inadvertently provided System Manager privileges to all users via the RESET command. This CUSTOM setting is now restricted to the RESETting of the LAUDIT parameter.&lt;br /&gt;
&lt;br /&gt;
===Disabling of Closure support===&lt;br /&gt;
Due to a number of bugs related to Closure support, introduced at V7.7, this feature, which can best be described as exposed methods assigned to method variables, has been disabled in this release. This change was also made to V7.7 with application of zap 77z119.&lt;br /&gt;
&lt;br /&gt;
===Password delimiter enforced===&lt;br /&gt;
When using IFSTRTN to logon to a Model 204 online from an IFAM2 application, both the logonid and password must be followed by a semicolon - the delimiter.             &lt;br /&gt;
For example:      &lt;br /&gt;
                                      &lt;br /&gt;
CALL IFSTRTN(RC,&#039;logonid;password;&#039;...)&lt;br /&gt;
                 &lt;br /&gt;
If a semicolon does not follow the password string, the following message will now be issued&lt;br /&gt;
&lt;br /&gt;
M204.2964: Password missing or too long                  &lt;br /&gt;
                                                         &lt;br /&gt;
Previously, a semicolon following the password was not required and the first blank served as a password delimiter.  However, as of V7.7, embedded blanks are valid password characters and a semicolon is now required to delimit the password.&lt;br /&gt;
&lt;br /&gt;
This change has also been enabled within V7.7 with the application of zap 77z231.&lt;br /&gt;
&lt;br /&gt;
===PAGESZ parameter validated===&lt;br /&gt;
Previously it was possible to set the PAGESZ parameter to any value, although Model 204 internally supports one page size of 6184, and any deviation from this value would have led to problems during file creation. The value of this parameter is now controlled, such that setting it to any value other than 6184 will generate an M204.1149 message with the parameter being reset to 6184.&lt;br /&gt;
&lt;br /&gt;
===ECPRIV and the IDCAMS facility===&lt;br /&gt;
At V7.7 a security loophole was closed, whereby all ECF modules were run under external-authorizer profile of the calling user. Previously any ECF tasks were run under the owning job&#039;s external-authorizer profile, and in order for certain sites to retain that ability, a new setting of ECPRIV, value 4, was introduced to retain the ability to run ECF tasks using the job&#039;s security profile. &lt;br /&gt;
&lt;br /&gt;
The ECPRIV 4 setting potentially introduced a security loophole when calling the IDCAMS interface, based upon what the IDCAMS utility is able to do at a system level. Consequently as of this release, the ECPRIV 4 setting will be ignored when calling the IDCAMS facility via ECF, and such IDCAMS processes will always use the calling user&#039;s security profile. Any existing jobs that use ECF to call the IDCAMS utility with the ECFPRIV 4 bit set should be checked to ensure that the calling user&#039;s security profile still satisfies the job&#039;s requirements.&lt;br /&gt;
&lt;br /&gt;
===TCPOPTS is view only===&lt;br /&gt;
In previous releases the TCPOPTS parameter, which identifies the type of IP addressing in use ( v4 or v6 ), was resetable, although it was always documented as a view-only parameter. The parameter is now handled as a view-only parameter, and any attempts to reset the parameter will result in&lt;br /&gt;
&lt;br /&gt;
   M204.1123: Parameter TCPOPTS not reset&lt;br /&gt;
&lt;br /&gt;
===ZHPF command can only be issued by a system manager===&lt;br /&gt;
In previous releases it was possible to issue the ZHPF command without being logged on. From this release onwards, a user would have to be logged on with system manager privileges to be able to issue this command.&lt;br /&gt;
&lt;br /&gt;
Additionally, the command output will now only  display results for currently open files.&lt;br /&gt;
&lt;br /&gt;
This changes has been enabled within v7.7 with the application of zap 77z264.&lt;br /&gt;
&lt;br /&gt;
===Terminal MODEL reset failure===&lt;br /&gt;
If a reset of the terminal MODEL parameter fails due to an under sized output page buffer, then in addition to the existing messages that inform the user of this failure&lt;br /&gt;
&lt;br /&gt;
    M204.1875 UNABLE TO RESET MODEL TO %C &lt;br /&gt;
    M204.1123: Parameter MODEL not reset  &lt;br /&gt;
&lt;br /&gt;
the following message will now be issued&lt;br /&gt;
&lt;br /&gt;
    M204.1008: LOUTPB must be increased to at least &amp;lt;number&amp;gt; &lt;br /&gt;
                                                         &lt;br /&gt;
where &amp;lt;number&amp;gt; is the minimum value of LOUTPB necessary to support the terminal model.&lt;br /&gt;
&lt;br /&gt;
This change is enabled in V7.7 with the application of zap 77z309.&lt;br /&gt;
&lt;br /&gt;
==New and changed messages==&lt;br /&gt;
&lt;br /&gt;
See [[New and updated messages in Model 204 version 7.8|New and updated messages in Model 204 version 7.8]] for details.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category: Release notes]]&lt;/div&gt;</summary>
		<author><name>ELowell</name></author>
	</entry>
	<entry>
		<id>https://m204wiki.rocketsoftware.com/index.php?title=Release_notes_for_Model_204_version_7.8&amp;diff=117660</id>
		<title>Release notes for Model 204 version 7.8</title>
		<link rel="alternate" type="text/html" href="https://m204wiki.rocketsoftware.com/index.php?title=Release_notes_for_Model_204_version_7.8&amp;diff=117660"/>
		<updated>2019-08-28T22:05:18Z</updated>

		<summary type="html">&lt;p&gt;ELowell: /* Call stack trace for problem diagnosis */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
These release notes list the enhancements and other changes contained in Model 204 version 7.8. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;&amp;lt;b&amp;gt;******THIS IS A DRAFT DOCUMENT.******&amp;lt;/b&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
These release notes list the enhancements and other changes contained in Model 204 version 7.8, &amp;lt;b&amp;gt;&amp;lt;i&amp;gt;which is still in development&amp;lt;/i&amp;gt;&amp;lt;/b&amp;gt;. Until the commercial release of the software, Rocket reserves the right to add to, remove, or change anything described herein. &lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
These release notes contain installation and features information for the Rocket Model 204 version 7.8 release.&lt;br /&gt;
Before beginning your installation, please read through this information about product installation and changes.&lt;br /&gt;
&lt;br /&gt;
==SOUL enhancements==&lt;br /&gt;
===AmIndependent method===&lt;br /&gt;
The &amp;lt;var&amp;gt;AmIndependent&amp;lt;/var&amp;gt; method returns TRUE for daemons spawned by &amp;lt;var&amp;gt;[http://m204wiki.rocketsoftware.com/index.php/RunIndependently_(Daemon_subroutine) RunIndependently]&amp;lt;/var&amp;gt;. (The action of &amp;lt;var&amp;gt;[https://m204wiki.rocketsoftware.com/index.php/AmDaemon_(Daemon_property) AmDaemon]&amp;lt;/var&amp;gt; remains unchanged.)&lt;br /&gt;
&lt;br /&gt;
The following table shows the values returned by &amp;lt;var&amp;gt;AmIndependent&amp;lt;/var&amp;gt; versus &amp;lt;var&amp;gt;AmDaemon&amp;lt;/var&amp;gt; for different daemon types:&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Type&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;AmDaemon&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;AmIndependent&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;$COMBG&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;False&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;False&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Independent daemon&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;False&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;True&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Other daemon&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;True&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;False&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Web, etc.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;False&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;False&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===$ProcOpn===&lt;br /&gt;
&amp;lt;var&amp;gt;[https://m204wiki.rocketsoftware.com/index.php/$ProcOpn $ProcOpn]&amp;lt;/var&amp;gt; now supports the opening of a procedure with an all numeric name, and including a leading zero, e.g.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;%result = $procOpn(&#039;0123&#039;, &#039;MYFILE&#039;)&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Support for such procedures names was initially introduced at v7.7, and this feature of &amp;lt;var&amp;gt;$ProcOpn&amp;lt;/var&amp;gt; is also enabled within v7.7 with the application of zap 77z054.&lt;br /&gt;
&lt;br /&gt;
===Allow parentheses to surround a boolean enumeration object===&lt;br /&gt;
The following sample code&lt;br /&gt;
&lt;br /&gt;
   begin                                       &lt;br /&gt;
   variables are undefined                  &lt;br /&gt;
   %isValid is boolean initial (True)       &lt;br /&gt;
   if (%isValid) then                  &lt;br /&gt;
      print &#039;in IF&#039;                            &lt;br /&gt;
   end if                                   &lt;br /&gt;
   end         &lt;br /&gt;
&lt;br /&gt;
will now compile and run successfully, as &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;if (%isValid) then &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
is logically equivalent to&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;if %isValid then &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Prior to V7.8 the presence of parentheses surrounding the boolean enumeration object would have caused a compilation error. This change is enabled in V7.7 with the application of zap 77z370.&lt;br /&gt;
&lt;br /&gt;
===Support for copying Object class objects===&lt;br /&gt;
The Object class now supports the copy and deepCopy methods. For example, and Object object can be copied as follows&lt;br /&gt;
&lt;br /&gt;
   begin               &lt;br /&gt;
   %x is object object &lt;br /&gt;
   %y is object object &lt;br /&gt;
   %y = new            &lt;br /&gt;
   %x = %y:copy        &lt;br /&gt;
   end&lt;br /&gt;
&lt;br /&gt;
This change is enabled in v7.7 with the application of zap 77z076, and within V7.6 with the application of zap 76z412.&lt;br /&gt;
&lt;br /&gt;
===Assignment of enumeration values to method variables===&lt;br /&gt;
Enumerations values can now be assigned to method variables whose result is an enumeration.So for example the following code&lt;br /&gt;
&lt;br /&gt;
   begin                                               &lt;br /&gt;
   enumeration colour                                  &lt;br /&gt;
      public                                           &lt;br /&gt;
         value red                                     &lt;br /&gt;
         value white                                   &lt;br /&gt;
         value blue                                    &lt;br /&gt;
      end public                                       &lt;br /&gt;
   end enumeration                                     &lt;br /&gt;
   %func    is function getColour is enumeration colour&lt;br /&gt;
   local function getColour is enumeration colour      &lt;br /&gt;
      return blue                                      &lt;br /&gt;
   end function                                        &lt;br /&gt;
   %func    = getColour                                &lt;br /&gt;
   %func    = (colour):red                             &lt;br /&gt;
   printText {~=%(Local):(%func)}                      &lt;br /&gt;
   end  &lt;br /&gt;
&lt;br /&gt;
will produce the result&lt;br /&gt;
&lt;br /&gt;
   %(Local):(%func)=red&lt;br /&gt;
&lt;br /&gt;
whereas previously the line   &lt;br /&gt;
&lt;br /&gt;
   %func    = (colour):red    &lt;br /&gt;
&lt;br /&gt;
would have been rejected with the message&lt;br /&gt;
&lt;br /&gt;
   MSIR.0993: Assignment invalid: mismatch between method and method variable&lt;br /&gt;
&lt;br /&gt;
This change is enabled in V7.7 with the application of zap 77z128.&lt;br /&gt;
&lt;br /&gt;
==External Call Facility enhancements==&lt;br /&gt;
===Managing ECF tables more efficiently===&lt;br /&gt;
The are two new features to help manage ECF tables more efficiently, avoid conditions where the table can fill, and prevent the definition of further entities.&lt;br /&gt;
&lt;br /&gt;
The first feature is the new  &amp;lt;var&amp;gt;DISPLAY ECF&amp;lt;/var&amp;gt; command, which displays the contents of ECF tables and also the current status of users accessing ECF modules. See more details of the &amp;lt;var&amp;gt;[[#DISPLAY ECF|DISPLAY ECF]]&amp;lt;/var&amp;gt; command below.&lt;br /&gt;
&lt;br /&gt;
The second feature is a new &amp;lt;var&amp;gt;EXTERNAL REMOVE&amp;lt;/var&amp;gt; statement with the syntax&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;EXTERNAL REMOVE &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;modulename&amp;lt;/span&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This causes the entry for the named module to be removed from the module table. The table entry is then placed on a free chain of entries and can be reused by issuing the EXTERNAL MODULE statement. This allows the module table to be managed with redundant entries removed, without having to recycle the ONLINE.&lt;br /&gt;
&lt;br /&gt;
A EXTERNAL REMOVE statement will return $status/$statusd values of 0/0, and most other status values that can be returned by the EXTERNAL REMOVE statement are already documented in the ECF return codes table. If an EXTERNAL REMOVE is attempted against a module that is currently being called ( in use ), then $status/$statusd will return the values 20/1 ( module unavailable).&lt;br /&gt;
&lt;br /&gt;
==System enhancements==&lt;br /&gt;
&lt;br /&gt;
===New wait types for daemon/master waits===&lt;br /&gt;
&lt;br /&gt;
Two new wait types, viewable on the &amp;lt;var&amp;gt;[https://m204wiki.rocketsoftware.com/index.php/MONITOR_command MONITOR] USERS&amp;lt;/var&amp;gt; command output, have been implemented as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;57&amp;lt;/code&amp;gt; - Means a daemon thread waiting for its master thread  &amp;lt;br /&amp;gt;     &lt;br /&gt;
&amp;lt;code&amp;gt;58&amp;lt;/code&amp;gt; - Means a master thread waiting for one of its daemon threads&lt;br /&gt;
&lt;br /&gt;
This change is enabled in V7.7 with the application of zap 77z410.&lt;br /&gt;
&lt;br /&gt;
===Snap formatting changes===&lt;br /&gt;
Date/time stamps in the page headers of snaps will now be shown normal format, rather than in julian format as in previous releases. Thus in the following example a particular snap header under v7.7 or previous releases would show as &lt;br /&gt;
&lt;br /&gt;
   SNAPID    1   19226.060155  M204.0022: Bug .. nnnnn               PAGE     1&lt;br /&gt;
&lt;br /&gt;
whereas the same snap header under v7.8 would show as &lt;br /&gt;
&lt;br /&gt;
   SNAPID    1  2019/08/14 06:01:06   M204.0022: Bug .. nnnnn        PAGE     1&lt;br /&gt;
&lt;br /&gt;
Also, due to improvements in handling trailing blanks in snap output, a snap generated under v7.8 should be marginally smaller than the same snap generated under previous releases, assuming the same SNAPCTL settings.&lt;br /&gt;
&lt;br /&gt;
===Call stack trace for problem diagnosis===&lt;br /&gt;
A  call stack trace is now provided to help diagnose and resolve common errors. To enable the stack trace, do either of the following: &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Set the &amp;lt;var&amp;gt;[[SIRFACT parameter|SIRFACT]] X&#039;01&#039;&amp;lt;/var&amp;gt; bit.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Set the &amp;lt;var&amp;gt;[[DEBUGUL parameter|DEBUGL]]&amp;lt;/var&amp;gt; parameter. Note that the &amp;lt;var&amp;gt;DEBUGUL&amp;lt;/var&amp;gt; approach will introduce extra QTBL overhead. &amp;lt;p&amp;gt;(&amp;lt;var&amp;gt;DEBUGUL&amp;lt;/var&amp;gt; provides a similar facility with an include trace of procedures leading to the error, but this might not be potentially as useful as the call trace.)&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt; &lt;br /&gt;
&lt;br /&gt;
The call stack trace can assist in diagnosing run-time errors that might occur, as illustrated by the following &amp;quot;variable too small for result&amp;quot; and &amp;quot;MBSCAN&amp;quot; examples.&lt;br /&gt;
&lt;br /&gt;
====Variable too small for result====&lt;br /&gt;
When the stack trace is enabled, a &amp;quot;variable too small&amp;quot; error results in the following message:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;M204.2966: Error at line n, procedure &#039;&#039;procname&#039;&#039; in file &#039;&#039;procfile&#039;&#039;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
which identifies the line within a procedure where the error is occurring, in addition to the usual message:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;M204.0552: Variable too small for result&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Any subsequent M204.2966 messages indicate the point in the code from where the code in error was called. For example, a stack of three subroutine calls leading to a &amp;quot;variable too small&amp;quot; error might result in the following messaging:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;   M204.0552: Variable too small for result                             &lt;br /&gt;
   M204.2966: Error at line 9, procedure MYPROC.LEVEL4 in file MYPROC   &lt;br /&gt;
   M204.2966: Called from line 5, procedure MYPROC.LEVEL3 in file MYPROC&lt;br /&gt;
   M204.2966: Called from line 5, procedure MYPROC.LEVEL2 in file MYPROC&lt;br /&gt;
   M204.2966: Called from line 5, procedure MYPROC.LEVEL1 in file MYPROC &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This information should help in diagnosing the problem. &lt;br /&gt;
&lt;br /&gt;
If the error occurs within a command level program rather than a procedure, then the M204.2966 message is replaced by an M204.2967 message, and a similar error condition to the above with a preceding call stack might be audited as follows:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;   M204.0552: Variable too small for result              &lt;br /&gt;
   M204.2967: Error at line 14 of command level program  &lt;br /&gt;
   M204.2967: Called from line 5 of command level program&lt;br /&gt;
   M204.2967: Called from line 3 of command level program &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If neither &amp;lt;var&amp;gt;SIRFACT X&#039;01&#039;&amp;lt;/var&amp;gt; nor &amp;lt;var&amp;gt;DEBUGUL&amp;lt;/var&amp;gt; is set, then the &amp;quot;variable too small&amp;quot; error produces the following messages:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;   M204.0552: Variable too small for result &lt;br /&gt;
   M204.2968: Error: no debug info &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====MBSCAN exceeded====&lt;br /&gt;
Similarly to the handling of the &amp;quot;variable too small for result&amp;quot; error, the call stack can also be used to diagnose errors where MBSCAN is exceeded as a result of a direct search of Table B records. Again, under V7.8, if either the &amp;lt;var&amp;gt;SIRFACT X&#039;01&#039;&amp;lt;/var&amp;gt; bit is set, or &amp;lt;var&amp;gt;DEBUGUL&amp;lt;/var&amp;gt; is set, then if a long request occurs as a result of exceeding MBSCAN, then initially the following message is produced:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;   M204.0569: File &#039;&#039;filename&#039;&#039;, Find: Table B records to be searched = &#039;&#039;nnnn&#039;&#039;&amp;lt;/p&amp;gt;&lt;br /&gt;
as before, with a DYRWT prompt message. If the user replies &#039;N&#039; to the prompt, or if the request is run in an environment (for example a batch job) where the default response is &#039;N&#039;, the following message is produced after the M204.0569 message:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;Cancelling request: M204.2969: MBSCAN (&#039;&#039;mm&#039;&#039;) exceeded, records to be searched = &#039;&#039;nnnn&#039;&#039;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
where &#039;&#039;mm&#039;&#039; is the current setting of MBSCAN. The M204.2969 will be followed by M204.2966 messages display the call stack trace. Thus, if the following code &lt;br /&gt;
&lt;br /&gt;
   b                           &lt;br /&gt;
   call sub1                   &lt;br /&gt;
   sub1: subroutine            &lt;br /&gt;
   fd1:                        &lt;br /&gt;
      in clients fd city = ONTARIO&lt;br /&gt;
              end find         &lt;br /&gt;
      fr fd1                      &lt;br /&gt;
         pai                      &lt;br /&gt;
         print                    &lt;br /&gt;
      end for                     &lt;br /&gt;
   end subroutine              &lt;br /&gt;
   end  &lt;br /&gt;
&lt;br /&gt;
is run from proc MYPROC.MBSCAN aganst the demo database with an MBSCAN setting of 10, then the following messages will be produced, assuming any prompts are responded to with an &#039;N&#039;&lt;br /&gt;
&lt;br /&gt;
   M204.0569: File CLIENTS, Find: Table B records to be searched = 3415&lt;br /&gt;
   Cancelling request: M204.2969: MBSCAN (10) exceeded, records to be searched = 3415                       &lt;br /&gt;
   M204.2966: Error at line 6, procedure MYPROC.MBSCAN in file MYPROC&lt;br /&gt;
   M204.2966: Called from line 3, procedure MYPROC.MBSCAN in file MYPROC&lt;br /&gt;
&lt;br /&gt;
===appendJournalData===&lt;br /&gt;
The &amp;lt;var&amp;gt;[[AppendJournalData_(Stringlist_function)|AppendJournalData]]&amp;lt;/var&amp;gt; function is now more tolerant of an outstanding BUMP request. Previously, if &amp;lt;var&amp;gt;AppendJournalData&amp;lt;/var&amp;gt; was called to inadvertently retrieve a large amount of journal data, typically when called implicitly from within SirScan, then any outstanding BUMP request wouldn&#039;t be honored until all of the data had been retrieved, at which point the BUMP request would be completed, and all data would be lost.&lt;br /&gt;
&lt;br /&gt;
Now, the &amp;lt;var&amp;gt;AppendJournalData&amp;lt;/var&amp;gt; process will check for outstanding BUMP requests before each track I/O is executed, thus avoiding excessive I/Os against the journal and long waits for the BUMP of such a process to complete.&lt;br /&gt;
&lt;br /&gt;
==Recovery enhancements==&lt;br /&gt;
===Media Recovery in a multi-user environment===&lt;br /&gt;
It is now possible to perform media recovery by issuing the &amp;lt;var&amp;gt;REGENERATE&amp;lt;/var&amp;gt; command to roll forward selected files in a multi-user environment, with the media recovery being carried out by different users with system manager privileges. The new USING option allows for the specification of a ddname for the input journal stream to be used by the &amp;lt;var&amp;gt;REGENERATE&amp;lt;/var&amp;gt; command. Previously media recovery was restricted to single user batch jobs, using the CCAGEN ddname for the input journal. For more details, see the &amp;lt;var&amp;gt;[[#REGENERATE|REGENERATE]]&amp;lt;/var&amp;gt; command below.&lt;br /&gt;
&lt;br /&gt;
==Security enhancements==&lt;br /&gt;
===CA-Top Secret can disallow CCASTAT logins===&lt;br /&gt;
The [https://m204wiki.rocketsoftware.com/index.php/CA-Top_Secret_interface CA-Top Secret] interface now recognizes the &amp;lt;code&amp;gt;DEFACID=&amp;lt;/code&amp;gt;, setting and does not allow CCASTAT logins in the online if &amp;lt;code&amp;gt;DEFACID&amp;lt;/code&amp;gt; is set to null. (There is no attempt to log on M204USR.) Therefore, to disallow CCASTAT logons, set DEFACID=, in [https://m204wiki.rocketsoftware.com/index.php/CA-Top_Secret_interface#Preparing_a_TOPSPARM_parameter_module_with_TOPSGEN TOPSPARM]. CCASTAT will be opened because it contains file and group passwords, but it will not be used for logons if CCASTAT logons are not allowed.&lt;br /&gt;
&lt;br /&gt;
===CUSTOM=11 and mixed cased input===&lt;br /&gt;
The &amp;lt;var&amp;gt;[https://m204wiki.rocketsoftware.com/index.php/CUSTOM_parameter CUSTOM]&amp;lt;/var&amp;gt; parameter CUSTOM=11 setting no longer requires that a *LOWER command be issued prior to a LOGCTL command (to add or change a  password) to preserve mixed case input. Prior to this release, with CUSTOM=11 in place, *LOWER had to be issued before a LOGCTL command, otherwise any mixed case password strings would automatically be translated into uppercase. This change is enabled within V7.7 with the application of zap 77z108.&lt;br /&gt;
&lt;br /&gt;
===DEFUSER can specify a jobname not authorized to access M204===&lt;br /&gt;
When specifying DEFUSER=JOBNAME and VALIDAT=LOGON in the RACFGEN parms for an ONLINE, if the specified jobname ( the owning id for the ONLINE job ) isn&#039;t authorized to use Model 204 via RACF, any LOGIN commands specifying no userid will now succeed ( previously such a LOGON would have failed ). This enables users to submit jobs with USE $JOB, whereby the string USER=jobname  will be added to the submitted JCL, and this in turn is useful if the specified jobname has dataset access privileges to datasets required by the submitted jobs, even if the jobname itself isn&#039;t authorized to use M204.&lt;br /&gt;
&lt;br /&gt;
==Janus product enhancements==&lt;br /&gt;
&lt;br /&gt;
===Janus Web Server access rule===&lt;br /&gt;
The automatic &amp;lt;var&amp;gt;[[JANUS WEB ALLOW]]&amp;lt;/var&amp;gt; rule, which allowed any user to access the port without requiring a login, is changed &amp;lt;i&amp;gt;for non-SSL ports&amp;lt;/i&amp;gt; to the following:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;JANUS WEB &amp;lt;i&amp;gt;portname&amp;lt;/i&amp;gt; DISALLOW *&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
This rule requires a system administrator to explicitly define &amp;lt;var&amp;gt;ALLOW&amp;lt;/var&amp;gt; rules to enable users to access non-SSL ports.&lt;br /&gt;
The rule applies unless overridden by user-added rules. &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;blockquote class=&amp;quot;note&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;b&amp;gt;Note:&amp;lt;/b&amp;gt; To revert from this change in the JANUS DEFINE default and make the default &lt;br /&gt;
 non-SSL &amp;lt;var&amp;gt;ALLOW&amp;lt;/var&amp;gt; rule as it was in version 7.5 and earlier (&amp;lt;code&amp;gt;ALLOW *&amp;lt;/code&amp;gt;), turn on the 1 bit of the &amp;lt;var&amp;gt;[[WEBDFLT parameter|WEBDFLT]]&amp;lt;/var&amp;gt; parameter: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;RESET WEBDFLT=1&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Increase in pending accepts for Janus BPX ports===&lt;br /&gt;
The default number of pending accepts for Janus BPX server ports has been increased from 3 to 12, thus reducing the likelihood that a pending accept may fail with the message&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;MSIR.0019 Connection request rejected for port (port), MAXCON exceeded&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The actual number of pending accepts to be supported on the port can be set with the new parameter MAXPEND, set on the &amp;lt;var&amp;gt;[[JANUS_DEFINE|JANUS DEFINE]]&amp;lt;/var&amp;gt; command, where MAXPEND can vary from 3 up to a maximum value of 32. The change to the default value was enabled within V7.7 with the application of zap 77z269.&lt;br /&gt;
&lt;br /&gt;
===TCP listen backlog increased===&lt;br /&gt;
&lt;br /&gt;
The [https://m204wiki.rocketsoftware.com/index.php/Program_Communication_facilities#LISTEN_call TCP_listen] backlog has been increased from 16 to 1024 under z/OS.&lt;br /&gt;
&lt;br /&gt;
This update tells the TCP stack to queue up to 1024 of such requests up before dropping them, thus reducing, or in most cases eliminating, the likelihood of a connection request drop, other than in exceptional circumstances, such as a denial of service attack. This change was enabled within V7.7 with the application of zap 77z340.&lt;br /&gt;
&lt;br /&gt;
===Defer the freeing of XMLSCREEN input XML===&lt;br /&gt;
&lt;br /&gt;
The freeing of [https://m204wiki.rocketsoftware.com/index.php/XMLSCREEN_and_NOXMLSCREEN_(JANUS_DEFINE_parameters) XMLSCREEN] input XML is now deferred until the next Read Screen or session termination. This means that if an application error is detected, the input XML can be retrieved with [https://m204wiki.rocketsoftware.com/index.php/$Web_Input_Content $Web_Input_Content] and then logged for problem analysis. &lt;br /&gt;
&lt;br /&gt;
Prior to this release the XML received from the client is freed immediately after being used to set the input data for a Read Screen, rendering it unavailable for problem determination.&lt;br /&gt;
&lt;br /&gt;
This change is enabled in V7.7 with the application of zap 77z368.&lt;br /&gt;
&lt;br /&gt;
===XMLSCREEN and Janus Web Legacy blank stripping===&lt;br /&gt;
&lt;br /&gt;
xmlScreens and Janus Web Legacy screens now adhere to the same standard as standard screen processing in terms of stripping leading blanks from input fields defined as [https://m204wiki.rocketsoftware.com/index.php/Full-screen_feature#DEBLANK_or_NODEBLANK_option DEBLANK] (either explicitly or implicitly).&lt;br /&gt;
&lt;br /&gt;
This change is enabled in V7.7 with the application of zap 77z400.&lt;br /&gt;
&lt;br /&gt;
===SSL input buffer size===&lt;br /&gt;
&lt;br /&gt;
The default value of [https://m204wiki.rocketsoftware.com/index.php/SSLIBSIZE_(JANUS_DEFINE_parameter) SSLIBSIZE] has been increased to 16384 + 128, or 16512. This size should ensure correct communication with all TLS spec compliant applications. It is the maximum size allowed unless you use [https://m204wiki.rocketsoftware.com/index.php/CUSTOM_parameter#Using_CUSTOM.3D.2818.29 CUSTOM=18].    &lt;br /&gt;
&lt;br /&gt;
This changed is enabled within V7.7 with the application of zap 77z415.&lt;br /&gt;
&lt;br /&gt;
===Increasing LDAP buffers===&lt;br /&gt;
&lt;br /&gt;
The number of LDAP buffers allocated at startup can now be changed by setting the NLDAPBUF parameter in CCAIN. See below for details on [[#NLDAPBUF|NLDAPBUF]].&lt;br /&gt;
&lt;br /&gt;
==Debugger enhancements==&lt;br /&gt;
&lt;br /&gt;
===Access to exposed variables===&lt;br /&gt;
The debuggers can now view or watch the values of variables exposed to local routines/methods. Previously, any attempts to access an exposed variable would have displayed &amp;quot;%varname has no value&amp;quot; in the debugger session. (This feature is enabled within V7.7 with the application of zap 77z363.)&lt;br /&gt;
&lt;br /&gt;
==Performance enhancements==&lt;br /&gt;
&lt;br /&gt;
===X3270OUT exit offloadable===&lt;br /&gt;
When running MP/204 (AMPSUBS&amp;gt;0) and using the [https://m204wiki.rocketsoftware.com/index.php/Coding_SNA_Communications_Server_conversion_exit_routines#X3270OUT_.28convert_output_from_3270_format.29 X3270OUT] exit to convert a 3270 output data stream to the appropriate device protocol, the exit can now run in parallel mode to improve performance. This change was enabled in V7.7 with the application of zap 77Z313.&lt;br /&gt;
&lt;br /&gt;
The X3270OUT exit must be written to be re-entrant.&lt;br /&gt;
&lt;br /&gt;
==New and changed commands==&lt;br /&gt;
===DISPLAY ECF===&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;DISPLAY ECF {{ M | N | U } like ?} &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This new command displays details from ECF tables, or the current status of users accessing ECF modules.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;syntax&amp;quot;&amp;gt;D ECF M&amp;lt;/span&amp;gt; displays the contents of the module table. For example:&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;    D ECF M &lt;br /&gt;
    Module   Loadlib  Address:Length     Loaded@      Lastused@   #Calls  Flags &lt;br /&gt;
    QATUM13C PROGLIB 2FB91FB8:00000028 19023:121506 19023:121506 00000001 &lt;br /&gt;
    QATUM13B PROGLIB 2FE65000:00009C18 19023:121506 19023:121506 00000001 &lt;br /&gt;
    QATUM13A PROGLIB 2FE6EC18:00001CD8 19023:121506 19023:121506 00000001  &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
(flags may be D=deleted; S=shared; H=halted; I=Idle)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;syntax&amp;quot;&amp;gt;D ECF N&amp;lt;/span&amp;gt; displays contents of the name table. For example: &amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;    D ECF N&lt;br /&gt;
    Module   Logical-call-name &lt;br /&gt;
    QATUM13C MOD_QATUM13C &lt;br /&gt;
    QATUM13B MOD_QATUM13B &lt;br /&gt;
    QATUM13A MOD_QATUM13A &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;syntax&amp;quot;&amp;gt;D ECF U&amp;lt;/span&amp;gt; displays details of users currently accessing ECF modules. This is also the default option, and so &amp;lt;span class=&amp;quot;syntax&amp;quot;&amp;gt;D ECF&amp;lt;/span&amp;gt; will display the same output as &amp;lt;span class=&amp;quot;syntax&amp;quot;&amp;gt;D ECF U&amp;lt;/span&amp;gt;. For example:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;    D ECF U                           &lt;br /&gt;
    User# Userid     Module   Parmlen &lt;br /&gt;
    00002 ADMIN      --none--         &lt;br /&gt;
    00003 ADMIN      COBSAMP1 00000002&lt;br /&gt;
    00004 ADMIN      COBSAMP1 00000002 &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;syntax&amp;quot;&amp;gt;D ECF LIKE ? &amp;lt;/span&amp;gt; (where &amp;lt;code&amp;gt;?&amp;lt;/code&amp;gt; is a valid pattern) displays details for entities that match the specified pattern.&lt;br /&gt;
&lt;br /&gt;
===REGENERATE===&lt;br /&gt;
The &amp;lt;var&amp;gt;REGENERATE&amp;lt;/var&amp;gt; command can now be run in a multi-user environment by multiple users with system manager privileges. A new option USING is provided to specify the ddname of the input journal, so that the full syntax is now as follows:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;  REGENERATE [USING ddname] FILE filename [FROM dumpname | IGNORE]&lt;br /&gt;
  [TO {LAST UPDATE [BEFORE yy.ddd hh:mm:ss.th] | LAST CHECKPOINT [BEFORE yy.dd hh:mm:ss.th] &lt;br /&gt;
  | UPDATE number OF yy.ddd hh:mm:ss.th | CHECKPOINT yy.ddd hh:mm:ss.th} ]&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The default for the using ddname is CCAGEN, but any ddname may be used to allocate an input journal and used. For example:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;  ALLOCATE REGEN1 WITH SCOPE=SYSTEM DSN=PROD1.GDGJ OLD SEQUENTIAL GEN=+2&lt;br /&gt;
  REGENERATE USING REGEN1 FILE TEST&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It is the user&#039;s responsibility to ensure that the file being regenerated is not in use, and so prior to usage, &amp;lt;var&amp;gt;BUMP FILE&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;STOP FILE&amp;lt;/var&amp;gt; should be used to isolate usage against the file. If the file is in use, the REGEN will fail with these messages:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;  M204.1430: Failed to open file TEST&lt;br /&gt;
  M204.1436: Stopped processing file TEST  &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
$STATUS will now be set for &amp;lt;var&amp;gt;REGENERATE&amp;lt;/var&amp;gt; with the following values:&lt;br /&gt;
&amp;lt;blockquote&amp;gt;    &lt;br /&gt;
    0 - Success &amp;lt;br/&amp;gt;&lt;br /&gt;
    1 - No files were processed &amp;lt;br/&amp;gt;&lt;br /&gt;
    2 - At least one file stopped processing &amp;lt;br/&amp;gt;&lt;br /&gt;
    4 - A serious error occurred, REGEN failed &lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Similarly, &amp;lt;var&amp;gt;SETGRC&amp;lt;/var&amp;gt; may be used to get the return code and error message.&lt;br /&gt;
&lt;br /&gt;
==New and changed parameters==&lt;br /&gt;
&lt;br /&gt;
===ECMODS===&lt;br /&gt;
The new minimum value for ECMODS, the allowable number of ECF modules, is 1. Prior to V7.8 the minimum value was 0. This changed was enabled in V7.7 with the application of zap 77z306.&lt;br /&gt;
&lt;br /&gt;
===ECNAMES===&lt;br /&gt;
The new minimum value for ECNAMES, the allowable number of ECF module names, is 1. Prior to V7.8 the minimum value was 0. This changed was enabled in V7.7 with the application of zap 77z306.&lt;br /&gt;
&lt;br /&gt;
===ECPSIZE===&lt;br /&gt;
The new minimum value for ECPSIZE, the initial storage allocation for ECF parameters, is 1024. Prior to V7.8 the minimum value was 0. This changed was enabled in V7.7 with the application of zap 77z306.&lt;br /&gt;
&lt;br /&gt;
===ENQTIME===&lt;br /&gt;
Millisecond duration of automatic record locking retry wait.&lt;br /&gt;
&lt;br /&gt;
Prior to this change, if record locking conflicts occur frequently in a busy online, any user with a non-zero value for &amp;lt;var&amp;gt;[[ENQRETRY parameter|ENQRETRY]]&amp;lt;/var&amp;gt; will wait at least 3 seconds before the conflict is dealt with. This can degrade overall system performance.      &lt;br /&gt;
                                                         &lt;br /&gt;
The &amp;lt;var&amp;gt;[[ENQTIME parameter|ENQTIME]]&amp;lt;/var&amp;gt; parameter specifies the number of milliseconds waited for each record locking retry wait. ENQTIME can be between 1 and 60000, corresponding to a minimum of 1 millisecond and a maximum of 1 minute. The default value of ENQTIME is 3000 (3 seconds).            &lt;br /&gt;
                                                         &lt;br /&gt;
For example, with ENQTIME = 100 and ENQRETRY = 7, after a record locking conflict occurs the thread will retry 7 times with wait intervals of .1 seconds, and so within at most .7 seconds either the lock becomes available or the conflict triggers an On unit or cancels the request.     &lt;br /&gt;
                                                         &lt;br /&gt;
The ENQTIME parameter may also be reset with $ResetN. &lt;br /&gt;
&lt;br /&gt;
This new parameter was enabled within V7.7 with the application of zap 77z299.&lt;br /&gt;
&lt;br /&gt;
===EVALOPT===&lt;br /&gt;
The new &amp;lt;var&amp;gt;EVALOPT&amp;lt;/var&amp;gt; parameter controls the cancellation of a request on truncation of string data. The default value is 0, and currently there is just one setting, 1, which means &amp;quot;cancel a request if truncation of string data occurs.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
For example, with the default of 0 in place, the following code &amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;    %x is string len 1   &lt;br /&gt;
    %y is string len 2   &lt;br /&gt;
    %y = &#039;ab&#039;            &lt;br /&gt;
    %x = %y              &lt;br /&gt;
    printtext {~} = {%x} &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
would cause silent truncation, and give the result&lt;br /&gt;
    &amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;%x = a &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If &amp;lt;var&amp;gt;EVALOPT&amp;lt;/var&amp;gt; is set to 1, then the above code produces the following message:&lt;br /&gt;
    &amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;M204.0552: Variable too small for result &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and the request is cancelled.&lt;br /&gt;
&lt;br /&gt;
===LFSCB===&lt;br /&gt;
LFSCB, the length of the full screen buffer, now has a new minimum value of 8 ( the previous minimum was 0 ). This change has been enabled within v7.7 with the application of zap 77z042, and within V7.6 with the application of zap 76z393.&lt;br /&gt;
&lt;br /&gt;
===MAXPRE, MAXBOUT, MAXSUBT===&lt;br /&gt;
&amp;lt;p&amp;gt;Introduced in zap 77Z257.&amp;lt;/p&amp;gt;&lt;br /&gt;
The new &amp;lt;var&amp;gt;MAXPRE&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;MAXBOUT&amp;lt;/var&amp;gt;, and &amp;lt;var&amp;gt;MAXSUBT&amp;lt;/var&amp;gt; parameters can be used to cancel a runaway transaction and prevent it from filling the checkpoint data set. &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;MAXPRE&amp;lt;/var&amp;gt;:  Maximum number of pre-images per transaction.  &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;MAXBOUT&amp;lt;/var&amp;gt;: Maximum number of backout pages per transaction. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;MAXSUBT&amp;lt;/var&amp;gt;: Maximum number of subtransaction checkpoints that a transaction can span.&amp;lt;/li&amp;gt;&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;Each new parameter defaults to unlimited. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;If a parameter value is set, a transaction is cancelled if that value is exceeded, and the following message is displayed:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;code&amp;gt;M204.0524: Maximum number (&amp;lt;i&amp;gt;num&amp;lt;/i&amp;gt;) of &amp;lt;i&amp;gt;parameter&amp;lt;/i&amp;gt; exceeded.&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
where &amp;lt;i&amp;gt;num&amp;lt;/i&amp;gt; is the value set for &amp;lt;i&amp;gt;parameter&amp;lt;/i&amp;gt; (&amp;lt;var&amp;gt;MAXPRE&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;MAXBOUT&amp;lt;/var&amp;gt;, or &amp;lt;var&amp;gt;MAXSUBT&amp;lt;/var&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
===NLDAPBUF===&lt;br /&gt;
This new parameter allows the number of LDAP buffers allocated during startup to be set in CCAIN. The default value is 2, and the settable value can range from 0 to 65535.&lt;br /&gt;
&lt;br /&gt;
===PUPDTH (new minimum value)===&lt;br /&gt;
If a user sets the &amp;lt;var&amp;gt;[[PUPDTH parameter|PUPDTH]]&amp;lt;/var&amp;gt; parameter to 0, it will now automatically be increased to 1, its minimum value.&lt;br /&gt;
&lt;br /&gt;
===SERV4G===&lt;br /&gt;
This parameter allows testing of server tables that span a 4-gigabyte boundary. For example, if SERV4G is X&#039;FFFFF000&#039;, each ATB server will begin at XX_FFFFF000. If SERV4G is X&#039;FFFF0000&#039;, each ATB server will begin at XX_FFFF0000. XX is determined by the storage available on the system. The parameter is set in CCAIN.&lt;br /&gt;
&lt;br /&gt;
The contents of the ATB server are specified by using the SERVGA parameter.&lt;br /&gt;
&lt;br /&gt;
For example. if you want VTBL to span the 4G boundary, you can use these settings: SERV4G=X&#039;FFFFF000&#039;, SERVGA=X&#039;00040000&#039;, and LVTBL=200 (6400 bytes, X&#039;1900&#039;). This will force each server&#039;s VTBL to begin at XX_FFFFF000 and end at XX+1_00000900.&lt;br /&gt;
&lt;br /&gt;
===WEBDFLT===&lt;br /&gt;
At V7.7, the default access rule for non-SSL ports was changed from ALLOW * to DISALLOW *, meaning that unless any ALLOW rules were in place resulting in a login/password prompt, the port couldn&#039;t be accessed. The new &amp;lt;var&amp;gt;[https://m204wiki.rocketsoftware.com/index.php/WEBDFLT_parameter WEBDFLT]&amp;lt;/var&amp;gt; parameter may be set to 1 for reversion to the old default of ALLOW *. Under V7.7, this new parameter was enabled with the application of zap 77z090. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;var&amp;gt;RESET WEBDFLT&amp;lt;/var&amp;gt; requires system administrator privileges. It is recommended to reset the 1 bit of &amp;lt;var&amp;gt;WEBDFLT&amp;lt;/var&amp;gt; to zero after issuing a series of &amp;lt;var&amp;gt;JANUS DEFINE&amp;lt;/var&amp;gt; commands which need WEBDFLT=1, as in the CCAIN input stream.&lt;br /&gt;
&lt;br /&gt;
==New and changed statistics==&lt;br /&gt;
===MPR, MBO, MCP, and RCV===&lt;br /&gt;
Introduced in zap 77Z257.&lt;br /&gt;
&amp;lt;p&amp;gt;These statistics provide high water mark transaction information. (Since-last values will not be available until V78 GA.)&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;They are useful in conjunction with the &amp;lt;var&amp;gt;MAXPRE&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;MAXBOUT&amp;lt;/var&amp;gt;, and &amp;lt;var&amp;gt;MAXSUBT&amp;lt;/var&amp;gt; parameters. &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
User/system statistics:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;MPR: High water mark of transaction pre-images. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;MBO: High water mark of transaction backout pages. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;MCP: High water mark of transaction chkpoint spans. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
System statistics: &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;RCV: Number of blocks needed for subtransaction recovery &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt; &lt;br /&gt;
&amp;lt;p class=&amp;quot;note&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Notes:&amp;lt;/b&amp;gt; M204.0843 now displays the RCV statistic for subtransaction checkpoints.&lt;br /&gt;
The size of recovery checkpoint must be greater than the sum of the last RCV value plus the number of records in [https://m204wiki.rocketsoftware.com/index.php/System_and_media_recovery#RESTART_recovery_considerations_for_sub-transaction_checkpoints RESTART and RESTARTS].&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
===DKWTS and DKWTMICS===&lt;br /&gt;
Introduced in zap 77z7289.&lt;br /&gt;
&amp;lt;p&amp;gt;The new system statistics DKWTS (DisK WaiTs) and DKWTMICS (DisK WaiT MICroSeconds) collect data to provide rough disk I/O service time numbers.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
DKWTS shows the number of disk I/O waits. DKWTMICS shows the total wait time for those waits in microseconds. Dividing the difference in DKWTMICS by the difference in DKWTS over an interval provides the average disk I/O wait time in microseconds.              &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;note&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Notes:&amp;lt;/b&amp;gt; &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The wait time does include internal Model 204 scheduler delays, so on a CPU bound Model 204 system, the service times calculated from DKWTS and DKWTMICS are likely to be an overestimate of actual service times.&amp;lt;/li&amp;gt;  &lt;br /&gt;
                                                                    &lt;br /&gt;
&amp;lt;li&amp;gt;DKWTS and DKWTMICS are not available in SirMon; use [https://m204wiki.rocketsoftware.com/index.php/MONITOR_command MONITOR] SYSTEM STATISTICS to view these statistics.&amp;lt;/li&amp;gt;&amp;lt;/ul&amp;gt;  &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Compatibility issues==&lt;br /&gt;
===&amp;lt;b id=&amp;quot;listNewInit&amp;quot;&amp;gt;&amp;lt;/b&amp;gt;$ListNew cannot be used in Initial clause===&lt;br /&gt;
It is now a compilation error if &amp;lt;var&amp;gt;$ListNew&amp;lt;/var&amp;gt; is attempted to be used in the &amp;lt;var&amp;gt;Initial&amp;lt;/var&amp;gt; clause of a &lt;br /&gt;
[https://m204wiki.rocketsoftware.com/index.php/Using_variables_and_values_in_computation#Declare_statements_for_.25variables declaration statement].&lt;br /&gt;
&amp;lt;p&amp;gt;This change is propagated by zap maintenance to versions 7.5 (zap 75Z487), 7.6 (zap 76Z514), and 7.7 (zap 77Z281) of Model 204.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote class=&amp;quot;note&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Note:&amp;lt;/b&amp;gt; Strictly speaking, this would not be considered a compilation error, because previously although &amp;lt;code&amp;gt;..&amp;amp;nbsp;Initial($ListNew)&amp;lt;/code&amp;gt; did not produce a compilation error, in almost all circumstances it would produce a snap if the initialized %variable were used with some other &amp;lt;var&amp;gt;$List&amp;lt;i&amp;gt;xxx&amp;lt;/i&amp;gt;&amp;lt;/var&amp;gt; invocation.&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Restricting the use of the CUSTOM=38 setting===&lt;br /&gt;
The [[CUSTOM parameter|CUSTOM=38]] parameter setting, introduced at V7.5, inadvertently provided System Manager privileges to all users via the RESET command. This CUSTOM setting is now restricted to the RESETting of the LAUDIT parameter.&lt;br /&gt;
&lt;br /&gt;
===Disabling of Closure support===&lt;br /&gt;
Due to a number of bugs related to Closure support, introduced at V7.7, this feature, which can best be described as exposed methods assigned to method variables, has been disabled in this release. This change was also made to V7.7 with application of zap 77z119.&lt;br /&gt;
&lt;br /&gt;
===Password delimiter enforced===&lt;br /&gt;
When using IFSTRTN to logon to a Model 204 online from an IFAM2 application, both the logonid and password must be followed by a semicolon - the delimiter.             &lt;br /&gt;
For example:      &lt;br /&gt;
                                      &lt;br /&gt;
CALL IFSTRTN(RC,&#039;logonid;password;&#039;...)&lt;br /&gt;
                 &lt;br /&gt;
If a semicolon does not follow the password string, the following message will now be issued&lt;br /&gt;
&lt;br /&gt;
M204.2964: Password missing or too long                  &lt;br /&gt;
                                                         &lt;br /&gt;
Previously, a semicolon following the password was not required and the first blank served as a password delimiter.  However, as of V7.7, embedded blanks are valid password characters and a semicolon is now required to delimit the password.&lt;br /&gt;
&lt;br /&gt;
This change has also been enabled within V7.7 with the application of zap 77z231.&lt;br /&gt;
&lt;br /&gt;
===PAGESZ parameter validated===&lt;br /&gt;
Previously it was possible to set the PAGESZ parameter to any value, although Model 204 internally supports one page size of 6184, and any deviation from this value would have led to problems during file creation. The value of this parameter is now controlled, such that setting it to any value other than 6184 will generate an M204.1149 message with the parameter being reset to 6184.&lt;br /&gt;
&lt;br /&gt;
===ECPRIV and the IDCAMS facility===&lt;br /&gt;
At V7.7 a security loophole was closed, whereby all ECF modules were run under external-authorizer profile of the calling user. Previously any ECF tasks were run under the owning job&#039;s external-authorizer profile, and in order for certain sites to retain that ability, a new setting of ECPRIV, value 4, was introduced to retain the ability to run ECF tasks using the job&#039;s security profile. &lt;br /&gt;
&lt;br /&gt;
The ECPRIV 4 setting potentially introduced a security loophole when calling the IDCAMS interface, based upon what the IDCAMS utility is able to do at a system level. Consequently as of this release, the ECPRIV 4 setting will be ignored when calling the IDCAMS facility via ECF, and such IDCAMS processes will always use the calling user&#039;s security profile. Any existing jobs that use ECF to call the IDCAMS utility with the ECFPRIV 4 bit set should be checked to ensure that the calling user&#039;s security profile still satisfies the job&#039;s requirements.&lt;br /&gt;
&lt;br /&gt;
===TCPOPTS is view only===&lt;br /&gt;
In previous releases the TCPOPTS parameter, which identifies the type of IP addressing in use ( v4 or v6 ), was resetable, although it was always documented as a view-only parameter. The parameter is now handled as a view-only parameter, and any attempts to reset the parameter will result in&lt;br /&gt;
&lt;br /&gt;
   M204.1123: Parameter TCPOPTS not reset&lt;br /&gt;
&lt;br /&gt;
===ZHPF command can only be issued by a system manager===&lt;br /&gt;
In previous releases it was possible to issue the ZHPF command without being logged on. From this release onwards, a user would have to be logged on with system manager privileges to be able to issue this command.&lt;br /&gt;
&lt;br /&gt;
Additionally, the command output will now only  display results for currently open files.&lt;br /&gt;
&lt;br /&gt;
This changes has been enabled within v7.7 with the application of zap 77z264.&lt;br /&gt;
&lt;br /&gt;
===Terminal MODEL reset failure===&lt;br /&gt;
If a reset of the terminal MODEL parameter fails due to an under sized output page buffer, then in addition to the existing messages that inform the user of this failure&lt;br /&gt;
&lt;br /&gt;
    M204.1875 UNABLE TO RESET MODEL TO %C &lt;br /&gt;
    M204.1123: Parameter MODEL not reset  &lt;br /&gt;
&lt;br /&gt;
the following message will now be issued&lt;br /&gt;
&lt;br /&gt;
    M204.1008: LOUTPB must be increased to at least &amp;lt;number&amp;gt; &lt;br /&gt;
                                                         &lt;br /&gt;
where &amp;lt;number&amp;gt; is the minimum value of LOUTPB necessary to support the terminal model.&lt;br /&gt;
&lt;br /&gt;
This change is enabled in V7.7 with the application of zap 77z309.&lt;br /&gt;
&lt;br /&gt;
==New and changed messages==&lt;br /&gt;
&lt;br /&gt;
See [[New and updated messages in Model 204 version 7.8|New and updated messages in Model 204 version 7.8]] for details.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category: Release notes]]&lt;/div&gt;</summary>
		<author><name>ELowell</name></author>
	</entry>
	<entry>
		<id>https://m204wiki.rocketsoftware.com/index.php?title=Release_notes_for_Model_204_version_7.8&amp;diff=117659</id>
		<title>Release notes for Model 204 version 7.8</title>
		<link rel="alternate" type="text/html" href="https://m204wiki.rocketsoftware.com/index.php?title=Release_notes_for_Model_204_version_7.8&amp;diff=117659"/>
		<updated>2019-08-28T22:00:15Z</updated>

		<summary type="html">&lt;p&gt;ELowell: /* Variable too small for result */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
These release notes list the enhancements and other changes contained in Model 204 version 7.8. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;&amp;lt;b&amp;gt;******THIS IS A DRAFT DOCUMENT.******&amp;lt;/b&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
These release notes list the enhancements and other changes contained in Model 204 version 7.8, &amp;lt;b&amp;gt;&amp;lt;i&amp;gt;which is still in development&amp;lt;/i&amp;gt;&amp;lt;/b&amp;gt;. Until the commercial release of the software, Rocket reserves the right to add to, remove, or change anything described herein. &lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
These release notes contain installation and features information for the Rocket Model 204 version 7.8 release.&lt;br /&gt;
Before beginning your installation, please read through this information about product installation and changes.&lt;br /&gt;
&lt;br /&gt;
==SOUL enhancements==&lt;br /&gt;
===AmIndependent method===&lt;br /&gt;
The &amp;lt;var&amp;gt;AmIndependent&amp;lt;/var&amp;gt; method returns TRUE for daemons spawned by &amp;lt;var&amp;gt;[http://m204wiki.rocketsoftware.com/index.php/RunIndependently_(Daemon_subroutine) RunIndependently]&amp;lt;/var&amp;gt;. (The action of &amp;lt;var&amp;gt;[https://m204wiki.rocketsoftware.com/index.php/AmDaemon_(Daemon_property) AmDaemon]&amp;lt;/var&amp;gt; remains unchanged.)&lt;br /&gt;
&lt;br /&gt;
The following table shows the values returned by &amp;lt;var&amp;gt;AmIndependent&amp;lt;/var&amp;gt; versus &amp;lt;var&amp;gt;AmDaemon&amp;lt;/var&amp;gt; for different daemon types:&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Type&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;AmDaemon&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;AmIndependent&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;$COMBG&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;False&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;False&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Independent daemon&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;False&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;True&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Other daemon&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;True&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;False&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Web, etc.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;False&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;False&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===$ProcOpn===&lt;br /&gt;
&amp;lt;var&amp;gt;[https://m204wiki.rocketsoftware.com/index.php/$ProcOpn $ProcOpn]&amp;lt;/var&amp;gt; now supports the opening of a procedure with an all numeric name, and including a leading zero, e.g.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;%result = $procOpn(&#039;0123&#039;, &#039;MYFILE&#039;)&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Support for such procedures names was initially introduced at v7.7, and this feature of &amp;lt;var&amp;gt;$ProcOpn&amp;lt;/var&amp;gt; is also enabled within v7.7 with the application of zap 77z054.&lt;br /&gt;
&lt;br /&gt;
===Allow parentheses to surround a boolean enumeration object===&lt;br /&gt;
The following sample code&lt;br /&gt;
&lt;br /&gt;
   begin                                       &lt;br /&gt;
   variables are undefined                  &lt;br /&gt;
   %isValid is boolean initial (True)       &lt;br /&gt;
   if (%isValid) then                  &lt;br /&gt;
      print &#039;in IF&#039;                            &lt;br /&gt;
   end if                                   &lt;br /&gt;
   end         &lt;br /&gt;
&lt;br /&gt;
will now compile and run successfully, as &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;if (%isValid) then &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
is logically equivalent to&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;if %isValid then &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Prior to V7.8 the presence of parentheses surrounding the boolean enumeration object would have caused a compilation error. This change is enabled in V7.7 with the application of zap 77z370.&lt;br /&gt;
&lt;br /&gt;
===Support for copying Object class objects===&lt;br /&gt;
The Object class now supports the copy and deepCopy methods. For example, and Object object can be copied as follows&lt;br /&gt;
&lt;br /&gt;
   begin               &lt;br /&gt;
   %x is object object &lt;br /&gt;
   %y is object object &lt;br /&gt;
   %y = new            &lt;br /&gt;
   %x = %y:copy        &lt;br /&gt;
   end&lt;br /&gt;
&lt;br /&gt;
This change is enabled in v7.7 with the application of zap 77z076, and within V7.6 with the application of zap 76z412.&lt;br /&gt;
&lt;br /&gt;
===Assignment of enumeration values to method variables===&lt;br /&gt;
Enumerations values can now be assigned to method variables whose result is an enumeration.So for example the following code&lt;br /&gt;
&lt;br /&gt;
   begin                                               &lt;br /&gt;
   enumeration colour                                  &lt;br /&gt;
      public                                           &lt;br /&gt;
         value red                                     &lt;br /&gt;
         value white                                   &lt;br /&gt;
         value blue                                    &lt;br /&gt;
      end public                                       &lt;br /&gt;
   end enumeration                                     &lt;br /&gt;
   %func    is function getColour is enumeration colour&lt;br /&gt;
   local function getColour is enumeration colour      &lt;br /&gt;
      return blue                                      &lt;br /&gt;
   end function                                        &lt;br /&gt;
   %func    = getColour                                &lt;br /&gt;
   %func    = (colour):red                             &lt;br /&gt;
   printText {~=%(Local):(%func)}                      &lt;br /&gt;
   end  &lt;br /&gt;
&lt;br /&gt;
will produce the result&lt;br /&gt;
&lt;br /&gt;
   %(Local):(%func)=red&lt;br /&gt;
&lt;br /&gt;
whereas previously the line   &lt;br /&gt;
&lt;br /&gt;
   %func    = (colour):red    &lt;br /&gt;
&lt;br /&gt;
would have been rejected with the message&lt;br /&gt;
&lt;br /&gt;
   MSIR.0993: Assignment invalid: mismatch between method and method variable&lt;br /&gt;
&lt;br /&gt;
This change is enabled in V7.7 with the application of zap 77z128.&lt;br /&gt;
&lt;br /&gt;
==External Call Facility enhancements==&lt;br /&gt;
===Managing ECF tables more efficiently===&lt;br /&gt;
The are two new features to help manage ECF tables more efficiently, avoid conditions where the table can fill, and prevent the definition of further entities.&lt;br /&gt;
&lt;br /&gt;
The first feature is the new  &amp;lt;var&amp;gt;DISPLAY ECF&amp;lt;/var&amp;gt; command, which displays the contents of ECF tables and also the current status of users accessing ECF modules. See more details of the &amp;lt;var&amp;gt;[[#DISPLAY ECF|DISPLAY ECF]]&amp;lt;/var&amp;gt; command below.&lt;br /&gt;
&lt;br /&gt;
The second feature is a new &amp;lt;var&amp;gt;EXTERNAL REMOVE&amp;lt;/var&amp;gt; statement with the syntax&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;EXTERNAL REMOVE &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;modulename&amp;lt;/span&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This causes the entry for the named module to be removed from the module table. The table entry is then placed on a free chain of entries and can be reused by issuing the EXTERNAL MODULE statement. This allows the module table to be managed with redundant entries removed, without having to recycle the ONLINE.&lt;br /&gt;
&lt;br /&gt;
A EXTERNAL REMOVE statement will return $status/$statusd values of 0/0, and most other status values that can be returned by the EXTERNAL REMOVE statement are already documented in the ECF return codes table. If an EXTERNAL REMOVE is attempted against a module that is currently being called ( in use ), then $status/$statusd will return the values 20/1 ( module unavailable).&lt;br /&gt;
&lt;br /&gt;
==System enhancements==&lt;br /&gt;
&lt;br /&gt;
===New wait types for daemon/master waits===&lt;br /&gt;
&lt;br /&gt;
Two new wait types, viewable on the &amp;lt;var&amp;gt;[https://m204wiki.rocketsoftware.com/index.php/MONITOR_command MONITOR] USERS&amp;lt;/var&amp;gt; command output, have been implemented as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;57&amp;lt;/code&amp;gt; - Means a daemon thread waiting for its master thread  &amp;lt;br /&amp;gt;     &lt;br /&gt;
&amp;lt;code&amp;gt;58&amp;lt;/code&amp;gt; - Means a master thread waiting for one of its daemon threads&lt;br /&gt;
&lt;br /&gt;
This change is enabled in V7.7 with the application of zap 77z410.&lt;br /&gt;
&lt;br /&gt;
===Snap formatting changes===&lt;br /&gt;
Date/time stamps in the page headers of snaps will now be shown normal format, rather than in julian format as in previous releases. Thus in the following example a particular snap header under v7.7 or previous releases would show as &lt;br /&gt;
&lt;br /&gt;
   SNAPID    1   19226.060155  M204.0022: Bug .. nnnnn               PAGE     1&lt;br /&gt;
&lt;br /&gt;
whereas the same snap header under v7.8 would show as &lt;br /&gt;
&lt;br /&gt;
   SNAPID    1  2019/08/14 06:01:06   M204.0022: Bug .. nnnnn        PAGE     1&lt;br /&gt;
&lt;br /&gt;
Also, due to improvements in handling trailing blanks in snap output, a snap generated under v7.8 should be marginally smaller than the same snap generated under previous releases, assuming the same SNAPCTL settings.&lt;br /&gt;
&lt;br /&gt;
===Call stack trace for problem diagnosis===&lt;br /&gt;
A  call stack trace is now provided to help diagnose and resolve common errors. To enable the stack trace, do either of the following: &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Set the &amp;lt;var&amp;gt;[[SIRFACT parameter|SIRFACT]]&amp;lt;/var&amp;gt; X&#039;01&#039; bit.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Set the &amp;lt;var&amp;gt;[[DEBUGUL parameter|DEBUGL]]&amp;lt;/var&amp;gt; parameter. Note that the &amp;lt;var&amp;gt;DEBUGUL&amp;lt;/var&amp;gt; approach will introduce extra QTBL overhead. &amp;lt;p&amp;gt;(&amp;lt;var&amp;gt;DEBUGUL&amp;lt;/var&amp;gt; provides a similar facility with an include trace of procedures leading to the error, but this might not be potentially as useful as the call trace.)&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt; &lt;br /&gt;
&lt;br /&gt;
The call stack trace can assist in diagnosing run-time errors that might occur, as illustrated by the following &amp;quot;variable too small for result&amp;quot; and &amp;quot;MBSCAN&amp;quot; examples.&lt;br /&gt;
&lt;br /&gt;
====Variable too small for result====&lt;br /&gt;
When the stack trace is enabled, a &amp;quot;variable too small&amp;quot; error results in the following message:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;M204.2966: Error at line n, procedure &#039;&#039;procname&#039;&#039; in file &#039;&#039;procfile&#039;&#039;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
which identifies the line within a procedure where the error is occurring, in addition to the usual message:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;M204.0552: Variable too small for result&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Any subsequent M204.2966 messages indicate the point in the code from where the code in error was called. For example, a stack of three subroutine calls leading to a &amp;quot;variable too small&amp;quot; error might result in the following messaging:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;   M204.0552: Variable too small for result                             &lt;br /&gt;
   M204.2966: Error at line 9, procedure MYPROC.LEVEL4 in file MYPROC   &lt;br /&gt;
   M204.2966: Called from line 5, procedure MYPROC.LEVEL3 in file MYPROC&lt;br /&gt;
   M204.2966: Called from line 5, procedure MYPROC.LEVEL2 in file MYPROC&lt;br /&gt;
   M204.2966: Called from line 5, procedure MYPROC.LEVEL1 in file MYPROC &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This information should help in diagnosing the problem. &lt;br /&gt;
&lt;br /&gt;
If the error occurs within a command level program rather than a procedure, then the M204.2966 message is replaced by an M204.2967 message, and a similar error condition to the above with a preceding call stack might be audited as follows:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;   M204.0552: Variable too small for result              &lt;br /&gt;
   M204.2967: Error at line 14 of command level program  &lt;br /&gt;
   M204.2967: Called from line 5 of command level program&lt;br /&gt;
   M204.2967: Called from line 3 of command level program &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If neither &amp;lt;var&amp;gt;SIRFACT X&#039;01&#039;&amp;lt;/var&amp;gt; nor &amp;lt;var&amp;gt;DEBUGUL&amp;lt;/var&amp;gt; is set, then the &amp;quot;variable too small&amp;quot; error produces the following messages:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;   M204.0552: Variable too small for result &lt;br /&gt;
   M204.2968: Error: no debug info &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====MBSCAN exceeded====&lt;br /&gt;
Similarly to the handling of the &#039;variable too small for result&#039; error, the call stack can also be used to diagnose errors where MBSCAN is exceeded as a result of a direct search of Table B records. Again, under V7.8, if either the SIRFACT x&#039;1&#039; bit is set, or DEBUGUL is set, then if a long request occurs as a result of exceeding MBSCAN, then initially the following message is produced&lt;br /&gt;
&lt;br /&gt;
   M204.0569: File &#039;&#039;filename&#039;&#039;, Find: Table B records to be searched = &#039;&#039;nnnn&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
as before, with a DYRWT prompt message. If the user replies &#039;N&#039; to the prompt, or if the request is run in an environment ( for example a batch job ) where the default response is &#039;N&#039;, the the following message is now produced following the M204.0569 message&lt;br /&gt;
&lt;br /&gt;
   Cancelling request: M204.2969: MBSCAN (&#039;&#039;mm&#039;&#039;) exceeded, records to be searched = &#039;&#039;nnnn&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
where &#039;&#039;mm&#039;&#039; is the current setting of MBSCAN. The M204.2969 will be followed by M204.2966 messages display the call stack trace. Thus, if the following code &lt;br /&gt;
&lt;br /&gt;
   b                           &lt;br /&gt;
   call sub1                   &lt;br /&gt;
   sub1: subroutine            &lt;br /&gt;
   fd1:                        &lt;br /&gt;
      in clients fd city = ONTARIO&lt;br /&gt;
              end find         &lt;br /&gt;
      fr fd1                      &lt;br /&gt;
         pai                      &lt;br /&gt;
         print                    &lt;br /&gt;
      end for                     &lt;br /&gt;
   end subroutine              &lt;br /&gt;
   end  &lt;br /&gt;
&lt;br /&gt;
is run from proc MYPROC.MBSCAN aganst the demo database with an MBSCAN setting of 10, then the following messages will be produced, assuming any prompts are responded to with an &#039;N&#039;&lt;br /&gt;
&lt;br /&gt;
   M204.0569: File CLIENTS, Find: Table B records to be searched = 3415&lt;br /&gt;
   Cancelling request: M204.2969: MBSCAN (10) exceeded, records to be searched = 3415                       &lt;br /&gt;
   M204.2966: Error at line 6, procedure MYPROC.MBSCAN in file MYPROC&lt;br /&gt;
   M204.2966: Called from line 3, procedure MYPROC.MBSCAN in file MYPROC&lt;br /&gt;
&lt;br /&gt;
===appendJournalData===&lt;br /&gt;
The &amp;lt;var&amp;gt;[[AppendJournalData_(Stringlist_function)|AppendJournalData]]&amp;lt;/var&amp;gt; function is now more tolerant of an outstanding BUMP request. Previously, if &amp;lt;var&amp;gt;AppendJournalData&amp;lt;/var&amp;gt; was called to inadvertently retrieve a large amount of journal data, typically when called implicitly from within SirScan, then any outstanding BUMP request wouldn&#039;t be honored until all of the data had been retrieved, at which point the BUMP request would be completed, and all data would be lost.&lt;br /&gt;
&lt;br /&gt;
Now, the &amp;lt;var&amp;gt;AppendJournalData&amp;lt;/var&amp;gt; process will check for outstanding BUMP requests before each track I/O is executed, thus avoiding excessive I/Os against the journal and long waits for the BUMP of such a process to complete.&lt;br /&gt;
&lt;br /&gt;
==Recovery enhancements==&lt;br /&gt;
===Media Recovery in a multi-user environment===&lt;br /&gt;
It is now possible to perform media recovery by issuing the &amp;lt;var&amp;gt;REGENERATE&amp;lt;/var&amp;gt; command to roll forward selected files in a multi-user environment, with the media recovery being carried out by different users with system manager privileges. The new USING option allows for the specification of a ddname for the input journal stream to be used by the &amp;lt;var&amp;gt;REGENERATE&amp;lt;/var&amp;gt; command. Previously media recovery was restricted to single user batch jobs, using the CCAGEN ddname for the input journal. For more details, see the &amp;lt;var&amp;gt;[[#REGENERATE|REGENERATE]]&amp;lt;/var&amp;gt; command below.&lt;br /&gt;
&lt;br /&gt;
==Security enhancements==&lt;br /&gt;
===CA-Top Secret can disallow CCASTAT logins===&lt;br /&gt;
The [https://m204wiki.rocketsoftware.com/index.php/CA-Top_Secret_interface CA-Top Secret] interface now recognizes the &amp;lt;code&amp;gt;DEFACID=&amp;lt;/code&amp;gt;, setting and does not allow CCASTAT logins in the online if &amp;lt;code&amp;gt;DEFACID&amp;lt;/code&amp;gt; is set to null. (There is no attempt to log on M204USR.) Therefore, to disallow CCASTAT logons, set DEFACID=, in [https://m204wiki.rocketsoftware.com/index.php/CA-Top_Secret_interface#Preparing_a_TOPSPARM_parameter_module_with_TOPSGEN TOPSPARM]. CCASTAT will be opened because it contains file and group passwords, but it will not be used for logons if CCASTAT logons are not allowed.&lt;br /&gt;
&lt;br /&gt;
===CUSTOM=11 and mixed cased input===&lt;br /&gt;
The &amp;lt;var&amp;gt;[https://m204wiki.rocketsoftware.com/index.php/CUSTOM_parameter CUSTOM]&amp;lt;/var&amp;gt; parameter CUSTOM=11 setting no longer requires that a *LOWER command be issued prior to a LOGCTL command (to add or change a  password) to preserve mixed case input. Prior to this release, with CUSTOM=11 in place, *LOWER had to be issued before a LOGCTL command, otherwise any mixed case password strings would automatically be translated into uppercase. This change is enabled within V7.7 with the application of zap 77z108.&lt;br /&gt;
&lt;br /&gt;
===DEFUSER can specify a jobname not authorized to access M204===&lt;br /&gt;
When specifying DEFUSER=JOBNAME and VALIDAT=LOGON in the RACFGEN parms for an ONLINE, if the specified jobname ( the owning id for the ONLINE job ) isn&#039;t authorized to use Model 204 via RACF, any LOGIN commands specifying no userid will now succeed ( previously such a LOGON would have failed ). This enables users to submit jobs with USE $JOB, whereby the string USER=jobname  will be added to the submitted JCL, and this in turn is useful if the specified jobname has dataset access privileges to datasets required by the submitted jobs, even if the jobname itself isn&#039;t authorized to use M204.&lt;br /&gt;
&lt;br /&gt;
==Janus product enhancements==&lt;br /&gt;
&lt;br /&gt;
===Janus Web Server access rule===&lt;br /&gt;
The automatic &amp;lt;var&amp;gt;[[JANUS WEB ALLOW]]&amp;lt;/var&amp;gt; rule, which allowed any user to access the port without requiring a login, is changed &amp;lt;i&amp;gt;for non-SSL ports&amp;lt;/i&amp;gt; to the following:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;JANUS WEB &amp;lt;i&amp;gt;portname&amp;lt;/i&amp;gt; DISALLOW *&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
This rule requires a system administrator to explicitly define &amp;lt;var&amp;gt;ALLOW&amp;lt;/var&amp;gt; rules to enable users to access non-SSL ports.&lt;br /&gt;
The rule applies unless overridden by user-added rules. &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;blockquote class=&amp;quot;note&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;b&amp;gt;Note:&amp;lt;/b&amp;gt; To revert from this change in the JANUS DEFINE default and make the default &lt;br /&gt;
 non-SSL &amp;lt;var&amp;gt;ALLOW&amp;lt;/var&amp;gt; rule as it was in version 7.5 and earlier (&amp;lt;code&amp;gt;ALLOW *&amp;lt;/code&amp;gt;), turn on the 1 bit of the &amp;lt;var&amp;gt;[[WEBDFLT parameter|WEBDFLT]]&amp;lt;/var&amp;gt; parameter: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;RESET WEBDFLT=1&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Increase in pending accepts for Janus BPX ports===&lt;br /&gt;
The default number of pending accepts for Janus BPX server ports has been increased from 3 to 12, thus reducing the likelihood that a pending accept may fail with the message&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;MSIR.0019 Connection request rejected for port (port), MAXCON exceeded&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The actual number of pending accepts to be supported on the port can be set with the new parameter MAXPEND, set on the &amp;lt;var&amp;gt;[[JANUS_DEFINE|JANUS DEFINE]]&amp;lt;/var&amp;gt; command, where MAXPEND can vary from 3 up to a maximum value of 32. The change to the default value was enabled within V7.7 with the application of zap 77z269.&lt;br /&gt;
&lt;br /&gt;
===TCP listen backlog increased===&lt;br /&gt;
&lt;br /&gt;
The [https://m204wiki.rocketsoftware.com/index.php/Program_Communication_facilities#LISTEN_call TCP_listen] backlog has been increased from 16 to 1024 under z/OS.&lt;br /&gt;
&lt;br /&gt;
This update tells the TCP stack to queue up to 1024 of such requests up before dropping them, thus reducing, or in most cases eliminating, the likelihood of a connection request drop, other than in exceptional circumstances, such as a denial of service attack. This change was enabled within V7.7 with the application of zap 77z340.&lt;br /&gt;
&lt;br /&gt;
===Defer the freeing of XMLSCREEN input XML===&lt;br /&gt;
&lt;br /&gt;
The freeing of [https://m204wiki.rocketsoftware.com/index.php/XMLSCREEN_and_NOXMLSCREEN_(JANUS_DEFINE_parameters) XMLSCREEN] input XML is now deferred until the next Read Screen or session termination. This means that if an application error is detected, the input XML can be retrieved with [https://m204wiki.rocketsoftware.com/index.php/$Web_Input_Content $Web_Input_Content] and then logged for problem analysis. &lt;br /&gt;
&lt;br /&gt;
Prior to this release the XML received from the client is freed immediately after being used to set the input data for a Read Screen, rendering it unavailable for problem determination.&lt;br /&gt;
&lt;br /&gt;
This change is enabled in V7.7 with the application of zap 77z368.&lt;br /&gt;
&lt;br /&gt;
===XMLSCREEN and Janus Web Legacy blank stripping===&lt;br /&gt;
&lt;br /&gt;
xmlScreens and Janus Web Legacy screens now adhere to the same standard as standard screen processing in terms of stripping leading blanks from input fields defined as [https://m204wiki.rocketsoftware.com/index.php/Full-screen_feature#DEBLANK_or_NODEBLANK_option DEBLANK] (either explicitly or implicitly).&lt;br /&gt;
&lt;br /&gt;
This change is enabled in V7.7 with the application of zap 77z400.&lt;br /&gt;
&lt;br /&gt;
===SSL input buffer size===&lt;br /&gt;
&lt;br /&gt;
The default value of [https://m204wiki.rocketsoftware.com/index.php/SSLIBSIZE_(JANUS_DEFINE_parameter) SSLIBSIZE] has been increased to 16384 + 128, or 16512. This size should ensure correct communication with all TLS spec compliant applications. It is the maximum size allowed unless you use [https://m204wiki.rocketsoftware.com/index.php/CUSTOM_parameter#Using_CUSTOM.3D.2818.29 CUSTOM=18].    &lt;br /&gt;
&lt;br /&gt;
This changed is enabled within V7.7 with the application of zap 77z415.&lt;br /&gt;
&lt;br /&gt;
===Increasing LDAP buffers===&lt;br /&gt;
&lt;br /&gt;
The number of LDAP buffers allocated at startup can now be changed by setting the NLDAPBUF parameter in CCAIN. See below for details on [[#NLDAPBUF|NLDAPBUF]].&lt;br /&gt;
&lt;br /&gt;
==Debugger enhancements==&lt;br /&gt;
&lt;br /&gt;
===Access to exposed variables===&lt;br /&gt;
The debuggers can now view or watch the values of variables exposed to local routines/methods. Previously, any attempts to access an exposed variable would have displayed &amp;quot;%varname has no value&amp;quot; in the debugger session. (This feature is enabled within V7.7 with the application of zap 77z363.)&lt;br /&gt;
&lt;br /&gt;
==Performance enhancements==&lt;br /&gt;
&lt;br /&gt;
===X3270OUT exit offloadable===&lt;br /&gt;
When running MP/204 (AMPSUBS&amp;gt;0) and using the [https://m204wiki.rocketsoftware.com/index.php/Coding_SNA_Communications_Server_conversion_exit_routines#X3270OUT_.28convert_output_from_3270_format.29 X3270OUT] exit to convert a 3270 output data stream to the appropriate device protocol, the exit can now run in parallel mode to improve performance. This change was enabled in V7.7 with the application of zap 77Z313.&lt;br /&gt;
&lt;br /&gt;
The X3270OUT exit must be written to be re-entrant.&lt;br /&gt;
&lt;br /&gt;
==New and changed commands==&lt;br /&gt;
===DISPLAY ECF===&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;DISPLAY ECF {{ M | N | U } like ?} &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This new command displays details from ECF tables, or the current status of users accessing ECF modules.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;syntax&amp;quot;&amp;gt;D ECF M&amp;lt;/span&amp;gt; displays the contents of the module table. For example:&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;    D ECF M &lt;br /&gt;
    Module   Loadlib  Address:Length     Loaded@      Lastused@   #Calls  Flags &lt;br /&gt;
    QATUM13C PROGLIB 2FB91FB8:00000028 19023:121506 19023:121506 00000001 &lt;br /&gt;
    QATUM13B PROGLIB 2FE65000:00009C18 19023:121506 19023:121506 00000001 &lt;br /&gt;
    QATUM13A PROGLIB 2FE6EC18:00001CD8 19023:121506 19023:121506 00000001  &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
(flags may be D=deleted; S=shared; H=halted; I=Idle)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;syntax&amp;quot;&amp;gt;D ECF N&amp;lt;/span&amp;gt; displays contents of the name table. For example: &amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;    D ECF N&lt;br /&gt;
    Module   Logical-call-name &lt;br /&gt;
    QATUM13C MOD_QATUM13C &lt;br /&gt;
    QATUM13B MOD_QATUM13B &lt;br /&gt;
    QATUM13A MOD_QATUM13A &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;syntax&amp;quot;&amp;gt;D ECF U&amp;lt;/span&amp;gt; displays details of users currently accessing ECF modules. This is also the default option, and so &amp;lt;span class=&amp;quot;syntax&amp;quot;&amp;gt;D ECF&amp;lt;/span&amp;gt; will display the same output as &amp;lt;span class=&amp;quot;syntax&amp;quot;&amp;gt;D ECF U&amp;lt;/span&amp;gt;. For example:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;    D ECF U                           &lt;br /&gt;
    User# Userid     Module   Parmlen &lt;br /&gt;
    00002 ADMIN      --none--         &lt;br /&gt;
    00003 ADMIN      COBSAMP1 00000002&lt;br /&gt;
    00004 ADMIN      COBSAMP1 00000002 &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;syntax&amp;quot;&amp;gt;D ECF LIKE ? &amp;lt;/span&amp;gt; (where &amp;lt;code&amp;gt;?&amp;lt;/code&amp;gt; is a valid pattern) displays details for entities that match the specified pattern.&lt;br /&gt;
&lt;br /&gt;
===REGENERATE===&lt;br /&gt;
The &amp;lt;var&amp;gt;REGENERATE&amp;lt;/var&amp;gt; command can now be run in a multi-user environment by multiple users with system manager privileges. A new option USING is provided to specify the ddname of the input journal, so that the full syntax is now as follows:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;  REGENERATE [USING ddname] FILE filename [FROM dumpname | IGNORE]&lt;br /&gt;
  [TO {LAST UPDATE [BEFORE yy.ddd hh:mm:ss.th] | LAST CHECKPOINT [BEFORE yy.dd hh:mm:ss.th] &lt;br /&gt;
  | UPDATE number OF yy.ddd hh:mm:ss.th | CHECKPOINT yy.ddd hh:mm:ss.th} ]&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The default for the using ddname is CCAGEN, but any ddname may be used to allocate an input journal and used. For example:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;  ALLOCATE REGEN1 WITH SCOPE=SYSTEM DSN=PROD1.GDGJ OLD SEQUENTIAL GEN=+2&lt;br /&gt;
  REGENERATE USING REGEN1 FILE TEST&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It is the user&#039;s responsibility to ensure that the file being regenerated is not in use, and so prior to usage, &amp;lt;var&amp;gt;BUMP FILE&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;STOP FILE&amp;lt;/var&amp;gt; should be used to isolate usage against the file. If the file is in use, the REGEN will fail with these messages:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;  M204.1430: Failed to open file TEST&lt;br /&gt;
  M204.1436: Stopped processing file TEST  &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
$STATUS will now be set for &amp;lt;var&amp;gt;REGENERATE&amp;lt;/var&amp;gt; with the following values:&lt;br /&gt;
&amp;lt;blockquote&amp;gt;    &lt;br /&gt;
    0 - Success &amp;lt;br/&amp;gt;&lt;br /&gt;
    1 - No files were processed &amp;lt;br/&amp;gt;&lt;br /&gt;
    2 - At least one file stopped processing &amp;lt;br/&amp;gt;&lt;br /&gt;
    4 - A serious error occurred, REGEN failed &lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Similarly, &amp;lt;var&amp;gt;SETGRC&amp;lt;/var&amp;gt; may be used to get the return code and error message.&lt;br /&gt;
&lt;br /&gt;
==New and changed parameters==&lt;br /&gt;
&lt;br /&gt;
===ECMODS===&lt;br /&gt;
The new minimum value for ECMODS, the allowable number of ECF modules, is 1. Prior to V7.8 the minimum value was 0. This changed was enabled in V7.7 with the application of zap 77z306.&lt;br /&gt;
&lt;br /&gt;
===ECNAMES===&lt;br /&gt;
The new minimum value for ECNAMES, the allowable number of ECF module names, is 1. Prior to V7.8 the minimum value was 0. This changed was enabled in V7.7 with the application of zap 77z306.&lt;br /&gt;
&lt;br /&gt;
===ECPSIZE===&lt;br /&gt;
The new minimum value for ECPSIZE, the initial storage allocation for ECF parameters, is 1024. Prior to V7.8 the minimum value was 0. This changed was enabled in V7.7 with the application of zap 77z306.&lt;br /&gt;
&lt;br /&gt;
===ENQTIME===&lt;br /&gt;
Millisecond duration of automatic record locking retry wait.&lt;br /&gt;
&lt;br /&gt;
Prior to this change, if record locking conflicts occur frequently in a busy online, any user with a non-zero value for &amp;lt;var&amp;gt;[[ENQRETRY parameter|ENQRETRY]]&amp;lt;/var&amp;gt; will wait at least 3 seconds before the conflict is dealt with. This can degrade overall system performance.      &lt;br /&gt;
                                                         &lt;br /&gt;
The &amp;lt;var&amp;gt;[[ENQTIME parameter|ENQTIME]]&amp;lt;/var&amp;gt; parameter specifies the number of milliseconds waited for each record locking retry wait. ENQTIME can be between 1 and 60000, corresponding to a minimum of 1 millisecond and a maximum of 1 minute. The default value of ENQTIME is 3000 (3 seconds).            &lt;br /&gt;
                                                         &lt;br /&gt;
For example, with ENQTIME = 100 and ENQRETRY = 7, after a record locking conflict occurs the thread will retry 7 times with wait intervals of .1 seconds, and so within at most .7 seconds either the lock becomes available or the conflict triggers an On unit or cancels the request.     &lt;br /&gt;
                                                         &lt;br /&gt;
The ENQTIME parameter may also be reset with $ResetN. &lt;br /&gt;
&lt;br /&gt;
This new parameter was enabled within V7.7 with the application of zap 77z299.&lt;br /&gt;
&lt;br /&gt;
===EVALOPT===&lt;br /&gt;
The new &amp;lt;var&amp;gt;EVALOPT&amp;lt;/var&amp;gt; parameter controls the cancellation of a request on truncation of string data. The default value is 0, and currently there is just one setting, 1, which means &amp;quot;cancel a request if truncation of string data occurs.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
For example, with the default of 0 in place, the following code &amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;    %x is string len 1   &lt;br /&gt;
    %y is string len 2   &lt;br /&gt;
    %y = &#039;ab&#039;            &lt;br /&gt;
    %x = %y              &lt;br /&gt;
    printtext {~} = {%x} &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
would cause silent truncation, and give the result&lt;br /&gt;
    &amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;%x = a &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If &amp;lt;var&amp;gt;EVALOPT&amp;lt;/var&amp;gt; is set to 1, then the above code produces the following message:&lt;br /&gt;
    &amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;M204.0552: Variable too small for result &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and the request is cancelled.&lt;br /&gt;
&lt;br /&gt;
===LFSCB===&lt;br /&gt;
LFSCB, the length of the full screen buffer, now has a new minimum value of 8 ( the previous minimum was 0 ). This change has been enabled within v7.7 with the application of zap 77z042, and within V7.6 with the application of zap 76z393.&lt;br /&gt;
&lt;br /&gt;
===MAXPRE, MAXBOUT, MAXSUBT===&lt;br /&gt;
&amp;lt;p&amp;gt;Introduced in zap 77Z257.&amp;lt;/p&amp;gt;&lt;br /&gt;
The new &amp;lt;var&amp;gt;MAXPRE&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;MAXBOUT&amp;lt;/var&amp;gt;, and &amp;lt;var&amp;gt;MAXSUBT&amp;lt;/var&amp;gt; parameters can be used to cancel a runaway transaction and prevent it from filling the checkpoint data set. &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;MAXPRE&amp;lt;/var&amp;gt;:  Maximum number of pre-images per transaction.  &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;MAXBOUT&amp;lt;/var&amp;gt;: Maximum number of backout pages per transaction. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;MAXSUBT&amp;lt;/var&amp;gt;: Maximum number of subtransaction checkpoints that a transaction can span.&amp;lt;/li&amp;gt;&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;Each new parameter defaults to unlimited. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;If a parameter value is set, a transaction is cancelled if that value is exceeded, and the following message is displayed:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;code&amp;gt;M204.0524: Maximum number (&amp;lt;i&amp;gt;num&amp;lt;/i&amp;gt;) of &amp;lt;i&amp;gt;parameter&amp;lt;/i&amp;gt; exceeded.&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
where &amp;lt;i&amp;gt;num&amp;lt;/i&amp;gt; is the value set for &amp;lt;i&amp;gt;parameter&amp;lt;/i&amp;gt; (&amp;lt;var&amp;gt;MAXPRE&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;MAXBOUT&amp;lt;/var&amp;gt;, or &amp;lt;var&amp;gt;MAXSUBT&amp;lt;/var&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
===NLDAPBUF===&lt;br /&gt;
This new parameter allows the number of LDAP buffers allocated during startup to be set in CCAIN. The default value is 2, and the settable value can range from 0 to 65535.&lt;br /&gt;
&lt;br /&gt;
===PUPDTH (new minimum value)===&lt;br /&gt;
If a user sets the &amp;lt;var&amp;gt;[[PUPDTH parameter|PUPDTH]]&amp;lt;/var&amp;gt; parameter to 0, it will now automatically be increased to 1, its minimum value.&lt;br /&gt;
&lt;br /&gt;
===SERV4G===&lt;br /&gt;
This parameter allows testing of server tables that span a 4-gigabyte boundary. For example, if SERV4G is X&#039;FFFFF000&#039;, each ATB server will begin at XX_FFFFF000. If SERV4G is X&#039;FFFF0000&#039;, each ATB server will begin at XX_FFFF0000. XX is determined by the storage available on the system. The parameter is set in CCAIN.&lt;br /&gt;
&lt;br /&gt;
The contents of the ATB server are specified by using the SERVGA parameter.&lt;br /&gt;
&lt;br /&gt;
For example. if you want VTBL to span the 4G boundary, you can use these settings: SERV4G=X&#039;FFFFF000&#039;, SERVGA=X&#039;00040000&#039;, and LVTBL=200 (6400 bytes, X&#039;1900&#039;). This will force each server&#039;s VTBL to begin at XX_FFFFF000 and end at XX+1_00000900.&lt;br /&gt;
&lt;br /&gt;
===WEBDFLT===&lt;br /&gt;
At V7.7, the default access rule for non-SSL ports was changed from ALLOW * to DISALLOW *, meaning that unless any ALLOW rules were in place resulting in a login/password prompt, the port couldn&#039;t be accessed. The new &amp;lt;var&amp;gt;[https://m204wiki.rocketsoftware.com/index.php/WEBDFLT_parameter WEBDFLT]&amp;lt;/var&amp;gt; parameter may be set to 1 for reversion to the old default of ALLOW *. Under V7.7, this new parameter was enabled with the application of zap 77z090. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;var&amp;gt;RESET WEBDFLT&amp;lt;/var&amp;gt; requires system administrator privileges. It is recommended to reset the 1 bit of &amp;lt;var&amp;gt;WEBDFLT&amp;lt;/var&amp;gt; to zero after issuing a series of &amp;lt;var&amp;gt;JANUS DEFINE&amp;lt;/var&amp;gt; commands which need WEBDFLT=1, as in the CCAIN input stream.&lt;br /&gt;
&lt;br /&gt;
==New and changed statistics==&lt;br /&gt;
===MPR, MBO, MCP, and RCV===&lt;br /&gt;
Introduced in zap 77Z257.&lt;br /&gt;
&amp;lt;p&amp;gt;These statistics provide high water mark transaction information. (Since-last values will not be available until V78 GA.)&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;They are useful in conjunction with the &amp;lt;var&amp;gt;MAXPRE&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;MAXBOUT&amp;lt;/var&amp;gt;, and &amp;lt;var&amp;gt;MAXSUBT&amp;lt;/var&amp;gt; parameters. &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
User/system statistics:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;MPR: High water mark of transaction pre-images. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;MBO: High water mark of transaction backout pages. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;MCP: High water mark of transaction chkpoint spans. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
System statistics: &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;RCV: Number of blocks needed for subtransaction recovery &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt; &lt;br /&gt;
&amp;lt;p class=&amp;quot;note&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Notes:&amp;lt;/b&amp;gt; M204.0843 now displays the RCV statistic for subtransaction checkpoints.&lt;br /&gt;
The size of recovery checkpoint must be greater than the sum of the last RCV value plus the number of records in [https://m204wiki.rocketsoftware.com/index.php/System_and_media_recovery#RESTART_recovery_considerations_for_sub-transaction_checkpoints RESTART and RESTARTS].&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
===DKWTS and DKWTMICS===&lt;br /&gt;
Introduced in zap 77z7289.&lt;br /&gt;
&amp;lt;p&amp;gt;The new system statistics DKWTS (DisK WaiTs) and DKWTMICS (DisK WaiT MICroSeconds) collect data to provide rough disk I/O service time numbers.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
DKWTS shows the number of disk I/O waits. DKWTMICS shows the total wait time for those waits in microseconds. Dividing the difference in DKWTMICS by the difference in DKWTS over an interval provides the average disk I/O wait time in microseconds.              &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;note&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Notes:&amp;lt;/b&amp;gt; &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The wait time does include internal Model 204 scheduler delays, so on a CPU bound Model 204 system, the service times calculated from DKWTS and DKWTMICS are likely to be an overestimate of actual service times.&amp;lt;/li&amp;gt;  &lt;br /&gt;
                                                                    &lt;br /&gt;
&amp;lt;li&amp;gt;DKWTS and DKWTMICS are not available in SirMon; use [https://m204wiki.rocketsoftware.com/index.php/MONITOR_command MONITOR] SYSTEM STATISTICS to view these statistics.&amp;lt;/li&amp;gt;&amp;lt;/ul&amp;gt;  &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Compatibility issues==&lt;br /&gt;
===&amp;lt;b id=&amp;quot;listNewInit&amp;quot;&amp;gt;&amp;lt;/b&amp;gt;$ListNew cannot be used in Initial clause===&lt;br /&gt;
It is now a compilation error if &amp;lt;var&amp;gt;$ListNew&amp;lt;/var&amp;gt; is attempted to be used in the &amp;lt;var&amp;gt;Initial&amp;lt;/var&amp;gt; clause of a &lt;br /&gt;
[https://m204wiki.rocketsoftware.com/index.php/Using_variables_and_values_in_computation#Declare_statements_for_.25variables declaration statement].&lt;br /&gt;
&amp;lt;p&amp;gt;This change is propagated by zap maintenance to versions 7.5 (zap 75Z487), 7.6 (zap 76Z514), and 7.7 (zap 77Z281) of Model 204.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote class=&amp;quot;note&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Note:&amp;lt;/b&amp;gt; Strictly speaking, this would not be considered a compilation error, because previously although &amp;lt;code&amp;gt;..&amp;amp;nbsp;Initial($ListNew)&amp;lt;/code&amp;gt; did not produce a compilation error, in almost all circumstances it would produce a snap if the initialized %variable were used with some other &amp;lt;var&amp;gt;$List&amp;lt;i&amp;gt;xxx&amp;lt;/i&amp;gt;&amp;lt;/var&amp;gt; invocation.&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Restricting the use of the CUSTOM=38 setting===&lt;br /&gt;
The [[CUSTOM parameter|CUSTOM=38]] parameter setting, introduced at V7.5, inadvertently provided System Manager privileges to all users via the RESET command. This CUSTOM setting is now restricted to the RESETting of the LAUDIT parameter.&lt;br /&gt;
&lt;br /&gt;
===Disabling of Closure support===&lt;br /&gt;
Due to a number of bugs related to Closure support, introduced at V7.7, this feature, which can best be described as exposed methods assigned to method variables, has been disabled in this release. This change was also made to V7.7 with application of zap 77z119.&lt;br /&gt;
&lt;br /&gt;
===Password delimiter enforced===&lt;br /&gt;
When using IFSTRTN to logon to a Model 204 online from an IFAM2 application, both the logonid and password must be followed by a semicolon - the delimiter.             &lt;br /&gt;
For example:      &lt;br /&gt;
                                      &lt;br /&gt;
CALL IFSTRTN(RC,&#039;logonid;password;&#039;...)&lt;br /&gt;
                 &lt;br /&gt;
If a semicolon does not follow the password string, the following message will now be issued&lt;br /&gt;
&lt;br /&gt;
M204.2964: Password missing or too long                  &lt;br /&gt;
                                                         &lt;br /&gt;
Previously, a semicolon following the password was not required and the first blank served as a password delimiter.  However, as of V7.7, embedded blanks are valid password characters and a semicolon is now required to delimit the password.&lt;br /&gt;
&lt;br /&gt;
This change has also been enabled within V7.7 with the application of zap 77z231.&lt;br /&gt;
&lt;br /&gt;
===PAGESZ parameter validated===&lt;br /&gt;
Previously it was possible to set the PAGESZ parameter to any value, although Model 204 internally supports one page size of 6184, and any deviation from this value would have led to problems during file creation. The value of this parameter is now controlled, such that setting it to any value other than 6184 will generate an M204.1149 message with the parameter being reset to 6184.&lt;br /&gt;
&lt;br /&gt;
===ECPRIV and the IDCAMS facility===&lt;br /&gt;
At V7.7 a security loophole was closed, whereby all ECF modules were run under external-authorizer profile of the calling user. Previously any ECF tasks were run under the owning job&#039;s external-authorizer profile, and in order for certain sites to retain that ability, a new setting of ECPRIV, value 4, was introduced to retain the ability to run ECF tasks using the job&#039;s security profile. &lt;br /&gt;
&lt;br /&gt;
The ECPRIV 4 setting potentially introduced a security loophole when calling the IDCAMS interface, based upon what the IDCAMS utility is able to do at a system level. Consequently as of this release, the ECPRIV 4 setting will be ignored when calling the IDCAMS facility via ECF, and such IDCAMS processes will always use the calling user&#039;s security profile. Any existing jobs that use ECF to call the IDCAMS utility with the ECFPRIV 4 bit set should be checked to ensure that the calling user&#039;s security profile still satisfies the job&#039;s requirements.&lt;br /&gt;
&lt;br /&gt;
===TCPOPTS is view only===&lt;br /&gt;
In previous releases the TCPOPTS parameter, which identifies the type of IP addressing in use ( v4 or v6 ), was resetable, although it was always documented as a view-only parameter. The parameter is now handled as a view-only parameter, and any attempts to reset the parameter will result in&lt;br /&gt;
&lt;br /&gt;
   M204.1123: Parameter TCPOPTS not reset&lt;br /&gt;
&lt;br /&gt;
===ZHPF command can only be issued by a system manager===&lt;br /&gt;
In previous releases it was possible to issue the ZHPF command without being logged on. From this release onwards, a user would have to be logged on with system manager privileges to be able to issue this command.&lt;br /&gt;
&lt;br /&gt;
Additionally, the command output will now only  display results for currently open files.&lt;br /&gt;
&lt;br /&gt;
This changes has been enabled within v7.7 with the application of zap 77z264.&lt;br /&gt;
&lt;br /&gt;
===Terminal MODEL reset failure===&lt;br /&gt;
If a reset of the terminal MODEL parameter fails due to an under sized output page buffer, then in addition to the existing messages that inform the user of this failure&lt;br /&gt;
&lt;br /&gt;
    M204.1875 UNABLE TO RESET MODEL TO %C &lt;br /&gt;
    M204.1123: Parameter MODEL not reset  &lt;br /&gt;
&lt;br /&gt;
the following message will now be issued&lt;br /&gt;
&lt;br /&gt;
    M204.1008: LOUTPB must be increased to at least &amp;lt;number&amp;gt; &lt;br /&gt;
                                                         &lt;br /&gt;
where &amp;lt;number&amp;gt; is the minimum value of LOUTPB necessary to support the terminal model.&lt;br /&gt;
&lt;br /&gt;
This change is enabled in V7.7 with the application of zap 77z309.&lt;br /&gt;
&lt;br /&gt;
==New and changed messages==&lt;br /&gt;
&lt;br /&gt;
See [[New and updated messages in Model 204 version 7.8|New and updated messages in Model 204 version 7.8]] for details.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category: Release notes]]&lt;/div&gt;</summary>
		<author><name>ELowell</name></author>
	</entry>
</feed>