<?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=Mlarocca</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=Mlarocca"/>
	<link rel="alternate" type="text/html" href="https://m204wiki.rocketsoftware.com/index.php?title=Special:Contributions/Mlarocca"/>
	<updated>2026-05-09T08:00:06Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.43.1</generator>
	<entry>
		<id>https://m204wiki.rocketsoftware.com/index.php?title=IBM_z/OS_2.2_PTF_requirement&amp;diff=115423</id>
		<title>IBM z/OS 2.2 PTF requirement</title>
		<link rel="alternate" type="text/html" href="https://m204wiki.rocketsoftware.com/index.php?title=IBM_z/OS_2.2_PTF_requirement&amp;diff=115423"/>
		<updated>2018-06-05T14:36:13Z</updated>

		<summary type="html">&lt;p&gt;Mlarocca: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;If you use Horizon TCP/IP for sending and receiving between Model 204 applications, you will need to apply [http://www-01.ibm.com/support/docview.wss?uid=swg1PI52347 IBM PTF UI34846]. Without this fix, TCP/IP client connections for Model 204 cannot be initiated.&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The above PTF only affects customers using our Horizon to Horizon TCP/IP communications product.  For more detail on this product see [https://m204wiki.rocketsoftware.com/index.php/Model_204_intersystem_processing#TCP.2FIP_support Horizon TCP/IP support].&amp;lt;/p&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mlarocca</name></author>
	</entry>
	<entry>
		<id>https://m204wiki.rocketsoftware.com/index.php?title=CREATE_command:_File&amp;diff=114966</id>
		<title>CREATE command: File</title>
		<link rel="alternate" type="text/html" href="https://m204wiki.rocketsoftware.com/index.php?title=CREATE_command:_File&amp;diff=114966"/>
		<updated>2018-04-24T19:16:24Z</updated>

		<summary type="html">&lt;p&gt;Mlarocca: /* Usage notes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Summary==&lt;br /&gt;
&amp;lt;dl&amp;gt;&lt;br /&gt;
&amp;lt;dt&amp;gt;Privileges&lt;br /&gt;
&amp;lt;dd&amp;gt;Superuser&lt;br /&gt;
&amp;lt;dt&amp;gt;Function&lt;br /&gt;
&amp;lt;dd&amp;gt;Creates a &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; file&lt;br /&gt;
&amp;lt;/dl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Syntax==&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;CREATE [FILE] [(FORMAT) | (NOFORMAT)] &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;filename&amp;lt;/var&amp;gt;&lt;br /&gt;
[FROM &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;ddname&amp;lt;/var&amp;gt; [,&amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;ddname&amp;lt;/var&amp;gt;]...]&lt;br /&gt;
[PARAMETER &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;parameter&amp;lt;/var&amp;gt;=&amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;value&amp;lt;/var&amp;gt; [,&amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;parameter&amp;lt;/var&amp;gt;=&amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;value&amp;lt;/var&amp;gt;]...]&lt;br /&gt;
[PARAMETER &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;parameter&amp;lt;/var&amp;gt;=&amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;value&amp;lt;/var&amp;gt; [,&amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;parameter&amp;lt;/var&amp;gt;=&amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;value&amp;lt;/var&amp;gt;]...]&lt;br /&gt;
.&lt;br /&gt;
.&lt;br /&gt;
.&lt;br /&gt;
END&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;b&amp;gt;Where:&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;table&amp;gt; &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;filename&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;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 that is being created (1 to 8 characters; 1 to 7 on DOS systems). &lt;br /&gt;
&amp;lt;p&amp;gt;The file name cannot be FILE or GROUP and cannot start with CCA, SYS, OUT, TAPE, or a number. The only exception is CCASYS: it can be created in a single user run with the &amp;lt;var&amp;gt;[[SYSOPT parameter|SYSOPT]]&amp;lt;/var&amp;gt; X’01’ bit turned off to prevent Model&amp;amp;nbsp;204 from opening CCASYS to make it available for APSY.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Otherwise, &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;filename&amp;lt;/var&amp;gt; can contain only uppercase letters, numbers, and the following special characters:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;tr class=&amp;quot;head&amp;quot;&amp;gt; &amp;lt;th&amp;gt;Special character name&amp;lt;/th&amp;gt; &amp;lt;th&amp;gt;Keyboard symbol&amp;lt;/th&amp;gt; &amp;lt;/tr&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;tr&amp;gt; &amp;lt;th&amp;gt;&amp;lt;var&amp;gt;At sign &amp;lt;/var&amp;gt;&amp;lt;/th&amp;gt; &amp;lt;td&amp;gt;(@)&amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt; &amp;lt;th&amp;gt;&amp;lt;var&amp;gt;Pound sign &amp;lt;/var&amp;gt;&amp;lt;/th&amp;gt; &amp;lt;td&amp;gt;(#)&amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt; &amp;lt;th&amp;gt;&amp;lt;var&amp;gt;Dollar sign &amp;lt;/var&amp;gt;&amp;lt;/th&amp;gt; &amp;lt;td&amp;gt;($) &amp;lt;br /&amp;gt;(alternately displayed as &amp;amp;#163;)&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&amp;gt;&lt;br /&gt;
The file name must be the ddname of the first or only data set in the file.&amp;lt;/p&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;th&amp;gt;ddname&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;The name of a data set from which to create the file; it is required when the file is being created from more than one data set. The first &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;ddname&amp;lt;/var&amp;gt; specified must match &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;filename&amp;lt;/var&amp;gt;.&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
&amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;ddname&amp;lt;/var&amp;gt; cannot be longer than eight characters; if it is, 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&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
To allow a name of more than eight characters (although only the first eight characters will be used), set the &amp;lt;var&amp;gt;[[CUSTOM parameter|CUSTOM]]&amp;lt;/var&amp;gt; parameter to &amp;lt;code&amp;gt;10&amp;lt;/code&amp;gt;.&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;th&amp;gt;parameter=value&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; file parameters. Any number of PARAMETER statements can immediately follow the command, and each statement can contain as many parameters in any order as will fit on one input line. File parameters are optional. If you specify no values for the BSIZE, CSIZE, and DSIZE parameters, defaults are used. However, you can calculate and set values for parameters as described in [[Managing file and table sizes]].&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;
===Syntax notes===&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The &amp;lt;var&amp;gt;FROM&amp;lt;/var&amp;gt; clause is optional for files containing a single data set.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;If specified, the &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;ddname&amp;lt;/var&amp;gt; of the first data set must match &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;filename&amp;lt;/var&amp;gt;. You can use a continuation character to enter long data set lists in the &amp;lt;var&amp;gt;FROM&amp;lt;/var&amp;gt; statement.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;NO FORMAT&amp;lt;/var&amp;gt; is a synonym for &amp;lt;var&amp;gt;NOFORMAT&amp;lt;/var&amp;gt;.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;A &amp;lt;var&amp;gt;CREATE&amp;lt;/var&amp;gt; command must be concluded by an &amp;lt;var&amp;gt;END&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;
==Example==&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;CREATE FILE PEOPLE &lt;br /&gt;
PARAMETER ATRPG=1, FVFPG=10, MVFPG=10&lt;br /&gt;
PARAMETER ASTRPPG=345&lt;br /&gt;
PARAMETER BSIZE=704, BRECPPG=23, BRESERVE=268&lt;br /&gt;
PARAMETER CSIZE=78, DSIZE=470&lt;br /&gt;
END   &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Usage notes==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
&amp;lt;var&amp;gt;CREATE FILE&amp;lt;/var&amp;gt; creates a &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; file. It sets the file parameters and builds the File Control Table (FCT). It should be issued after the values for file parameters are calculated and data sets are allocated. After a file is created, it must be opened and initialized (see the [[OPEN FILE command]] and the [[INITIALIZE command]]).      &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The default &amp;lt;var&amp;gt;FORMAT&amp;lt;/var&amp;gt; option causes the &amp;lt;var&amp;gt;CREATE&amp;lt;/var&amp;gt; command to physically format the disk space. &amp;lt;var&amp;gt;NOFORMAT&amp;lt;/var&amp;gt; suppresses physical formatting of the disk. If one or more of the data sets in the file are new, use &amp;lt;var&amp;gt;FORMAT&amp;lt;/var&amp;gt;.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If &amp;lt;var&amp;gt;NOFORMAT&amp;lt;/var&amp;gt; is used and the disk space is unformatted, we will force formatting anyway and issue the following message. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
M204.0793: I/O ERROR FORCED FORMATTING &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt; &lt;br /&gt;
In the case of a multi-dataset file, we may not be able to detect that one of the datasets is unformatted.  In this case, the initialize will fail with the message:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
M204.2369: DKUPDT DISK WRITE FAILURE: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
&amp;lt;var&amp;gt;CREATE&amp;lt;/var&amp;gt; establishes the file name and ddnames for all data sets in the file. Once a file is created, you can change the file name and ddname only by recreating the file or by running the [[RESTORE command]]. However, you can add new data sets to the file with the [[INCREASE command]].&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When it processes &amp;lt;var&amp;gt;CREATE FILE&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; ends any update unit in progress and begins a [[File integrity and recovery#Model 204 update units|non-backoutable update unit]]. &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
See [[Creating a file]] for more information about file creation and file parameters.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category: Superuser commands]]&lt;br /&gt;
[[Category:Commands]]&lt;/div&gt;</summary>
		<author><name>Mlarocca</name></author>
	</entry>
	<entry>
		<id>https://m204wiki.rocketsoftware.com/index.php?title=Runtime_environment_for_SQL_processing&amp;diff=104535</id>
		<title>Runtime environment for SQL processing</title>
		<link rel="alternate" type="text/html" href="https://m204wiki.rocketsoftware.com/index.php?title=Runtime_environment_for_SQL_processing&amp;diff=104535"/>
		<updated>2017-11-09T19:17:35Z</updated>

		<summary type="html">&lt;p&gt;Mlarocca: /* CCAIN parameters to support Model 204 SQL processing */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Overview==&lt;br /&gt;
This topic discusses changes to the job or EXEC that brings up your Model 204 Online. These changes are required or recommended to support Model 204 SQL and Remote Command Line (RCL) processing. This topic also provides information about sizing SQL buffers.&lt;br /&gt;
&amp;lt;p&amp;gt;You also need to specify DEFINE commands for Model 204 TCP/IP (Horizon). For more information, see:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;[[DEFINE LINK command: Horizon for TCP/IP]]&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;[[DEFINE PROCESS command: Horizon for TCP/IP and VTAM]]&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;[[DEFINE PROCESSGROUP command: Horizon for TCP/IP]]&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==SQL processing files==&lt;br /&gt;
The following table lists SQL-specific files you need to include in your Online environment.&lt;br /&gt;
&lt;br /&gt;
Add DD statements or FILEDEFs for these files to the job that brings up your Model 204 Online. Model 204 installation or reinstallation allocates the files.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;caption&amp;quot;&amp;gt;SQL files for Online environment&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;File&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Contents&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;CATPROC&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Procedures and data: SOUL procedures to run [[SQL catalog reporting and querying|CCACATREPT]] subsystem and to create the CCACAT file for initial installation and reorganizations; and Help files for CCACATREPT.&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; As of Model 204 version 7.5, these procedures and data are contained in M204PROC, and CATPROC is no longer a valid file.&amp;lt;/p&amp;gt;&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;CCACAT&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Required file. Model 204 [[SQL catalog]] for storage of all SQL DDL definitions.&lt;br /&gt;
&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;TSFDATA&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Model 204 file for work records that permit you to retain TSF ([[SQL DDL from the Table Specification Facility|CCATSF]] subsystem) working data across sessions.&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;TSFPROC&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Procedures and data: SOUL procedures to run the CCATSF subsystem, and Help files for the TSF.&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; As of Model 204 version 7.5, these procedures and data are contained in M204PROC, and TSFPROC is no longer a valid file.&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;
==CCAIN parameters to support Model 204 SQL processing==&lt;br /&gt;
The following table summarizes the recommended values for CCAIN parameters that support Model 204 SQL processing. For complete details on what these parameters support and how to adjust their values, see the [[List of Model 204 parameters|list of Model&amp;amp;nbsp;204 parameters]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When any of these parameters are required for RCL processing, the SQL settings are used as defaults.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;caption&amp;quot;&amp;gt;CCAIN parameters affected by SQL processing&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;Parameter&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Recommendation&amp;lt;/th&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;&amp;lt;var&amp;gt;[[CUSTOM parameter|CUSTOM]]&amp;lt;/var&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Set to 8 to allow RCL clients to issue the &amp;lt;var&amp;gt;LOGIN&amp;lt;/var&amp;gt; command. This allows users to logout and login without closing the current connection and opening a new one.&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&amp;lt;var&amp;gt;[[LCPDLST parameter|LCPDLST]]&amp;lt;/var&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Use the default, 2176&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&amp;lt;var&amp;gt;[[LHEAP parameter|LHEAP]]&amp;lt;/var&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Set to 200000, then monitor and adjust&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&amp;lt;var&amp;gt;[[LIBUFF parameter|LIBUFF]]&amp;lt;/var&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Set to 5000; adjust to match &amp;lt;var&amp;gt;SQLIQBSZ&amp;lt;/var&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&amp;lt;var&amp;gt;[[LNTBL parameter|LNTBL]]&amp;lt;/var&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Monitor NTBL and adjust&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&amp;lt;var&amp;gt;[[LOBUFF parameter|LOBUFF]]&amp;lt;/var&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Set to 5000&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;&amp;lt;var&amp;gt;[[LPDLST parameter|LPDLST]]&amp;lt;/var&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Set to 32760&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&amp;lt;var&amp;gt;[[LQTBL parameter|LQTBL]]&amp;lt;/var&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Monitor QTBL and adjust&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;&amp;lt;var&amp;gt;[[LSTBL parameter|LSTBL]]&amp;lt;/var&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Monitor STBL and adjust&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;&amp;lt;var&amp;gt;[[LTTBL parameter|LTTBL]]&amp;lt;/var&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Set to 2000, then monitor TTBL, then adjust&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;&amp;lt;var&amp;gt;[[LVTBL parameter|LVTBL]]&amp;lt;/var&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Monitor VTBL and adjust&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;&amp;lt;var&amp;gt;[[MAXBUF parameter|MAXBUF]]&amp;lt;/var&amp;gt; &lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Minimum value is 18&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;&amp;lt;var&amp;gt;[[MINBUF parameter|MINBUF]]&amp;lt;/var&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Minimum value is 18. See &amp;lt;var&amp;gt;[[MINBUF parameter|MINBUF]]&amp;lt;/var&amp;gt; for the formula used to calculate the appropriate value for &amp;lt;var&amp;gt;MINBUF&amp;lt;/var&amp;gt; in SQL processing.&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;&amp;lt;var&amp;gt;[[NSUBTKS parameter|NSUBTKS]]&amp;lt;/var&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Increase by 3 for first open Model&amp;amp;nbsp;204 TCP/IP (Horizon) link; by 2 for each subsequent link&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;&amp;lt;var&amp;gt;[[SERVSIZE parameter|SERVSIZE]]&amp;lt;/var&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Initially set this to at least 350K and adjust. For processing SQL statements that are unusually large, the recommended value is between 600K and 700K.&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&amp;lt;var&amp;gt;[[SQLBSCAN parameter|SQLBSCAN]]&amp;lt;/var&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Use default, then adjust&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&amp;lt;var&amp;gt;[[SQLBUFSZ parameter|SQLBUFSZ]]&amp;lt;/var&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Set to 100000 on first SQL IODEV line. RCL IODEV uses SQL IODEV setting (default).&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&amp;lt;tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;var&amp;gt;[[SQLCNVER parameter|SQLCNVER]]&amp;lt;/var&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Review the &amp;lt;var&amp;gt;SQLCNVER&amp;lt;/var&amp;gt; 0 and 1 settings to choose what is best for your application.&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;&amp;lt;var&amp;gt;[[SQLFILE parameter|SQLFILE]]&amp;lt;/var&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Set to 1 to have Model 204 SQL processing generate a unique file name for the file to which your &amp;lt;var&amp;gt;CREATE TABLE&amp;lt;/var&amp;gt; table is mapped in the SQL catalog&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&amp;lt;var&amp;gt;[[SQLIQBSZ parameter|SQLIQBSZ]]&amp;lt;/var&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Set to 32752, then adjust&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&amp;lt;var&amp;gt;[[SQLLPLIM parameter|SQLLPLIM]]&amp;lt;/var&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Use default, then adjust&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Handling SQL statements greater than 32K bytes===&lt;br /&gt;
When handling an SQL statement that is greater than 32K, you must consider the following parameters:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The &amp;lt;var&amp;gt;[[LCPDLST parameter|LCPDLST]]&amp;lt;/var&amp;gt; is the length of the C pushdown list. If its value is not large enough, the error message invoked includes the name of the relevant parameter.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;The &amp;lt;var&amp;gt;[[SQLBUFSZ parameter|SQLBUFSZ]]&amp;lt;/var&amp;gt; is the buffer to collect the entire SQL statement. It must be slightly greater than the maximum size of the largest SQL statement, which is the value of SQLI in the audit trail. For example, set SQLBUFSZ=100000 to run a DDL statement that is 52K.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;The &amp;lt;var&amp;gt;[[SQLIQBSZ parameter|SQLIQBSZ]]&amp;lt;/var&amp;gt; is the buffer for the interface with IFAM. For example, set SQLIQBSZ=32752 to run an IFGET result that requires a buffer greater than 31K.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Other pertinent parameters to review are &amp;lt;var&amp;gt;[[LVTBL parameter|LVTBL]]&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;[[LHEAP parameter|LHEAP]]&amp;lt;/var&amp;gt;, and &amp;lt;var&amp;gt;[[SERVSIZE parameter|SERVSIZE]]&amp;lt;/var&amp;gt;. If their values are not large enough, the error message invoked includes the name of the relevant parameter.&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
To allow &amp;lt;var&amp;gt;LHEAP&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;LVTBL&amp;lt;/var&amp;gt; to be as large as possible, conserve address space by setting the buffer size parameters as low as possible. Alternatively, you can place CCASERVR in memory to eliminate size restrictions on &amp;lt;var&amp;gt;SERVSIZE&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;
&lt;br /&gt;
==CCATEMP file size==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
SQL query processing uses CCATEMP space for sorting rows and for storing subquery results. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Depending on the amount of data being accessed, your typical CCATEMP requirements might increase. You can set CCATEMP as high as 16 million pages. Overallocating CCATEMP wastes disk space and uses excessive memory, so only allocate additional pages if necessary.  &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Defining SQL and RCL IODEV threads==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Model 204 requires a pool of threads to support server control of SQL connections. The system manager must define these threads in the CCAIN stream as part of the Online startup configuration.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
For more information about CCAIN and IODEV threads, see [[Defining the user environment (CCAIN)|defining the user environment]].&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You must define &amp;lt;var&amp;gt;IODEV&amp;lt;/var&amp;gt; threads for all Connect&amp;lt;span class=&amp;quot;superstar&amp;quot;&amp;gt;&amp;amp;#9733;&amp;lt;/span&amp;gt; configurations:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;IODEV=19&amp;lt;/code&amp;gt; defines a Model&amp;amp;nbsp;204 TCP/IP SQL thread for TCP/IP.  &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;IODEV=49&amp;lt;/code&amp;gt; defines a Model&amp;amp;nbsp;204 TCP/IP RCL thread for TCP/IP. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Coding the IODEV line===&lt;br /&gt;
Your definition of an IODEV 19 or 49 thread involves the specification or adjustment of the &amp;lt;var&amp;gt;NOTHREAD&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;SQLBUFSZ&amp;lt;/var&amp;gt;, and &amp;lt;var&amp;gt;LHEAP&amp;lt;/var&amp;gt; parameters described in this section. For examples, see [[#Runtime examples|Runtime examples]].&lt;br /&gt;
&lt;br /&gt;
====RCL and SQL multithreaded environment====&lt;br /&gt;
When defining IODEV=49 (RCL) and IODEV=19 (SQL) threads:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;In the IODEV=49 line and in the IODEV=19, set the total number of concurrent threads (&amp;lt;var&amp;gt;NOTHREAD&amp;lt;/var&amp;gt;) and identify the number of each thread.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;In the IODEV=19, set other IODEV parameters such as &amp;lt;var&amp;gt;SQLBUFSZ&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;LHEAP&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;LIBUFF&amp;lt;/var&amp;gt;, and &amp;lt;var&amp;gt;SQLIQBSZ&amp;lt;/var&amp;gt;. The RCL thread uses these SQL thread settings as defaults. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====NOTHREAD====&lt;br /&gt;
You can insert one or more IODEV=19 or 49 lines in the CCAIN stream. On the first line defining the SQL or RCL thread, include the &amp;lt;var&amp;gt;NOTHREAD&amp;lt;/var&amp;gt; parameter to indicate the number of threads to be allocated. The number of threads of types 19 and 49 is controlled by the CPUID zap, and &amp;lt;var&amp;gt;NOTHREAD&amp;lt;/var&amp;gt; must be less than the number of threads defined against the CPUID zap for your site.&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Set &amp;lt;var&amp;gt;NOTHREAD&amp;lt;/var&amp;gt; to the maximum number of concurrent Connect&amp;lt;span class=&amp;quot;superstar&amp;quot;&amp;gt;&amp;amp;#9733;&amp;lt;/span&amp;gt; conversations to be supported. Make sure that your Model&amp;amp;nbsp;204 &amp;lt;var&amp;gt;NUSERS&amp;lt;/var&amp;gt; parameter setting accommodates these additional SQL and RCL threads.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====SQLBUFSZ====&lt;br /&gt;
&amp;lt;var&amp;gt;SQLBUFSZ&amp;lt;/var&amp;gt; is a required user parameter that defines the maximum incoming SQL message length that can be presented to the SQL Server. The recommended initial value for this parameter is 100000. Specify it on the first IODEV 19 line.&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
For more information about sizing SQL buffers, see &amp;lt;var&amp;gt;[[SQLBUFSZ parameter|SQLBUFSZ]]&amp;lt;/var&amp;gt;.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====LHEAP====&lt;br /&gt;
&amp;lt;var&amp;gt;LHEAP&amp;lt;/var&amp;gt; specifies the size of HEAP, a dynamic storage area required for the processing of SQL C routines. HEAP is in the variable portion of the server area allocated to each user, and its size is added to the variable size calculation of the server area. An overall working space of 200,000 bytes is usually sufficient for SQL operations.&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The recommended initial value is 200000 for SQL threads. Specify it on the first IODEV 19 line. Do not specify it with the User 0 parameters, because this wastes space. For non-SQL threads, which do not require HEAP space, you can set or reset &amp;lt;var&amp;gt;LHEAP&amp;lt;/var&amp;gt; to zero, the default. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can monitor the high-water mark for use of this storage area with the HEAP statistic, described in [[#HEAP and PDL high-water marks|HEAP and PDL high-water marks]].&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
As the query complexity increases, you must increase the &amp;lt;var&amp;gt;LHEAP&amp;lt;/var&amp;gt; value accordingly, as you encounter SQL error messages. Many SQL error messages offer specific advice. However, if you continue to get SQL error messages after increasing the &amp;lt;var&amp;gt;LHEAP&amp;lt;/var&amp;gt; value, your query is too complex for RSQL to handle. You should rewrite your query into smaller, less complex parts.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Runtime examples==&lt;br /&gt;
Shown in these examples are sample settings of some of the CCAIN parameters described earlier in this topic, the first two IODEV lines for each SQL IODEV, and Model 204 SQL DEFINE commands. &lt;br /&gt;
&lt;br /&gt;
====For all operating systems using TCP/IP RCL and SQL threads====&lt;br /&gt;
The following example is an excerpt from a job that brings up a Model 204 Online for SQL processing, using a TCP/IP connection.&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;...LIBUFF=3000,LNTBL=600,LOBUFF=5000,LPDLST=32760,&lt;br /&gt;
LQTBL=2000,LSTBL=12000,LTTBL=150,LVTBL=300,&lt;br /&gt;
MINBUF=18,MAXBUF=200,NSUBTKS=15,... &lt;br /&gt;
SERVSIZE=700000,...&lt;br /&gt;
   . &lt;br /&gt;
   . &lt;br /&gt;
   .&lt;br /&gt;
IODEV=49,POLLNO=1,NOTHREAD=4&lt;br /&gt;
IODEV=49,POLLNO=2&lt;br /&gt;
IODEV=49,POLLNO=3&lt;br /&gt;
IODEV=49,POLLNO=4&lt;br /&gt;
IODEV=19,POLLNO=1,NOTHREAD=4,SQLBUFSZ=100000,LHEAP=200000, -&lt;br /&gt;
LIBUFF=6048,SQLIQBSZ=32752&lt;br /&gt;
IODEV=19,POLLNO=2&lt;br /&gt;
IODEV=19,POLLNO=3&lt;br /&gt;
IODEV=19,POLLNO=4&lt;br /&gt;
* above IODEV=49 is for RCL connections&lt;br /&gt;
* above IODEV=19 is for SQL CONNECT* connections&lt;br /&gt;
*-------------------------------------------------------*  /&lt;br /&gt;
*  DEFINE CONNECT* SQL AND RCL LINK ETC...              *  /&lt;br /&gt;
*-------------------------------------------------------*  /&lt;br /&gt;
**********************************************&lt;br /&gt;
DEFINE LINK TCPSQL WITH SCOPE=SYSTEM TRANSPORT=TCPSE -&lt;br /&gt;
  PROTOCOL=IP LOCALID=ANY INBUFSIZE=4096 CONNECTIONS=8 -&lt;br /&gt;
  SERVPORT=2132 &lt;br /&gt;
DEFINE PROCESSGROUP ANY192   WITH SCOPE=SYSTEM LINK=TCPSQL -&lt;br /&gt;
  INLIMIT=8 OUTLIMIT=8 REMOTEID=192.0.0.0  LOGIN=NOTRUST   -&lt;br /&gt;
  GUESTUSER=REJECT  MASK=255.0.0.0&lt;br /&gt;
DEFINE PROCESSGROUP ANY204  WITH SCOPE=SYSTEM LINK=TCPSQL  -&lt;br /&gt;
  INLIMIT=8 OUTLIMIT=8 REMOTEID=204.0.0.0  LOGIN=NOTRUST   -&lt;br /&gt;
  GUESTUDEFINE PROCESS CCARSQL WITH SCOPE = SYSTEM -&lt;br /&gt;
DATALEN = 32763 FROM = (ANY192, ANY204)&lt;br /&gt;
SER=REJECT  MASK=255.0.0.0&lt;br /&gt;
********************************************************&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Server area sizing==&lt;br /&gt;
Server areas are the internal work areas allocated to each user. The server area includes a fixed space portion and a variable space portion. This section lists the fixed and variable portions of the server area that are affected significantly by SQL Server processing.&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The &amp;lt;var&amp;gt;SERVSIZE&amp;lt;/var&amp;gt; system parameter specifies the size of the server area available for all users for the Online run or per IODEV thread. &amp;lt;var&amp;gt;SERVSIZE&amp;lt;/var&amp;gt; is the sum of the fixed and variable portions of the server area.   &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can calculate &amp;lt;var&amp;gt;SERVSIZE&amp;lt;/var&amp;gt; according to formulas provided in the [[Defining the runtime environment (CCAIN)#Server areas|server areas]] topic.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The fixed and variable portions of the server area are calculated separately. To help you estimate &amp;lt;var&amp;gt;SERVSIZE&amp;lt;/var&amp;gt; for Model&amp;amp;nbsp;204 SQL processing, the following sections list the server area parameters and tables that are affected by SQL processing. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Adjust your typical estimates of these parameters and tables as recommended, and include them in your usual &amp;lt;var&amp;gt;SERVSIZE&amp;lt;/var&amp;gt; calculation along with the parameters and tables not affected by SQL processing. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The recommended minimum value of &amp;lt;var&amp;gt;SERVSIZE&amp;lt;/var&amp;gt; for SQL processing is 350K.  For processing SQL statements that are unusually large, the recommended value is between 600K and 700K.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Fixed server area===&lt;br /&gt;
&amp;lt;var&amp;gt;LIBUFF&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;LOBUFF&amp;lt;/var&amp;gt; are parameters that contribute to the fixed portion of the server area calculation. Their typical settings must be increased to accommodate SQL processing of certain kinds of long input statements or returned data. The maximum for both is 32K. Technical Support recommends that you set &amp;lt;var&amp;gt;LIBUFF&amp;lt;/var&amp;gt; close to the value of &amp;lt;var&amp;gt;SQLBUFSZ&amp;lt;/var&amp;gt;.&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
In addition to these parameters, the fixed portion of the server area includes an area (called &amp;lt;code&amp;gt;C PRV&amp;lt;/code&amp;gt; in the audit trail) that is used internally by the SQL Engine for storage of C global variables. SQL IODEVs must allow 6K bytes of fixed server size for the C PRV; non-SQL IODEVs do not need to allocate server space for the C PRV.  &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Variable server area===&lt;br /&gt;
The variable portion of the server area includes server tables and a dynamic storage area for the processing of SQL C routines.&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Server tables are sections of the server area used by the compiler and evaluator to store all the information necessary to run either SOUL or SQL requests. Some server tables are also used by the editor and Host Language Interface (HLI) functions.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
[[#Variable server area sections affected by SQL|Variable server area sections affected by SQL]] lists the sections of the server area used for SQL processing. You might need to resize the controlling parameters to conform to SQL application requirements. Estimate as usual the sizes of the server tables not affected by SQL processing. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
For more information about monitoring server tables and the parameters with which you control their size, see the [[Defining the runtime environment (CCAIN)#Server areas|server areas]] topic. &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
For more information about HEAP, see the discussion of SQL IODEV threads in [[#Defining SQL and RCL IODEV threads|Defining SQL and RCL IODEV threads]].&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;caption&amp;quot;&amp;gt;Variable server area sections affected by SQL&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;Section&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Contents&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Controlling parameter&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;HEAP&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;C routine processing&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;var&amp;gt;[[LHEAP parameter|LHEAP]]&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;LPDLST&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;User pushdown list&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;var&amp;gt;[[LPDLST parameter|LPDLST]]&amp;lt;/var&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;NTBL&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Statement labels, list names, and variables&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;var&amp;gt;[[LNTBL parameter|LNTBL]]&amp;lt;/var&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;QTBL&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Statements in internal form (quadruples) &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;var&amp;gt;[[LQTBL parameter|LQTBL]]&amp;lt;/var&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;STBL&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Character strings&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;var&amp;gt;[[LSTBL parameter|LSTBL]]&amp;lt;/var&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;TTBL&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Temporary work pages&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;var&amp;gt;[[LTTBL parameter|LTTBL]]&amp;lt;/var&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;VTBL&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Compiler variables&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;var&amp;gt;[[LVTBL parameter|LVTBL]]&amp;lt;/var&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;
==Setting initial sizes for SQL buffers==&lt;br /&gt;
The system manager must set three SQL buffer parameters for Connect&amp;lt;span class=&amp;quot;superstar&amp;quot;&amp;gt;&amp;amp;#9733;&amp;lt;/span&amp;gt;, which are described in detail in the following topics:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;INBUFSIZE&amp;lt;/var&amp;gt; parameter of &amp;lt;var&amp;gt;[[DEFINE LINK command: Horizon for TCP/IP|DEFINE LINK]]&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;DATALEN&amp;lt;/var&amp;gt; parameter of &amp;lt;var&amp;gt;[[DEFINE PROCESS command: Horizon for TCP/IP and VTAM|DEFINE PROCESS]]&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;[[SQLBUFSZ parameter|SQLBUFSZ]]&amp;lt;/var&amp;gt; user parameter set in the IODEV line&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===INBUFSIZE===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
At the mainframe, Model 204 TCP/IP receives the TCP/IP request unit (TU) into a buffer whose size is set by the &amp;lt;var&amp;gt;DEFINE LINK&amp;lt;/var&amp;gt; parameter &amp;lt;var&amp;gt;INBUFSIZE&amp;lt;/var&amp;gt;. The buffer receives and passes one TU at a time. For Model 204 TCP/IP, set &amp;lt;var&amp;gt;INBUFSIZE&amp;lt;/var&amp;gt; to 4096 or to the TCP/IP TU size in your network.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===DATALEN===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
In Model 204, &amp;lt;var&amp;gt;DATALEN&amp;lt;/var&amp;gt; has a maximum setting of 32K. It should be set to the average amount of data in any request in your network.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
{{Template:SQL connectivity topic list}}&lt;br /&gt;
&lt;br /&gt;
[[Category: SQL connectivity]]&lt;/div&gt;</summary>
		<author><name>Mlarocca</name></author>
	</entry>
	<entry>
		<id>https://m204wiki.rocketsoftware.com/index.php?title=RKTools_installation&amp;diff=104375</id>
		<title>RKTools installation</title>
		<link rel="alternate" type="text/html" href="https://m204wiki.rocketsoftware.com/index.php?title=RKTools_installation&amp;diff=104375"/>
		<updated>2017-10-09T17:03:25Z</updated>

		<summary type="html">&lt;p&gt;Mlarocca: /* Janus Web rules for RKWeb */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Overview==&lt;br /&gt;
&amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;[[RKTools]]&amp;lt;/var&amp;gt; (Rocket Tools for Model 204) is a set of [[Application Subsystem development|application subsystems]] (aka APSYs) running inside a &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; Online that provide TN3270 and web-based tools for programmers, database administrators, and system managers. &lt;br /&gt;
&lt;br /&gt;
As of RKTools V7.7, all Rocket-provided, SOUL-based tools are consolidated in the &amp;lt;code&amp;gt;M204PROC&amp;lt;/code&amp;gt; procedure file. &amp;lt;code&amp;gt;M204PROC&amp;lt;/code&amp;gt; includes all components from RKTools 7.5 in addition to Dictionary/204 and the [[SQL catalog#Generating DDL with SQL utilities|SQL Server utilities]]. This means that all Model&amp;amp;nbsp;204 SOUL tools provided by Rocket are in a single file. &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; Since the RKTools 7.7 installation process modifies the application subsystem definitions to point to the &amp;lt;code&amp;gt;M204PROC&amp;lt;/code&amp;gt; file, sites that are upgrading must perform a full installation and not merely an &amp;lt;code&amp;gt;M204PROC&amp;lt;/code&amp;gt; file overlay. To allow for a switch back to RKTools 7.5, keep a backup of your current &amp;lt;code&amp;gt;SIRIUS&amp;lt;/code&amp;gt; file and your current &amp;lt;code&amp;gt;CCASYS&amp;lt;/code&amp;gt; file (though you can also change the subsystem definitions manually using [[SUBSYSMGMT]]).&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Installing &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;RKTools&amp;lt;/var&amp;gt; requires downloading the &amp;lt;code&amp;gt;M204PROC&amp;lt;/code&amp;gt; file from the &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; maintenance website, restoring it to your environment, setting up some subsidiary &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; files, and verifying that the Online environment has the appropriate parameter settings. Then you run a single procedure that installs or upgrades the RKTools subsystems.&lt;br /&gt;
&lt;br /&gt;
Once the installation is complete, upgrades to &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;RKTools&amp;lt;/var&amp;gt; can almost always be handled by restoring a fresh copy of the &amp;lt;code&amp;gt;M204PROC&amp;lt;/code&amp;gt; file.&lt;br /&gt;
&lt;br /&gt;
==Download the installation file==&lt;br /&gt;
All &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;RKTools&amp;lt;/var&amp;gt; 7.7 code resides in the &amp;lt;code&amp;gt;M204PROC&amp;lt;/code&amp;gt; &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; file. You need to download a dump version of this file from the Rocket Software Model&amp;amp;nbsp;204 maintenance website. The procedure file for RKTools 7.5 is &amp;lt;code&amp;gt;SIRIUS&amp;lt;/code&amp;gt;.&lt;br /&gt;
 &lt;br /&gt;
To download from the Rocket website:&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;On the &amp;quot;Rocket M204 Customer Care&amp;quot; page ([http://m204.rocketsoftware.com/ http://m204.rocketsoftware.com]), go to the &amp;quot;Downloads and Uploads&amp;quot; section and select the &amp;quot;Download SOUL files&amp;quot; link to access the &amp;quot;SOUL files for Rocket Software&amp;quot; page. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Log in, and download the version of RKTools that is compatible with your version of Model&amp;amp;nbsp;204. The procedure file contained in the &amp;quot;RKTools V7.7&amp;quot; link works for Model&amp;amp;nbsp;204 versions 7.6 and above. For Model&amp;amp;nbsp;204 version 7.5, use the download labeled &amp;quot;RKTools V7.5.&amp;quot;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
A &amp;quot;Click here&amp;quot; link in the text above the file list on the SOUL files download page brings up  [[Downloading and restoring SOUL files]], which provides help about downloading and uploading files, file sizing, and more.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can bypass any step of the installation that applies only to an &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;RKTools&amp;lt;/var&amp;gt; component you are not installing.&lt;br /&gt;
&lt;br /&gt;
==System requirements==&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;RKTools V7.7 was made specifically backward compatible to &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; version 7.6, though version 7.7 is recommended.  Version 7.5 of &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;RKTools&amp;lt;/var&amp;gt; requires &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; version 7.5 or higher.  &lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Requirements for [[#Server size requirements|server sizes]] for each product and Model&amp;amp;nbsp;204 [[#user0parms|User 0]] and [[#utableParms|UTABLE]] parameter settings are listed where appropriate in the installation steps in the next section.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;To verify the products for which your Online is authorized, enter &amp;lt;code&amp;gt;ROCKET&amp;lt;/code&amp;gt; at the &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; command line.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;The installing user &amp;lt;b&amp;gt;must have&amp;lt;/b&amp;gt;:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Update access to the JCL or EXECs that bring up the host Online&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Model&amp;amp;nbsp;204 System Manager privileges&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Access to the [[SUBSYSMGMT]] facility and the JCL or EXEC that runs the Online &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; region.&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;
==Install RKTools==&lt;br /&gt;
&amp;lt;blockquote class=&amp;quot;warn&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;b&amp;gt;Attention:&amp;lt;/b&amp;gt; If you are upgrading from a previous version, keep your old copies of &amp;lt;code&amp;gt;SIRLOCAL&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;M204LOCL&amp;lt;/code&amp;gt;, and most application-specific data files, such as &amp;lt;code&amp;gt;JANCAT&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;SIRLIBD&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;SIRFILED&amp;lt;/code&amp;gt;. The SirMon &amp;lt;code&amp;gt;SIRSTATS&amp;lt;/code&amp;gt; file is replaced in version 7.7 by &amp;lt;code&amp;gt;MONDATA&amp;lt;/code&amp;gt;. The &amp;lt;code&amp;gt;SIRIUS&amp;lt;/code&amp;gt; file is no longer used as of RKTools 7.7, but there is no harm in keeping it in case you want to fall back to a previous RKTools version. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The installation process uses your existing RKTools files to determine whether to perform upgrade actions or new-installation actions, so leave these files allocated and available, including &amp;lt;code&amp;gt;SIRLOCAL&amp;lt;/code&amp;gt;.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Allocate files. &lt;br /&gt;
&amp;lt;p&amp;gt;The following table shows the RKTools files and their sizes: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;table class=&amp;quot;thJustBold&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;caption&amp;gt;RKTools file allocations&amp;lt;/caption&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;File&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Size&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Allocation is required...&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;M204PROC&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;td nowrap&amp;gt;9800 pages&amp;lt;/td&amp;gt; &lt;br /&gt;
&amp;lt;td&amp;gt;Always.&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;SIRLOCAL&lt;br /&gt;
&amp;lt;/th&amp;gt;&amp;lt;td&amp;gt;1200 pages&amp;lt;/td&amp;gt; &lt;br /&gt;
&amp;lt;td&amp;gt;Always.&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;M204LOCL&lt;br /&gt;
&amp;lt;/th&amp;gt;&amp;lt;td&amp;gt;3000 pages&amp;lt;/td&amp;gt; &lt;br /&gt;
&amp;lt;td&amp;gt;If using RKWeb.&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;th nowrap&amp;gt;MONDATA&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;4000 pages&amp;lt;/td&amp;gt; &lt;br /&gt;
&amp;lt;td&amp;gt;Only if installing &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;SirMon&amp;lt;/var&amp;gt;. &amp;lt;p class=&amp;quot;note:&amp;gt;&amp;lt;b&amp;gt;Note:&amp;lt;/b&amp;gt; &amp;lt;code&amp;gt;MONDATA&amp;lt;/code&amp;gt; replaces &amp;lt;code&amp;gt;SIRSTATS&amp;lt;/code&amp;gt;, which is no longer needed as of RKTools V7.7. &amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;SIRFILED&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;1200 pages&amp;lt;/td&amp;gt; &lt;br /&gt;
&amp;lt;td&amp;gt;Only if installing &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;SirFile.&amp;lt;/var&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;SIRLIBD&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;1200 pages&amp;lt;/td&amp;gt; &lt;br /&gt;
&amp;lt;td&amp;gt;Only if installing &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;SirLib.&amp;lt;/var&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;SIRLIBP&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;1200 pages&amp;lt;/td&amp;gt; &lt;br /&gt;
&amp;lt;td&amp;gt;Only if installing &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;SirLib&amp;lt;/var&amp;gt;.&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;JANCAT&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;1200 pages&amp;lt;/td&amp;gt; &lt;br /&gt;
&amp;lt;td&amp;gt;Only if installing Janus OMNI.&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;JANSSL&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;1200 pages&amp;lt;/td&amp;gt; &lt;br /&gt;
&amp;lt;td&amp;gt;Only if installing [[Janus Network Security|Janus SSL]] or RKWeb.&amp;lt;/td&amp;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 following table shows the [[Dictionary/204 overview|Dictionary/204]] supporting files (in addition to M204PROC):&amp;lt;/p&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;File&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Size&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Allocation is required...&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;DATALINK&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;400 pages&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;For Dictionary/204 or SQL Server.&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;METADATA&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;400 pages&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;For Dictionary/204 or SQL Server.&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;M204TEMP&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;400 pages&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;If installing Dictionary/204.&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;D204RPT&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;400 pages&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;If installing Dictionary/204.&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;D204SYS&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;400 pages&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;If installing Dictionary/204.&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;M204DCTL&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;400 pages&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;If installing Dictionary/204.&amp;lt;/td&amp;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 following table shows the [[SQL Server overview|SQL Server]] supporting files (in addition to M204PROC): &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;table class=&amp;quot;thJustBold&amp;quot; id=&amp;quot;sqlfiles&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;caption&amp;gt;SQL Server file allocations&amp;lt;/caption&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;File&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Size&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Allocation is required...&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;CCACAT&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;700 pages&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;For RKWeb access to SQL Server. &amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;DATALINK&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;400 pages&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;For Dictionary/204 or SQL Server.&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;METADATA&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;400 pages&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;For Dictionary/204 or SQL Server.&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;TSFDATA&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;200 pages&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;For RKWeb access to SQL Server. &amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;TSFTEMP&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;300 pages&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;For RKWeb access to SQL Server. &amp;lt;/td&amp;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;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;RESTORE&amp;lt;/var&amp;gt; &amp;lt;code&amp;gt;M204PROC&amp;lt;/code&amp;gt; from the DUMP file [[#Download the installation file|downloaded from the Rocket website]].&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; If you are restoring into your existing &amp;lt;code&amp;gt;M204PROC&amp;lt;/code&amp;gt; file, note that the &amp;lt;code&amp;gt;M204PROC&amp;lt;/code&amp;gt; file has X&#039;0221&#039; privileges, which does &amp;lt;b&amp;gt;not&amp;lt;/b&amp;gt; allow &amp;lt;var&amp;gt;RESTORE&amp;lt;/var&amp;gt;. You will have to &amp;lt;var&amp;gt;CREATE&amp;lt;/var&amp;gt; the file first (to wipe out existing content) before you execute the &amp;lt;var&amp;gt;RESTORE&amp;lt;/var&amp;gt;. A sample command sequence is: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;CREATE FILE M204PROC&lt;br /&gt;
END CREATE&lt;br /&gt;
OPEN FILE M204PROC&lt;br /&gt;
IN M204PROC RESTORE 192 FROM &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;dumpfile&amp;lt;/var&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
To verify the &amp;lt;code&amp;gt;M204PROC&amp;lt;/code&amp;gt; version, you can open &amp;lt;code&amp;gt;M204PROC&amp;lt;/code&amp;gt; with [[SirPro]] and view the RKTOOLS_VERSION procedure. &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li id=&amp;quot;updateJCL&amp;quot;&amp;gt;Update the Online JCL or EXEC:&lt;br /&gt;
&amp;lt;ol type=&amp;quot;a&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Add DD (MVS) cards or FILEDEFs (CMS) for the RKTools files.&lt;br /&gt;
The &amp;quot;RKTools file allocations&amp;quot; table above lists the files for which DD cards or FILEDEFs might be needed.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Verify that the Online environment allows the use of [[Storing and using file group definitions (CCAGRP)#File groups|file groups]] and [[System requirements for Application Subsystems|application subsystems]].&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;To use permanent file groups, the Online must have allocated a [[Storing and using file group definitions (CCAGRP)#Creating the CCAGRP data set|CCAGRP file]], and the &amp;lt;var&amp;gt;[[SYSOPT parameter|SYSOPT]]&amp;lt;/var&amp;gt; parameter must include the &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt; bit. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;To use APSY subsystems, an Online must have allocated a [[System requirements for Application Subsystems#Overview of CCASYS|CCASYS file]], and the &amp;lt;var&amp;gt;SYSOPT&amp;lt;/var&amp;gt; parameter must include the &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; bit. &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 id=&amp;quot;Server size requirements&amp;quot;&amp;gt;Review the RKTools, Dictionary/204, and Model&amp;amp;nbsp;204 SQL Server tables below for the minimum server-size requirements of individual subsystem components.&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; The actual server size requirements might vary slightly from the listings below because of table&lt;br /&gt;
settings in your &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; Online, and because of slight differences between &amp;lt;var&amp;gt;UTABLE&amp;lt;/var&amp;gt; requirements in different versions 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;
Rocket recommends using one server size for the entire Online, making it at least 750,000 bytes to accommodate the largest RKTools component. For more information about server sizing, see [[Defining the runtime environment (CCAIN)#Sizing user server areas|Sizing user server areas]].&lt;br /&gt;
&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; CCATEMP usage might increase with RKTools. CCATEMP should be monitored (&amp;lt;code&amp;gt;VIEW TEMPSIZE&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;VIEW TEMPMAX&amp;lt;/code&amp;gt;) to ensure that sufficient space is allocated to accommodate the additional activity.  &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;thJustBold&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;caption&amp;gt;RKTools server sizes&amp;lt;/caption&amp;gt;&lt;br /&gt;
&amp;lt;tr class=&amp;quot;head&amp;quot;&amp;gt;&amp;lt;th&amp;gt;Subsystem name&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Minimum server size&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;JANSSL&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;300K&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;RKTOOLS&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;135K&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;SIRADMIN&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;150K&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;SIRDBA&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;180K&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;SIRFILE&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;230K&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;SIRLIB&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;135K&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;SIRMON&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;220K&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;SIRPRO&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;750K&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;SIRSCAN&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;250K&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;table class=&amp;quot;thJustBold&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;caption&amp;gt;Dictionary server sizes&amp;lt;/caption&amp;gt;&lt;br /&gt;
&amp;lt;tr class=&amp;quot;head&amp;quot;&amp;gt;&amp;lt;th&amp;gt;Subsystem name&lt;br /&gt;
&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Minimum server size&lt;br /&gt;
&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;DICTADMIN&lt;br /&gt;
&amp;lt;/th&amp;gt;&amp;lt;td&amp;gt;455K&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;DICTIONARY&lt;br /&gt;
&amp;lt;/th&amp;gt;&amp;lt;td&amp;gt;455K&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;DICTREPORT&lt;br /&gt;
&amp;lt;/th&amp;gt;&amp;lt;td&amp;gt;455K&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;DOCUMENT&lt;br /&gt;
&amp;lt;/th&amp;gt;&amp;lt;td&amp;gt;455K&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;FILEMGMT&lt;br /&gt;
&amp;lt;/th&amp;gt;&amp;lt;td&amp;gt;455K&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;SUBSYSMGMT&lt;br /&gt;
&amp;lt;/th&amp;gt;&amp;lt;td&amp;gt;455K&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;XREF&lt;br /&gt;
&amp;lt;/th&amp;gt;&amp;lt;td&amp;gt;455K&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;table class=&amp;quot;thJustBold&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;caption&amp;gt;SQL Server server sizes&amp;lt;/caption&amp;gt;&lt;br /&gt;
&amp;lt;tr class=&amp;quot;head&amp;quot;&amp;gt;&amp;lt;th&amp;gt;Subsystem name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Minimum server size&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;CCACATREPT&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;250000&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;CCATSF&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;165000&amp;lt;/td&amp;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;/ol&amp;gt; &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Verify that the Online has a minimum of 10 [[Sdaemons|Sdaemon]] threads allocated.  Each of these threads is typically defined as an &amp;lt;code&amp;gt;IODEV15&amp;lt;/code&amp;gt; thread.&lt;br /&gt;
&lt;br /&gt;
If using RKWeb or any of the web interfaces to other components, you may need more IODEV15s available.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li id=&amp;quot;user0parms&amp;quot;&amp;gt;Modify the User 0 stream.&lt;br /&gt;
&amp;lt;p&amp;gt; &lt;br /&gt;
Adjust these parameters: &amp;lt;/p&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;Parameter&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Adjustment&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;COMPOPT&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;RKTools requires the &amp;lt;var&amp;gt;COMPOPT&amp;lt;/var&amp;gt; X&#039;03&#039; bit, which enables mixed-case SOUL. RKTools makes extensive use of mixed-case coding, and the tools fail to compile if support is not enabled. If [[SirLib change control#Applying updates in batch mode|batch SirLib]] or other batch features are used, ensure that &amp;lt;var&amp;gt;COMPOPT&amp;lt;/var&amp;gt; is set to X&#039;03&#039; in those jobs as well.&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;CUSTOM&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;RKWeb must include the 18 setting to enable a larger &amp;lt;var&amp;gt;[[SSLIBSIZE]]&amp;lt;/var&amp;gt; on the Janus Web port, which must be secured.&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;MAXBG&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Minimum setting is 4.&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;MAXDAEM&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Minimum setting is 10.&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;MAXINCL&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Minimum setting is 10.&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;NDCBS&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Increase by the number of &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;RKTools&amp;lt;/var&amp;gt; files.&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;NDIR&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Increase by the number of &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;RKTools&amp;lt;/var&amp;gt; files.&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;NFILES&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Increase by the number of &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;RKTools&amp;lt;/var&amp;gt; files.&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;NORQS&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Minimum setting is 5.&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;SESNPUB&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Minimum setting is 40. The right setting for your site might be higher, based on RKWeb usage (number of users).&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;SESUMAX&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Minimum setting is 10. The right setting for your site might be higher, based on RKWeb usage (number of users).&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt; &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li id=&amp;quot;utableParms&amp;quot;&amp;gt;Verify you have adequate &amp;lt;var&amp;gt;[[UTABLE command|UTABLE]]&amp;lt;/var&amp;gt; settings.&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Initial problems with &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;RKTools&amp;lt;/var&amp;gt; subsystems are usually associated with one or two extremely small default &amp;lt;var&amp;gt;UTABLE&amp;lt;/var&amp;gt; settings.&lt;br /&gt;
Running the failing subsystem in &amp;lt;code&amp;gt;TEST DEBUG&amp;lt;/code&amp;gt; mode will highlight &amp;lt;var&amp;gt;UTABLE&amp;lt;/var&amp;gt; parameters that need to be increased. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
These are the recommended settings: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;table class=&amp;quot;thJustBold&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr class=&amp;quot;head&amp;quot;&amp;gt;&amp;lt;th&amp;gt;UTABLE parameter&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Value&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Description&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;HTLEN &amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align:right&amp;quot;&amp;gt;220 &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Max length of each header or trailer&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;LFTBL&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align:right&amp;quot;&amp;gt;1000&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Length of FTBL&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;LFSCB&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align:right&amp;quot;&amp;gt;21400&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Length of full screen buffer&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;LGTBL&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align:right&amp;quot;&amp;gt;2000&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Length of global variable table&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;LIBUFF&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align:right&amp;quot;&amp;gt;2000&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Length of input buffer&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;LITBL&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align:right&amp;quot;&amp;gt;104&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Length of ITBL&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;LNTBL&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align:right&amp;quot;&amp;gt;450&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Length of NTBL&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;LOBUFF&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align:right&amp;quot;&amp;gt;960&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Length of output buffer&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;LOUTPB&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align:right&amp;quot;&amp;gt;10000&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Length of output page buffer&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;LPDLST&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align:right&amp;quot;&amp;gt;10000&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Length of user push down list&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;LQTBL&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align:right&amp;quot;&amp;gt;2200&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Length of QTBL&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;LSTBL&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align:right&amp;quot;&amp;gt;60000&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Length of STBL&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;LTTBL&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align:right&amp;quot;&amp;gt;2000&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Length of TTBL&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;LVTBL&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align:right&amp;quot;&amp;gt;1300&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Length of VTBL&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;LXTBL&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align:right&amp;quot;&amp;gt;1000&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Length of XTBL&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;MAXHDR&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align:right&amp;quot;&amp;gt;7&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Max number of headers&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;MAXTRL&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align:right&amp;quot;&amp;gt;7 &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Max number of trailers&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;NORQS&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align:right&amp;quot;&amp;gt;10&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Number of requests preserved&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;SCRNSTBL &amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align:right&amp;quot;&amp;gt;12000 &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;STBL size for screen objects; this must be set for &amp;lt;code&amp;gt;SIRMON&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;SIRPRO&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;SIRSCAN&amp;lt;/code&amp;gt;. &lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
A setting of 18000 is recommended for shops that use Mod 6 terminals with very large screen sizes (Rocket regularly tests with 3270 screen sizes of 50x150 characters). &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;
Either 12000 or 18000 is both a recommended minimum &amp;lt;em&amp;gt;and&amp;lt;/em&amp;gt; maximum. Unless you have very large servers at your site (1 megabyte or larger), or you have very large screen objects in your own application code, a very large &amp;lt;var&amp;gt;SCRNSTBL&amp;lt;/var&amp;gt; will cause table-size resets to fail.&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;SEQPDL&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align:right&amp;quot;&amp;gt;4096&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Minimum PDL available for sequencer&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Bring up the Online and install all the RKTools components except Dictionary/204 and SQL Server; then install or reinstall Dictionary/204 and SQL utilities as needed:&lt;br /&gt;
&amp;lt;ol type=&amp;quot;a&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;&amp;lt;b&amp;gt;RKTools 7.5 components&amp;lt;/b&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
Issue these commands:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;OPEN FILE CCASYS&lt;br /&gt;
OPEN FILE M204PROC&lt;br /&gt;
INCLUDE RKTOOLS_INSTALL &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
RKTOOLS_INSTALL creates or updates the dozen or so RKTools application subsystems and sets up their supporting files. It performs all installation functions for new sites and all upgrade functions for reinstalling sites. No existing user profiles or other site-specific customization will be lost, as long as your existing SIRLOCAL file is left in place. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The procedure produces a screen that lists all of the subsystems and whether they have loaded. It may be necessary to troubleshoot why expected subsystems did not load, then re-execute the procedure. You are encouraged to use the installation program&#039;s F1-key Help for detailed explanation of how the program is working with the subsystems. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
During APSY subsystem execution, error messages are not suppressed, which aids in diagnosing any installation problems. For example, you will be able to see if an installation failed because a file was enqueued in a different Online, and so on. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The procedure &amp;lt;code&amp;gt;RKTOOLS_INSTALL&amp;lt;/code&amp;gt; also builds a subsystem called &amp;lt;code&amp;gt;RKINSTALL&amp;lt;/code&amp;gt;. If the installation needs to be re-run, you can invoke the subsystem (from command line or later with option 9 in the [[RKTools#mainmenu|RKTools main menu]]) rather than the procedure. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Once the installation completes successfully, start the component subsystems (&amp;lt;var&amp;gt;[[START command: Starting an application subsystem|START SUBSYSTEM]]&amp;lt;/var&amp;gt; command, invoke by name, or both) before using the RKTools 3270 or RKWeb interface. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
To verify that the subsystems are correctly installed, enter &amp;lt;code&amp;gt;RKTOOLS&amp;lt;/code&amp;gt; at the command line, and use the main menu to test the individual RKTools components. You may also want to use SUBSYSMGMT to check that the component subsystem definitions are viewable, and use [[SirPro]] to display the newly restored M204PROC file to ensure its availability. &amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;&amp;lt;b&amp;gt;Dictionary/204&amp;lt;/b&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
Though the [[Dictionary/204 overview|Dictionary/204]] components are delivered in &amp;lt;code&amp;gt;M204PROC&amp;lt;/code&amp;gt; and accessible from RKWeb as of version 7.7, they are not installed and set up by &amp;lt;code&amp;gt;RKTOOLS_INSTALL&amp;lt;/code&amp;gt;. For example, on z/OS, an initial Dictionary/204 installation uses the &amp;lt;code&amp;gt;DDINST&amp;lt;/code&amp;gt; JCL from the Model&amp;amp;nbsp;204 RKOBJLIB; for an upgrade, the &amp;lt;code&amp;gt;DDRINST&amp;lt;/code&amp;gt; job. &lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Though the Dictionary/204 installation steps are largely included in the the RKTools installation process, you may want to review the [[Dictionary/204 installation guide]] for any additional actions you might need to take. &amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;&amp;lt;b&amp;gt;SQL Server&amp;lt;/b&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
The [[SQL Server overview|Model 204 SQL Server]] components are delivered in &amp;lt;code&amp;gt;M204PROC&amp;lt;/code&amp;gt;, and the SQL Server tools (CCACATREPT, CCATSF) are accessible from RKWeb. Support for this use of RKWeb requires the availability of the [[#sqlfiles|SQL Server supporting files]]. &lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
For an initial installation of the SQL Server subsystems, open &amp;lt;code&amp;gt;M204PROC&amp;lt;/code&amp;gt; and execute the following command: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;INCLUDE SQLINST &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
For a reinstallation: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;INCLUDE SQLRINST &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If you are installing and using SQL Server independently apart from RKTools and RKWeb, or you have additional questions about SQL Server installation, see [[Model 204 SQL Server installation]]. &amp;lt;/p&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;Use SUBSYSMGMT to add users to the appropriate [[SCLASS]] classes for any private or semi-public RKTools subsystems. &lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
For authority to do this, you need System Administrator log in privileges, and you need SUBSYSMGMT privileges authorized via the [[Dictionary/204 administration#Security administration|DICTADMIN facility]] of Dictionary/204. The ID of the user that runs the INSTALL_RKTOOLS procedure is automatically added to the ADMIN or to the highest-level administration SCLASS in each of the RKTools subsystems (though not necessarily to the Dictionary and SQL Server subsystems).&amp;lt;/p&amp;gt; &lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Each component application of &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;RKTools&amp;lt;/var&amp;gt; has its own APSY subsystem definition and privileges associated with SCLASS specifications.&lt;br /&gt;
If you have a good reason for doing so, you can redefine any of the &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;RKTools&amp;lt;/var&amp;gt; subsystems as &amp;lt;var&amp;gt;PUBLIC&amp;lt;/var&amp;gt;,&lt;br /&gt;
&amp;lt;var&amp;gt;SEMI-PUBLIC&amp;lt;/var&amp;gt;, or &amp;lt;var&amp;gt;PRIVATE&amp;lt;/var&amp;gt;.&lt;br /&gt;
[[Contacting Rocket Software Technical Support|Contact Rocket Software]] if you are unsure of the effect of a proposed change. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
RKTools components are typically installed as &#039;&#039;auto-start&#039;&#039;. Use SUBSYSMGMT to disable this feature if you prefer that the subsystems not start automatically at each user request. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The RKWeb interface, described further below in [[#Additional setup for RKWeb|Additional setup for RKWeb]], is controlled by the RKWEB subsystem, and you need to update the subsystem definition with the names of eligible users. Some of the RKWeb options require system administrator login privileges just as those options do when accessed with the RKTools TN3270 interface. To use these options in RKWeb requires system administrator login privileges and ADMIN SCLASS membership &amp;lt;i&amp;gt;in the RKWEB subsystem&amp;lt;/i&amp;gt;, as well as a [[RKWeb#RKWeb security|suitable product license]]. &amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;See the &amp;quot;Additional setup&amp;quot; sections below for the components you use at your site. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Additional setup==&lt;br /&gt;
&lt;br /&gt;
===Additional setup for SirLib===&lt;br /&gt;
Read and follow the instructions in the [[SirLib &amp;quot;getting started&amp;quot; steps]].&lt;br /&gt;
&lt;br /&gt;
===Additional setup for SirScan===&lt;br /&gt;
The &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;SirScan&amp;lt;/var&amp;gt; administrator can use SIRADMIN to set default I/O and record maximums for users in the various &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;SirScan&amp;lt;/var&amp;gt; SCLASSes. See [[SirScan setup#Updating the SirScan SCLASS maximums in SIRADMIN|SirScan setup]] for details.&lt;br /&gt;
&lt;br /&gt;
===Additional setup for SirMon===&lt;br /&gt;
When users are added to SCLASSes, note that there is a special &amp;lt;var&amp;gt;BUMP&amp;lt;/var&amp;gt; SCLASS.&lt;br /&gt;
Any user added to this SCLASS gains the ability to &amp;lt;var&amp;gt;BUMP&amp;lt;/var&amp;gt; other users.&lt;br /&gt;
This class does not provide access to customizing options in &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;SirMon&amp;lt;/var&amp;gt;.&lt;br /&gt;
Only users in the ADMIN SCLASS are able to add custom screen definitions to &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;SirMon&amp;lt;/var&amp;gt;.&lt;br /&gt;
 &lt;br /&gt;
If the &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;SirMon&amp;lt;/var&amp;gt; [[SirMon background monitor|background monitor]] is to be used, add the following line to the User 0 input stream:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;SIRMON BACKGROUND&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
The background monitor may also be started automatically in a BATCH2 thread or an sdaemon thread.&lt;br /&gt;
 &lt;br /&gt;
You can customize statistic thresholds or use the supplied defaults to establish problem conditions.&lt;br /&gt;
 &lt;br /&gt;
The background monitor also lets you send warnings to&lt;br /&gt;
e-mail addresses and cell phones (via e-mail).&lt;br /&gt;
This feature requires &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;[[Janus Sockets]]&amp;lt;/var&amp;gt; and a started &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Janus Sockets&amp;lt;/var&amp;gt; port.&lt;br /&gt;
 &lt;br /&gt;
===Additional setup for SirFile===&lt;br /&gt;
If the &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;SirFile&amp;lt;/var&amp;gt; background monitor is to be used, add the following line to User&amp;amp;nbsp;0&#039;s input stream:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;SIRFILE BACKGROUND&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
As with &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;SirMon&amp;lt;/var&amp;gt;, the background monitor may be started automatically in a BATCH2 thread or in an sdaemon thread. See [[SirFile refresh process]] for details.&lt;br /&gt;
 &lt;br /&gt;
You can customize the system and file-specific thresholds or use the&lt;br /&gt;
supplied defaults to establish problem conditions.&lt;br /&gt;
&lt;br /&gt;
===Additional setup for RKWeb===&lt;br /&gt;
New for RKTools version 7.7 (and requiring at least Model&amp;amp;nbsp;204 version 7.6), [[RKWeb]]  (Model 204 Tools on the Web) provides web access for all the important elements of Model&amp;amp;nbsp;204. Use of this product requires &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;[[Janus Web Server]]&amp;lt;/var&amp;gt;. If your site does not own Janus Web Server, RKWeb can still be used by a limited number of Janus Web threads under the Janus TOGA agreement, which allows the running of as many as five web threads.&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Because RKWeb includes an interface for password maintenance and other protected Model&amp;amp;nbsp;204 entities, &amp;lt;i&amp;gt;it is mandatory to run it on an SSL-protected web port&amp;lt;/i&amp;gt;. Experienced users of Janus Web will probably have Janus ports already defined and protected by SSL certificates. Users new to Janus Web might want to review [[#Defining a Janus port and generating a self-signed SSL certificate|Defining a Janus port and generating a self-signed SSL certificate]], below, on defining an unprotected port that can be used to generate an initial self-signed certificate. &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Browser support and configuration====&lt;br /&gt;
RKWeb supports Edge, Chrome, and the latest versions of Firefox and Safari. IE (Internet Explorer) is explicitly &amp;lt;i&amp;gt;not&amp;lt;/i&amp;gt; supported as it is deprecated by Microsoft.&lt;br /&gt;
&lt;br /&gt;
On some browsers, it might be necessary to allow pop-ups or to whitelist your RKWeb port so that pop-ups are authorized.&lt;br /&gt;
&lt;br /&gt;
RKWeb makes extensive use of Javascript, which must be enabled for your browser.&lt;br /&gt;
&lt;br /&gt;
====Janus Web port definition====&lt;br /&gt;
Authorized Janus Web Server users will find that RKWeb works best with at least ten Janus Web threads available on the port definition. Non-Janus customers can still use RKWeb via the free [[Janus Web Server#Limited Janus Web Server|Limited Janus Web Server]] feature, which allows a Janus Web port to be defined with as many as five threads. Under this configuration, RKWeb might operate a little slowly and might require occasional forced-refreshes, but all features are otherwise allowed.&lt;br /&gt;
&lt;br /&gt;
An SSL-protected web port can be defined like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;JANUS DEFINE &amp;lt;i&amp;gt;portname&amp;lt;/i&amp;gt; 8205 WEBSERV 20 IBSIZE 4096 OBSIZE 65534 TRACE 1 -     &lt;br /&gt;
      RBSIZE 4096 UPCASE SESCOOKIE RKSESSION SSLSES VARIPADDR -                     &lt;br /&gt;
      SSL JANSSL JUNE2017.PKEY SSLCACHE 320 SSLMAXCERTL 2048 -          &lt;br /&gt;
      SSLIBSIZE 32767 SSLOBSIZE 16000 -                                 &lt;br /&gt;
      WEBUSER WEBUSER WEBACCT WEBUSER MAXTEMP 2000 COMPRESS 1           &lt;br /&gt;
JANUS START &amp;lt;i&amp;gt;portname&amp;lt;/i&amp;gt;&lt;br /&gt;
&amp;lt;i&amp;gt;privateKeyPassword&amp;lt;/i&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Such an SSL port as defined above will not start unless you have already obtained a signed certificate. To do so, you can start with an unsecured port and use the JANSSL application to [[#Defining a Janus port and generating a self-signed SSL certificate|generate a self-signed SSL certificate]].&lt;br /&gt;
&lt;br /&gt;
RKWeb also provides an interface (&amp;lt;code&amp;gt;Manage &amp;gt; SSL Certificates&amp;lt;/code&amp;gt;) for running the [[Janus Network Security]] application (JANSSL) for obtaining and managing SSL certificates. The RKWeb version of this application mimics the &lt;br /&gt;
operation of the application that is described in detail in the Janus Network Security wiki pages.&lt;br /&gt;
&lt;br /&gt;
====Janus Web rules for RKWeb====&lt;br /&gt;
Following are the recommended and mandatory [[JANUS WEB rule matching order and examples|Janus rules]] to run RKWeb:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot; style = &amp;quot;font-size:80%&amp;quot;&amp;gt;&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;*... Codepage 0037... json requires square brackets to be Unicode 5B &amp;amp; 5D&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;*... translate EBCDIC BA/BB accordingly &lt;br /&gt;
UNICODE TABLE STANDARD MAP E=BA IS U=005B &lt;br /&gt;
UNICODE TABLE STANDARD MAP E=BB IS U=005D &lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;*... TYPE rules for serving up binaries&lt;br /&gt;
JANUS WEB &amp;lt;i&amp;gt;portname&amp;lt;/i&amp;gt; TYPE ANY * TEXT/HTML&lt;br /&gt;
JANUS WEB &amp;lt;i&amp;gt;portname&amp;lt;/i&amp;gt; TYPE ANY *.HTML TEXT/HTML&lt;br /&gt;
JANUS WEB &amp;lt;i&amp;gt;portname&amp;lt;/i&amp;gt; TYPE ANY / TEXT/HTML&lt;br /&gt;
JANUS WEB &amp;lt;i&amp;gt;portname&amp;lt;/i&amp;gt; TYPE ANY *.HTM TEXT/HTML&lt;br /&gt;
JANUS WEB &amp;lt;i&amp;gt;portname&amp;lt;/i&amp;gt; TYPE ANY *.GIF IMAGE/GIF&lt;br /&gt;
JANUS WEB &amp;lt;i&amp;gt;portname&amp;lt;/i&amp;gt; TYPE ANY *.PNG IMAGE/PNG&lt;br /&gt;
JANUS WEB &amp;lt;i&amp;gt;portname&amp;lt;/i&amp;gt; TYPE ANY *.CSS TEXT/CSS&lt;br /&gt;
JANUS WEB &amp;lt;i&amp;gt;portname&amp;lt;/i&amp;gt; TYPE ANY *.JS TEXT/JAVASCRIPT&lt;br /&gt;
JANUS WEB &amp;lt;i&amp;gt;portname&amp;lt;/i&amp;gt; TYPE ANY *.JPEG IMAGE/JPEG&lt;br /&gt;
JANUS WEB &amp;lt;i&amp;gt;portname&amp;lt;/i&amp;gt; TYPE ANY *.JPG IMAGE/JPEG&lt;br /&gt;
JANUS WEB &amp;lt;i&amp;gt;portname&amp;lt;/i&amp;gt; TYPE ANY *.ICO IMAGE/X-ICON&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;*... support for the Ace Editor, part of RKWeb&lt;br /&gt;
JANUS WEB &amp;lt;i&amp;gt;portname&amp;lt;/i&amp;gt; ON /ACE/*                 OPEN M204PROC SEND * TEXT&lt;br /&gt;
JANUS WEB &amp;lt;i&amp;gt;portname&amp;lt;/i&amp;gt; ON /ACE/EDITOR            OPEN M204PROC CMD &#039;RKWEB&#039;&lt;br /&gt;
JANUS WEB &amp;lt;i&amp;gt;portname&amp;lt;/i&amp;gt; ON /ACE/EDITOR.JSON       OPEN M204PROC CMD &#039;RKWEB&#039;&lt;br /&gt;
JANUS WEB &amp;lt;i&amp;gt;portname&amp;lt;/i&amp;gt; ON /ACE/PROCLIST          OPEN M204PROC CMD &#039;RKWEB&#039;&lt;br /&gt;
JANUS WEB &amp;lt;i&amp;gt;portname&amp;lt;/i&amp;gt; ON /ACE/PROCLIST.JSON     OPEN M204PROC CMD &#039;RKWEB&#039;&lt;br /&gt;
JANUS WEB &amp;lt;i&amp;gt;portname&amp;lt;/i&amp;gt; ON /ACE/S.SETTINGS.PNG    OPEN M204PROC SEND S.SETTINGS.PNG BINARY EXPIRE +999999&lt;br /&gt;
JANUS WEB &amp;lt;i&amp;gt;portname&amp;lt;/i&amp;gt; ON /ACE/S.SIRLIB_SEQ.PNG  OPEN M204PROC SEND S.SIRLIB_SEQ.PNG BINARY EXPIRE +999999&lt;br /&gt;
JANUS WEB &amp;lt;i&amp;gt;portname&amp;lt;/i&amp;gt; ON /ACE/*.JS              OPEN M204PROC SEND *.JS TEXT&lt;br /&gt;
JANUS WEB &amp;lt;i&amp;gt;portname&amp;lt;/i&amp;gt; ON /ACE/SRC/SNIPPETS/*.JS OPEN M204PROC SEND /ACE/SRC/SNIPPETS/*.JS BINARY EXPIRE +999999&lt;br /&gt;
JANUS WEB &amp;lt;i&amp;gt;portname&amp;lt;/i&amp;gt; ON /ACE/SRC/*.JS          OPEN M204PROC SEND /ACE/SRC/*.JS BINARY EXPIRE +999999&lt;br /&gt;
JANUS WEB &amp;lt;i&amp;gt;portname&amp;lt;/i&amp;gt; ON /ACE/SRC/MODE-M204.JS  OPEN M204PROC SEND MODE-M204.JS TEXT&lt;br /&gt;
JANUS WEB &amp;lt;i&amp;gt;portname&amp;lt;/i&amp;gt; ON /ACE/LIB/*.JS          OPEN M204PROC SEND *.JS BINARY EXPIRE +999999&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;*... RKWeb rules:&lt;br /&gt;
JANUS WEB &amp;lt;i&amp;gt;portname&amp;lt;/i&amp;gt; ON /RKWEB/* CMD RKWEB&lt;br /&gt;
JANUS WEB &amp;lt;i&amp;gt;portname&amp;lt;/i&amp;gt; ON /RKWEB/*.CSS          OPEN FILE M204PROC SEND &amp;quot;1.CSS TEXT EXPIRE +7200&lt;br /&gt;
JANUS WEB &amp;lt;i&amp;gt;portname&amp;lt;/i&amp;gt; ON /RKWEB/*.JS           OPEN FILE M204PROC SEND &amp;quot;1.JS  TEXT EXPIRE +7200&lt;br /&gt;
JANUS WEB &amp;lt;i&amp;gt;portname&amp;lt;/i&amp;gt; ON /RKWEB/*.GIF          OPEN FILE M204PROC SEND &amp;quot;1.GIF EXPIRE +7200&lt;br /&gt;
JANUS WEB &amp;lt;i&amp;gt;portname&amp;lt;/i&amp;gt; ON /RKWEB/*.PNG          OPEN FILE M204PROC SEND &amp;quot;1.PNG EXPIRE +7200&lt;br /&gt;
JANUS WEB &amp;lt;i&amp;gt;portname&amp;lt;/i&amp;gt; ON /RKWEB/*.JPG          OPEN FILE M204PROC SEND &amp;quot;1.JPG EXPIRE +7200&lt;br /&gt;
JANUS WEB &amp;lt;i&amp;gt;portname&amp;lt;/i&amp;gt; ON /RKWEB/*.JPEG         OPEN FILE M204PROC SEND &amp;quot;1.JPEG EXPIRE +7200&lt;br /&gt;
JANUS WEB &amp;lt;i&amp;gt;portname&amp;lt;/i&amp;gt; ON /RKWEB/*/*.CSS        OPEN FILE M204PROC SEND &amp;quot;2.CSS TEXT EXPIRE +7200&lt;br /&gt;
JANUS WEB &amp;lt;i&amp;gt;portname&amp;lt;/i&amp;gt; ON /RKWEB/*/*.JS         OPEN FILE M204PROC SEND &amp;quot;2.JS  TEXT EXPIRE +7200&lt;br /&gt;
JANUS WEB &amp;lt;i&amp;gt;portname&amp;lt;/i&amp;gt; ON /RKWEB/*/*.GIF        OPEN FILE M204PROC SEND &amp;quot;2.GIF EXPIRE +7200&lt;br /&gt;
JANUS WEB &amp;lt;i&amp;gt;portname&amp;lt;/i&amp;gt; ON /RKWEB/*/*.PNG        OPEN FILE M204PROC SEND &amp;quot;2.PNG EXPIRE +7200&lt;br /&gt;
JANUS WEB &amp;lt;i&amp;gt;portname&amp;lt;/i&amp;gt; ON /RKWEB/*/*.JPG        OPEN FILE M204PROC SEND &amp;quot;2.JPG EXPIRE +7200&lt;br /&gt;
JANUS WEB &amp;lt;i&amp;gt;portname&amp;lt;/i&amp;gt; ON /RKWEB/*/*.JPEG       OPEN FILE M204PROC SEND &amp;quot;2.JPEG EXPIRE +7200&lt;br /&gt;
JANUS WEB &amp;lt;i&amp;gt;portname&amp;lt;/i&amp;gt; ON /RKWEB/*/RKWSEND/*.*  OPEN FILE M204PROC SEND &amp;quot;2.&amp;quot;3  EXPIRE +7200&lt;br /&gt;
JANUS WEB &amp;lt;i&amp;gt;portname&amp;lt;/i&amp;gt; ON /RKWSEND/*            OPEN FILE M204PROC SEND *      EXPIRE +7200&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;*... Rules supporting the applications implemented as Janus Legacy apps.&lt;br /&gt;
JANUS WEB &amp;lt;i&amp;gt;portname&amp;lt;/i&amp;gt;  DISALLOW /ACE*&lt;br /&gt;
JANUS WEB &amp;lt;i&amp;gt;portname&amp;lt;/i&amp;gt;  DISALLOW /RKW*&lt;br /&gt;
JANUS WEB &amp;lt;i&amp;gt;portname&amp;lt;/i&amp;gt;  DISALLOW /SIRLIB*&lt;br /&gt;
JANUS WEB &amp;lt;i&amp;gt;portname&amp;lt;/i&amp;gt;  DISALLOW /DICTADMIN* &lt;br /&gt;
JANUS WEB &amp;lt;i&amp;gt;portname&amp;lt;/i&amp;gt;  DISALLOW /DICTREPORT* &lt;br /&gt;
JANUS WEB &amp;lt;i&amp;gt;portname&amp;lt;/i&amp;gt;  DISALLOW /DICTDOC* &lt;br /&gt;
JANUS WEB &amp;lt;i&amp;gt;portname&amp;lt;/i&amp;gt;  DISALLOW /XREF* &lt;br /&gt;
JANUS WEB &amp;lt;i&amp;gt;portname&amp;lt;/i&amp;gt;  DISALLOW /FILEMGMT*&lt;br /&gt;
JANUS WEB &amp;lt;i&amp;gt;portname&amp;lt;/i&amp;gt;  DISALLOW /CCACATREPT*&lt;br /&gt;
JANUS WEB &amp;lt;i&amp;gt;portname&amp;lt;/i&amp;gt;  DISALLOW /CCATSF*&lt;br /&gt;
&lt;br /&gt;
JANUS WEB &amp;lt;i&amp;gt;portname&amp;lt;/i&amp;gt;  ALLOW    /ACE*        USER *&lt;br /&gt;
JANUS WEB &amp;lt;i&amp;gt;portname&amp;lt;/i&amp;gt;  ALLOW    /RKW*        USER *&lt;br /&gt;
JANUS WEB &amp;lt;i&amp;gt;portname&amp;lt;/i&amp;gt;  ALLOW    /SIRLIB*     USER *&lt;br /&gt;
JANUS WEB &amp;lt;i&amp;gt;portname&amp;lt;/i&amp;gt;  ALLOW    /DICTADMIN*  USER *&lt;br /&gt;
JANUS WEB &amp;lt;i&amp;gt;portname&amp;lt;/i&amp;gt;  ALLOW    /DICTREPORT* USER *&lt;br /&gt;
JANUS WEB &amp;lt;i&amp;gt;portname&amp;lt;/i&amp;gt;  ALLOW    /DICTDOC*    USER *&lt;br /&gt;
JANUS WEB &amp;lt;i&amp;gt;portname&amp;lt;/i&amp;gt;  ALLOW    /XREF*       USER *&lt;br /&gt;
JANUS WEB &amp;lt;i&amp;gt;portname&amp;lt;/i&amp;gt;  ALLOW    /FILEMGMT*   USER *&lt;br /&gt;
JANUS WEB &amp;lt;i&amp;gt;portname&amp;lt;/i&amp;gt;  ALLOW    /CCACATREPT* USER *&lt;br /&gt;
JANUS WEB &amp;lt;i&amp;gt;portname&amp;lt;/i&amp;gt;  ALLOW    /CCATSF*     USER *&lt;br /&gt;
&lt;br /&gt;
JANUS WEB &amp;lt;i&amp;gt;portname&amp;lt;/i&amp;gt;  ON /SIRLIB*     CMD &#039;SIRLIB *&#039;&lt;br /&gt;
JANUS WEB &amp;lt;i&amp;gt;portname&amp;lt;/i&amp;gt;  ON /DICTADMIN*  CMD &#039;DICTADMIN *&#039;&lt;br /&gt;
JANUS WEB &amp;lt;i&amp;gt;portname&amp;lt;/i&amp;gt;  ON /DICTREPORT* CMD &#039;DICTREPORT *&#039;&lt;br /&gt;
JANUS WEB &amp;lt;i&amp;gt;portname&amp;lt;/i&amp;gt;  ON /DICTDOC*    CMD &#039;DOCUMENT *&#039;&lt;br /&gt;
JANUS WEB &amp;lt;i&amp;gt;portname&amp;lt;/i&amp;gt;  ON /XREF*       CMD &#039;XREF *&#039;&lt;br /&gt;
JANUS WEB &amp;lt;i&amp;gt;portname&amp;lt;/i&amp;gt;  ON /FILEMGMT*   CMD &#039;FILEMGMT *&#039;&lt;br /&gt;
JANUS WEB &amp;lt;i&amp;gt;portname&amp;lt;/i&amp;gt;  ON /CCACATREPT*   CMD &#039;CCACATREPT *&#039;&lt;br /&gt;
JANUS WEB &amp;lt;i&amp;gt;portname&amp;lt;/i&amp;gt;  ON /CCATSF*   CMD &#039;CCATSF *&#039;&lt;br /&gt;
&lt;br /&gt;
JANUS WEB &amp;lt;i&amp;gt;portname&amp;lt;/i&amp;gt; SCREEN /SIRLIB/* - &lt;br /&gt;
  EXITURL    &#039;/rkweb/&#039; EXITKEY &#039;Exit SirLib&#039; AUTOPF ON CSS /styles/cool.css -&lt;br /&gt;
  BGCOLOR &#039;white&#039; TEXT &#039;black&#039; - &lt;br /&gt;
  BLUE &#039;#000066&#039; GREEN &#039;#006600&#039; PINK &#039;#ff80ff&#039; RED &#039;#ff0000&#039; TURQUOISE &#039;#0033ff&#039; WHITE &#039;#0000ff&#039; YELLOW &#039;#ffff00&#039;&lt;br /&gt;
&lt;br /&gt;
JANUS WEB &amp;lt;i&amp;gt;portname&amp;lt;/i&amp;gt; SCREEN /DICTADMIN* - &lt;br /&gt;
  EXITURL    &#039;/rkweb/&#039; EXITKEY &#039;Exit DictAdmin&#039; AUTOPF ON  CSS /styles/cool.css -&lt;br /&gt;
  BGCOLOR &#039;white&#039; TEXT &#039;black&#039; -&lt;br /&gt;
  BLUE &#039;#000066&#039; GREEN &#039;#006600&#039; PINK &#039;#ff80ff&#039; RED &#039;#ff0000&#039; TURQUOISE &#039;#0033ff&#039; WHITE &#039;#0000ff&#039; YELLOW &#039;#ffff00&#039;&lt;br /&gt;
&lt;br /&gt;
JANUS WEB &amp;lt;i&amp;gt;portname&amp;lt;/i&amp;gt; SCREEN /DICTREPORT* -&lt;br /&gt;
  EXITURL    &#039;/rkweb/&#039; EXITKEY &#039;Exit DictReport&#039; AUTOPF ON  CSS /styles/cool.css -&lt;br /&gt;
  BGCOLOR &#039;white&#039; TEXT &#039;black&#039; -&lt;br /&gt;
  BLUE &#039;#000066&#039; GREEN &#039;#006600&#039; PINK &#039;#ff80ff&#039; RED &#039;#ff0000&#039; TURQUOISE &#039;#0033ff&#039; WHITE &#039;#0000ff&#039; YELLOW &#039;#ffff00&#039;&lt;br /&gt;
&lt;br /&gt;
JANUS WEB &amp;lt;i&amp;gt;portname&amp;lt;/i&amp;gt; SCREEN /DICTDOC*  - &lt;br /&gt;
  EXITURL    &#039;/rkweb/&#039; EXITKEY &#039;Exit Document&#039; AUTOPF ON  CSS /styles/cool.css -&lt;br /&gt;
  BGCOLOR &#039;white&#039; TEXT &#039;black&#039; - &lt;br /&gt;
  BLUE &#039;#000066&#039; GREEN &#039;#006600&#039; PINK &#039;#ff80ff&#039; RED &#039;#ff0000&#039; TURQUOISE &#039;#0033ff&#039; WHITE &#039;#0000ff&#039; YELLOW &#039;#ffff00&#039;&lt;br /&gt;
 &lt;br /&gt;
JANUS WEB &amp;lt;i&amp;gt;portname&amp;lt;/i&amp;gt; SCREEN /XREF*  - &lt;br /&gt;
  EXITURL    &#039;/rkweb/&#039; EXITKEY &#039;Exit Xref&#039; AUTOPF ON  CSS /styles/cool.css -&lt;br /&gt;
  BGCOLOR &#039;white&#039; TEXT &#039;black&#039; - &lt;br /&gt;
  BLUE &#039;#000066&#039; GREEN &#039;#006600&#039; PINK &#039;#ff80ff&#039; RED &#039;#ff0000&#039; TURQUOISE &#039;#0033ff&#039; WHITE &#039;#0000ff&#039; YELLOW &#039;#ffff00&#039;&lt;br /&gt;
&lt;br /&gt;
JANUS WEB &amp;lt;i&amp;gt;portname&amp;lt;/i&amp;gt; SCREEN /FILEMGMT*    - &lt;br /&gt;
  EXITURL    &#039;/rkweb/&#039; EXITKEY &#039;Exit FileMgmt&#039; AUTOPF ON CSS /styles/cool.css -&lt;br /&gt;
  BGCOLOR &#039;white&#039; TEXT &#039;black&#039; -  &lt;br /&gt;
  BLUE &#039;#000066&#039; GREEN &#039;#006600&#039; PINK &#039;#ff80ff&#039; RED &#039;#ff0000&#039; TURQUOISE &#039;#0033ff&#039; WHITE &#039;#0000ff&#039; YELLOW &#039;#ffff00&#039;&lt;br /&gt;
&lt;br /&gt;
JANUS WEB &amp;lt;i&amp;gt;portname&amp;lt;/i&amp;gt; SCREEN /CCACATREPT*    - &lt;br /&gt;
  EXITURL    &#039;/rkweb/&#039; EXITKEY &#039;Exit CCACatRept&#039; AUTOPF ON CSS /styles/cool.css -&lt;br /&gt;
  BGCOLOR &#039;white&#039; TEXT &#039;black&#039; -  &lt;br /&gt;
  BLUE &#039;#000066&#039; GREEN &#039;#006600&#039; PINK &#039;#ff80ff&#039; RED &#039;#ff0000&#039; TURQUOISE &#039;#0033ff&#039; WHITE &#039;#0000ff&#039; YELLOW &#039;#ffff00&#039;&lt;br /&gt;
&lt;br /&gt;
JANUS WEB &amp;lt;i&amp;gt;portname&amp;lt;/i&amp;gt; SCREEN /CCATSF*    - &lt;br /&gt;
  EXITURL    &#039;/rkweb/&#039; EXITKEY &#039;Exit CCATSF&#039; AUTOPF ON CSS /styles/cool.css -&lt;br /&gt;
  BGCOLOR &#039;white&#039; TEXT &#039;black&#039; -  &lt;br /&gt;
  BLUE &#039;#000066&#039; GREEN &#039;#006600&#039; PINK &#039;#ff80ff&#039; RED &#039;#ff0000&#039; TURQUOISE &#039;#0033ff&#039; WHITE &#039;#0000ff&#039; YELLOW &#039;#ffff00&#039;&lt;br /&gt;
 &lt;br /&gt;
START SUBSYSTEM DICTADMIN&lt;br /&gt;
START SUBSYSTEM DICTREPORT&lt;br /&gt;
START SUBSYSTEM DOCUMENT &lt;br /&gt;
START SUBSYSTEM XREF&lt;br /&gt;
START SUBSYSTEM FILEMGMT&lt;br /&gt;
START SUBSYSTEM CCACATREPT&lt;br /&gt;
START SUBSYSTEM CCATSF&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Again, as described earlier in [[#Janus Web port definition|Janus Web port definition]], because the above rules force users to log in with their enterprise credentials, and because RKWeb provides an interface into protected elements like passwords and APSY definitions, the port on which &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;RKWeb&amp;lt;/var&amp;gt; runs must be SSL protected.&lt;br /&gt;
&lt;br /&gt;
To verify that the Janus Web rules are defined and that the SSL and unsecured ports are started, issue a &amp;lt;code&amp;gt;[[JANUS STATUS|JANUS STATUS *]]&amp;lt;/code&amp;gt; command.&lt;br /&gt;
&lt;br /&gt;
Once the rules are implemented and the port is started, You can access RKWeb with a URL like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;https://www.mydomain.com/rkweb/welcome.html&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In addition to web rules, if low-privileged users are to be given access to RKWeb, certain system level methods need to be made available to those users. The following commands are required to implement this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;SIRMETH ALLOW SYSTEMSET SUBSYSTEM RKW* NONPRE&lt;br /&gt;
SIRMETH ALLOW SUBSYSTEMSET SUBSYSTEM RKW* NONPRE&lt;br /&gt;
SIRMETH ALLOW SYSTEMSET SUBSYSTEM SIR* NONPRE&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As implied by the recommended and mandatory &amp;lt;var&amp;gt;JANUS WEB&amp;lt;/var&amp;gt; rules above, some RKWeb applications are implemented with [[Janus Web Legacy Support|Janus Legacy]], which launches them into a separate browser tab. These Janus Legacy applications are not fully integrated with RKWeb, so you must use the security configured for those applications. For instance, [[Dictionary/204 FILEMGMT overview#Prerequisites|FILEMGMT]] is implemented as Janus Legacy, and it might prompt the user for a separate password.&lt;br /&gt;
&lt;br /&gt;
===Additional setup for JANSSL===&lt;br /&gt;
&lt;br /&gt;
====Defining a Janus port and generating a self-signed SSL certificate====&lt;br /&gt;
You can run RKWeb on any SSL-protected Janus port, and experienced users are likely to add the [[#Janus Web rules for RKWeb|recommended Janus rules]] to a port or ports they already have configured. &lt;br /&gt;
&lt;br /&gt;
New users might need to define an initial &amp;lt;em&amp;gt;unprotected&amp;lt;/em&amp;gt; Janus port that can then be used to generate a self-signed certificate. That certificate is then used to protect the port on which RKWeb is to run. Directions follow:&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Enter these rules to create a very basic Janus Web port:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;JANUS DEFINE MYWEBPORT 80 WEBSERV 10 IBSIZE 4096 OBSIZE 8192 TRACE 1 RBSIZE 4096 -&lt;br /&gt;
    UPCASE WEBUSER WEBUSER WEBACCT WEBUSER MAXTEMP 1000&lt;br /&gt;
&lt;br /&gt;
 JANUS WEB MYWEBPORT ON / OPEN FILE M204PROC CMD &#039;INCLUDE JANWEB.HOMEPAGE.HTML&#039;&lt;br /&gt;
 JANUS WEB MYWEBPORT ON /JANSSL/* OPEN FILE M204PROC CMD &#039;INCLUDE JANSSL.*&#039;    &lt;br /&gt;
 JANUS WEB MYWEBPORT ON /JANWEB/* OPEN FILE M204PROC CMD &#039;INCLUDE JANWEB.*&#039; &lt;br /&gt;
&lt;br /&gt;
 * ALLOW rules that will force a logon for the JANSSL application.&lt;br /&gt;
 * These will result in a warning, which is expected, but can be ignored.&lt;br /&gt;
 JANUS WEB MYWEBPORT DISALLOW *&lt;br /&gt;
 JANUS WEB MYWEBPORT ALLOW * USER *   &lt;br /&gt;
&lt;br /&gt;
 JANUS START MYWEBPORT &amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Use either of the following ways to connect to the JANSSL certificate management program:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;With the following URL, invoke the Janus default home page: &lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;http://&amp;lt;/nowiki&amp;gt;www.&amp;lt;i&amp;gt;mydomain&amp;lt;/i&amp;gt;.com:&amp;lt;i&amp;gt;xxxx&amp;lt;/i&amp;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;xxxx&amp;lt;/var&amp;gt; is the port number. In the preceding port definition, &amp;lt;code&amp;gt;80&amp;lt;/code&amp;gt; is the default port for web connections. Your network administrator might require a different port number. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
On the Janus default home page, click the link to the JANSSL certificate management program. &amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Using your own domain name and port number, connect directly to the JANSSL certificate management program: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;http://&amp;lt;/nowiki&amp;gt;www.&amp;lt;i&amp;gt;mydomain&amp;lt;/i&amp;gt;.com:9999/janweb/sslmain.html &amp;lt;/p&amp;gt;&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;Use the certificate management program to generate a self-signed certificate.&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The program contains ample online Help. Follow the instructions for generating a self-signed certificate. &amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Use the self-signed certificate to protect the port from which RKWeb will run. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category: RKTools]]&lt;/div&gt;</summary>
		<author><name>Mlarocca</name></author>
	</entry>
	<entry>
		<id>https://m204wiki.rocketsoftware.com/index.php?title=Security_Server_(formerly_RACF)_interface&amp;diff=103773</id>
		<title>Security Server (formerly RACF) interface</title>
		<link rel="alternate" type="text/html" href="https://m204wiki.rocketsoftware.com/index.php?title=Security_Server_(formerly_RACF)_interface&amp;diff=103773"/>
		<updated>2017-07-19T22:19:35Z</updated>

		<summary type="html">&lt;p&gt;Mlarocca: /* SECPLIST parameter */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Overview==&lt;br /&gt;
This topic presents an overview of how Security Server works and describes the impact of the Security Server Interface on the Model 204 user, system manager, and Security Server security administrator.  &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; The Security Server interface was formerly known as the RACF interface.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Security Server===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;Security Server is an extension of the IBM z/OS operating system that provides comprehensive data security. The Security Server Interface allows a Model 204 installation to use Security Server services within the Security Server environment. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Model 204 Security Server Interface===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;The Model 204 Security Server Interface allows an orderly migration from Model 204 security to Security Server security and allows an installation to use a combination of either or both security methods. The interface provides the tools and instructions necessary to: &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Define a Security Server control group so that Model 204 can distinguish between separately running copies (that is, test and production) &lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Define Security Server generic profiles for Security Server authorization of Model 204 user privileges within a control group &lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Define a generic profile within Security Server that is associated with a control group, and determines whether a user can log in to Model 204 &lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Define a Security Server common control group for Model 204 resources that can be shared between running copies &lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Define a default user priority class, or define the Security Server generic profiles that permit certain users to have specified Model 204 priorities &lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Provide a mechanism to validate accounting information &lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Determine a generic profile within Security Server that can define whether a user is allowed to submit JCL through the USE command &lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Allow a system manager to add, change, or delete Security Server Interface options that control interface operations &lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Provide a mechanism that establishes a shadow login capability to restrict user authorization via a default user ID for users who do not log directly in to Security Server &lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Provide a method for a Security Server security administrator to define a default group, user ID, and password for the default user ID &lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Provide a method for a Security Server security administrator to force users to log in through Security Server and not through &lt;br /&gt;
CCASTAT &lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
===Model 204 Security Server Interface components===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;In summary, the Security Server Interface provides all the facilities an installation needs to implement Security Server security within the Model 204 environment. &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The following figure illustrates the components of the Security Server Interface. &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
[[File:SECURITY_Security_Server_interface.jpg|border|450px]]&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;p class=&amp;quot;caption&amp;quot;&amp;gt;Security Server Interface&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;The Security Server Interface consists of the following components: &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;Component&amp;lt;/th&amp;gt; &amp;lt;th&amp;gt;Notes&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;Model 204 &amp;lt;/td&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;td&amp;gt;Links with the Security Server Interface module &amp;lt;/td&amp;gt;&lt;br /&gt;
&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 Server Interface module, RACFOS&amp;lt;/td&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;td&amp;gt;Communicates with Security Server by using the System Authorization Facility (SAF) z/OS router&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;RACFPARM module &amp;lt;/td&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;td&amp;gt;Can be linked with Model 204 or loaded dynamically at initialization&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Model 204 system file, CCASTAT&amp;lt;/td&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;td&amp;gt;Contains file protection passwords, user IDs, and user ID passwords&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Brief introduction to Security Server==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;This section provides a brief summary of key Security Server features that are used in the discussion of the Model 204 Security Server Interface. &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;For more information about the Security Server, see the [http://www-03.ibm.com/systems/z/os/zos/features/racf/resources.html IBM documentation] associated with that product. &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Security Server processing===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;Security Server identifies and verifies users accessing a system in which Security Server is installed and determines whether or not the user: &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Is defined to Security Server &lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Has supplied a valid password (and/or operator identification card) and group name &lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Has the REVOKE attribute, which prevents a Security Server defined user from entering the system at all or from entering the system with certain groups &lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Can use the system only at certain times or on certain days as specified by the system manager or Security Server security officer &lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Is authorized to access the terminal (which also can include day and time restrictions for accessing that terminal) &lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Is authorized to access the application &lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The following types of checking are performed by Security Server: &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Authorization &lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Global access &lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Authorization checking===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;When Security Server verifies a user’s identity, Security Server specifies the scope of that user’s authorization for the current terminal session or batch job in a control block called the accessor environment element (ACEE). Security Server controls the interaction between the user and protected resources and authorizes not only which resources the user can access, but the way in which the user can access them (for example, as read-only or update). &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;At the start of processing, Security Server performs the following checks that are related to the security classification of users &lt;br /&gt;
&lt;br /&gt;
and data: &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Compares the security level in the user and resource profiles. If the resource has a higher security level than the user, Security Server denies the request. &lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Checks a category list (that is, a list of site-defined names corresponding to departments or areas within an organization) in the user’s profile against the category list in the resource profile. If the resource profile contains a category that is not in the user’s &lt;br /&gt;
profile, Security Server denies the request. &lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;If Security Server has not denied the request as a result of the security classification checks, processing continues. &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;Security Server permits access to a resource if the user satisfies any of a number of conditions, such as the following: &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The resource is a data set and the high-level qualifier is the user’s user ID &lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;The user’s user ID is in the access list with sufficient authority &lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;The user’s current connect group is in the access list with sufficient authority &lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;When list-of-group checking is active, one of the other groups with which the user is connected is in the access list with sufficient authority &lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;The universal access authority (UACC) is sufficiently high &lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;The user satisfies both of these conditions: &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The user has the OPERATIONS attribute or the resource is within the scope of a group in which the user has the group-OPERATIONS attribute&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The user’s user ID or any group name the user is connected to is in the access list with an authority not less than the user’s intended access&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;
&amp;lt;p&amp;gt;Security Server provides two installation exits that a site can use during RACHECK processing, as well as a quicker form of &lt;br /&gt;
authorization checking called FRACHECK, or fast path RACHECK processing. &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Global access checking===&lt;br /&gt;
&lt;br /&gt;
In addition to authorization checking, Security Server also provides global access checking. Global access checking allows a site to store a system-wide table of default authorization levels for selected resources. Security Server checks this table to determine if access to a resource is permitted. &lt;br /&gt;
&lt;br /&gt;
If access is permitted, Security Server bypasses further RACHECK processing. If the global access check fails, RACHECK processing continues. Frequently accessed resources with generalized access rules are good candidates for global access checking.&lt;br /&gt;
&lt;br /&gt;
Global access checking handles resources in both the data set and the general resource classes, with the exception of group &lt;br /&gt;
resource classes. &lt;br /&gt;
&lt;br /&gt;
Global access checking does the following: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Grants access, but does not, by itself, deny any request for access &lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Does not allow logging of permitted access or gather statistics &lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Does not offer a postprocessing installation exit &lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Performs no I/O on the Security Server data set, thus offering a high-performance checking option &lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Using profiles to protect resources===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;Security Server protects data sets (both DASD and tape) and general resources such as tape volumes and terminals. These &lt;br /&gt;
resources are protected through profiles defined by the site. Authorized users can create, modify, list, and delete profiles using &lt;br /&gt;
Security Server commands. &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;When the ADDSD statement is used to define and protect a data set, Security Server builds a data set profile and stores it in the Security Server data set. Profiles can be either generic or discrete depending on the nature of the resource. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Generic profile===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;A generic profile protects a single resource such as one data set, or a number of related resources; for example, those having similar naming structures, or the same access, authorization, and auditing requirements. &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;A generic profile contains a list of authorized users and the access authority of each user. A single generic profile can protect &lt;br /&gt;
many data sets that have similar naming structures. Data sets protected by generic profiles need not be defined individually to &lt;br /&gt;
Security Server, which saves the system manager from having to enter and maintain individual profiles. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Many users can protect all their data sets with a single generic profile consisting of their user ID and an asterisk: &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;user_id&amp;lt;/span&amp;gt;.* &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;This profile protects all the user’s data sets that begin with the user’s user ID, regardless of the number of qualifiers. &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Discrete profile===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;A discrete profile protects resources that have specific or unique access authorization or logging requirements such as a single sensitive data set on a specified volume. &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;A discrete profile contains the same kind of information as a generic profile, but it protects only the one identified data set on the specified volume or volumes. &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;If the access authorization requirements are general, define a generic profile. If the data set has unique access authorization &lt;br /&gt;
requirements, define a discrete profile. &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;Either type of profile can protect tape data sets as well as the following: &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Cataloged and uncataloged non-VSAM data sets &lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
VSAM data sets &lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Data sets with the same name residing on different volumes &lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Generation data group (GDG) data sets &lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Data sets and catalogs with single level names via a site-supplied prefix &lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;In Model 204, the Security Server Interface user privileges and other authorization items are defined as data set names and &lt;br /&gt;
treated as system resources. Generic profiles control who can use those resources by permitting individual users to access them. &lt;br /&gt;
These rules are written by the Model 204 system manager and the Security Server security administrator. &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Running the Security Server Interface with Model 204==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;When running either as an Online or in batch mode, Model 204 checks Security Server for the system resources a user has &lt;br /&gt;
permission to access. Model 204 manages the authorization process, because only Model 204 can identify the user requesting a &lt;br /&gt;
resource. Model 204 asks Security Server to validate those requests and responds to users who have been denied requests for &lt;br /&gt;
resources. &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;Model 204 interfaces with Security Server in the following distinct areas: &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
User logins &lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;LOGIN/LOGON command &lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;IFSTRT function &lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;IFLOG function &lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;User resource requests &lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Dynamic allocation of new DASD space (ALLOCATE command) &lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Job submission (&amp;lt;var&amp;gt;USE $JOB&amp;lt;/var&amp;gt; command) &lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Sequential data set handling (Record I/O) &lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;VSAM data set handling (External I/O) &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;note&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Note:&amp;lt;/b&amp;gt; Because Model 204 databases are not validated on behalf of the user by the security interface, Security Server must grant the owner of an address space permission to open Model 204 file data sets for update, regardless of whether the owner has write or read-only privileges.&amp;lt;br /&amp;gt;&lt;br /&gt;
This permission allows Model 204 to write back updates to the FPL (File Parameter List) page, as required by the database management system, regardless of the Model 204 file open privileges.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;User logouts&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;LOGOUT/LOGOFF command &lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;IFFNSH/IFDTHRD function &lt;br /&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;
&lt;br /&gt;
&amp;lt;p&amp;gt;The Security Server Interface uses the standard IBM-supplied calls to validate user requests for Model 204 resources. No source code modifications or exits to the Security Server software are needed. However, you can define an additional Security Server control group for nonshared resources as well as for resources shared between multiple copies of Model 204. &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Using the Security Server Interface==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
This section describes the changes that affect a Model 204 user. They include: &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;LOGIN or LOGON &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;IFSTRT function &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;IFLOG function within IFAM1 &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Dynamic allocation &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Job submission &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Sequential and VSAM data set handling &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===LOGIN or LOGON command===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The [[LOGIN or LOGON command|LOGIN/LOGON]] command allows you to gain access to Model&amp;amp;nbsp;204. Once you are connected to Model&amp;amp;nbsp;204, and if the system manager has set Model&amp;amp;nbsp;204 to require logins, any commands you enter (other than &amp;lt;var&amp;gt;LOGIN&amp;lt;/var&amp;gt; or &amp;lt;var&amp;gt;LOGON&amp;lt;/var&amp;gt;) produce the following message: &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;*** PLEASE LOGIN &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;To log in, enter: &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;LOGIN &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;userid&amp;lt;/span&amp;gt; [&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;account&amp;lt;/span&amp;gt;] &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;or &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;LOGON &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;userid&amp;lt;/span&amp;gt; [&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;account&amp;lt;/span&amp;gt;] &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;where: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;table class=&amp;quot;noBorder&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;userid&amp;lt;/var&amp;gt;&amp;lt;/td&amp;gt; &lt;br /&gt;
&amp;lt;td&amp;gt;Is a character string that identifies you.&amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;account&amp;lt;/var&amp;gt;&amp;lt;/td&amp;gt; &lt;br /&gt;
&amp;lt;td&amp;gt;Is an optional character string that identifies the account under which you log in.&amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===User ID information===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If Model 204 provides security authorization checks, as a Model 204 user you are assigned the following by the system manager: &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;User ID that identifies you to Model&amp;amp;nbsp;204. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Password that provides access to the system. Note that Model&amp;amp;nbsp;204 versions 7.7 and later also support [[#Passphrases|passphrases]]. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;User privileges associated with your user ID and password to define the particular type of access that you have. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Default priority class assigned to your user ID. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;When native Model&amp;amp;nbsp;204 security is in effect, this ID information is stored in a record in the system file CCASTAT. This record is deleted from CCASTAT when the system manager moves the user into Security Server security mode. &lt;br /&gt;
The [[#Preparing a RACFPARM parameter module with RACFGEN|RACFPARM]] module supplies a default Logonid for CCASTAT Logonids to do validation requests on Security Server.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Security Server processing===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When Security Server performs login validation, the user ID must be eight characters or fewer (seven characters if jobs are &lt;br /&gt;
submitted through the internal reader). Your user ID is verified by Security Server before you can log in to Model 204. &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;If your site chooses to perform Security Server account validation, any value entered in the account field is verified via Security Server services. When Security Server is performing account validation, the account is limited to a maximum length of eight characters. If you do not enter an account, the default account becomes your user ID. Refer to [[#Login processing|Login processing]] for more information on login processing. &amp;lt;/p&amp;gt;&lt;br /&gt;
====Changing your password====&lt;br /&gt;
&amp;lt;p&amp;gt;If you have the appropriate authority, you can change your Security Server user ID password when you log in to Model 204. For more information, see the [[LOGIN or LOGON command]] page.&amp;lt;/p&amp;gt;&lt;br /&gt;
====Passphrases====&lt;br /&gt;
If Security Server is configured to support passphrases, they can be used with Model 204 version 7.7 and later. Passphrases are 9-127 characters long and can contain any special characters (such as blanks, commas, and semicolons) supported by Security Server. See [[LOGIN or LOGON command#Setting a password|Setting a password]] for more information.&lt;br /&gt;
&lt;br /&gt;
===IFSTRT function===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
In the IFAM1 and IFAM4 environments, the IFSTRT function is used in a Host Language Interface program to allocate a Host &lt;br /&gt;
Language Interface thread. IFSTRT also establishes the calling convention, performs a user login, and determines whether or not the thread has updating privileges. &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;When processing the login argument of the IFSTRT call, the user login process follows the rules for [[#User 0 login|User 0 login]].&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===IFLOG function within IFAM1===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;The IFLOG function is used only in the IFAM1 environment. It is called following IFSTRT to identify you when a login is required. &lt;br /&gt;
&lt;br /&gt;
This function is necessary in any IFAM1 program where user authorization is validated by Security Server. &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;As with the IFSTRT function, the user login process is the same as the process for [[#User 0 login|User 0 login]].&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Dynamic allocation considerations===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;All dynamic allocation services in a Security Server environment are subject to Security Server system rules for data set &lt;br /&gt;
validation. For example, data set allocation can be restricted to allow the creation of data sets with certain name patterns. The rules for data set access are determined by the Security Server security administrator. &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;To dynamically allocate a new data set, you must have Security Server ALTER authority. If you issue an ALLOCATE command &lt;br /&gt;
and you do not have ALTER authority, you receive a Model 204 error message. &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;If you log in to Model 204 via CCASTAT, your allocation privileges are determined by the Security Server default user’s &lt;br /&gt;
authorization. &amp;lt;/p&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; When you open a new or existing sequential or a VSAM data set, it is validated for read/write access. Security Server does not perform open access authorization on Model 204 data sets, because these data sets are currently protected under Model 204 security. &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Job submission considerations===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;When an Online user issues the &amp;lt;var&amp;gt;[[USE $PRINT / $PUNCH / $JOB command|USE $JOB]]&amp;lt;/var&amp;gt; command to submit a batch job, Model 204 identifies the user so that Security &lt;br /&gt;
Server can determine if the user has proper authorization. If the submitter is IFAM1, IFAM4, or User 0, no additional processing &lt;br /&gt;
occurs; the submitted job inherits the privileges from the submitting job, because it has already been authorized to run by Security Server. &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;In a Model 204 system in which the Security Server Interface is running, the following JCL statement is appended automatically &lt;br /&gt;
to the submitted job statement(s) to identify the Model 204 user: &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;// USER=&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;userid&amp;lt;/span&amp;gt;,PASSWORD=&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;password&amp;lt;/span&amp;gt;,GROUP=&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;groupname&amp;lt;/span&amp;gt; &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;where: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;table class=&amp;quot;noBorder&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;userid&amp;lt;/var&amp;gt;&amp;lt;/td&amp;gt; &amp;lt;td&amp;gt;Is the submitting user’s Security Server user ID, or the default user ID if the user is logged in through CCASTAT.&amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;password&amp;lt;/var&amp;gt;&amp;lt;/td&amp;gt; &amp;lt;td&amp;gt;Is the user password associated with the particular user ID, or the default password for the default user ID if the user is logged in through CCASTAT.&amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;groupname&amp;lt;/var&amp;gt;&amp;lt;/td&amp;gt; &amp;lt;td&amp;gt;Is the Security Server group to which the submitting user is assigned. This is the group identified in the user’s ACEE that is provided by Security Server during user login, or the default group if the user is logged in through CCASTAT.&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&amp;gt;The default user ID, password, and group information is defined in the Security Server Interface parameter module (RACFPARM) and cannot be modified by the user or controlled by the system manager. RACFPARM is described later in this section. &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;If Model 204 finds any of the Security Server control parameters listed previously while processing the submitted JOB, they are &lt;br /&gt;
deleted from the JCL to prevent users from violating security. &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;An installation can request that Model 204 check for user authority to submit a job. Because Security Server does not have a &lt;br /&gt;
facility to restrict job submission, Model 204 checks the generic profile for the comgroup.SUBMIT option. Comgroup.SUBMIT &lt;br /&gt;
determines whether or not a user is permitted to submit JCL. For more information about comgroup.SUBMIT, refer to the [[#Preparing a RACFPARM parameter module with RACFGEN|RACFGEN macro]] discussion.&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;If an unauthorized user attempts to submit a job, Model 204 issues an error message. &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;For users logged in via CCASTAT, the authority to submit jobs is determined by the default user’s authorization. &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====USE $JOB example====&lt;br /&gt;
&lt;br /&gt;
With a &amp;lt;var&amp;gt;USE $JOB&amp;lt;/var&amp;gt; procedure, jobs submitted by users known to CCASTAT are logged in as the default user (here, &amp;lt;code&amp;gt;M204USR&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
In this case, the user who submitted the Online job is &amp;lt;code&amp;gt;userX&amp;lt;/code&amp;gt;, and the user executing the &amp;lt;var&amp;gt;$JOB&amp;lt;/var&amp;gt;  is &amp;lt;code&amp;gt;userX2&amp;lt;/code&amp;gt;:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;14.21.44 J0763715 ---- FRIDAY,    19 FEB 2016 ----&lt;br /&gt;
14.21.44 J0763715  IRR010I  USERID M204USR  IS ASSIGNED TO THIS JOB.&lt;br /&gt;
14.21.44 J0763715  ICH70001I M204USR  LAST ACCESS AT 13:40:32 ON FRIDAY, FEBRUARY 19, 2016&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
Jobs submitted by users known to RACF and unknown to CCASTAT are logged in under their own RACF profile.&lt;br /&gt;
&lt;br /&gt;
In this case, the user who has submitted the Online job is &amp;lt;code&amp;gt;userY&amp;lt;/code&amp;gt;, and the user executing the &amp;lt;var&amp;gt;$JOB&amp;lt;/var&amp;gt;  is &amp;lt;code&amp;gt;userY2&amp;lt;/code&amp;gt;:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;14.35.10 J0763765 ---- FRIDAY,    19 FEB 2016 ----&lt;br /&gt;
14.35.10 J0763765  IRR010I  USERID userY2   IS ASSIGNED TO THIS JOB.&lt;br /&gt;
14.35.10 J0763765  ICH70001I userY2   LAST ACCESS AT 14:34:49 ON FRIDAY, FEBRUARY 19, 2016&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Sequential and VSAM data set considerations===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;Security Server always performs an authorization check if you try to use a sequential or VSAM data set. To use a sequential or &lt;br /&gt;
VSAM data set you must be a member of a control group (or optionally a common control group) that has: &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Security Server alter or update privileges to open a deferred update data set or to issue the DUMP or USE commands &lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Security Server alter authority to dynamically allocate a new sequential data set &lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Security Server read privileges to read sequential files from User Language or to read the file specified in a RESTORE command &lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Security Server read privileges to read external VSAM files from User Language. &lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;If you issue a sequential or VSAM data set OPEN command that fails for Security Server reasons, Model 204 issues an error &lt;br /&gt;
message. &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;If you log in to Model 204 via CCASTAT, authorization is determined by the default user’s authorization limits. &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;Model 204 sequential file data sets (such as CCASTAT, CCAAUDIT, CCAJRNL, or CCAJLOG) are also checked to determine if the owner of the address space has the authority to write to them. &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;Security Server directly checks the following Model 204 commands: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
[[DUMP command|DUMP]] and [[DUMPG command|DUMPG]]&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
[[RESTORE command|RESTORE]] and [[RESTOREG command|RESTOREG]]&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
[[USE_command:_Directing_output|USE OUT&amp;lt;i&amp;gt;XXXXX&amp;lt;/i&amp;gt;]]&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
[[ALLOCATE command|ALLOCATE]] a new data set&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
OPEN DATASET &lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
[[OPEN FILE command|OPEN &amp;lt;i&amp;gt;filename&amp;lt;/i&amp;gt;]] with deferred update&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Login processing==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;The system manager is responsible for defining security processing in a Model 204 installation in which Security Server supplies authorization services. This section describes the login processing performed by the Security Server Interface. &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Model 204 and Security Server login processing===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;When a user logs in to Model 204, Model 204 acquires the user ID and account and searches CCASTAT to determine whether or not the user ID exists.&amp;lt;/p&amp;gt; &lt;br /&gt;
&amp;lt;p&amp;gt;If the user ID is found, Model 204 queries the user for a password and proceeds with authorization processing. If the RACFPARM module indicates that CCASTAT defined users cannot log in, the login fails.&amp;lt;/p&amp;gt; &lt;br /&gt;
&amp;lt;p&amp;gt;If the user ID is not found in CCASTAT and Security Server security is in effect, Model 204 uses Security Server facilities to authorize the user login: &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Model 204 passes the login user ID and password to Security Server to verify that the user is a valid Security Server user and that the password is correct. &lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;If the site has chosen to verify that the user is authorized to use Model 204, Security Server is asked if the user has PERMIT &lt;br /&gt;
authority to access the generic profile for resource group.LOGIN. If this check is successful, account processing occurs. &lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;If the installation has chosen to verify the account, the value entered is checked against the Security Server profile for &lt;br /&gt;
comgroup.ACCOUNT.account. If the value entered has PERMIT authority, the user is allowed into Model 204. &lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;If Security Server denies system access because of an invalid password or account, or if the user is not authorized to use Model 204, no login occurs and Model 204 issues an error message. &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;Once users are successfully logged in, they are granted Model&amp;amp;nbsp;204 privileges of X&#039;00&#039;. Any additional privileges are determined whenever they enter a Model&amp;amp;nbsp;204 command that requires a specific privilege. &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;Users who do not log in directly to Security Server are automatically restricted in what they can do by the privileges associated with the default user ID. Refer to [[#Security Server default user ID|Security Server default user ID]] for more information.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;All the system manager commands concerning CCASTAT maintenance functions work as usual. The ZBLDTAB and ZCTLTAB utilities also continue to work as usual. &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;File, group, and subsystem security functions are defined as described in the Model 204 documentation, particularly the [[Model 204 security features]] topic. &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===User 0 login===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When the Security Server Interface is active, User 0 is validated as the owner of the Model 204 run, regardless of whether the &lt;br /&gt;
run is Online, BATCH204, IFAM1, or IFAM4. Model 204 always attempts to log in User 0 automatically, and verifies that any user ID supplied matches the user ID of the owner of the address space. It is not necessary to supply a user ID on the login command for User 0; Model 204 determines the owner user ID and supplies it automatically. &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;If a user ID is supplied on the login command and the user ID does not exist on CCASTAT, it must match the user ID of the owner of the address space or the login fails. If the user ID is found on CCASTAT and CCASTAT users are allowed to log in, all further authorization checking is based on a default user ID specified by the installation (if running as an APF-authorized program). &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;BATCH204 and IFAM4 can run without APF authorization if the user ID is equal to the ADDR SPACE ID and there is no default login ID (you cannot login from CCASTAT). If you try to log in without meeting these conditions, your login fails or a B78 System ABEND occurs. &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;Technical Support recommends that you do not specify a user ID in the login for User 0, so jobs can be easily migrated from test to production without having to change the login command. &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;Whether or not you supply a user ID, no password is needed and Model 204 does not prompt for one. If a password statement is coded in the input stream, it is treated as an invalid Model 204 command. If the user ID is on CCASTAT, Model 204 prompts for a password. If the password is correct, the login succeeds but all future data set authorization checking is based on the default user ID. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===AUTHCTL VIEW command===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The &amp;lt;var&amp;gt;[[AUTHCTL command|AUTHCTL VIEW]]&amp;lt;/var&amp;gt; command displays the interface control options currently in effect for the active interface. &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
For example, if you enter either of these: &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;AUTHCTL VIEW &lt;br /&gt;
 &lt;br /&gt;
AUTHCTL VIEW RACF&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The following list is displayed (assuming this information was used during initialization): &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;Security Server INTERFACE OPTIONS &lt;br /&gt;
GROUP            M204TEST             &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;Security Server control group name&amp;lt;/var&amp;gt; &lt;br /&gt;
COMGROUP         M204COM              &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;Security Server common control group name&amp;lt;/var&amp;gt; &lt;br /&gt;
VALIDATE         LOGIN                &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;Validation option in effect&amp;lt;/var&amp;gt; &lt;br /&gt;
VALIDATE         ACCOUNT              &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;Validation option in effect&amp;lt;/var&amp;gt; &lt;br /&gt;
PRIORITY         LOW                  &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;Priority default&amp;lt;/var&amp;gt; &lt;br /&gt;
DLMCHECK                              &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;Use $JOB DLM checking option&amp;lt;/var&amp;gt;&lt;br /&gt;
                 M204GRP              &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;Default user group&amp;lt;/var&amp;gt;   &lt;br /&gt;
                 M204USR              &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;Default user ID&amp;lt;/var&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;The additional lines displayed indicate the current default user ID and group in use. For more information about defaults, refer to [[#Security Server default user ID|Security Server default user ID]].&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;For information about setting control information, see [[#Preparing a RACFPARM parameter module with RACFGEN|Preparing a RACFPARM parameter module with RACFGEN]]. &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Using trusted login for CRAM users===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If your site uses [[Defining the user environment (CCAIN)#CRAM (IODEV=11, 23, 29)|CRAM]], you can use the trusted login feature, which allows users to issue login commands or calls that do not include a user ID and password.&amp;lt;/p&amp;gt; &lt;br /&gt;
&amp;lt;p&amp;gt;For a user to log in as trusted, the user ID must be defined to Security Server. User IDs defined to CCASTAT are not allowed to log in as trusted users. CICS users must be using the Security Server interface for CICS. Only CICS user IDs that log in through Security Server can log in as trusted users. &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;Trusted login can be used with the following CRAM thread IODEV types: &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;IODEV11 (CRFSCHNL) &lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;IODEV29 (CRIOCHNL) &lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;IODEV23 (IFAMCHNL) &lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;To set up trusted login for a user, set the SECTRLOG user parameter, as discussed in [[#Setting up the SECTRLOG parameter for trusted login|Setting up the SECTRLOG parameter for trusted login]]. &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Login processing for trusted login====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;For users connecting with a CRAM thread that allows trusted login, the user login processing routines are changed to handle a LOGIN command or IFSTRT call without a user ID and password: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;CRFS and CRIO channel threads handle User Language statements. These users ordinarily issue a LOGIN or LOGON request with the following format: &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;version 7.6 and earlier:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;LOGIN &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;userid&amp;lt;/span&amp;gt; [&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;account&amp;lt;/span&amp;gt;];&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;password&amp;lt;/span&amp;gt; [:&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;new password&amp;lt;/span&amp;gt;];&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;apsyname&amp;lt;/span&amp;gt; &lt;br /&gt;
&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;version 7.7 and later:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;LOGIN &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;userid&amp;lt;/span&amp;gt; [&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;account&amp;lt;/span&amp;gt;];&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;password&amp;lt;/span&amp;gt;;&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;apsyname&amp;lt;/span&amp;gt; &lt;br /&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;For trusted logins, the format is: &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;LOGIN;;&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;apsyname&amp;lt;/span&amp;gt;&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;p&amp;gt;The IFAM channel threads handle IFAM2 statements. These users ordinarily issue an IFSTRT or IFSTRTN call with the following format: &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;IFSTRT (RETCODE,LANG_IND,LOGIN,THRD_TYP,THRD_ID) &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;IFSTRTN (RETCODE,LANG_IND,LOGIN,THRD_TYP,THRD_ID,CHAN) &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;The LOGIN parameter is required and supplies the user ID and password as a character string using the following format: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;version 7.6 and earlier:&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;userid&amp;lt;/span&amp;gt; [&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;account&amp;lt;/span&amp;gt;];&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;password&amp;lt;/span&amp;gt; [:&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;new password&amp;lt;/span&amp;gt;];’ &lt;br /&gt;
&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;version 7.7 and later:&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;userid&amp;lt;/span&amp;gt; [&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;account&amp;lt;/span&amp;gt;];&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;password&amp;lt;/span&amp;gt;;’ &lt;br /&gt;
&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;For trusted logins, the statement format is the same but the login character string is a semicolon surrounded by single quotes (&#039;;&#039;). &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;
====Trusted login errors====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;When using trusted login, you might receive one of the errors described in this section. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;The following message: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;M204.2378: SECURITY TRUSTED LOGIN FEATURE DISABLED &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;is generated in either of the following situations: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The Model 204 job requesting the trusted login feature is running without a Model 204 Security Interface (CA-ACF2, Security Server, or CA-Top Secret).&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Model 204 address space does not have enough storage to allocate an internal work area for the trusted login feature. In this &lt;br /&gt;
situation, the Model204 job does not initialize because it still has to allocate storage for the Model 204 file buffers. &lt;br /&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;
&lt;br /&gt;
&amp;lt;li&amp;gt;The following message is issued when the trusted user ID passed by CRAM is not between 1-8 bytes long:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;M204.2379: INVALID TRUSTED USERID LENGTH = &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;length&amp;lt;/span&amp;gt;&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;
==Maintaining the Security Server Interface==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;At each Security Server site, the security administrator performs system-wide maintenance functions within Security Server. The security administrator is responsible for defining and maintaining the Security Server generic profiles and permits for authorization that are eventually used by Model 204. The following discussions describe the Model 204 data maintained by the security administrator. &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;The privilege names that Model 204 uses are based on generic data set profiles. Although the Security Server ADDSD command describes a resource profile for Model 204, use it as if you are defining a data set. &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;This method provides the simplest way to describe resources. You do not need to reassemble any Security Server modules because all definition is external. In addition, it is portable across Security Server releases, because no internal modifications are made to Security Server tables and no Security Server exits are used. &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;In the following examples, the simplest set of conditions is described. You can fully utilize all Security Server options (for example, auditing when a resource is used, changing the universal access authority, or naming a specific owner of the group). Use security access levels for both the profiles and the permits for authorized users of those profiles. &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;The interface requires that users of these resources are permitted READ authority. &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Defining user privileges===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;You must identify user privilege names as Security Server generic data set profiles. The standard Model 204 user privileges &lt;br /&gt;
described earlier have been assigned fixed names. The following set of user privilege names defines the possible privilege types for a user. These names are further qualified by the control group name entered in the RACFPARM module. &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
These user privilege profile names are described in the following table. See the [[LOGCTL command: Modifying user ID entries in the password table|LOGCTL]] command page for more information on the LOGCTL settings.&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;caption&amp;gt;User privilege names&amp;lt;/caption&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr class=&amp;quot;head&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;User privilege name... &amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Defines a user who can... &amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Corresponding LOGCTL setting &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;i&amp;gt;group&amp;lt;/i&amp;gt;.PRIV.SUPER.USER &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Exercise superuser privileges: a user with READ access to this profile can execute a CREATE command. &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;X&#039;80&#039; &amp;lt;/td&amp;gt;&lt;br /&gt;
&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;i&amp;gt;group&amp;lt;/i&amp;gt;.PRIV.SYSTEM.ADMIN&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Exercise system administrator privileges: a user with read access to this profile can issue system administrator commands such as LOGWHO, MONITOR, PRIORITY, and WARN. &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;X’40’ &amp;lt;/td&amp;gt;&lt;br /&gt;
&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;i&amp;gt;group&amp;lt;/i&amp;gt;.PRIV.CHANGE.FILE.PASSWORD&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Change the file password that is used to open a file: valid only if the file entry is stored in CCASTAT. &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;X&#039;20&#039; &amp;lt;/td&amp;gt;&lt;br /&gt;
&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;i&amp;gt;group&amp;lt;/i&amp;gt;.PRIV.SYSTEM.MANAGER &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;With system manager privileges: a user with read access to this profile can issue all system administrator commands along with certain other privileged commands such as LOGCTL, AUTHCTL VIEW, and DUMPG. &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;X&#039;08&#039; &amp;lt;/td&amp;gt;&lt;br /&gt;
&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;i&amp;gt;group&amp;lt;/i&amp;gt;.PRIV.OVERRIDE.RECORD.SECURITY &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Override record security. &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;X&#039;04&#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;
&lt;br /&gt;
===Defining corresponding generic profiles===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Security Server generic data set profiles must be developed and defined to Security Server to correspond to the defined &lt;br /&gt;
privileges. The Security Server generic data set profiles used to define the standard Model 204 privileges and other resources to &lt;br /&gt;
Security Server in a batch TSO execution are as follows: &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;//JOBNAME      JOB (other information)..... &lt;br /&gt;
//DOIT         EXEC PGM=IKJEFT01,DYNAMNBR=20 &lt;br /&gt;
//SYSTSPRT     DD SYSOUT=A &lt;br /&gt;
//SYSTSIN      DD * &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
ADDGROUP       group DATA(&#039;MODEL204 Security Server CONTROL GROUP NAME&#039;) &lt;br /&gt;
ADDSD          &#039;group.PRIV.SUPER.USER*&#039;                UACC(NONE) GENERIC &lt;br /&gt;
ADDSD          &#039;group.PRIV.SYSTEM.ADMIN*&#039;              UACC(NONE) GENERIC &lt;br /&gt;
ADDSD          &#039;group.PRIV.CHANGE.FILE.PASSWORD.*&#039;     UACC(NONE) GENERIC &lt;br /&gt;
ADDSD          &#039;group.PRIV.SYSTEM.MANAGER*&#039;            UACC(NONE) GENERIC &lt;br /&gt;
ADDSD          &#039;group.PRIV.OVERRIDE.RECORD.SECURITY.*&#039; UACC(NONE) GENERIC &lt;br /&gt;
ADDSD          &#039;group.LOGIN*&#039;                          UACC(NONE) GENERIC &lt;br /&gt;
&lt;br /&gt;
ADDGROUP       comgroup DATA(&#039;MODEL204 Security Server COMMON GROUP NAME&#039;) &lt;br /&gt;
ADDSD          &#039;comgroup.SUBMIT*&#039;                      UACC(NONE) GENERIC &lt;br /&gt;
ADDSD          &#039;comgroup.PRIORITY.HIGH*&#039;               UACC(NONE) GENERIC &lt;br /&gt;
ADDSD          &#039;comgroup.PRIORITY.STANDARD.*&#039;          UACC(NONE) GENERIC &lt;br /&gt;
ADDSD          &#039;comgroup.PRIORITY.LOW*&#039;                UACC(NONE) GENERIC &lt;br /&gt;
ADDSD          &#039;comgroup.ACCOUNT.&amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;nnnnnnnn&amp;lt;/var&amp;gt;.*&#039;           UACC(NONE) GENERIC &lt;br /&gt;
&amp;lt;/p&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;  &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;nnnnnnnn&amp;lt;/var&amp;gt; represents an account number; there are as many as required. Also, high-level qualifiers cannot exceed eight (8) characters. &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;In the following two sample PERMIT statements, the first is for a system manager and the second is for login authorization to a &lt;br /&gt;
copy of Model 204: &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;PERMIT      &#039;&amp;lt;I&amp;gt;group&amp;lt;/I&amp;gt;.PRIV.SYSTEM.MANAGER*&#039;    ACCESS(READ) ID(user ID1,user ID2.....)&lt;br /&gt;
&lt;br /&gt;
PERMIT      &#039;&amp;lt;I&amp;gt;group&amp;lt;/I&amp;gt;.LOGIN*&#039;    ACCESS(READ) ID(&amp;lt;I&amp;gt;user ID1,user ID2&amp;lt;/I&amp;gt;.....) &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;table class=&amp;quot;noBorder&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;group&amp;lt;/var&amp;gt;.PRIV.&amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;privilege&amp;lt;/var&amp;gt;&amp;lt;/td&amp;gt; &amp;lt;td&amp;gt;Specifies one of the fixed types that Model&amp;amp;nbsp;204 uses to build Security Server retrieval search keys for the rules &amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;group&amp;lt;/var&amp;gt;&amp;lt;/td&amp;gt; &amp;lt;td&amp;gt;Is the Security Server control group defined to Model&amp;amp;nbsp;204&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&amp;gt;&lt;br /&gt;
The previous Security Server PERMIT statement sample permits the specified users to access the named resource. Rules for determining the authorized user are described in the [http://www-03.ibm.com/systems/z/os/zos/features/racf/library/library.html IBM Security Server documentation].&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The privilege rules are tested whenever a user issues a command that requires a specific privilege. If the user is authorized to have that privilege, the command succeeds. If not, the user typically receives a Model&amp;amp;nbsp;204 error message and the attempt might be logged as an Security Server violation. &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Installing the Security Server Interface==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The Model 204 interface to Security Server consists of the following components: &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Code in Model 204 that utilizes Security Server facilities &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Security Server group and generic data set profile definitions defined at your site &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;SECPLIST User 0 parameter in CCAIN &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;The user site requirements that must be met in order to activate the Security Server Interface are identified in this section. &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Terminal security considerations===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Security Server can enforce terminal security when a user logs in. At that time, the source of the login is passed to Security &lt;br /&gt;
Server. For systems running Model 204 with the SNA Communications Server (formerly VTAM) interface, this poses no problem &lt;br /&gt;
because Model&amp;amp;nbsp;204 recognizes the terminal name and stores it for use. &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;Configurations using CRAM (TSFS, CICS, IFDIAL) must use the CRAM channel name instead of the terminal ID as the user &lt;br /&gt;
source, because there is no secured mechanism in CRAM for identifying the source of the user. Because CRAM channel names &lt;br /&gt;
can be identified as valid sources, the user IDs allowed to use those sources can be validated. Using the CRAM channel name &lt;br /&gt;
temporarily ensures that entry to Model 204 is from an approved source. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===SECPLIST parameter===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The SECPLIST User 0 parameter in CCAIN lets you specify the name of the RACFGEN argument set with which to initialize the interface. The name is defined by the assembler label name of the RACFGEN macro. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;If the SECPLIST parameter is not in CCAIN, RACFPARM is used as the default name of the argument set. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;If no match is found for the SECPLIST name or the RACFPARM default name in the RACFPARM module, the interface is initialized using the precoded default parameters defined in the Security Server Interface. In this case, Login, Account, and Priority validation are not performed. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The following RACFPARM module contains two sets of Security Server arguments: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;In the first set, the name is LOG1 and account security is in effect. If the user is logged on through CCASTAT, the default Logonid is M204USR.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;In the second set, the name is LOG2 and both account and login security are in effect. In addition, if the user is logged on through CCASTAT, the Logonid of the executing job is considered the default Logonid.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;       TITLE &#039;RACFPARM MODULE&#039;            X &lt;br /&gt;
LOG1   RACFGEN GROUP=M204PROD,            X&lt;br /&gt;
              COMGRUP=M204RACF,           X&lt;br /&gt;
              PRTY=H,                     X&lt;br /&gt;
              VALIDAT=ACCOUNT,            X&lt;br /&gt;
              DEFUSER=M204USR,            X&lt;br /&gt;
              DEFUGRP=,                   X&lt;br /&gt;
              DEFPASS=,                   X&lt;br /&gt;
              DMLCHECK &lt;br /&gt;
LOG2  RACFGEN GROUP=M204TEST,             X&lt;br /&gt;
              COMGRUP=M204RACF,           X&lt;br /&gt;
              PRTY=S,                     X&lt;br /&gt;
              VALIDAT=(ACCOUNT,LOGIN),    X&lt;br /&gt;
              DEFUSER=JOBNAME,            X&lt;br /&gt;
              DEFUGRP=M204GRP,            X&lt;br /&gt;
              DEFPASS=DEFPASS,            X&lt;br /&gt;
              DMLCHECK&lt;br /&gt;
          RACFGEN TYPE=END&lt;br /&gt;
          END &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Preparing a RACFPARM parameter module with RACFGEN===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The RACFGEN macro generates a set of arguments that govern login and other security processes. There can be multiple &lt;br /&gt;
argument sets in a RACFPARM module. The RACFPARM parameter module can be linked with Model 204 or dynamically loaded &lt;br /&gt;
when the Security Server Interface is initialized.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;The arguments for the RACFGEN macro are described in detail in this section. &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;The following is a sample RACFGEN macro with one set of arguments. The name of the argument set is RACFPARM, which is &lt;br /&gt;
the required name if you are linking statically into your Model 204 modules. &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;TITLE &#039;GENERATE A Security Server PARAMETER MODULE&#039; &lt;br /&gt;
&lt;br /&gt;
RACFPARM RACFGEN GROUP=M204RACF,    Control group          X  &lt;br /&gt;
   COMGRUP=M204RACF,                Common control group   X              &lt;br /&gt;
   PRTY=S,                          Priority               X &lt;br /&gt;
   VALIDAT=,                        Validation items       X  &lt;br /&gt;
   DEFUSER=M204USR,                 Default user ID        X  &lt;br /&gt;
   DEFUGRP=M204GRP,                 Default user group     X  &lt;br /&gt;
   DEFPASS=M204PASS,                Default user password  X &lt;br /&gt;
   DLMCHECK/NODLMCHECK              Check DLM= &lt;br /&gt;
RACFGEN TYPE=END  &lt;br /&gt;
END &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;Where: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;RACFPARM defines the name of this set of Security Server arguments. Because there can be any number of argument &lt;br /&gt;
sets in the RACFPARM module, each set must be given a unique name. There is no default name.&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; If you want to statically link the RACFPARM module, you must include (as the first argument) a Security Server argument set named RACFPARM. Otherwise, the SECPLST value for the user is not found in the RACFPARM module, and the interface is initialized using the precoded default parameters defined in the Security Server Interface. In this case, Login, Account, and Priority validation are not performed. This may result in the user being unable to login. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;GROUP specifies the 1- to 8-character Security Server control group name selected by your site. The rules for Model 204 privileges are defined and grouped by this code and stored in Security Server profiles. The group name must match the generic profile high-level qualifier defined to Security Server in the ADDSD statements for the profiles, all of which take the form of &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;group.keyword.variable.data&amp;lt;/var&amp;gt;. &lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The default is M204RACF. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can use the &amp;lt;code&amp;gt;GROUP&amp;lt;/code&amp;gt; name to create a separate set of privilege definitions for an individual copy of Model 204. This allows &lt;br /&gt;
your site to have different privileges for different versions of Model&amp;amp;nbsp;204, for instance for test and production. &amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;COMGRUP specifies the 1- to 8-character Security Server common group name selected by your site. The rules for the VALIDAT ACCOUNT, PRIORITY, and SUBMIT options are defined and grouped by this code and stored in Security Server profiles.&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The common group name must match the generic profile high-level qualifier defined to Security Server in the ADDSD statements for the profiles, all of which take the form of &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;comgroup.keyword.variable.data&amp;lt;/var&amp;gt;. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The default is &amp;lt;var&amp;gt;M204RACF&amp;lt;/var&amp;gt;, if a group name is not specified. &amp;lt;/p&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; COMGRUP is used to create a common set of privilege definitions shared between copies of Model&amp;amp;nbsp;204. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;PRTY specifies the default priority for any user who successfully logs in through Security Server. Options are H (high), S (standard), L (low), or N (none). The default priority is STANDARD if the PRTY keyword is omitted. For more information about priorities, refer to [[Controlling system operations (CCAIN)#Priority scheduling|Priority scheduling]]. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;VALIDAT specifies the type of validation to be performed. Multiple validation types can be specified for the interface. &lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Options are: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;ACCOUNT specifies that Security Server validates any account entered by the user during the login process. VALIDAT ACCOUNT verifies that Security Server permits the account value entered by the user. If so, the user is allowed in to Model 204. If not, the login fails. &lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
This validation uses the comgroup.ACCOUNT.account# profile. &amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;LOGIN specifies that Security Server rules are tested to determine if a user is allowed to log in to Model&amp;amp;nbsp;204. If VALIDAT LOGIN is specified, the Security Server Interface determines if the user is permitted to use Model&amp;amp;nbsp;204 before allowing access. If LOGIN is not specified, all users who pass the user ID/password and optional account validation are allowed access to Model&amp;amp;nbsp;204. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;This validation is performed using the profile group.LOGIN, so it can be used to limit the ability to log in when several copies of Model 204 are running.&amp;lt;/p&amp;gt; &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;PRIORITY verifies which priority the user is permitted to have. This option can be specified in addition to a standard priority. If priority validation fails, the standard priority is the default. &lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
This validation uses the profiles:&amp;lt;/p&amp;gt; &lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;comgroup.PRIORITY.HIGH &lt;br /&gt;
comgroup.PRIORITY.STANDARD &lt;br /&gt;
comgroup.PRIORITY.LOW &lt;br /&gt;
comgroup.PRIORITY.NONE&amp;lt;/p&amp;gt; &lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Validation is checked from highest to lowest priority. If a user has PERMIT access to one of these priorities, the value is assigned. If no PERMIT is found and a standard priority is not specified, the priority for the user is set to STANDARD. &amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;SUBMIT uses Security Server rules to determine whether or not a user is allowed to issue the USE command to submit a job through the internal reader. If this option is specified, Security Server checks the user’s authorization privileges before allowing the user to submit the job. If this option is not specified, all users who pass the user ID/password and optional account validation are allowed to submit jobs.&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
This validation uses the comgroup.SUBMIT profile. &amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;DEFUSER defines the default submitting user’s Security Server user ID if the user is not directly logged in through Security Server. Refer to [[#Job submission considerations|Job submission considerations]] for a description of how the Security Server user ID is used when submitting jobs.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;If DEFUSER=, that is, this field is left blank, then CCASTAT-defined users are not allowed to log into Model 204. Only valid Security Server users can utilize the running system. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;If DEFUSER=&amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;JOBNAME&amp;lt;/var&amp;gt;, then the following occurs. The ASID ACEE is moved to DEFUSER, the GROUP ACEE is moved to &lt;br /&gt;
DEFGROUP, and the default user’s ACEE pointer is set to AUCKDPTR. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;DEFUGRP defines the default Security Server group to which a submitting user is assigned if the user is not directly logged in &lt;br /&gt;
through Security Server. Refer to [[#Job submission considerations|Job submission considerations]] for a description of how the Security Server group is used when submitting jobs. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;DEFPASS defines the default PASSWORD for the default user ID if the user is not directly logged in through Security Server. Refer to [[#Job submission considerations|Job submission considerations]] for a description of how the Security Server password is used when submitting jobs. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;The DLMCHECK/NODLMCHECK argument specifies DLM processing options for jobs submitted through the internal reader using the USE command. The DLM parameter on a DD * or DD DATA statement allows a job to be submitted that can itself submit other jobs. This is a potential security compromise. The DLMCHECK/NODLMCHECK argument provides the ability to enforce certain rules when coding the DLM= parameter. &lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
DLM processing options are as follows: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;DLMCHECK enforces the rule that if a DLM= parameter is used in a JCL stream, it must be the only parameter supplied. In this case, only the following forms of these statements are correct:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;//DDNAME DD *,DLM=&#039;;;&#039; &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;or &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;//DDNAME DD DATA,DLM=&#039;&amp;amp;amp;&amp;amp;amp;&amp;amp;amp;&amp;amp;amp;&#039; &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;In these statements, the DLM value follows the rules described in [http://www.ibm.com IBM] JCL documentation; any other parameters supplied result in an error. If there is a job statement following the offending statement, Model 204 appends the following to the job statement set as if it is an independent job: &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;USER=...,PASSWORD=...GROUP=... &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;NODLMCHECK checks only the validity of the DLM= parameter and not the other optional parameters that can be specified on the JCL statement. All JCL statements after the DLM= parameter are sent to the internal reader without being checked. This argument does not guarantee that an error on the statement with the DLM= parameter is caught before it is submitted. &lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
DLMCHECK is the default. &amp;lt;/p&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;
&lt;br /&gt;
&amp;lt;p&amp;gt;The result from assembling the RACFGEN macro is link-edited to a library that is included in a Model&amp;amp;nbsp;204 link-edit, or it can be optionally linked into a separate library and loaded at execution time. &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;If you link RACFPARM as a separate load module, use the SECRLINK job in the JCL library. Modify the job according to the comments. &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;If you link RACFPARM with the Model&amp;amp;nbsp;204 configuration, add the following line in SYSLIN for the link-edit steps of ONLINE, BATCH204, IFAM1, and IFAM4. &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;INCLUDE OBJLIB(RACFPARM) &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Model 204 link-editing requirements===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
To support multiple Model&amp;amp;nbsp;204 logins for different user IDs, Model 204 must be linked to an authorized library using the &lt;br /&gt;
appropriate Security Server services. This means that any Online configuration must be linked to an authorized library. &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;BATCH204 or IFAM can be linked to a nonauthorized library, provided that the user logging in is the same user who starts the job and there is not a default login ID that prevents CCASTAT logins. Otherwise, the login fails or a System B7A ABEND occurs. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Defining Model 204 to Security Server===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Model 204 allows multiple users per address space and provides services to many users through its own processing, but Security Server is aware only of the maintask in the address space (in this instance, Model 204). Model 204 must be defined as having the appropriate Security Server privileges to perform services on behalf of a Model 204 control group. &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;You can define an additional Security Server control group for nonshared resources as well as for resources shared between &lt;br /&gt;
multiple copies of Model&amp;amp;nbsp;204.The first step in the definition process is to choose a name and define a profile for the Model&amp;amp;nbsp;204 &lt;br /&gt;
control group and optionally the common group. For example: &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;ADDGROUP M204RACF OWNER(SECURITY) DATA(&#039;MODEL 204 CONTROL GROUP&#039;) &lt;br /&gt;
ADDGROUP M204COM OWNER(SECURITY) DATA(&#039;MODEL 204 COMMON CONTROL GROUP&#039;) &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Defining Model 204 users in Security Server===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
In Security Server, the user profile record contains all information for a defined user of a computer system. There are no special entries or any differences in the way a Security Server user is defined to the system. All authorization services are performed using the generic profiles for privileges. See [[#Defining corresponding generic profiles|Defining corresponding generic profiles]] for more information.&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Security Server default user ID===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The default user ID limits the authorization of users that have not logged in directly to Security Server (that is, users still defined in CCASTAT). &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;Each user not logged directly into Security Server is assigned the authorization provided by Security Server for the default user ID. The authorization includes all user resource requests, as described in [[#Running the Security Server Interface with Model 204|Running the Security Server Interface with Model 204]].&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;The default user ID automatically is assigned the user ID &amp;lt;code&amp;gt;M204USR&amp;lt;/code&amp;gt; with the password &amp;lt;code&amp;gt;M204PASS&amp;lt;/code&amp;gt; and belongs to group &lt;br /&gt;
&amp;lt;code&amp;gt;M204GRP&amp;lt;/code&amp;gt;. A user ID of this name must be defined to Security Server for CCASTAT-defined users to be able to log in. &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;For security reasons, the system manager cannot modify this group, user ID, and password. If different data is required or if the installation would like to change defaults, the parameter module RACFPARM must be modified by the Security Server security &lt;br /&gt;
administrator or systems programmer. &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;RACFPARM provides the mechanism to supply overrides to the default group, user ID, and password. This module can be made available during the Model 204 link-edit. Otherwise, Model&amp;amp;nbsp;204 attempts to load it at the time the interface is initialized. If the module is loaded dynamically, it must be made available in the STEPLIB containing Model&amp;amp;nbsp;204 or in a system load library. The RACFPARM module is generated with the RACFGEN macro. &amp;lt;/p&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; All LOADLIBs concatenated in one STEPLIB must be APF-authorized or you lose your APF authorization for that job step. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Setting up the SECTRLOG parameter for trusted login===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The &amp;lt;var&amp;gt;[[SECTRLOG parameter|SECTRLOG]]&amp;lt;/var&amp;gt; user parameter defines which CRAM thread applications are allowed to log in to Model&amp;amp;nbsp;204 with a trusted user ID. The CRAM threads for which trusted login applications are allowed are: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;IODEV11 (CRFSCHNL) &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;IODEV29 (CRIOCHNL) &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;IODEV23 (IFAMCHNL) &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;SECTRLOG must be set on the first IODEV line for each trusted CRAM thread, because it is picked up during the initialization of each CRAM channel.&amp;lt;/p&amp;gt; &lt;br /&gt;
&amp;lt;p&amp;gt;The following settings are valid: &amp;lt;/p&amp;gt;&lt;br /&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;Setting&amp;lt;/th&amp;gt; &amp;lt;th&amp;gt;Meaning&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;X&#039;00&#039;&amp;lt;/td&amp;gt; &lt;br /&gt;
&amp;lt;td&amp;gt;Trusted Login not allowed (default)&amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;X&#039;01&#039;&amp;lt;/td&amp;gt; &lt;br /&gt;
&amp;lt;td&amp;gt;CICS applications (CRFS, CRIO, IFAM)&amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;X&#039;02&#039;&amp;lt;/td&amp;gt; &lt;br /&gt;
&amp;lt;td&amp;gt;TSO applications (CRIO, CRFS)&amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;X&#039;04&#039;&amp;lt;/td&amp;gt; &lt;br /&gt;
&amp;lt;td&amp;gt;Batch applications (CRIO, IFAM)&amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Conversion tasks and considerations===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The following table identifies the general tasks that must be completed to install and activate the Security Server Interface. Before conversion, you also might want to review the RACFPARM module definitions and link a separate copy of Model 204 for testing and production. &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;caption&amp;gt;Conversion checklist for Security Server &amp;lt;/caption&amp;gt;&lt;br /&gt;
&amp;lt;tr class=&amp;quot;head&amp;quot;&amp;gt;&amp;lt;th&amp;gt;Step&amp;lt;/th&amp;gt; &amp;lt;th&amp;gt;Task&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;1.&amp;lt;/td&amp;gt; &lt;br /&gt;
&amp;lt;td&amp;gt;Define a Security Server GROUP control profile for Model 204.&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;2.&amp;lt;/td&amp;gt; &lt;br /&gt;
&amp;lt;td&amp;gt;Define a Security Server GROUP common profile for Model 204. &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;3.&amp;lt;/td&amp;gt; &lt;br /&gt;
&amp;lt;td&amp;gt;Define Security Server generic profiles for user privileges, and specify the users who have PERMIT access to have those 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;&amp;lt;td&amp;gt;4.&amp;lt;/td&amp;gt; &lt;br /&gt;
&amp;lt;td&amp;gt;Define Security Server generic profiles for: &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Model 204 login authority related to the control group if the VALIDAT LOGIN option is specified in the RACFPARM&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Authorized account code profiles related to the common group if the VALIDAT ACCOUNT option is specified in the RACFPARM&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Authorized PRIORITY profiles if the VALIDAT PRIORITY option is specified to assign individual priorities to users and specify which users have PERMIT access for those privileges&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;&amp;lt;td&amp;gt;5.&amp;lt;/td&amp;gt; &lt;br /&gt;
&amp;lt;td&amp;gt;Run RACFGEN to assemble the RACFPARM module.&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;6.&amp;lt;/td&amp;gt; &lt;br /&gt;
&amp;lt;td&amp;gt;Link RACFOS into Model&amp;amp;nbsp;204.&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;7.&amp;lt;/td&amp;gt; &lt;br /&gt;
&amp;lt;td&amp;gt;Link RACFPARM$ into Model 204 directly or use SECRLINK to create a separate LOAD module to be used for dynamic linking at initialization.&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;8.&amp;lt;/td&amp;gt; &lt;br /&gt;
&amp;lt;td&amp;gt;Add a new parameter in the user zero input stream called SECPLIST=&amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;parametername&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;&amp;lt;td&amp;gt;9.&amp;lt;/td&amp;gt; &lt;br /&gt;
&amp;lt;td&amp;gt;Delete Model&amp;amp;nbsp;204 users from CCASTAT to turn on Security Server authorization checking.&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;
==See also==&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[[Security interfaces overview]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Security interfaces]]&lt;/div&gt;</summary>
		<author><name>Mlarocca</name></author>
	</entry>
	<entry>
		<id>https://m204wiki.rocketsoftware.com/index.php?title=Fast/Reload_statements&amp;diff=95008</id>
		<title>Fast/Reload statements</title>
		<link rel="alternate" type="text/html" href="https://m204wiki.rocketsoftware.com/index.php?title=Fast/Reload_statements&amp;diff=95008"/>
		<updated>2016-12-16T14:45:32Z</updated>

		<summary type="html">&lt;p&gt;Mlarocca: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Overview==&lt;br /&gt;
All &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Fast/Reload&amp;lt;/var&amp;gt; programs must begin with a [[File Load utility: FLOD and FILELOAD commands|FILELOAD or FLOD command]] and end&lt;br /&gt;
with an &amp;lt;var&amp;gt;END&amp;lt;/var&amp;gt; statement.&lt;br /&gt;
All statements between the &amp;lt;var&amp;gt;FILELOAD&amp;lt;/var&amp;gt; or &amp;lt;var&amp;gt;FLOD&amp;lt;/var&amp;gt; and the &amp;lt;var&amp;gt;END&amp;lt;/var&amp;gt;&lt;br /&gt;
are converted into machine code by the &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Fast/Reload&amp;lt;/var&amp;gt; compiler or are used to&lt;br /&gt;
set environmental parameters by the &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Fast/Reload&amp;lt;/var&amp;gt; compiler.&lt;br /&gt;
An example of a very simple &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Fast/Reload&amp;lt;/var&amp;gt; program is:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;FILELOAD -1,-1,0,1000000,10000,10000,,68&lt;br /&gt;
G&lt;br /&gt;
 DUMMY=1,0,X&#039;8000&#039;&lt;br /&gt;
 FIELD1=1,10&lt;br /&gt;
END&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Fast/Reload&amp;lt;/var&amp;gt; supports all the [[File Load utility: FLOD and FILELOAD commands#Syntax of File Load statements|statements supported by FLOD and FILELOAD]] except&lt;br /&gt;
the following:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The &amp;lt;var&amp;gt;L&amp;lt;/var&amp;gt; statement.&lt;br /&gt;
&amp;lt;li&amp;gt;The &amp;lt;var&amp;gt;ENDL&amp;lt;/var&amp;gt; statement.&lt;br /&gt;
&amp;lt;li&amp;gt;The &amp;lt;var&amp;gt;F&amp;lt;/var&amp;gt; statement.&lt;br /&gt;
&amp;lt;li&amp;gt;The &amp;lt;var&amp;gt;ENDF&amp;lt;/var&amp;gt; statement.&lt;br /&gt;
&amp;lt;li&amp;gt;The &amp;lt;var&amp;gt;UP&amp;lt;/var&amp;gt; statement.&lt;br /&gt;
&amp;lt;li&amp;gt;The &amp;lt;var&amp;gt;DOWN&amp;lt;/var&amp;gt; statement.&lt;br /&gt;
&amp;lt;li&amp;gt;The &amp;lt;var&amp;gt;DELETE&amp;lt;/var&amp;gt; statement.&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
In addition, the X&#039;4000&#039; mode bit used to delete a field occurrence or occurrences is&lt;br /&gt;
not currently supported.&lt;br /&gt;
Finally, &amp;lt;var&amp;gt;FLOD&amp;lt;/var&amp;gt; exits are not currently supported.&lt;br /&gt;
&lt;br /&gt;
If you have &amp;lt;var&amp;gt;FILELOAD&amp;lt;/var&amp;gt; or &amp;lt;var&amp;gt;FLOD&amp;lt;/var&amp;gt; programs that contain statements not supported by&lt;br /&gt;
&amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Fast/Reload&amp;lt;/var&amp;gt;, you can still run the programs with the same load module you use&lt;br /&gt;
for &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Fast/Reload&amp;lt;/var&amp;gt; programs.&lt;br /&gt;
The &amp;lt;var&amp;gt;[[FLOD and FLODX command|FLODX]]&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;[[FILELOAD and FILELOADX command|FILELOADX]]&amp;lt;/var&amp;gt; commands invoke the&lt;br /&gt;
original &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;FLOD&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;FILELOAD&amp;lt;/var&amp;gt; programs instead of &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Fast/Reload&amp;lt;/var&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Fast/Reload&amp;lt;/var&amp;gt; attempts to copy the &amp;lt;var&amp;gt;FLOD/FILELOAD&amp;lt;/var&amp;gt; program&lt;br /&gt;
to the temporary procedure indicated by the &amp;lt;var&amp;gt;FRELPREV&amp;lt;/var&amp;gt; system parameter&lt;br /&gt;
(which defaults to -1).&lt;br /&gt;
If &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Fast/Reload&amp;lt;/var&amp;gt; determines that the &amp;lt;var&amp;gt;FLOD&amp;lt;/var&amp;gt; or &amp;lt;var&amp;gt;FILELOAD&amp;lt;/var&amp;gt; program&lt;br /&gt;
cannot be processed by &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Fast/Reload&amp;lt;/var&amp;gt; but can be processed by standard &amp;lt;var&amp;gt;FLOD&amp;lt;/var&amp;gt; or &amp;lt;var&amp;gt;FILELOAD&amp;lt;/var&amp;gt;,&lt;br /&gt;
the &amp;lt;var&amp;gt;FRELPREV&amp;lt;/var&amp;gt; temporary procedure is opened for input, and the program is passed to&lt;br /&gt;
standard &amp;lt;var&amp;gt;FLOD&amp;lt;/var&amp;gt; or &amp;lt;var&amp;gt;FILELOAD&amp;lt;/var&amp;gt; to be read again.&lt;br /&gt;
&lt;br /&gt;
For more information on both supported and unsupported&lt;br /&gt;
statements, see [[:Category:File loading and reorganization]].&lt;br /&gt;
In addition to the standard statement set, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Fast/Reload&amp;lt;/var&amp;gt; supports the extra statements&lt;br /&gt;
described in the following subsections: [[#opts|The OPTIONS statement]]&lt;br /&gt;
and [[#laistmt|The LAI statement]].&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; Each statement must begin in column one, since a blank in column one of a FLOD statement indicates the &amp;quot;read-and-load-a-field&amp;quot; statement. &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;b id=&amp;quot;opts&amp;quot;&amp;gt;&amp;lt;/b&amp;gt;The OPTIONS statement==&lt;br /&gt;
This statement can appear anywhere inside a &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Fast/Reload&amp;lt;/var&amp;gt; program and is used to set&lt;br /&gt;
environmental parameters that affect the way the load will be performed.&lt;br /&gt;
The &amp;lt;var&amp;gt;OPTIONS&amp;lt;/var&amp;gt; statement can be abbreviated to its first three or more characters.&lt;br /&gt;
For example, the following are all valid &amp;lt;var&amp;gt;OPTIONS&amp;lt;/var&amp;gt; statements:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;OPTIONS TAPEI FOOFOO&lt;br /&gt;
OPTION TAPEI FOOFOO&lt;br /&gt;
OPTI TAPEI FOOFOO&lt;br /&gt;
OPT TAPEI FOOFOO&amp;lt;/p&amp;gt;&lt;br /&gt;
Multiple parameters can be set via the &amp;lt;var&amp;gt;OPTIONS&amp;lt;/var&amp;gt; statement.&lt;br /&gt;
They are described in the following subsections.&lt;br /&gt;
The minimum required abbreviation for each is indicated in uppercase.&lt;br /&gt;
&lt;br /&gt;
===ANYorder===&lt;br /&gt;
This option only has an effect when data is being loaded into a hash&lt;br /&gt;
or sort key file.&lt;br /&gt;
When data is being loaded into one of these files,&lt;br /&gt;
performance will generally be good if the data is being loaded in&lt;br /&gt;
hash or sort key order.&lt;br /&gt;
If the data being loaded is not in this order,&lt;br /&gt;
load performance could be disastrously affected.&lt;br /&gt;
&amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Fast/Reload&amp;lt;/var&amp;gt; normally does not continue in such a case.&lt;br /&gt;
The &amp;lt;var&amp;gt;ANYORDER&amp;lt;/var&amp;gt; option overrides this behavior and lets the file load continue.&lt;br /&gt;
&lt;br /&gt;
In general, it is better to determine the reason records&lt;br /&gt;
are out of order and to correct the problem, than to use the &amp;lt;var&amp;gt;ANYORDER&amp;lt;/var&amp;gt;&lt;br /&gt;
option to ignore it.&lt;br /&gt;
&lt;br /&gt;
If you are using &amp;lt;var&amp;gt;[[#The LAI statement|LAI]]&amp;lt;/var&amp;gt;, the ordering can be done by the &amp;lt;var&amp;gt;HASH&amp;lt;/var&amp;gt; or &amp;lt;var&amp;gt;SORT&amp;lt;/var&amp;gt;&lt;br /&gt;
option of the&lt;br /&gt;
&amp;lt;var&amp;gt;[[Fast/Unload Extraction Language (FUEL)#UNLOAD ALL INFORMATION or UAI|UAI]]&amp;lt;/var&amp;gt;&lt;br /&gt;
statement in &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Fast/Unload&amp;lt;/var&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Otherwise, to obtain the full track I/O benefits of &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Fast/Reload&amp;lt;/var&amp;gt;,&lt;br /&gt;
you should ensure that your input records are in the correct order.&lt;br /&gt;
You must sort the TAPEI dataset in order by the &amp;lt;var&amp;gt;SORT&amp;lt;/var&amp;gt; key, or by the&lt;br /&gt;
&amp;lt;b&amp;gt;hash code&amp;lt;/b&amp;gt; of the &amp;lt;var&amp;gt;HASH&amp;lt;/var&amp;gt; key.&lt;br /&gt;
This can be achieved using the M204HASH utility, as described in [[Hash key files]].&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;b id=&amp;quot;bav&amp;quot;&amp;gt;&amp;lt;/b&amp;gt;BAVail [page_type] size===&lt;br /&gt;
This option has the following two beneficial effects:&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;If &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;size&amp;lt;/var&amp;gt; (default -1) is non-negative (and the file is not &amp;lt;var&amp;gt;SORTED&amp;lt;/var&amp;gt;), the&lt;br /&gt;
use of the &amp;lt;var&amp;gt;[[BRESERVE parameter|BRESERVE]]&amp;lt;/var&amp;gt; (= &amp;lt;i&amp;gt;bres&amp;lt;/i&amp;gt;) parameter is changed during the file load.&lt;br /&gt;
A record will start within &amp;lt;code&amp;gt;&amp;lt;i&amp;gt;remain&amp;lt;/i&amp;gt; &amp;lt;= &amp;lt;i&amp;gt;size&amp;lt;/i&amp;gt; + &amp;lt;i&amp;gt;bres&amp;lt;/i&amp;gt;&amp;lt;/code&amp;gt; bytes at the end of the page if and only if the record fits in its entirety on that page. That is, the total record size is less than or equal to &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;remain&amp;lt;/var&amp;gt;.&lt;br /&gt;
This ensures that no base record is split with &amp;lt;var&amp;gt;BRESERVE&amp;lt;/var&amp;gt; bytes or fewer in the base&lt;br /&gt;
record, while using more available space on a Table B page than the default algorithm.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;If &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;size&amp;lt;/var&amp;gt; is greater than zero, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Fast/Reload&amp;lt;/var&amp;gt;&lt;br /&gt;
ensures, during the file load, that at least &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;size&amp;lt;/var&amp;gt; bytes are unused on a Table B page.&lt;br /&gt;
This provides for some record growth by subsequent updates, for example, during an Online run,&lt;br /&gt;
without shifting fields to an extension record.&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&amp;lt;var&amp;gt;BAVAIL&amp;lt;/var&amp;gt; is ignored if &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Fast/Reload&amp;lt;/var&amp;gt; is not operating using full track I/O.&lt;br /&gt;
A &amp;lt;b&amp;gt;base&amp;lt;/b&amp;gt; record is the first part of a Table B record, as opposed to&lt;br /&gt;
the subsequent parts of a Table B record, which are called &amp;lt;b&amp;gt;extension&amp;lt;/b&amp;gt; records.&lt;br /&gt;
&lt;br /&gt;
====Parameters====&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;size&amp;lt;/var&amp;gt; is -1 (the default) or a non-negative number. The smallest value of &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;size&amp;lt;/var&amp;gt;&lt;br /&gt;
for any &amp;lt;var&amp;gt;BAVAIL&amp;lt;/var&amp;gt; option is -1. The largest value is&lt;br /&gt;
6130 minus the length of all preallocated fields,&lt;br /&gt;
minus 3 if &amp;lt;var&amp;gt;FILEORG&amp;lt;/var&amp;gt; is &amp;lt;var&amp;gt;SORTED&amp;lt;/var&amp;gt;, minus 1 if &amp;lt;var&amp;gt;FILEORG&amp;lt;/var&amp;gt; is &amp;lt;var&amp;gt;HASHED&amp;lt;/var&amp;gt;, minus 4 if&lt;br /&gt;
&amp;lt;var&amp;gt;FILEORG&amp;lt;/var&amp;gt; is &amp;lt;var&amp;gt;UNORDERED&amp;lt;/var&amp;gt;. &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;page_type&amp;lt;/var&amp;gt; can be any of the following:&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;ALL&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;This applies to all Table B pages. If &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;size&amp;lt;/var&amp;gt; is non-negative,&lt;br /&gt;
then &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Fast/Reload&amp;lt;/var&amp;gt; guarantees that every table B page contains at least &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;size&amp;lt;/var&amp;gt; unused bytes.&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;BASE&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;This applies to any page that&lt;br /&gt;
contains one or more base records. If &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;size&amp;lt;/var&amp;gt; is non-negative, then &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Fast/Reload&amp;lt;/var&amp;gt; guarantees that any page with a base record contains&lt;br /&gt;
at least &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;size&amp;lt;/var&amp;gt; unused bytes.&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;EXT&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;This applies to any page that contains an extension record. If &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;size&amp;lt;/var&amp;gt; is non-negative, then &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Fast/Reload&amp;lt;/var&amp;gt; guarantees&lt;br /&gt;
that any page with an extension record contains at least &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;size&amp;lt;/var&amp;gt; unused bytes.&amp;lt;/td&amp;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 &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;page_type&amp;lt;/var&amp;gt; is omitted, &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;size&amp;lt;/var&amp;gt; applies to all Table B pages.&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Usage====&lt;br /&gt;
Multiple &amp;lt;code&amp;gt;OPTIONS BAVAIL&amp;lt;/code&amp;gt; specifications will override the value(s) previously specified.&lt;br /&gt;
For example:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;OPTIONS BAVAIL 100 BAVAIL BASE 150&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
will set aside 150 bytes on each page with a Table B base record, and 100 bytes&lt;br /&gt;
on all other Table B pages, but&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;OPTIONS BAVAIL BASE 150 BAVAIL 100&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
will set aside 100 bytes on all Table B pages.&lt;br /&gt;
&lt;br /&gt;
The default &amp;lt;var&amp;gt;BAVAIL&amp;lt;/var&amp;gt; for each page type is -1.&lt;br /&gt;
If the value of all of them is&lt;br /&gt;
-1, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Fast/Reload&amp;lt;/var&amp;gt; does not specifically reserve any Table B space, but uses the normal&lt;br /&gt;
&amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model 204&amp;lt;/var&amp;gt; space algorithm determined by &amp;lt;var&amp;gt;BRESERVE&amp;lt;/var&amp;gt;, ensuring that a record does not&lt;br /&gt;
start within the last &amp;lt;var&amp;gt;BRESERVE&amp;lt;/var&amp;gt; bytes of a page.&lt;br /&gt;
&lt;br /&gt;
If the file being loaded is not a &amp;lt;var&amp;gt;SORTED&amp;lt;/var&amp;gt; file (&amp;lt;var&amp;gt;[[FILEORG parameter|FILEORG]]&amp;lt;/var&amp;gt; X&#039;01&#039;),&lt;br /&gt;
a non-negative setting for any page type&lt;br /&gt;
will modify the effect of the &amp;lt;var&amp;gt;BRESERVE&amp;lt;/var&amp;gt; parameter for all Table B pages.&lt;br /&gt;
Let &amp;lt;code&amp;gt;BA&amp;lt;/code&amp;gt; be the maximum of all &amp;lt;var&amp;gt;BAVAIL&amp;lt;/var&amp;gt; values; if&lt;br /&gt;
it is non-negative, then if an entire Table B record is&lt;br /&gt;
less than &amp;lt;var&amp;gt;BRESERVE&amp;lt;/var&amp;gt; bytes long, it can be stored within the last &amp;lt;code&amp;gt;BA&lt;br /&gt;
+ BRESERVE&amp;lt;/code&amp;gt; bytes on the page, but otherwise a Table B record is not&lt;br /&gt;
started in that area.&lt;br /&gt;
&lt;br /&gt;
Therefore, you may want to set a temporary value for &amp;lt;var&amp;gt;BRESERVE&amp;lt;/var&amp;gt; during the&lt;br /&gt;
file load which differs from the value used during online updating.&lt;br /&gt;
For example:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;OPEN FILE mumble&lt;br /&gt;
RESET BRESERVE 300&lt;br /&gt;
FILELOAD -1,-1,0,1000000,1000000&lt;br /&gt;
OPTIONS BAVAIL 400&lt;br /&gt;
LAI&lt;br /&gt;
END&lt;br /&gt;
RESET BRESERVE 800&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&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 correct values for &amp;lt;var&amp;gt;BRESERVE&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;BAVAIL&amp;lt;/var&amp;gt; are file-specific, and depend&lt;br /&gt;
on characteristics such as record sizes, the cost to your applications of&lt;br /&gt;
extension records, the importance of conserving Table B space, and updating&lt;br /&gt;
characteristics.&lt;br /&gt;
Like any tuning exercise, this requires analysis and experimentation.&lt;br /&gt;
The numbers in the above example could be wrong for your file, in fact, you may&lt;br /&gt;
do better with an online &amp;lt;var&amp;gt;BRESERVE&amp;lt;/var&amp;gt; that is smaller than the file load &amp;lt;var&amp;gt;BRESERVE&amp;lt;/var&amp;gt;,&lt;br /&gt;
and &amp;lt;var&amp;gt;BAVAIL&amp;lt;/var&amp;gt; may be smaller than both, larger than both, or in between.&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Examples====&lt;br /&gt;
In the following examples:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The file is a simple &amp;lt;var&amp;gt;ENTRY ORDER&amp;lt;/var&amp;gt; file (&amp;lt;var&amp;gt;FILEORG&amp;lt;/var&amp;gt; X&#039;00&#039;).&lt;br /&gt;
&amp;lt;li&amp;gt;There are no preallocated fields.&lt;br /&gt;
&amp;lt;li&amp;gt;Each page contains 6140 usable bytes.&lt;br /&gt;
(A page has 6144 bytes prior to the trailer, but there are 2 bytes used&lt;br /&gt;
to determine the number of records on a page, and 2 used for the amount of unused space.)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;Dataln&amp;lt;/code&amp;gt; means the total length of data in&lt;br /&gt;
a record, &amp;lt;code&amp;gt;basln&amp;lt;/code&amp;gt; means the space used for a base record,&lt;br /&gt;
and &amp;lt;code&amp;gt;extln&amp;lt;/code&amp;gt; means the space used for an extension record.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Each base record or extension record requires a 2-byte page locator, and&lt;br /&gt;
contains a 3-byte area which is zero or has the record number of a&lt;br /&gt;
subsequent extension record.&lt;br /&gt;
So, for example, if a record is completely stored in a base record,&lt;br /&gt;
&amp;lt;code&amp;gt;basln = dataln + 5&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Each example illustrates a case starting with a base record on an empty page.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;The resulting space allocation shows each page as the letter &amp;quot;P&amp;quot; and a&lt;br /&gt;
page number, followed by extension and/or base records&lt;br /&gt;
and free space enclosed in square brackets.&lt;br /&gt;
For example, the following shows two records stored on one page:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;Rec0 dataln=100&lt;br /&gt;
Rec1 dataln=300&lt;br /&gt;
P0 [Rec0 basln=105] [Rec1 basln=305]&lt;br /&gt;
   [free=5730]&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Extension records are shown with the base record ID followed by a period and&lt;br /&gt;
extension number. For example, this&lt;br /&gt;
shows one record stored on three pages:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;Rec0 dataln=12570&lt;br /&gt;
P0 [Rec0 basln=6140]&lt;br /&gt;
P1 [Rec0.1 extln=6140]&lt;br /&gt;
P2 [Rec0.2 extln=305] [free=5835]&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Results are shown for different values for &amp;lt;var&amp;gt;BAVAIL&amp;lt;/var&amp;gt;.&lt;br /&gt;
With the default value of &amp;lt;code&amp;gt;BAVAIL=-1&amp;lt;/code&amp;gt;, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Fast/Reload&amp;lt;/var&amp;gt; uses the standard&lt;br /&gt;
&amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model 204&amp;lt;/var&amp;gt; algorithm for allocating Table B space during a file load.&lt;br /&gt;
This standard algorithm is always used when &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Fast/Reload&amp;lt;/var&amp;gt; is not using full track I/O.&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The following example shows that &amp;lt;code&amp;gt;BAVAIL=0&amp;lt;/code&amp;gt; can be used for maximum packing on a&lt;br /&gt;
page, and &amp;lt;code&amp;gt;BAVAIL&amp;gt;0&amp;lt;/code&amp;gt; can be used to ensure free space on a page; each of them&lt;br /&gt;
ensure a base record is not split in the first &amp;lt;var&amp;gt;BRESERVE&amp;lt;/var&amp;gt; bytes:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;Rec0 dataln = 6000&lt;br /&gt;
Rec1 dataln = 130&lt;br /&gt;
BRESERVE = 300&lt;br /&gt;
&lt;br /&gt;
Using BAVAIL = -1:&lt;br /&gt;
 P0 [Rec0 basln=6005] [free=135]&lt;br /&gt;
 P1 [Rec1 basln=135] [free=6005]&lt;br /&gt;
&lt;br /&gt;
Using BAVAIL = 0:&lt;br /&gt;
 P0 [Rec0 basln=6005] [Rec1 basln=135]&lt;br /&gt;
&lt;br /&gt;
Using BAVAIL = 135:&lt;br /&gt;
 P0 [Rec0 basln=6005] [free=135]&lt;br /&gt;
 P1 [Rec1 basln=135] [free=6005]&lt;br /&gt;
&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;The following example shows that without &amp;lt;var&amp;gt;BAVAIL&amp;lt;/var&amp;gt;, you cannot&lt;br /&gt;
guarantee free space on a page:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;Rec0 dataln=130&lt;br /&gt;
Rec1 dataln=6000 (60 100-byte fields)&lt;br /&gt;
BRESERVE = 300&lt;br /&gt;
&lt;br /&gt;
Using BAVAIL = -1:&lt;br /&gt;
 P0 [Rec0 basln=135] [Rec1 basln=6005]&lt;br /&gt;
&lt;br /&gt;
Using BAVAIL = 0:&lt;br /&gt;
 P0 [Rec0 basln=135] [Rec1 basln=6005]&lt;br /&gt;
&lt;br /&gt;
Using BAVAIL = 135:&lt;br /&gt;
 P0 [Rec0 basln=135] [Rec1 basln=5805] [free=200]&lt;br /&gt;
 P1 [Rec1.1 extln=205] [free=5935]&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;The following example shows tighter packing and fewer extension&lt;br /&gt;
records:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;Rec0 dataln=6000 (60 100-byte fields)&lt;br /&gt;
Rec1 dataln=100&lt;br /&gt;
Rec2 dataln=6100 (61 100-byte fields)&lt;br /&gt;
Rec3 dataln=100&lt;br /&gt;
Rec4 dataln=6000 (60 100-byte fields)&lt;br /&gt;
BRESERVE = 200&lt;br /&gt;
&lt;br /&gt;
Using BAVAIL = -1:&lt;br /&gt;
 P0 [Rec0 basln=6005] [free=135]&lt;br /&gt;
 P1 [Rec1 basln=105] [Rec2 basln=6005] [free=30]&lt;br /&gt;
 P2 [Rec2.1 extln=105] [Rec3 basln=105]&lt;br /&gt;
    [Rec4 basln=5905] [free=25]&lt;br /&gt;
 P3 [Rec4.1 extln=105] [free=6035]&lt;br /&gt;
&lt;br /&gt;
Using BAVAIL = 0:&lt;br /&gt;
 P0 [Rec0 basln=6005] [Rec1 basln=105] [free=30]&lt;br /&gt;
 P1 [Rec2 basln=6105] [free=35]&lt;br /&gt;
 P2 [Rec3 extln=105] [Rec4 basln=6005] [free=30]&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;The following example shows use of &amp;lt;var&amp;gt;BAVAIL&amp;lt;/var&amp;gt; that&lt;br /&gt;
increases the extension records at file load time, but by leaving&lt;br /&gt;
space on &amp;lt;b&amp;gt;all&amp;lt;/b&amp;gt; pages,&lt;br /&gt;
records can grow without producing extension&lt;br /&gt;
records which are stored on pages &amp;quot;far away&amp;quot; from the base page:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;Rec0 .. Rec5 dataln=4000 (40 100-byte fields)&lt;br /&gt;
BRESERVE = 300&lt;br /&gt;
&lt;br /&gt;
Using BAVAIL = -1:&lt;br /&gt;
 P0 [Rec0 basln=4005] [Rec1 basln=2105]&lt;br /&gt;
    [free=30]&lt;br /&gt;
 P1 [Rec1.1 extln=1905] [Rec2 basln=4005]&lt;br /&gt;
    [free=230]&lt;br /&gt;
 P2 [Rec3 basln=4005] [Rec4 basln=2105]&lt;br /&gt;
    [free=30]&lt;br /&gt;
 P3 [Rec4.1 extln=1905] [Rec5 basln=4005]&lt;br /&gt;
    [free=230]&lt;br /&gt;
&lt;br /&gt;
Using BAVAIL = 300:&lt;br /&gt;
 P0 [Rec0 basln=4005] [Rec1 basln=1805]&lt;br /&gt;
    [free=330]&lt;br /&gt;
 P1 [Rec1.1 extln=2205] [Rec2 basln=3605]&lt;br /&gt;
    [free=330]&lt;br /&gt;
 P2 [Rec2.1 extln=405] [Rec3 basln=4005]&lt;br /&gt;
    [Rec4 basln=1405] [free=325]&lt;br /&gt;
 P3 [Rec4.1 extln=2605] [Rec5 basln=3205]&lt;br /&gt;
    [free=330]&lt;br /&gt;
 P4 [Rec5.1 extln=805] [free=5335]&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===DKOnly===&lt;br /&gt;
In many cases, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Fast/Reload&amp;lt;/var&amp;gt; bypasses the &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model 204&amp;lt;/var&amp;gt; disk buffer&lt;br /&gt;
monitor for Table B pages and instead uses its own full track buffers&lt;br /&gt;
for output.&lt;br /&gt;
This can, in certain instances, result in data being&lt;br /&gt;
loaded into different Table B pages than standard &amp;lt;var&amp;gt;FLOD&amp;lt;/var&amp;gt; or &amp;lt;var&amp;gt;FILELOAD&amp;lt;/var&amp;gt; would use.&lt;br /&gt;
An example of this is non-empty reuse record number files.&lt;br /&gt;
You can force &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Fast/Reload&amp;lt;/var&amp;gt; to use the &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; disk buffer&lt;br /&gt;
monitor by specifying the &amp;lt;var&amp;gt;DKONLY&amp;lt;/var&amp;gt; option.&lt;br /&gt;
This option can result in&lt;br /&gt;
a significant increase in the real and CPU time required to perform a file load.&lt;br /&gt;
&lt;br /&gt;
===ERRCont===&lt;br /&gt;
This parameter lets you complete a reload despite errors that would&lt;br /&gt;
normally cause a &amp;lt;code&amp;gt;MSIR.0316&amp;lt;/code&amp;gt; user restart.&lt;br /&gt;
This can be useful, for example, in a case where you know you have some&lt;br /&gt;
input data that will cause an error, but you&lt;br /&gt;
want to use a reload for reformatting purposes despite the problematic fields.&lt;br /&gt;
&lt;br /&gt;
If you specify &amp;lt;var&amp;gt;ERRCONT&amp;lt;/var&amp;gt; to &amp;quot;continue on error&amp;quot; a &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Fast/Reload&amp;lt;/var&amp;gt; program, you probably&lt;br /&gt;
need to increase the &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;ERMX&amp;lt;/var&amp;gt; parameter setting to prevent a session&lt;br /&gt;
termination because of excessive errors.&lt;br /&gt;
&amp;lt;p class=&amp;quot;warn&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Note:&amp;lt;/b&amp;gt; Using &amp;lt;var&amp;gt;ERRCONT&amp;lt;/var&amp;gt; may place your data at risk, so use this parameter only in cases&lt;br /&gt;
where you know your data and have taken due precautions and backups beforehand.&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The following &amp;lt;var&amp;gt;FILELOAD&amp;lt;/var&amp;gt; code uses the &amp;lt;var&amp;gt;ERRCONT&amp;lt;/var&amp;gt; parameter:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;FILELOAD -1,-1,0,1000000,10000,10000,10000,50&lt;br /&gt;
OPTIONS ERRCONT&lt;br /&gt;
LAI&lt;br /&gt;
END&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===FTOnly===&lt;br /&gt;
In many cases, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Fast/Reload&amp;lt;/var&amp;gt; bypasses the &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model 204&amp;lt;/var&amp;gt; disk buffer&lt;br /&gt;
monitor for Table B pages and instead uses its own full track buffers for output.&lt;br /&gt;
In certain cases, though, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Fast/Reload&amp;lt;/var&amp;gt; will automatically drop back to&lt;br /&gt;
using the &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model 204&amp;lt;/var&amp;gt; disk buffer monitor.&lt;br /&gt;
When it does this, a file load&lt;br /&gt;
might take considerably longer than expected.&lt;br /&gt;
If you do not wish &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Fast/Reload&amp;lt;/var&amp;gt;&lt;br /&gt;
to perform this automatic dropback, simply specify the &amp;lt;var&amp;gt;FTONLY&amp;lt;/var&amp;gt; option.&lt;br /&gt;
&amp;lt;var&amp;gt;FTONLY&amp;lt;/var&amp;gt; will result in the file load being terminated when an automatic dropback would&lt;br /&gt;
ordinarily be done.&lt;br /&gt;
&lt;br /&gt;
===NObuff n_out_buffs===&lt;br /&gt;
&amp;lt;var&amp;gt;NOBUFF&amp;lt;/var&amp;gt; must be followed by a number indicating the number of full track&lt;br /&gt;
output buffers &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Fast/Reload&amp;lt;/var&amp;gt; is to use.&lt;br /&gt;
When &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Fast/Reload&amp;lt;/var&amp;gt; is bypassing the &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model 204&amp;lt;/var&amp;gt; disk buffer monitor and performing&lt;br /&gt;
full track I/O to Table B, it uses a certain number of full track buffers.&lt;br /&gt;
These buffers must each be large enough to hold the data that will fit on a single&lt;br /&gt;
track of the disk devices containing the database file.&lt;br /&gt;
This means that the buffers&lt;br /&gt;
will each be 43,288 bytes long if you are using 3380s, 49,472 bytes long if you are&lt;br /&gt;
using 3390s, and 49,472 bytes long if you are using both.&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Ordinarily &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Fast/Reload&amp;lt;/var&amp;gt; uses three full track output buffers.&lt;br /&gt;
This is probably sufficient for most purposes.&lt;br /&gt;
On rare occasions, it might be possible to&lt;br /&gt;
get some speed improvements by using more than three output buffers.&lt;br /&gt;
In these cases, simply specify the &amp;lt;var&amp;gt;NOBUFF&amp;lt;/var&amp;gt; option followed by a number greater than 3. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
&amp;lt;var&amp;gt;NOBUFF&amp;lt;/var&amp;gt; must always be greater than or equal to 3. &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===NXBuff n_tableX_buffs===&lt;br /&gt;
&amp;lt;var&amp;gt;NXBUFF&amp;lt;/var&amp;gt; must be followed by a number indicating the number of full track&lt;br /&gt;
Table X buffers &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Fast/Reload&amp;lt;/var&amp;gt; is to use.&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
&amp;lt;var&amp;gt;NXBUFF&amp;lt;/var&amp;gt; must always be greater than or equal to 3. &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;b id=&amp;quot;noval&amp;quot;&amp;gt;&amp;lt;/b&amp;gt;NOVAlidate===&lt;br /&gt;
&amp;lt;var&amp;gt;NOVALIDATE&amp;lt;/var&amp;gt; indicates that no buffer pointer validation is to be performed.&lt;br /&gt;
For example, in the following statement, buffer pointer validation would make&lt;br /&gt;
sure that the input record was at least 107 bytes long:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;FIELDA=99,9&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
Without buffer pointer validation, the above statement would simply load data&lt;br /&gt;
off the end of the input buffer, which would result in &amp;lt;code&amp;gt;FIELDA&amp;lt;/code&amp;gt; being loaded with&lt;br /&gt;
garbage, or perhaps in certain cases, would result in an addressing exception&lt;br /&gt;
because the area past the end of the buffer is not allocated.&lt;br /&gt;
Buffer pointer validation is probably more important with index register based&lt;br /&gt;
references to the input buffer, because these types of references are more likely&lt;br /&gt;
to have bad values in the index register and so go outside the current input buffer:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;FIELDC=4|1,20&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
With buffer pointer validation, if a buffer reference is determined to be invalid,&lt;br /&gt;
an error message is issued indicating the input record number as well as the invalid&lt;br /&gt;
buffer offset and length, as in the following example:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;MSIR.0892: Input error: input record number: 1, start position/length: 99/9&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Standard &amp;lt;var&amp;gt;FILELOAD&amp;lt;/var&amp;gt; started performing buffer pointer validation in &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model 204&amp;lt;/var&amp;gt; V5R1.&lt;br /&gt;
&lt;br /&gt;
While buffer pointer validation is probably a good idea, it does have a slight&lt;br /&gt;
performance cost.&lt;br /&gt;
If there appears to be little chance of a buffer pointer error in a &amp;lt;var&amp;gt;FILELOAD&amp;lt;/var&amp;gt;&lt;br /&gt;
program, and performance is at an absolute premium, you can use the &amp;lt;var&amp;gt;NOVALIDATE&amp;lt;/var&amp;gt;&lt;br /&gt;
option to eliminate the cost of the buffer pointer validity checks.&lt;br /&gt;
&lt;br /&gt;
Since &amp;lt;var&amp;gt;LAI&amp;lt;/var&amp;gt; programs have no explicit buffer references, the &amp;lt;var&amp;gt;NOVALIDATE&amp;lt;/var&amp;gt; option has&lt;br /&gt;
no effect on &amp;lt;var&amp;gt;LAI&amp;lt;/var&amp;gt; programs.&lt;br /&gt;
&lt;br /&gt;
===STAtc stats_intvl===&lt;br /&gt;
&amp;lt;var&amp;gt;STATC&amp;lt;/var&amp;gt; must be followed by a number indicating the number of database file records that&lt;br /&gt;
&amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Fast/Reload&amp;lt;/var&amp;gt; will create before updating &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model 204&amp;lt;/var&amp;gt; statistics.&lt;br /&gt;
To speed up processing, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Fast/Reload&amp;lt;/var&amp;gt; does not ordinarily update &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model 204&amp;lt;/var&amp;gt; statistics&lt;br /&gt;
(since last, system, etc.) until the end of a file load.&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If you want these statistics to be updated more frequently, you can specify a &amp;lt;var&amp;gt;STATC&amp;lt;/var&amp;gt; value.&lt;br /&gt;
If you specify &amp;lt;code&amp;gt;OPTION STATC 10&amp;lt;/code&amp;gt;, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; statistics are updated for every&lt;br /&gt;
10th record created in the database file.&lt;br /&gt;
&amp;lt;code&amp;gt;OPTION STATC 0&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;OPTION STATC 1&amp;lt;/code&amp;gt; are equivalent. &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===TAPei ddname===&lt;br /&gt;
&amp;lt;var&amp;gt;TAPEI&amp;lt;/var&amp;gt; must be followed by string indicating the DDNAME to be used instead of &amp;lt;code&amp;gt;TAPEI&amp;lt;/code&amp;gt;&lt;br /&gt;
for the input sequential file containing the data to be loaded.&lt;br /&gt;
For example if you wish to load data from DDNAME &amp;lt;code&amp;gt;HOMER&amp;lt;/code&amp;gt;, simply specify &amp;lt;code&amp;gt;OPTION TAPEI HOMER&amp;lt;/code&amp;gt;.&lt;br /&gt;
This allows more than one input stream to be used to load data in a single BATCH204 or Online run.&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;b id=&amp;quot;laistmt&amp;quot;&amp;gt;&amp;lt;/b&amp;gt;The LAI statement==&lt;br /&gt;
The &amp;lt;var&amp;gt;LAI&amp;lt;/var&amp;gt; statement allows data created with the &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Fast/Unload&amp;lt;/var&amp;gt;&lt;br /&gt;
&amp;lt;var&amp;gt;[[Fast/Unload Extraction Language (FUEL)#UNLOAD ALL INFORMATION or UAI|UAI]]&amp;lt;/var&amp;gt; (&amp;lt;var&amp;gt;Unload All Information&amp;lt;/var&amp;gt;) statement to be loaded into a database file.&lt;br /&gt;
&amp;lt;var&amp;gt;LAI&amp;lt;/var&amp;gt; stands for Load All Information and has several optional parameters.&lt;br /&gt;
&lt;br /&gt;
===Syntax===&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;LAI [DElfield] [FAMsplit] [NEWfgid] [NOfdef]&lt;br /&gt;
    [NOIndex] [NOProcs]&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
where the parameters can be abbreviated with only the part shown in&lt;br /&gt;
uppercase, and where:&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;DElfield&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Means that if a field that is not defined in the target file is found in the input dataset, that is, was unloaded by &amp;lt;var&amp;gt;UAI&amp;lt;/var&amp;gt;, that field should simply be deleted.&lt;br /&gt;
If this parameter is not specified, the presence of an undefined field would terminate the &amp;lt;var&amp;gt;LAI&amp;lt;/var&amp;gt;with an error. This statement provides an efficient way of deleting fields during a reorg.&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 parameter has no effect if the &amp;lt;var&amp;gt;NOFDEF&amp;lt;/var&amp;gt; parameter is notalso specified. This is because if &amp;lt;var&amp;gt;NOFDEF&amp;lt;/var&amp;gt; is not specified, any unloaded field will be automatically defined in the target file. &amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;FAMsplit&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Means that if any two names (two fields, a field and an alias, or two aliases) were part of a single &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Sir2000 Field Migration Facility&amp;lt;/var&amp;gt; family in the unloaded file but are&lt;br /&gt;
now either separate fields or part of separate &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Sir2000 Field Migration Facility&amp;lt;/var&amp;gt; families, the values should be loaded into each field or family. Effectively, this &amp;quot;splits&amp;quot; the original family into multiple components.&lt;br /&gt;
If &amp;lt;var&amp;gt;FAMSPLIT&amp;lt;/var&amp;gt; is not specified, an attempt to do such a split causes the &amp;lt;var&amp;gt;FLOD&amp;lt;/var&amp;gt; or &amp;lt;var&amp;gt;FILELOAD&amp;lt;/var&amp;gt; to be terminated.&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The most likely use of this parameter is to convert a file that is being controlled by &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Sir2000 Field Migration Facility&amp;lt;/var&amp;gt; into one that is not, but where any fields or aliases that were in&lt;br /&gt;
the original file could still be referred to with SOUL programs. This might be useful for sending a non-&amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Sir2000 Field Migration Facility&amp;lt;/var&amp;gt; version of a file to a site&lt;br /&gt;
that does not have &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Sir2000 Field Migration Facility&amp;lt;/var&amp;gt;. Since &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Sir2000 Field Migration Facility&amp;lt;/var&amp;gt; makes sure that related fields and aliases automatically&lt;br /&gt;
stay in synch, it is generally not a good idea to update the non-&amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Sir2000 Field Migration Facility&amp;lt;/var&amp;gt; version of the file. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
See the &amp;quot;File Reorganizations&amp;quot; chapter in the&lt;br /&gt;
&amp;lt;var class=&amp;quot;book&amp;quot;&amp;gt;[[Media:SirfieldNew.pdf|Sir2000 Field Migration Facility Reference Manual]]&amp;lt;/var&amp;gt;&lt;br /&gt;
for considerations about preserving SIRFIELD information using &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Fast/Reorg&amp;lt;/var&amp;gt;.&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;NEWfgid&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Means that fieldgroup IDs from the TAPEI input file are &amp;lt;b&amp;gt;not&amp;lt;/b&amp;gt; copied to created fieldgroups, but rather that fieldgroup IDs within each record are created starting with 1.&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;NOfdef&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Means that field definitions unloaded by &amp;lt;var&amp;gt;UAI&amp;lt;/var&amp;gt; are not to be used to automatically define a field if it does not exist in the new file.&lt;br /&gt;
If this parameter is not specified, all fields that have not been explicitly&lt;br /&gt;
defined in the new database file but were defined in the old database file (unloaded with &amp;lt;var&amp;gt;UAI&amp;lt;/var&amp;gt;) will be&lt;br /&gt;
defined with exactly the same attributes that they had in the old database file.&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;NOIndex&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Means that Ordered Index data unloaded by UAI is not to be loaded by &amp;lt;var&amp;gt;LAI&amp;lt;/var&amp;gt;. When this optionis used, visible Ordered Index data will be regenerated and sorted by &amp;lt;var&amp;gt;LAI&amp;lt;/var&amp;gt;&lt;br /&gt;
and invisible Ordered Index data will be lost. This parameter has no effect if the &amp;lt;var&amp;gt;OINDEX&amp;lt;/var&amp;gt; parameter was not specified on the &amp;lt;var&amp;gt;UAI&amp;lt;/var&amp;gt; command for the unload.&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;NOProcs&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Means that any procedures and procedure aliases unloaded by &amp;lt;var&amp;gt;UAI&amp;lt;/var&amp;gt; are not to be loaded by &amp;lt;var&amp;gt;LAI&amp;lt;/var&amp;gt;. Procedure and alias records in the input dataset will be skipped.&lt;br /&gt;
For more information about loading procedures, see [[Fast/Reload procedure handling]].&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;var class=&amp;quot;product&amp;quot;&amp;gt;Fast/Reload&amp;lt;/var&amp;gt; programs using &amp;lt;var&amp;gt;LAI&amp;lt;/var&amp;gt; are quite simple.&lt;br /&gt;
For example, the following is a valid Fast/Reload program:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;FILELOAD -1,-1,0,1000000&lt;br /&gt;
LAI&lt;br /&gt;
END&lt;br /&gt;
&amp;lt;/p&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; The &amp;lt;var&amp;gt;LAI&amp;lt;/var&amp;gt; statement has this limitation:&lt;br /&gt;
it must be the only statement that appears in a &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Fast/Reload&amp;lt;/var&amp;gt;  program other&lt;br /&gt;
than the &amp;lt;var&amp;gt;OPTION&amp;lt;/var&amp;gt; statement.&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===LAI compared to FILELOAD/FLOD===&lt;br /&gt;
When using &amp;lt;var&amp;gt;LAI&amp;lt;/var&amp;gt;, some of the parameters on the &amp;lt;var&amp;gt;FILELOAD&amp;lt;/var&amp;gt; or &amp;lt;var&amp;gt;FLOD&amp;lt;/var&amp;gt; statement have a slightly&lt;br /&gt;
different meaning than when doing a standard &amp;lt;var&amp;gt;FLOD&amp;lt;/var&amp;gt;.&lt;br /&gt;
These parameters are:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Parameter 1&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
This parameter has the same meaning as in standard FILELOAD/FLOD.&lt;br /&gt;
That is, this is the&lt;br /&gt;
maximum number of records that will be loaded into the database file. &amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Parameter 2&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
This parameter is ignored when doing an &amp;lt;var&amp;gt;LAI&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;Parameter 3&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
In standard FILELOAD/FLOD programs this indicates the number of physical&lt;br /&gt;
input records in TAPEI to be skipped.&lt;br /&gt;
When doing an &amp;lt;var&amp;gt;LAI&amp;lt;/var&amp;gt;, this indicates the number of unloaded&lt;br /&gt;
Table B records to be skipped.  &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
This parameter, along with parameter 1, lets you split&lt;br /&gt;
a reload into pieces.&lt;br /&gt;
For example, the following statements&lt;br /&gt;
load the first million records unloaded via UAI, then the next million records&lt;br /&gt;
and finally the remaining records.  &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;FILELOAD 1000000,-1,0,100000,100000&lt;br /&gt;
LAI&lt;br /&gt;
END&lt;br /&gt;
FILELOAD 1000000,-1,1000000,100000,100000&lt;br /&gt;
LAI&lt;br /&gt;
END&lt;br /&gt;
FILELOAD -1,-1,2000000,100000,100000&lt;br /&gt;
LAI&lt;br /&gt;
END&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/p&amp;gt;  &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
All other parameters for the &amp;lt;var&amp;gt;FILELOAD&amp;lt;/var&amp;gt; statement have the same meaning as when&lt;br /&gt;
doing a non-&amp;lt;var&amp;gt;LAI&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;FILELOAD&amp;lt;/var&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Using LAI with UAI===&lt;br /&gt;
&amp;lt;var&amp;gt;LAI&amp;lt;/var&amp;gt; is closely related to the UAI statement in &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Fast/Unload&amp;lt;/var&amp;gt;.&lt;br /&gt;
Ordinarily, the interaction between these two is quite simple.&lt;br /&gt;
However, in cases where sorting of the data unloaded by &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Fast/Unload&amp;lt;/var&amp;gt; is&lt;br /&gt;
desired and/or if the data is being loaded into a hash or sort key&lt;br /&gt;
file, the interaction can become more complex.&lt;br /&gt;
&lt;br /&gt;
When loading data into a hash or sort key file with the &amp;lt;var&amp;gt;LAI&amp;lt;/var&amp;gt; statement, the data must have been&lt;br /&gt;
unloaded with a &amp;lt;var&amp;gt;UAI&amp;lt;/var&amp;gt; statement that specified the &amp;lt;var&amp;gt;HASH&amp;lt;/var&amp;gt; or &amp;lt;var&amp;gt;SORT&amp;lt;/var&amp;gt; parameter&lt;br /&gt;
and specified the new file&#039;s hash or sort key as the first key on the &amp;lt;var&amp;gt;UAI&amp;lt;/var&amp;gt; statement.&lt;br /&gt;
If this is not the case, the &amp;lt;var&amp;gt;LAI&amp;lt;/var&amp;gt; will not load any data.&lt;br /&gt;
If the &amp;lt;var&amp;gt;UAI&amp;lt;/var&amp;gt; statement&lt;br /&gt;
is coded correctly, the data unloaded by &amp;lt;var&amp;gt;UAI&amp;lt;/var&amp;gt; will be in the order that the data&lt;br /&gt;
will eventually be in the database file being loaded.&lt;br /&gt;
In these cases, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Fast/Reload&amp;lt;/var&amp;gt;&lt;br /&gt;
will never have to make more than one pass through Table B and will actually be&lt;br /&gt;
able to use full track I/O to write the Table B pages if the data is being&lt;br /&gt;
loaded into an empty hash or sort key file.&lt;br /&gt;
&lt;br /&gt;
If the &amp;lt;var&amp;gt;UAI&amp;lt;/var&amp;gt; statement is coded incorrectly, however, the unloaded data will be&lt;br /&gt;
in an order different from that which the data will loaded into the destination database file.&lt;br /&gt;
The impact of this on performance could be disastrous.&lt;br /&gt;
Consequently, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Fast/Reload&amp;lt;/var&amp;gt; will not ordinarily continue in the case when&lt;br /&gt;
data is detected out of order.&lt;br /&gt;
You can override this behavior with the&lt;br /&gt;
&amp;lt;var&amp;gt;ANYORDER&amp;lt;/var&amp;gt; option, but at least in the case of reorganizations, it is generally&lt;br /&gt;
faster to unload the data again with the correct parameters rather than&lt;br /&gt;
trying to load the data in incorrect order.&lt;br /&gt;
&lt;br /&gt;
The types of errors on the&lt;br /&gt;
&amp;lt;var&amp;gt;UAI&amp;lt;/var&amp;gt; statement that can cause data to be in incorrect order are:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Specifying &amp;lt;var&amp;gt;SORT&amp;lt;/var&amp;gt; on the &amp;lt;var&amp;gt;UAI&amp;lt;/var&amp;gt; and then attempting to load the data&lt;br /&gt;
into a hash key file.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Specifying &amp;lt;var&amp;gt;HASH&amp;lt;/var&amp;gt; on the &amp;lt;var&amp;gt;UAI&amp;lt;/var&amp;gt; and then attempting to load the data&lt;br /&gt;
into a sort key file.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Specifying a &amp;lt;var&amp;gt;BSIZE&amp;lt;/var&amp;gt; on the &amp;lt;code&amp;gt;UAI HASH&amp;lt;/code&amp;gt; statement different from the &amp;lt;var&amp;gt;BSIZE&amp;lt;/var&amp;gt;&lt;br /&gt;
in the hashed file being loaded.&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&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; If you are loading the data into a sorted file, there are several&lt;br /&gt;
cases of the &amp;lt;code&amp;gt;UAI SORT&amp;lt;/code&amp;gt; statement that render the sort key unusable.&lt;br /&gt;
See [[Fast/Unload Extraction Language (FUEL)#UAI SORT or HASH and field unload order|UAI SORT or HASH and field unload order]]. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If you are loading the data into a non-hash key, non-sort key&lt;br /&gt;
file, there is nothing wrong with loading data unloaded with a &amp;lt;var&amp;gt;UAI&amp;lt;/var&amp;gt; command&lt;br /&gt;
that had a &amp;lt;var&amp;gt;SORT&amp;lt;/var&amp;gt; or &amp;lt;var&amp;gt;HASH&amp;lt;/var&amp;gt; key specified.&lt;br /&gt;
In fact, if you want to maintain&lt;br /&gt;
good locality for data with similar values for a particular field without&lt;br /&gt;
incurring the overhead of maintaining a sort key file, you&lt;br /&gt;
can specify that field as a sort key on a &amp;lt;var&amp;gt;UAI&amp;lt;/var&amp;gt; and simply load the data into a non-sort key file. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Loading null data==&lt;br /&gt;
Standard &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model 204&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;FLOD&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;FILELOAD&amp;lt;/var&amp;gt; do not allow null data (stringdata with&lt;br /&gt;
a length of 0) to be loaded into the database file.&lt;br /&gt;
That is, if after stripping blanks and zeros the resulting&lt;br /&gt;
field has length zero, no data will be loaded into the database file.&lt;br /&gt;
This is the case, even if you are trying to load null data that had been&lt;br /&gt;
dumped using the &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;SOUL&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;[[PAI statement|PAI]]&amp;lt;/var&amp;gt; statement.&lt;br /&gt;
Thus, it is extremely difficult&lt;br /&gt;
if not impossible to reorganize a database file containing null data&lt;br /&gt;
using &amp;lt;var&amp;gt;FLOD&amp;lt;/var&amp;gt; or &amp;lt;var&amp;gt;FILELOAD&amp;lt;/var&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Fast/Reload&amp;lt;/var&amp;gt; allows you to do this in a couple of ways:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Any null data unloaded via &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Fast/Unload&amp;lt;/var&amp;gt;&#039;s &amp;lt;var&amp;gt;UAI&amp;lt;/var&amp;gt; statement will be loaded&lt;br /&gt;
as null data by &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Fast/Reload&amp;lt;/var&amp;gt;&#039;s &amp;lt;var&amp;gt;LAI&amp;lt;/var&amp;gt; statement. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;The &amp;lt;code&amp;gt;X&#039;0001&#039;&amp;lt;/code&amp;gt; mode bit lets you load null data as a&lt;br /&gt;
zero length string into the database file. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For example, the following&lt;br /&gt;
&amp;lt;var&amp;gt;FILELOAD&amp;lt;/var&amp;gt; program will load null data dumped via the &amp;lt;var&amp;gt;PAI&amp;lt;/var&amp;gt; statement back into the new database file as null data:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;FILELOAD -1,-1,0,1000000,10000,10000,,68&lt;br /&gt;
I 3&lt;br /&gt;
#1&lt;br /&gt;
G&lt;br /&gt;
=4,5,*&lt;br /&gt;
I 1&lt;br /&gt;
#2&lt;br /&gt;
=3,6|1,=&lt;br /&gt;
I 1,,,1|1&lt;br /&gt;
=2&lt;br /&gt;
#3&lt;br /&gt;
I 2,1,2,-7,-1|1&lt;br /&gt;
D 5,0|1=8|1,0|2,X&#039;0801&#039;&lt;br /&gt;
=1&lt;br /&gt;
#4&lt;br /&gt;
 PROC.ID=1,0,X&#039;8000&#039;&lt;br /&gt;
END&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
The key part of the above example is the X&#039;0001&#039; mode&lt;br /&gt;
bit on the &amp;lt;code&amp;gt;D&amp;lt;/code&amp;gt; statement.&lt;br /&gt;
Note also, that for &amp;lt;var&amp;gt;PAI&amp;lt;/var&amp;gt; type&lt;br /&gt;
reloads, it is generally a good idea to turn off blanks stripping.&lt;br /&gt;
This is controlled by the X&#039;0800&#039; mode bit on the &amp;lt;code&amp;gt;D&amp;lt;/code&amp;gt; statement.&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
{{Template:Fast/Reload topic list}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Fast/Reload]]&lt;/div&gt;</summary>
		<author><name>Mlarocca</name></author>
	</entry>
	<entry>
		<id>https://m204wiki.rocketsoftware.com/index.php?title=Connect-Star_for_JDBC&amp;diff=93430</id>
		<title>Connect-Star for JDBC</title>
		<link rel="alternate" type="text/html" href="https://m204wiki.rocketsoftware.com/index.php?title=Connect-Star_for_JDBC&amp;diff=93430"/>
		<updated>2016-07-27T17:50:05Z</updated>

		<summary type="html">&lt;p&gt;Mlarocca: /* Connection pooling example */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE: Connect&amp;lt;span class=&amp;quot;superstar&amp;quot;&amp;gt;&amp;amp;#9733;&amp;lt;/span&amp;gt; for JDBC}}&lt;br /&gt;
==Overview==&lt;br /&gt;
Connect&amp;lt;span class=&amp;quot;superstar&amp;quot;&amp;gt;&amp;amp;#9733;&amp;lt;/span&amp;gt; for JDBC supports Connect&amp;lt;span class=&amp;quot;superstar&amp;quot;&amp;gt;&amp;amp;#9733;&amp;lt;/span&amp;gt; functionality to access Model 204. It includes all SQL and RCL statement syntax.&lt;br /&gt;
&lt;br /&gt;
See [[Model 204 documentation]] for related Model 204 documentation.&lt;br /&gt;
&lt;br /&gt;
==Connect&amp;lt;sup&amp;gt;&amp;amp;#9733;&amp;lt;/sup&amp;gt; for JDBC environment setup==&lt;br /&gt;
&lt;br /&gt;
===Limitations and specifications===&lt;br /&gt;
&lt;br /&gt;
====Limitations====&lt;br /&gt;
A complete listing of the Connect&amp;lt;span class=&amp;quot;superstar&amp;quot;&amp;gt;&amp;amp;#9733;&amp;lt;/span&amp;gt; for JDBC limitations is provided in the Connect Star for Model 204 program group under the JDBC &amp;amp;gt; J204 API.&lt;br /&gt;
&lt;br /&gt;
====JDBC API specifications====&lt;br /&gt;
JDBC API incorporates JDBC 2.5 with no extended functionality.&lt;br /&gt;
&lt;br /&gt;
===Platforms tested===&lt;br /&gt;
The following platforms have been tested successfully for connectivity with Model 204 using Connect&amp;lt;span class=&amp;quot;superstar&amp;quot;&amp;gt;&amp;amp;#9733;&amp;lt;/span&amp;gt; for JDBC:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;z/OS 1.5&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Red Hat Linux 8.0 (Kernel 2.4)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Mandrake 9.2 &amp;amp;amp; 10.0 (Kernel 2.6)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Sun Solaris 2.8&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Windows NT, 2000, XP&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
These platforms are supported by Rocket Software.&lt;br /&gt;
&lt;br /&gt;
===Environment requirements===&lt;br /&gt;
Before you install Connect&amp;lt;span class=&amp;quot;superstar&amp;quot;&amp;gt;&amp;amp;#9733;&amp;lt;/span&amp;gt; for JDBC you must have the following installed in your working environment:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Java2 Software Development Kit (J2SDK) Version 1.5 or greater.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Model 204 Version 6.1.0 or greater with TCP/IP and SQL. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;remove Connect* JDBC&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
===Removing a previous version of Connect&amp;lt;sup&amp;gt;&amp;amp;#9733;&amp;lt;/sup&amp;gt; for JDBC===&lt;br /&gt;
&amp;lt;!-- Note: div above --&amp;gt;&lt;br /&gt;
To remove a previous version of Connect&amp;lt;span class=&amp;quot;superstar&amp;quot;&amp;gt;&amp;amp;#9733;&amp;lt;/span&amp;gt; for JDBC, do the following:&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Go to the Control Panel &amp;amp;gt; Add/Remove Programs.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Click on Connect Star for JDBC and remove.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Go to the installation folder for the previous version of J204 and delete the j204.jar file.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Installing Connect&amp;lt;sup&amp;gt;&amp;amp;#9733;&amp;lt;/sup&amp;gt; for JDBC==&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Ensure that you have fulfilled the preinstallation requirements as described in [[Connect* installation requirements#Preparing to install|Preparing to install]].&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Navigate to the FTP server site: &amp;lt;code&amp;gt;ftp.rocketsoftware.com&amp;lt;/code&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Enter the userid and password provided by Rocket.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Navigate to the M204 &amp;amp;gt; &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;version&amp;lt;/var&amp;gt; &amp;amp;gt; ConnectStar folder (where &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;version&amp;lt;/var&amp;gt; is 7.5, for example).&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Open the JDBC folder.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Choose the folder for the driver that you want: 32bit or 64bit.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Download the files to your PC, in binary format.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Run the .exe file to install the application.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Connection parameters==&lt;br /&gt;
To connect a J204 client application to a Model 204 server, the application must specify connection parameters in the URL and/or java.util.Properties object supplied as parameters to DriverManager.getConnection().&lt;br /&gt;
&lt;br /&gt;
See J204 API for DriverManager and J204Driver classes. If a parameter is specified in both the URL and the properties object, the value in the properties object takes precedence.&lt;br /&gt;
&lt;br /&gt;
The URL includes both keyword and positional parameters. Positional parameters must be entered in the specified order, while keyword parameters may appear in any order. All keyword parameters are optional.&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; If you specify parameters in the properties object, you must enter the key entirely in uppercase or lowercase. Otherwise, the property will not be found. The case of parameters in the URL can be upper, lower, or mixed; it does not matter. &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The URL has the following format:&lt;br /&gt;
&lt;br /&gt;
====Syntax====&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;JDBC:J204:// {&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;hostname&amp;lt;/span&amp;gt;} : {&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;port&amp;lt;/span&amp;gt;} {/&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;connection_type&amp;lt;/span&amp;gt;}&lt;br /&gt;
     [/&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;user&amp;lt;/span&amp;gt;/&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;password&amp;lt;/span&amp;gt;]&lt;br /&gt;
     [/eoc=&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;eoc_character&amp;lt;/span&amp;gt;]&lt;br /&gt;
     [/cursors=&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;commit_option&amp;lt;/span&amp;gt;]&lt;br /&gt;
     [/dirty data=&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;dirty_data_option&amp;lt;/span&amp;gt;]&lt;br /&gt;
     [/isolation level=&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;isolation_level_option&amp;lt;/span&amp;gt;]&lt;br /&gt;
     [/trace=&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;trace_option&amp;lt;/span&amp;gt;]&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&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;hostname&amp;lt;/var&amp;gt; specifies the server&#039;s TCP/IP name, entered in dotted decimal or string format.&lt;br /&gt;
&amp;lt;p&amp;gt;Required; in the URL&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;port&amp;lt;/var&amp;gt; specifies the port entered for the SERVPORT parameter in the DEFINE LINK command for the Model 204 server. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;Required; in the URL&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;connection_type&amp;lt;/var&amp;gt; is either SQL or RCL. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;Required; in either the URL or properties list&amp;lt;br /&amp;gt;&lt;br /&gt;
Properties key: connection type&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;var class=&amp;quot;term&amp;quot;&amp;gt;user&amp;lt;/var&amp;gt; and &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;password&amp;lt;/var&amp;gt; specify a valid Model 204 user name and password.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;Optional; no defaults&amp;lt;br /&amp;gt;&lt;br /&gt;
Properties keys: user, password&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 class=&amp;quot;term&amp;quot;&amp;gt;eoc_character&amp;lt;/var&amp;gt; for the &amp;lt;var&amp;gt;eoc&amp;lt;/var&amp;gt; parameter specifies the end-of-line character for RCL connection.&lt;br /&gt;
&amp;lt;p&amp;gt;Default character is a semicolon (;)&amp;lt;br /&amp;gt;&lt;br /&gt;
Properties key: eoc&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
The &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;commit_option&amp;lt;/var&amp;gt; for the &amp;lt;var&amp;gt;cursors&amp;lt;/var&amp;gt; parameter determines the effect of commit on cursors. Choose one of the following options:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;DROP specifies to close the cursor and drop the statement.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;PRESERVE specifies to preserve open cursors and prepared statements.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;Default is DROP&amp;lt;br /&amp;gt;&lt;br /&gt;
Properties key: cursors&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 class=&amp;quot;term&amp;quot;&amp;gt;dirty_data_option&amp;lt;/var&amp;gt; for the &amp;lt;var&amp;gt;dirty data&amp;lt;/var&amp;gt; parameter specifies the treatment of dirty data by a Fetch statement. Choose one of the following options:&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;DEFAULT uses the server default specified by the SQLCNVER parameter in the CCAIN stream; this is the default.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SKIP specifies to bypass a record containing dirty data and continue on to the next. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;ERROR specifies to return an error message whenever dirty data is encountered.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;Default is DEFAULT&amp;lt;br /&amp;gt;&lt;br /&gt;
Properties key: dirty data&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 class=&amp;quot;term&amp;quot;&amp;gt;isolation_level_option&amp;lt;/var&amp;gt; for the &amp;lt;var&amp;gt;isolation level&amp;lt;/var&amp;gt; parameter is one of the following:&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;Option&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Specifies&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;RC, the default&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Read Committed (cursor stability)&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;RU&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Read Uncommitted (dirty read)&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;SR&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Serializable&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;Properties key: isolation level&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
The &amp;lt;var&amp;gt;trace&amp;lt;/var&amp;gt; parameter controls logging. The &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;trace_option&amp;lt;/var&amp;gt; is one of the following:&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;Option&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Specifies&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;ALL&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Write all trace messages to the log 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;NONE&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Write no trace messages&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;
No log file is created if this parameter is omitted. For more information, see [[Connect* for ODBC#Data source default parameters|Data source default parameters]].&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Usage====&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
You must specify the host name and port in the URL. You can specify the other parameters in the URL or in the properties object. If you specify a parameter in both places, the value specified in the properties list takes precedence.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Positional parameters must be entered in the specified order. Hostname, port, and connection type must be specified in the URL before other options.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
All keyword parameters are optional.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
When specifying parameters in a properties list, you must enter the key (property name) in either uppercase or lowercase characters, but not mixed case. If the key is in mixed case, the property cannot be found. When specifying parameters in the URL, you can enter uppercase, lowercase, or mixed case.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Verifying your JDBC connection===&lt;br /&gt;
To verify your JDBC connection:&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Navigate to Connect Star for Model 204 program group &amp;amp;gt; JDBC &amp;amp;gt; DatabaseConnectivity.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Complete the Connection Information screen and click the Test Connection button.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;figure&amp;quot;&amp;gt;[[File:CStar_4-1_JDBC_DB_con.jpg]] &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; for JDBC Compilation and Execution==&lt;br /&gt;
&lt;br /&gt;
===Execution prerequisite===&lt;br /&gt;
&lt;br /&gt;
Before executing an SQL statement, check with your Connect&amp;lt;span class=&amp;quot;superstar&amp;quot;&amp;gt;&amp;amp;#9733;&amp;lt;/span&amp;gt; administrator to make sure that either the demonstration database is installed and has been defined to the SQL catalog file, CCACAT, or you have other available tables defined in CCACAT. (See [[Connect* to Model 204 connection#SQL catalog population|SQL catalog population]].)&lt;br /&gt;
&lt;br /&gt;
===Online help===&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; for JDBC includes HTML help files that provide complete documentation of the J204 JDBC driver. For detailed documentation, browse the index.HTML file in the \doc directory where the driver is installed.&lt;br /&gt;
&lt;br /&gt;
===RCL and JDBC===&lt;br /&gt;
&lt;br /&gt;
Java CallableStatements provide a means of calling stored procedures. Model 204 SQL does not support stored procedures; therefore, Connect&amp;lt;span class=&amp;quot;superstar&amp;quot;&amp;gt;&amp;amp;#9733;&amp;lt;/span&amp;gt; for JDBC does not implement the CallableStatement interface.&lt;br /&gt;
&lt;br /&gt;
Calling any CallableStatement method will result in an Unsupported Method SQLException.&lt;br /&gt;
&lt;br /&gt;
An alternative to CallableStatement is the RCLStatement class, which allows execution of SOUL statements and procedures. You can use the following methods for RCL processing:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;close() &lt;br /&gt;
createStatement()&lt;br /&gt;
execute() &lt;br /&gt;
executeQuery() &lt;br /&gt;
getResultSet() &lt;br /&gt;
getResultSetType() &lt;br /&gt;
getTransactionIsolation() &lt;br /&gt;
nativeSQL() &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===BLOB and CLOB support===&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; for JDBC supports Model 204 BLOB and CLOB data types in SQL update and retrieval statements.&lt;br /&gt;
&lt;br /&gt;
Use the following ResultSet methods to retrieve large object column data after SELECT statement execution.&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;BLOB&lt;br /&gt;
 byte[] getBytes()&lt;br /&gt;
 Object getObject()&lt;br /&gt;
 InputStream getBinaryStream()&lt;br /&gt;
CLOB&lt;br /&gt;
 byte[] getBytes()&lt;br /&gt;
 Object getObject()&lt;br /&gt;
 String getString()&lt;br /&gt;
 InputStream getAsciiStream()&lt;br /&gt;
 InputStream getBinaryStream()&lt;br /&gt;
 java.io.Reader getCharacterStream()&lt;br /&gt;
 InputStream getUnicodeStream()&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In INSERT and UPDATE statements, use parameters for large object columns. First, create a prepared statement, then set the values of the parameters with the following PreparedStatement methods.&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;BLOB&lt;br /&gt;
 setBytes()&lt;br /&gt;
 setObject()&lt;br /&gt;
 setBinaryStream()&lt;br /&gt;
CLOB&lt;br /&gt;
 setBytes()&lt;br /&gt;
 setObject()&lt;br /&gt;
 setAsciiStream()&lt;br /&gt;
 setBinaryStream()&lt;br /&gt;
 setCharacterStream()&lt;br /&gt;
 setUnicodeStream()&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===j204.jar file===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You must include the j204.jar file in the classpath for both compilation and execution. See your Java documentation for a complete list of options.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Note that the j204.jar file can be placed anywhere as long as the classpath points to its directory.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Compilation example====&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;javac -classpath c:\jdbc\yourClasses;c:\jdbc\j204.jar&lt;br /&gt;
   yourProgram.java&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Execution example====&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;java -cp .;c:\jdbc\yourClasses;c:\jdbc\j204.jar yourProgram&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Debug tracing for JDBC===&lt;br /&gt;
&lt;br /&gt;
To create a trace log file, use the TRACE=ALL parameter in the connection string. See [[#Connection parameters|Connection parameters]].&lt;br /&gt;
&lt;br /&gt;
====J204Driver log file location====&lt;br /&gt;
&lt;br /&gt;
For applications run under Windows 7, the driver places the log file in the user&#039;s home directory.&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Under Windows 7, the directory would be: &amp;lt;br /&amp;gt;&lt;br /&gt;
C:\Users\&amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;user_name&amp;lt;/var&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Under Windows XP, the directory would be: &amp;lt;br /&amp;gt;&lt;br /&gt;
C\Documents and Settings\&amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;user_name&amp;lt;/var&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
For other operating systems, the log file is placed in the same directory as the j204.jar file.&lt;br /&gt;
&lt;br /&gt;
==Connection pooling==&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 and higher for JDBC  offers a &amp;amp;quot;connection pooling&amp;amp;quot; class to interface with other pooling infrastructures provided by pooling packages and web application servers. This new feature allows for a pool of connections that remain active and open during execution of an SQL and RCL (SOUL) statement.&lt;br /&gt;
&lt;br /&gt;
Using connection pooling helps eliminate the overhead of creating initial connections from scratch or trying to manage each connection using the JDBC API.&lt;br /&gt;
&lt;br /&gt;
Each Connection Pool can create a pool of active connections maintainable throughout the connection cycle of the pooling service.&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 and higher for JDBC has been tested with the JNDI, Apache DBCP&amp;lt;sup&amp;gt;TM&amp;lt;/sup&amp;gt;, BoneCP, and C3PO pooling packages.&lt;br /&gt;
&lt;br /&gt;
===Connection pooling example===&lt;br /&gt;
&lt;br /&gt;
Below is an example of pooling connections using the [http://commons.apache.org/proper/commons-dbcp/ Apache Commons DBCP&amp;lt;sup&amp;gt;TM&amp;lt;/sup&amp;gt;] component. &amp;lt;br /&amp;gt;There are other examples provided in the install directory of Connect&amp;lt;span class=&amp;quot;superstar&amp;quot;&amp;gt;&amp;amp;#9733;&amp;lt;/span&amp;gt; for JDBC:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;/**&lt;br /&gt;
* Example: Pooling Connection program using Apache DBCP (Database Connection &lt;br /&gt;
* Pooling) Package &lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
package com.cca.j204.tests;&lt;br /&gt;
&lt;br /&gt;
import javax.sql.DataSource;&lt;br /&gt;
import java.sql.Connection;&lt;br /&gt;
import java.sql.Statement;&lt;br /&gt;
import java.sql.ResultSet;&lt;br /&gt;
import java.sql.SQLException;&lt;br /&gt;
&lt;br /&gt;
// Using the Apache DBCP BasicDataSource.&lt;br /&gt;
// The example is using the following libraries:&lt;br /&gt;
//   commons-dbcp-1.x.jar&lt;br /&gt;
//   commons-pool-1.x.jar&lt;br /&gt;
&lt;br /&gt;
import org.apache.commons.dbcp.BasicDataSource;&lt;br /&gt;
&lt;br /&gt;
public class SimpleDBCPExample {&lt;br /&gt;
&lt;br /&gt;
 public static void main(String[] args) {&lt;br /&gt;
&lt;br /&gt;
  BasicDataSource basicDatasource = new BasicDataSource();&lt;br /&gt;
  basicDatasource.setDriverClassName(&amp;quot;com.cca.j204.J204Driver&amp;quot;);&lt;br /&gt;
  basicDatasource.setUsername(&amp;quot;user&amp;quot;);&lt;br /&gt;
  basicDatasource.setPassword(&amp;quot;password&amp;quot;);&lt;br /&gt;
  basicDatasource.setUrl(&amp;quot;jdbc:j204://mainframe.domain.com:2403/rcl&amp;quot;); &lt;br /&gt;
  basicDatasource.setInitialSize(5); // Set up 5 connections at initialization&lt;br /&gt;
&lt;br /&gt;
  DataSource dataSource = basicDatasource;&lt;br /&gt;
  String statement = &amp;quot;VIEW ALL;&amp;quot;;    // SOUL Statement&lt;br /&gt;
&lt;br /&gt;
  // Show statistics before the connections are established&lt;br /&gt;
  System.out.println(&amp;quot;Statistics before the connections are established.&amp;quot;);&lt;br /&gt;
  showStatistics(dataSource);&lt;br /&gt;
&lt;br /&gt;
  // Now, we can use JDBC DataSource as we normally would.&lt;br /&gt;
  Connection connectionHandle = null;&lt;br /&gt;
  Statement statementHandle = null;&lt;br /&gt;
  ResultSet results = null;&lt;br /&gt;
&lt;br /&gt;
  try {&lt;br /&gt;
    System.out.println(&amp;quot;Creating connection.&amp;quot;);&lt;br /&gt;
    connectionHandle = dataSource.getConnection();//Start all 5 connections at once.&lt;br /&gt;
&lt;br /&gt;
  // Show statistics while the connections are established&lt;br /&gt;
  System.out.println(&amp;quot;Statistics after initializing the connections.&amp;quot;);&lt;br /&gt;
  showStatistics(dataSource);&lt;br /&gt;
&lt;br /&gt;
  System.out.println(&amp;quot;Creating statement.&amp;quot;);&lt;br /&gt;
  statementHandle = connectionHandle.createStatement();&lt;br /&gt;
&lt;br /&gt;
  System.out.println(&amp;quot;Executing statement.&amp;quot;);&lt;br /&gt;
  results = statementHandle.executeQuery(statement);&lt;br /&gt;
&lt;br /&gt;
  System.out.println(&amp;quot;Show Results:&amp;quot;);&lt;br /&gt;
  int numcols = results.getMetaData().getColumnCount();&lt;br /&gt;
  while(results.next()) {&lt;br /&gt;
    for(int i=1;i&amp;amp;lt;=numcols;i++) {&lt;br /&gt;
      System.out.print(&amp;quot;&amp;amp;#92;t&amp;quot; + results.getString(i));&lt;br /&gt;
    }&lt;br /&gt;
    System.out.println(&amp;quot;&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // Show statistics while the connections are established&lt;br /&gt;
  System.out.println(&amp;quot;Statistics while the connections are established.&amp;quot;);&lt;br /&gt;
  showStatistics(dataSource);&lt;br /&gt;
&lt;br /&gt;
  results.close();&lt;br /&gt;
  statementHandle.close();&lt;br /&gt;
  connectionHandle.close();&lt;br /&gt;
&lt;br /&gt;
  // Show statistics after the connections have been closed&lt;br /&gt;
  System.out.println(&amp;quot;Statistics after the connections have been closed.&amp;quot;);&lt;br /&gt;
  showStatistics(dataSource); &lt;br /&gt;
&lt;br /&gt;
  // Clean up and close all of the pooled connections&lt;br /&gt;
  basicDatasource.close();&lt;br /&gt;
&lt;br /&gt;
  } catch(SQLException ex1) {&lt;br /&gt;
    System.out.println(&amp;quot;SQLException in main(): &amp;quot; + ex1.getMessage());&lt;br /&gt;
  } &lt;br /&gt;
&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
  // Print out the statistics from the BasicDataSource class&lt;br /&gt;
  public static void showStatistics(DataSource ds) {&lt;br /&gt;
    BasicDataSource bds = (BasicDataSource) ds;&lt;br /&gt;
    System.out.println(&amp;quot;Number of Active Connections: &amp;quot; + bds.getNumActive());&lt;br /&gt;
    System.out.println(&amp;quot;Number of Idle Connections: &amp;quot; + bds.getNumIdle());&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}&amp;lt;/nowiki&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The sample code generates this output:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
Statistics before the connections are established.&lt;br /&gt;
Number of Active Connections: 0&lt;br /&gt;
Number of Idle Connections: 0&lt;br /&gt;
&lt;br /&gt;
Creating connection.&lt;br /&gt;
&lt;br /&gt;
Statistics after initializing the connections.&lt;br /&gt;
Number of Active Connections: 0&lt;br /&gt;
Number of Idle Connections: 5&lt;br /&gt;
&lt;br /&gt;
Creating statement.&lt;br /&gt;
Executing statement.&lt;br /&gt;
&lt;br /&gt;
Show Results:&lt;br /&gt;
&lt;br /&gt;
  VERSION   7.4.0K      RELEASE OF MODEL 204&lt;br /&gt;
  CMSVERSN              VERSION OF THE CMS INTERFACE&lt;br /&gt;
  SYSOPT    X&#039;AB&#039;       SYSTEM OPTIONS&lt;br /&gt;
  SYSOPT2   X&#039;00&#039;       SYSTEM OPTIONS&lt;br /&gt;
  OPSYS     X&#039;D209E8&#039;   OPERATING SYSTEM&lt;br /&gt;
  SYSID     RS26        SMF SYSTEM IDENTIFICATION&lt;br /&gt;
  JOBNM     M204MWD     JOB NAME&lt;br /&gt;
  STEPNM    ONLINE      STEP NAME&lt;br /&gt;
  JOBSTEP   MPONLINE    JOB STEP NAME&lt;br /&gt;
  JESID     J0919076    JES JOB ID&lt;br /&gt;
  LOCATION              D204 LOCATION&lt;br /&gt;
  LSERVPD   8176        LENGTH OF SCHEDULER PDL&lt;br /&gt;
  NUSERS    432         NUMBER OF USERS&lt;br /&gt;
  NSERVS    15          NUMBER OF SERVERS&lt;br /&gt;
  SERVNSA   X&#039;00000000&#039; NON SWAPPABLE SERVER AREAS&lt;br /&gt;
  SERVNSSZ  0           NON SWAPPABLE SERVER AREA SIZE&lt;br /&gt;
  NJBUFF    36          NUMBER OF JOURNAL BUFFERS&lt;br /&gt;
&lt;br /&gt;
  .... (continue output)&lt;br /&gt;
&lt;br /&gt;
  Statistics while the connections are established.&lt;br /&gt;
  Number of Active Connections: 1&lt;br /&gt;
  Number of Idle Connections: 4&lt;br /&gt;
&lt;br /&gt;
  Statistics after the connections have been closed.&lt;br /&gt;
  Number of Active Connections: 0&lt;br /&gt;
  Number of Idle Connections: 5 &amp;lt;/nowiki&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
&lt;br /&gt;
{{Template: Connect* topic list}}&lt;br /&gt;
&lt;br /&gt;
[[Category: Connect*]]&lt;/div&gt;</summary>
		<author><name>Mlarocca</name></author>
	</entry>
	<entry>
		<id>https://m204wiki.rocketsoftware.com/index.php?title=URI_(XmlDoc/XmlNode_function)&amp;diff=84038</id>
		<title>URI (XmlDoc/XmlNode function)</title>
		<link rel="alternate" type="text/html" href="https://m204wiki.rocketsoftware.com/index.php?title=URI_(XmlDoc/XmlNode_function)&amp;diff=84038"/>
		<updated>2016-05-04T19:22:36Z</updated>

		<summary type="html">&lt;p&gt;Mlarocca: /* Examples */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:XmlDoc/XmlNode:URI subtitle}}&lt;br /&gt;
&amp;lt;var&amp;gt;URI&amp;lt;/var&amp;gt; returns the &amp;quot;Uniform Resource Identifier&amp;quot; (URI) associated with the name of the node that is the head of an [[XPath]] result.&lt;br /&gt;
&lt;br /&gt;
==Syntax==&lt;br /&gt;
{{Template:XmlDoc/XmlNode:URI syntax}}&lt;br /&gt;
&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;%unicode&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;A &amp;lt;var&amp;gt;Unicode&amp;lt;/var&amp;gt; string variable for the returned URI. Prior to &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;[[Sirius Mods]]&amp;lt;/var&amp;gt; Version 7.6, this variable is an EBCDIC string.&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;nr&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;An &amp;lt;var&amp;gt;XmlDoc&amp;lt;/var&amp;gt; or &amp;lt;var&amp;gt;XmlNode&amp;lt;/var&amp;gt;, used as the context node for the &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;xpath&amp;lt;/var&amp;gt; expression. If an &amp;lt;var&amp;gt;XmlDoc&amp;lt;/var&amp;gt;, the &amp;lt;var&amp;gt;Root&amp;lt;/var&amp;gt; node is the context node.&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;xpath&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;A &amp;lt;var&amp;gt;Unicode&amp;lt;/var&amp;gt; string that is an [[XPath#XPath_syntax|XPath expression]] that results in a nodelist. The head of the nodelist is the node to process. Any other nodes in the nodelist are ignored.&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
This is an optional argument, and its default is a period (&amp;lt;tt&amp;gt;.&amp;lt;/tt&amp;gt;), that is, the node referenced by the method object &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;nr&amp;lt;/var&amp;gt;.&amp;lt;/p&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;
==Usage notes==&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The Uniform Resource Identifier (URI) of a node is defined to be:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The URI of the namespace declaration in scope for the prefix of the element-type or attribute name if there is one.&lt;br /&gt;
&amp;lt;li&amp;gt;The URI of the default namespace declaration in scope for an unprefix of element-type.&lt;br /&gt;
&amp;lt;li&amp;gt;The null string, otherwise.&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;URI&amp;lt;/var&amp;gt; may only be used if the &amp;lt;var&amp;gt;XmlDoc&amp;lt;/var&amp;gt;&#039;s &amp;lt;var&amp;gt;[[Namespace (XmlDoc property)|Namespace]]&amp;lt;/var&amp;gt; property is &amp;lt;var&amp;gt;On&amp;lt;/var&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Namespace-aware applications should use the namespace URI rather than the prefix to identify elements.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;As of &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Sirius Mods&amp;lt;/var&amp;gt; Version 7.3, the method&#039;s argument and result may include only non-null EBCDIC characters that translate to Unicode.&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
As of &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Sirius Mods&amp;lt;/var&amp;gt; Version 7.6, these strings are &amp;lt;var&amp;gt;Unicode&amp;lt;/var&amp;gt; or are converted to &amp;lt;var&amp;gt;Unicode&amp;lt;/var&amp;gt;. For more information about the effects of this Version 7.6 change, see [[XmlDoc API#Strings and Unicode with the XmlDoc API|Strings and Unicode with the XmlDoc API]].&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Examples==&lt;br /&gt;
In the following example, the URI of the first element&lt;br /&gt;
and the null string are printed:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;begin&lt;br /&gt;
   %d object xmlDoc&lt;br /&gt;
   %d = new&lt;br /&gt;
   %n1 object xmlNode&lt;br /&gt;
   %n2 object xmlNode&lt;br /&gt;
   %n1 = %d:[[AddElement_(XmlDoc/XmlNode_function)|addElement]](&#039;foo:bar&#039;, , &#039;ftp:here&#039;)&lt;br /&gt;
   print &#039;URI =&#039; and %n1:URI&lt;br /&gt;
   %n1 = %n1:addElement(&#039;junk&#039;)&lt;br /&gt;
   print &#039;URI =&#039; and %n1:URI&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
The example result follows:&lt;br /&gt;
&amp;lt;p class=&amp;quot;output&amp;quot;&amp;gt;URI = ftp:here&lt;br /&gt;
URI =&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Request-cancellation errors==&lt;br /&gt;
This list is not exhaustive: it does &amp;lt;i&amp;gt;not&amp;lt;/i&amp;gt; include all the errors that are request  cancelling.&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;XmlDoc&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;Namespace&amp;lt;/var&amp;gt; property value not &amp;lt;var&amp;gt;On&amp;lt;/var&amp;gt;.&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;xpath&amp;lt;/var&amp;gt; expression is invalid.&lt;br /&gt;
&amp;lt;li&amp;gt;Result of (&amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;xpath&amp;lt;/var&amp;gt;) is empty.&lt;br /&gt;
&amp;lt;li&amp;gt;Insufficient free space exists in CCATEMP.&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;For more information about using XPath expressions, see [[XPath]].&lt;br /&gt;
&amp;lt;li&amp;gt;These methods also obtain information about the name of a node:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;[[LocalName (XmlDoc/XmlNode function)|LocalName]]&amp;lt;/var&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;[[Prefix (XmlDoc/XmlNode function)|Prefix]]&amp;lt;/var&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;[[QName (XmlDoc/XmlNode function)|QName]]&amp;lt;/var&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Template:XmlDoc/XmlNode:URI footer}}&lt;/div&gt;</summary>
		<author><name>Mlarocca</name></author>
	</entry>
	<entry>
		<id>https://m204wiki.rocketsoftware.com/index.php?title=Model_204_configurations_and_operating_environments&amp;diff=84015</id>
		<title>Model 204 configurations and operating environments</title>
		<link rel="alternate" type="text/html" href="https://m204wiki.rocketsoftware.com/index.php?title=Model_204_configurations_and_operating_environments&amp;diff=84015"/>
		<updated>2016-05-03T16:23:40Z</updated>

		<summary type="html">&lt;p&gt;Mlarocca: /* Model 204 entities in above the bar storage */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;p&amp;gt;&lt;br /&gt;
This page provides an overview of &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt;. The structure of the &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; database management system, basic &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; configurations, and the hardware and software environments required to run &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; are summarized for the view of the person managing Model 204 system resources. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
For a list of all the Model 204 system management topics, see [[:Category:System management|Category:System management]]. &amp;lt;/p&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==About Model 204==&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; is a complete database management system that provides facilities for the creation, control, query, and maintenance of database files. Data intensive batch and online application systems can be developed with &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt;&#039;s self-contained [[SOUL]] language (formerly called User Language) and embedded TP monitor. Application languages, such as Assembler, COBOL, PL/I, and FORTRAN can communicate with &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; functions through the &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;[[Media:M204_HLIReference_V75.pdf|Model 204 Host Language Interface]]&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; supports SQL queries using the Horizon and CRAM interfaces.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; contains a system of [[Introduction_to_User_Language#Files|files]], [[File architecture overview#Summary|tables]], runtime and user [[Overview of Model 204 parameters|parameters]], and software that frees users from the physical structure of the data and allows convenient, controlled access to that data.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Sequential system and work files provide system input and output.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt; Tables store information necessary for running specific requests.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt; Runtime parameters handle execution-time and system-input-stream specifications.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt; User parameters control the environment of each online user. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &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; database consists of files that utilize large fixed-length physical pages of 6184 bytes each. Each file is logically composed of four tables in which indexes and data are maintained. Entry order, unordered, sorted, and hash key file structures are supported. &amp;lt;/p&amp;gt; &lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Organization and maintenance of the data files are discussed in the [[:Category:Model 204 files|Model 204 files]] topics. Access and manipulation of data files are discussed in the [[:Category:SOUL|SOUL]] topics and in the &amp;lt;var class=&amp;quot;book&amp;quot;&amp;gt;Rocket Model&amp;amp;nbsp;204 Host Language Interface Reference Manual&amp;lt;/var&amp;gt;.  &amp;lt;/p&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
===Model 204 system management=== &lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Rocket Software recommends that each installation designate a person to be the &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; System Manager. The System Manager&#039;s responsibilities include:&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Installing and maintaining the Rocket &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; software&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt; Setting up and maintaining the OS or DOS JCL or CMS EXECs and &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; parameters for the &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; configurations used at an installation&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt; Setting up [[:Category:Security management|system security]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt; Acting as a liaison with [[Contacting Rocket Software Technical Support|Rocket Technical Support]]. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;p&amp;gt;The System Manager&#039;s position is usually a part-time job in a small to medium size database environment. Often the System Manager also has the responsibilities of File Manager, also known as &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; database administrator. If you are the System Manager only, Rocket Software strongly recommends that you study the Rocket &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; [[:Category:Model 204 files|Model 204 files]] topics as well as the [[:Category:System management|system management]] topics, because you will be working closely with the File Manager.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Model 204 configurations==&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;p&amp;gt;The basic &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; configurations are listed in the table below. Various configurations, such as IFAM2 and ONLINE, can be combined to meet site requirements.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;caption&amp;gt;Model 204 configurations&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; &lt;br /&gt;
&amp;lt;p&amp;gt;Configuration&amp;lt;/p&amp;gt;&lt;br /&gt;
 &amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt; &lt;br /&gt;
&amp;lt;p&amp;gt;Description&amp;lt;/p&amp;gt;&lt;br /&gt;
 &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; &lt;br /&gt;
&amp;lt;p&amp;gt;BATCH204&amp;lt;/p&amp;gt;&lt;br /&gt;
 &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; &lt;br /&gt;
&amp;lt;p&amp;gt;Handles a single user in batch mode.&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;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; &lt;br /&gt;
&amp;lt;p&amp;gt;ONLINE&amp;lt;/p&amp;gt;&lt;br /&gt;
 &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; &lt;br /&gt;
&amp;lt;p&amp;gt;Supports a batch user and a number of online users. &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;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; &lt;br /&gt;
&amp;lt;p&amp;gt;IFAM1&amp;lt;/p&amp;gt;&lt;br /&gt;
 &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; &lt;br /&gt;
&amp;lt;p&amp;gt;Supports host language calls to &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; files from multiple users. Programs are run as separate tasks in a single region, &lt;br /&gt;
 partition, or virtual machine. &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;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; &lt;br /&gt;
&amp;lt;p&amp;gt;IFAM2&amp;lt;/p&amp;gt;&lt;br /&gt;
 &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; &lt;br /&gt;
&amp;lt;p&amp;gt;Supports host language calls to &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; files from multiple users. Each program operates in its own region, partition, or virtual machine. &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;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; &lt;br /&gt;
&amp;lt;p&amp;gt;IFAM4&amp;lt;/p&amp;gt;&lt;br /&gt;
 &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; &lt;br /&gt;
&amp;lt;p&amp;gt;Supports host language calls to &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; files from multiple users. Programs are run as separate tasks in a single region, partition, or virtual machine.&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;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; &lt;br /&gt;
&amp;lt;p&amp;gt;BATCH2&amp;lt;/p&amp;gt;&lt;br /&gt;
 &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; &lt;br /&gt;
&amp;lt;p&amp;gt;Establishes a User Language connection to a &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; ONLINE running in a separate region. &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;
  &lt;br /&gt;
===Operating systems===&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; uses the same basic system architecture, file architecture, and User Language with each compatible operating system. Unique system characteristics that must be considered when running &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; are discussed, where appropriate, throughout this manual.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; is compatible with all versions of z/OS, z/VM, and z/VSE currently supported by IBM. For details, see [[Model 204 system requirements]].&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;p&amp;gt;The &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; ONLINE configurations for each operating system are explained in detail in the appropriate Rocket &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; Installation Guides. Refer also to [[Defining the runtime environment (CCAIN)]], [[Defining the user environment (CCAIN)]], and [[Controlling system operations (CCAIN)]] for information on system and user commands and parameters.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Operating environments== &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; runs in an IBM mainframe environment with z/OS, z/VM, and z/VSE operating systems.    &amp;lt;/p&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
===CPU===&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; runs on all mainframes that support z/Architecture principles of operations. Mainframes with ESA/390 architecture are supported from 9672 RA4 (Generation 3) and Multiprize 2000 and up.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;p&amp;gt;MP/204 is an optional enhancement to &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; that provides full support for multiprocessor hardware configurations under z/OS.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;p&amp;gt;31-bit addressing is also supported in all operating environments. When running in 31-bit mode, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; allocates several data structures above the 16-megabyte line.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; supports 64-bit real storage and captured UCB allocated above the 16-megabyte line for z/OS and z/VM operating systems.&amp;lt;/p&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
===Direct Access Storage Devices (DASD)=== &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; supports the devices listed in this table:&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;caption&amp;gt;DASD device types&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;lt;p&amp;gt;Type&amp;lt;/p&amp;gt;&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;&amp;lt;p&amp;gt;Model&amp;lt;/p&amp;gt;&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; &lt;br /&gt;
&amp;lt;p&amp;gt;CKD&amp;lt;/p&amp;gt;&lt;br /&gt;
 &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; &lt;br /&gt;
&amp;lt;p&amp;gt;3380, 3390&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; &lt;br /&gt;
&amp;lt;p&amp;gt;ECKD&amp;lt;/p&amp;gt;&lt;br /&gt;
 &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; &lt;br /&gt;
&amp;lt;p&amp;gt;9345&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; &lt;br /&gt;
&amp;lt;p&amp;gt;FBA&amp;lt;/p&amp;gt;&lt;br /&gt;
 &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; &lt;br /&gt;
&amp;lt;p&amp;gt;337x, 9332, 9335&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;
&lt;br /&gt;
===Shared DASD and Global Resource Serialization===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
A shared DASD environment is one in which disk volumes may be shared between operating systems. &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; is supported under the three IBM operating systems: z/OS, z/VM, and z/VSE. A number of customers run &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt;, concurrently, under at least two of those three systems.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;p&amp;gt;Many customers run &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; in the z/OS LPAR (Logical PARtition) environment where different versions of z/OS share disk volumes. In these systems, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; jobs, ONLINE or BATCH, may be running concurrently in any of the defined LPARs and may be sharing disk volumes between those LPARs.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; file integrity in these multi-operating-system environments has always been provided through the Shared DASD Enqueue list, stored and maintained in the File Parameter List (FPL) page of each &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; file. Maintaining the Shared DASD Enqueue list, and therefore file integrity in a multi-operating-system environment, is totally dependent on the use of the device &amp;lt;code&amp;gt;RESERVE&amp;lt;/code&amp;gt; macro. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;p&amp;gt;The &amp;lt;code&amp;gt;RESERVE&amp;lt;/code&amp;gt; macro provides exclusive access to a device. Therefore, any &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; job running under any operating system will have exclusive access to a &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; file during file open. File open is the event that adds, updates, or removes entries in the SHARED DASD ENQUEUE list. These entries indicate which &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; job, virtual machine, or partition has the file open and whether that instance of &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; has share (read-only) or exclusive (update) access to the file. You can display these entries using the following command:&amp;lt;/p&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;ENQCTL &amp;lt;i&amp;gt;filename&amp;lt;/i&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;p&amp;gt;It is therefore critical for &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; file integrity that the device &amp;lt;code&amp;gt;RESERVE&amp;lt;/code&amp;gt; macro be allowed to function on all devices shared in a multi-operating-system environment where &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; jobs might run.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===ENQCTL command enhanced=== &lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The &amp;lt;var&amp;gt;[[ENQCTL command|ENQCTL]]&amp;lt;/var&amp;gt; command lists all entries in the shared DASD enqueue list that reside in a file&#039;s File Parameter List (FPL) &amp;amp;mdash; more than the previous maximum of eight entries. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;p&amp;gt;Also, formerly when a file could not be opened due to shared DASD enqueueing conflicts, a maximum of eight entries was listed using the &amp;lt;code&amp;gt;M204.0582&amp;lt;/code&amp;gt; message number. With the enhancement to the &amp;lt;var&amp;gt;ENQCTL&amp;lt;/var&amp;gt; command the &amp;lt;code&amp;gt;M204.0582&amp;lt;/code&amp;gt; message is issued as many times as necessary.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Cautions using Global Resource Serialization===&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;p&amp;gt;The IBM Global Resource Serialization (GRS) feature available under z/OS may be configured to suppress the use of the device RESERVE macro. If this suppression is enabled, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; file integrity cannot be guaranteed and data will become corrupted.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;p&amp;gt;For this reason, it is imperative that the GRS Resource Name List (RNL) be configured to allow the RESERVE macro to be passed, in the channel program constructed by &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt;, to any device where a &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; file is allocated in a shared DASD environment. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;p&amp;gt;For additional information regarding &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; files and shared DASD, please see:&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;[[ENQCTL command|ENQCTL]]&amp;lt;/var&amp;gt; command for shared DASD enqueue control&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;[[Defining the runtime environment (CCAIN)#Shared DASD locking conflicts|Shared DASD locking conflicts]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;[[Using the system scratch file (CCATEMP)#CCATEMP in system recovery|CCATEMP in system recovery]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
==64-bit architecture support==&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; runs in 64-bit mode on z/OS and z/VM systems.&amp;lt;/p&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
===Understanding above the bar storage=== &lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
In 64-bit mode z/OS and z/VM may create a region that has storage above the 2-gigabyte line called the bar. Address spaces with above the bar storage consist of three areas:&amp;lt;/p&amp;gt;&lt;br /&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; &lt;br /&gt;
&amp;lt;p&amp;gt;Storage location &amp;lt;/p&amp;gt;&lt;br /&gt;
 &amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt; &lt;br /&gt;
&amp;lt;p&amp;gt;Used for...&amp;lt;/p&amp;gt;&lt;br /&gt;
 &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; &lt;br /&gt;
&amp;lt;p&amp;gt;In 0-2 gigabyte range &amp;lt;/p&amp;gt;&lt;br /&gt;
 &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; &lt;br /&gt;
&amp;lt;p&amp;gt;Programs and data&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; &lt;br /&gt;
&amp;lt;p&amp;gt;Above 4 gigabytes&amp;lt;/p&amp;gt;&lt;br /&gt;
 &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; &lt;br /&gt;
&amp;lt;p&amp;gt;Data only&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; &lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;b&amp;gt;Note:&amp;lt;/b&amp;gt; In 2-4 gigabyte range&amp;lt;/p&amp;gt;&lt;br /&gt;
 &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; &lt;br /&gt;
&amp;lt;p&amp;gt;Unavailable for any purpose&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;
&lt;br /&gt;
===Set the IBM MEMLIMIT system option===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
To implement above the bar storage IBM requires that you set a limit on how much of that virtual storage each address space can use. This limit is called &amp;lt;code&amp;gt;MEMLIMIT&amp;lt;/code&amp;gt;. If you do not set MEMLIMIT, the system default is 0, meaning no address space can use above the bar virtual storage. To allocate &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; data structures such as buffer pool above the bar, MEMLIMIT should be properly set when running this release.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;p&amp;gt;IBM provides several options to override the system default. Use one of the following options when you install and run &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;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SMF MEMLIMIT parameter&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;MEMLIMIT on JOB and EXEC statement&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;MEMLIMIT environment through IEFUSI&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;p&amp;gt;z/OS customers running on z/OS 1.10 and later are afforded a default of 2 Gigabytes of above the bar storage per address space, replacing the previous default of 0 Gigabytes. Thus customers running on this operating system level do &amp;lt;i&amp;gt;not&amp;lt;/i&amp;gt; need to set MEMLIMIT or &amp;lt;code&amp;gt;REGION=0M&amp;lt;/code&amp;gt; to acquire above the bar storage.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;p&amp;gt;Refer to IBM documentation about MEMLIMIT and limiting above the bar storage use in z/Architecture to implement the option that best meets your site requirements.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;p&amp;gt;The use of real storage below the 2-gigabyte address is not controlled by MEMLIMIT. Only the amount of virtual storage is controlled by MEMLIMIT.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Model 204 entities in above the bar storage===&lt;br /&gt;
&amp;lt;p&amp;gt;The following &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; entities can be accessed directly in above the bar storage:&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Pages from Tables A, B, E, and X &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt; Index, procedure, and existence bit map pages from Table D&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt; CCATEMP pages with found sets, screens and images, and transaction backout log&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt; NUMBUFG number of ATB buffers&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt; Saved compiled APSY procedures&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt; CCASERVR for swapped out users&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt; FTBL (as of version 7.4)&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt; GTBL, NTBL, QTBL (as of version 7.5)&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt; RTBL, KTBL, STBL, VTBL, XTBL, ITBL, FSCB, TTBL, HTBFRS (as of version 7.6)&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Handling 64-bit statistics===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
To support very long running &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; regions, Rocket Software has modified the capacity of statistical counters by increasing the size of some statistics and also exploiting 64-bit processing where appropriate. For any in-house or third-party support applications that process statistical counters, you will need to review the statistics generated.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;p&amp;gt;As some of the statistics fields are now double words, check [[Using system statistics]] for the new layout of the System, Final, and Partial statistics. Also, additional Disk Buffer Monitor, MP/204, and File statistics have been updated.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;p&amp;gt;Look at your in-house or third-party support applications to see if you need to make changes because of the increased length of some of the statistics. Make any changes necessary to your applications, then reassemble with this new release.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;p&amp;gt;Even if your in-house or third-party support applications do not refer to any of these double word statistics, you must reassemble your applications since all statistics offsets have changed.&amp;lt;/p&amp;gt;  &lt;br /&gt;
 &lt;br /&gt;
==Model 204 storage==&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; program acquires all its working storage space dynamically. Working storage includes server areas, resource locking tables, buffer space, and control blocks.&amp;lt;/p&amp;gt; &lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The region or partition in which &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; runs must be large enough to contain the &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; code and the dynamically acquired working storage space.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Information about tracking dynamic storage allocation is provided in [[Performance monitoring and&lt;br /&gt;
tuning]].&amp;lt;/p&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
===z/VSE storage considerations=== &lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The following considerations apply to a z/VSE environment: &amp;lt;/p&amp;gt;&lt;br /&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; allocates storage in the partition GETVIS area. &lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When running in z/VSE, the partition must be large enough to hold the executable phase (program) and have enough GETVIS area for &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; to allocate working storage.&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt; If the JCL EXEC statement &amp;lt;code&amp;gt;SIZE&amp;lt;/code&amp;gt; parameter is missing, the size of the GETVIS area is equal to the default size (48K, unless defined in the IPL procedures).&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt; If there is insufficient storage, the SIZE parameter should specify partition space approximately equal to the program size, leaving a small (not less than 48K for z/VSE) partition GETVIS area.  &lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
In the case of an ONLINE system or an IFAM1 job, 48K of GETVIS area is not enough for an efficient system.&amp;lt;/p&amp;gt; &lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The SIZE parameter is strongly recommended for an ONLINE environment.&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 SIZE parameter is required when using IFAM1. If a PL/I Host Language program is used, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; must take its dynamic storage from the partition GETVIS area through a SIZE parameter specification. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===CMS disk considerations=== &lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Native CMS versions of &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; support files on variable-format disks and CMS-format disks. The disks can be partial- or full-volume minidisks, or dedicated volumes.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;p&amp;gt;File location on the disks affects performance. Put all &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; files on variable-format disks for optimum access and performance.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Use variable-format disks for files that experience high levels of activity. The &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; CMS interface supports asynchronous I/O operations through SIO-level logic and associated interrupt handling facilities. As a result, significant overlap between I/O and processing is achieved when variable-format disks are used.&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;p&amp;gt;Files on variable-format disks must be preallocated. A primary allocation is required. Secondary extents can be specified to permit limited extension of the file. File allocation information is recorded in the Volume Table Of Contents (VTOC).&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt; CMS-format disks affect performance by increasing I/O service time.     &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt; Additional arm motion and rotational delay caused by logical blocks of data spanning multiple physical blocks on a CMS-format disk extend the duration of I/O operations.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt; Synchronous DASD I/O operations (suspension of the virtual machine until the I/O operation completes) increase I/O service time. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;p&amp;gt;Files on CMS-format disks do not require preallocation. Files increase dynamically as data is added, and are restricted in size only by the space available on the minidisk. New files are created automatically the first time they are referenced. Each CMS-formatted minidisk has its own Master File Directory (MFD) that contains allocation information for each file. When all the files are closed, the MFD maintained in virtual storage is transferred to disk. The CMS volume on which files exist is recorded in the MFD.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Related Rocket Software products==&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;p&amp;gt;As the &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; system manager, you might be required to manage the following Rocket Software products, which can access &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; data.&amp;lt;/p&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
===Analytics/204===&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;p&amp;gt;Analytics/204 is a PC-based visual data analysis tool that helps business users get to know their data, access their data, and trust their data, and without the need for IT assistance. Working in a Windows-based point-and-click environment, business users are able to:&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Acquire a better understanding of the data, &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt; Create subsets or segments of the data for targeted analytical or operational purposes, and &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt; Display or export the data in whatever format is required for maximum decision-making. &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;Connect* and Horizon&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&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; and Horizon===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Connect&amp;lt;span class=&amp;quot;superstar&amp;quot;&amp;gt;&amp;amp;#9733;&amp;lt;/span&amp;gt; offers a client/server environment. On the client side, people use the PC software already familiar to them. On the server side is &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt;, ensuring high-performance database management. Connect&amp;lt;span class=&amp;quot;superstar&amp;quot;&amp;gt;&amp;amp;#9733;&amp;lt;/span&amp;gt; unites the two through SQL. Alternatively, using Rocket Software&#039;s Remote Command Line facility, desktop applications can access &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; data through Rocket Software&#039;s [[SOUL]] language.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===JDBC for Model 204=== &lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The JCBC for &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; product enables you to access &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; using the Java language. JDBC for &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; specifically supports Connect&amp;lt;var&amp;gt; &amp;amp;#xF0A9;&amp;lt;/var&amp;gt; .&amp;lt;/p&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
===MP/204=== &lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
[[Performance monitoring and tuning#Multiprocessing (MP/204)|MP/204]] enables a single copy of &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; to leverage multiprocessing configurations on IBM or compatible mainframes running z/OS/XA or z/OS/ESA. The result: significant performance enhancements in both system throughput and response times by utilizing parallel CPU processing.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===MQ/204=== &lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
MQ/204 provides SOUL extensions to manipulate MQSeries message queues and receive and send data throughout your enterprise. Application developers are increasingly turning to Message Queuing Middleware (MQM) for program-to-program communication. MQM is especially useful for supporting applications that are distributed across different platforms and have only intermittent or long-distance network connections between them.&amp;lt;/p&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
===Parallel Query Option/204===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
With Parallel Query Option/204 (PQO) you can raise the performance of &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; by a factor of two, three, four or more. PQO lets you break up massive queries into smaller pieces, which are then searched and sorted simultaneously in parallel. PQO finds answers faster because the requests access smaller sets of data. Requesters get their answers sooner and other users&#039; queries don&#039;t wait as long in the queue. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can share data between production, test, and historical data regions. You can access &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; data residing on one region from any number of other &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; regions. Furthermore, PQO lets you distribute &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; regions within the same machine, on different machines, or across different IBM operating systems.&amp;lt;/p&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
[[Category:System management]]&lt;br /&gt;
[[Category:Model 204 operational issues]]&lt;/div&gt;</summary>
		<author><name>Mlarocca</name></author>
	</entry>
	<entry>
		<id>https://m204wiki.rocketsoftware.com/index.php?title=SoftSpy_installation_guide&amp;diff=83916</id>
		<title>SoftSpy installation guide</title>
		<link rel="alternate" type="text/html" href="https://m204wiki.rocketsoftware.com/index.php?title=SoftSpy_installation_guide&amp;diff=83916"/>
		<updated>2016-04-28T19:39:31Z</updated>

		<summary type="html">&lt;p&gt;Mlarocca: /* Set the Authorized Product Configuration */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p &amp;gt;This page provides installation instructions for the&lt;br /&gt;
following products: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SoftSpy for &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;#160;204&amp;lt;/var&amp;gt;, Version 7, Release 5.0 or Release 4.0&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;MUSE for &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;#160;204&amp;lt;/var&amp;gt;, Version 7, Release 5.0 or Release 4.0&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
Version 7 Release 5.0 of these products supports &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model 204&amp;lt;/var&amp;gt; Version 7 Release 5.0 and Model 204 Version 7 Release 4.0.&amp;lt;br /&amp;gt;&lt;br /&gt;
Version 7 Release 4.0 of these products supports &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model 204&amp;lt;/var&amp;gt; Version 7 Release 4.0.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;SoftSpy provides debugging features to help you develop, test, and maintain User Language applications. Add-on features include interactive debugging, performance tuning, quality assurance testing, and error audit options.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;MUSE is a multi-use facility based on the &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;#160;204&amp;lt;/var&amp;gt; USE&lt;br /&gt;
command.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;Installation of SoftSpy should be done by the organization responsible for the installation and maintenance of &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;#160;204&amp;lt;/var&amp;gt;.  When performing the installation, you should have a copy of the Rocket &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;#160;204&amp;lt;/var&amp;gt; Installation Guide for your operating system. You should review all relevant sections of these pages before proceeding with the installation.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;When you have completed the installation instructions detailed in this document, SoftSpy and MUSE will be installed. To install SoftSpy and MUSE in additional ONLINE or BATCH204 jobs, refer to [[#Additional_Installations|Additional Installations.]]&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Overview of Installation===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;SoftSpy consists of &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;#160;204&amp;lt;/var&amp;gt; nucleus extensions and Model&lt;br /&gt;
204 User Language procedures.  The SoftSpy installation process installs the&lt;br /&gt;
User Language procedures, and it modifies your &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;#160;204&amp;lt;/var&amp;gt; systems to make SoftSpy available for use.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;This installation guide is organized into sections that provide instructions for each operating system, followed by sections that provide instructions common to all operating systems. &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;The operating-system-specific topics (z/OS, z/VM, or z/VSE) describe:&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt;Prerequisite &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;#160;204&amp;lt;/var&amp;gt; installation steps&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt;Allocation of SoftSpy files&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt;Required DD/DLBL/FILEDEF statements for SoftSpy files&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;Common installation sections are:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&amp;lt;li&amp;gt;[[#Updating_CCAIN|Updating CCAIN]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[[#Online installation steps|Online installation steps]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[[#Verifying the installation|Verifying the installation]] &amp;lt;/li&amp;gt;&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===SoftSpy and Model 204 version 7.4===&lt;br /&gt;
It is recommended that you install the SoftSpy version 7.5 SPYPROC file, because it is more robust than the 7.4 version. &lt;br /&gt;
&lt;br /&gt;
The SoftSpy SOUL code (SPYPROC file) for 7.5 is compatible with Model 204 versions 7.4 and 7.5. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;If you are currently running SoftSpy version 7.4 with Model 204 version 7.4, you can upgrade to SoftSpy 7.5 by downloading the SPYPROC file. (See the section &amp;quot;Downloading and installing SoftSpy 7.5 files&amp;quot; for your operating system later on this page.)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;If you are installing SoftSpy for the first time with Model 204 version 7.4, you must install the SoftSpy object as described in [[SoftSpy version 7.4 installation files]] before downloading the 7.5 SPYPROC file.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Installation on IBM z/OS==&lt;br /&gt;
&lt;br /&gt;
This section describes the SoftSpy installation steps that are specific to the IBM z/OS operating system.  &lt;br /&gt;
&lt;br /&gt;
Complete the z/OS-specific part of the installation process before performing the installation steps in the following sections, which apply to all operating system environments:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt;Update CCAIN&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt;Online Installation Steps&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt;Verify the Installation&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
===Prerequisite: Installing Model&amp;amp;#160;204===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p &amp;gt;Before installing this version of SoftSpy, you must have completed these &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;#160;204&amp;lt;/var&amp;gt; installation steps:&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt;Install &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;#160;204&amp;lt;/var&amp;gt; nucleus&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt;Install Dictionary/204&amp;lt;/li&amp;gt;&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For details about Model 204 version 7.5, see [[Upgrading to Model 204 version 7.5 on IBM z/OS]].&lt;br /&gt;
&lt;br /&gt;
For details about Model 204 version 7.4, see the &amp;lt;var class=&amp;quot;book&amp;quot;&amp;gt;[http://m204wiki.rocketsoftware.com/images/d/de/M204_V7R4_zOS_Install.pdf Rocket Model 204 Installation Guide for IBM z/OS, version 7.4]&amp;lt;/var&amp;gt;. &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;&amp;lt;li&amp;gt;When you link-edit the Model 204 nucleus, ensure that the SSPY and MUSE text decks/CSECTs are linked in.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;If you are running Model 204 version 7.4 and you have never installed SoftSpy before, you must [[SoftSpy version 7.4 installation files|install SoftSpy version 7.4]] before upgrading to SoftSpy version 7.5.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Backing up data===&lt;br /&gt;
&lt;br /&gt;
If you are upgrading from a previous version of SoftSpy, it is strongly recommended that you make a backup copy of your existing SPYPROC and SPYDATA files before proceeding. The upgrade process modifies these files, so a backup copy is required if you need to revert to the previous version.&lt;br /&gt;
&lt;br /&gt;
===Downloading and installing SoftSpy 7.5 files on z/OS===&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; You must have either a [[Rocket M204 user ID]] or a Sirius user ID to download the installation files.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To install the SoftSpy 7.5 files:&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;If you have not previously installed SoftSpy, modify and submit the modify the [[SoftSpy SPYALOC job stream|SPYALOC]] JCL job. This job allocates the &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;#160;204&amp;lt;/var&amp;gt; SoftSpy data sets SPYPROC, SPYDATA, and SPYTEMP. The following table shows space requirements for these data sets:&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;b&amp;gt;Database Name&amp;lt;/b&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;&amp;lt;b&amp;gt;Number of 6184-byte pages&amp;lt;/b&amp;gt;&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;SPYPROC&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;1000&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;SPYDATA&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td &amp;gt;160&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;SPYTEMP&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;td&amp;gt;112&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;li&amp;gt;SPYPROC, the SoftSpy procedure file, is distributed in a dump format. Download SPYPROC, in binary form, from the [https://m204.rocketsoftware.com/maint/ullist?nickname=ROCKET SOUL files download page] to a workstation file.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Upload the file from your workstation to your z/OS system.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;RESTORE the file into a Model 204 SOUL file.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===z/OS installation next steps===&lt;br /&gt;
The steps in this section apply to both SoftSpy 7.4 and SoftSpy 7.5 installation on z/OS systems. &lt;br /&gt;
&amp;lt;p&amp;gt;Once you have uploaded the files into the allocated data sets and converted them to z/OS standard format, continue the installation as follows.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Modify the ONLINE startup JCL.&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;If you are installing SoftSpy for the first time, add DD statements for the SPYDUMP, SPYPROC, SPYDATA, and SPYTEMP data sets to your ONLINE startup JCL. &lt;br /&gt;
&amp;lt;p&amp;gt;Following are samples of these statements:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p span class=&amp;quot;code&amp;quot;&amp;gt;//SPYDUMP DD DSN=SYSM.M204.V&amp;lt;i&amp;gt;rrr&amp;lt;/i&amp;gt;.SPYPROC.DUMP,DISP=SHR&lt;br /&gt;
//SPYPROC DD DSN=SYSM.M204.V&amp;lt;i&amp;gt;rrr&amp;lt;/i&amp;gt;.SPYPROC.M204,DISP=SHR&lt;br /&gt;
//SPYDATA DD DSN=SYSM.M204.SPYDATA.M204,DISP=SHR&lt;br /&gt;
//SPYTEMP DD DSN=SYSM.M204.SPYTEMP.M204,DISP=SHR&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
where &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;rrr&amp;lt;/var&amp;gt; is the current release level, such as 750 or 740.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For SoftSpy version 7.4, you will also need to add a DD statement for the ITSAUTH data set:&lt;br /&gt;
&amp;lt;p span class=&amp;quot;code&amp;quot;&amp;gt;//ITSAUTH DD DSN=SYSM.M204.ITSAUTH.M204,DISP=SHR&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;If you are upgrading from a previous version of SoftSpy, you only need to add DD statements for SPYDUMP and SPYPROC.  The DD statements for SPYDATA, SPYTEMP, and ITSAUTH should already be present.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&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; The SPYDUMP DD is only necessary to perform the installation and can be removed afterward. &amp;lt;br /&amp;gt;For 7.5, the ITSAUTH DD can be removed.&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Make sure that the SYSOPT (system options) X&#039;04&#039; bit is off. This setting indicates that &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;#160;204&amp;lt;/var&amp;gt; data definition commands can only be executed from within the File Management Facility of Dictionary/204. (This facility is not used to&lt;br /&gt;
create and format the SPYDATA and SPYTEMP files and their fields as documented in [[#Online_Installation_Steps|Online installation steps]].) Normal SoftSpy&lt;br /&gt;
operation is not affected by the SYSOPT X&#039;04&#039; bit setting.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Continue the installation as described in [[#Updating CCAIN|Updating CCAIN.]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Installation on IBM z/VM==&lt;br /&gt;
&lt;br /&gt;
This section describes the SoftSpy installation steps that are specific to the z/VM operating system. &lt;br /&gt;
&lt;br /&gt;
Complete this part of the installation process before performing the installation steps in these sections, which apply to all operating system environments:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Updating CCAIN&amp;lt;/li&amp;gt; &lt;br /&gt;
&amp;lt;li&amp;gt;Online Installation Steps&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Verify the Installation&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Prerequisite: Installing Model&amp;amp;#160;204===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p &amp;gt;Before installing this version of SoftSpy, you must have completed these &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;#160;204&amp;lt;/var&amp;gt; installation steps:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt;Install the &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;#160;204&amp;lt;/var&amp;gt; nucleus. &amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt;Install Dictionary/204.&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For details about Model 204 version 7.5, see the Model 204 z/VM installation instructions in [[Upgrading to Model 204 version 7.5 on IBM z/VM CMS]].&lt;br /&gt;
&lt;br /&gt;
For details about Model 204 version 7.4, see the &amp;lt;var class=&amp;quot;book&amp;quot;&amp;gt;[http://docs.rocketsoftware.com/nxt/gateway.dll/RKBnew556%2Fmodel%20204%2Fprevious%20versions%2Fv7.4%2Fm204_installzvm_v74.pdf Rocket Model 204 Installation Guide for IBM z/VM, version 7.4]&amp;lt;/var&amp;gt;&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;&amp;lt;li&amp;gt;When you link-edit the Model 204 nucleus, ensure that the SSPY and MUSE text decks/CSECTs are linked in.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;If you are running Model 204 version 7.4 and you have never installed SoftSpy before, you must [[SoftSpy version 7.4 installation files|install SoftSpy version 7.4]] before upgrading to SoftSpy version 7.5.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Backing up data===&lt;br /&gt;
If you are upgrading from a previous version of SoftSpy, it is strongly recommended that you make a backup copy of your existing SPYPROC and SPYDATA files before proceeding. The upgrade process modifies these files, so a backup copy is required if you need to revert to the previous version.&lt;br /&gt;
===Downloading and installing SoftSpy 7.5 files on z/VM===&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; You must have either a [[Rocket M204 user ID]] or a Sirius user ID to download the installation files.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;To install the SoftSpy version 7.5 files:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SPYPROC, the SoftSpy procedure file, is distributed in a dump format. Download SPYPROC, in binary form, from the [https://m204.rocketsoftware.com/maint/ullist?nickname=ROCKET SOUL files download page] to a workstation file.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Upload the file from your workstation to your z/VM system.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;RESTORE the file into a Model 204 SOUL file.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===z/VM installation next steps===&lt;br /&gt;
The steps in this section apply to both SoftSpy 7.4 and SoftSpy 7.5 installation on z/VM systems.&lt;br /&gt;
  &amp;lt;ol&amp;gt;&lt;br /&gt;
     &amp;lt;li&amp;gt;Run M204GEN to generate modules and saved segments, as you did when installing the &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;#160;204&amp;lt;/var&amp;gt; nucleus. For information, syntax, and rules for M204GEN, see the “M204GEN Command” section in the &amp;lt;var class=&amp;quot;book&amp;quot;&amp;gt;[http://docs.rocketsoftware.com/nxt/gateway.dll/RKBnew556%2Fmodel%20204%2Fprevious%20versions%2Fv7.4%2Fm204_installzvm_v74.pdf Rocket Model 204 Installation Guide for IBM z/VM, version 7.4]&amp;lt;/var&amp;gt;.&amp;lt;/li&amp;gt;&lt;br /&gt;
     &amp;lt;li&amp;gt;Reapply all early warnings. For information, see the “Applying early warnings” section in the &amp;lt;var class=&amp;quot;book&amp;quot;&amp;gt;Rocket Model 204 Installation Guide for IBM z/VM, version 7.4&amp;lt;/var&amp;gt;.&amp;lt;/li&amp;gt;&lt;br /&gt;
     &amp;lt;li&amp;gt;If the SPYPROC, SPYTEMP, and SPYDATA database files will reside on an OS format disk, allocate them at this time.  If you are upgrading from a previous version of SoftSpy, you only need to allocate the SPYPROC database file.&lt;br /&gt;
         &amp;lt;ol style=&amp;quot;list-style-type:lower-alpha&amp;quot;&amp;gt;&lt;br /&gt;
	   &amp;lt;li&amp;gt;SSPYFDEF is an exec that defines SoftSpy database files. SSPYFDEF resides on the MAINT204 193 disk. Edit SSPYFDEF to conform to your disk naming and file placement conventions. The following table shows space requirements:&amp;lt;/li&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;b&amp;gt;Database Name&amp;lt;/b&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;b&amp;gt;Number of 6184 byte pages&amp;lt;/b&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;b&amp;gt;Number of blocks on FBA devices&amp;lt;/b&amp;gt;&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;SPYPROC&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;1000&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;12500&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;SPYDATA&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;160&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;2133&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;SPYTEMP&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;112&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;1500&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;To allocate SoftSpy files on OS format disks, type:&lt;br /&gt;
	&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;EXEC SSPYFDEF ALOCSSPY&amp;lt;/p&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;
     &amp;lt;li&amp;gt;&amp;lt;b&amp;gt;7.4 only:&amp;lt;/b&amp;gt; If the ITSAUTH data set will reside on an OS format minidisk, allocate it at this time.&lt;br /&gt;
        &amp;lt;p&amp;gt;ITSAUTH is a sequential file that contains authorization data and must be allocated to any job that uses SoftSpy with a DD name of ITSAUTH.  ITSAUTH is 1 track in size and consists of fixed length 256 byte records.  If the ITSAUTH stream will be on a CMS mini-disk, it does not have to be preallocated. On an OS format minidisk, allocate 8 blocks on FBA devices.&amp;lt;/p&amp;gt;&lt;br /&gt;
	&amp;lt;/li&amp;gt;&lt;br /&gt;
     &amp;lt;li&amp;gt;Modify the ONLINE Startup EXEC. &amp;lt;b&amp;gt;Note:&amp;lt;/b&amp;gt; ITSAUTH applies to version 7.4 only.&lt;br /&gt;
	&amp;lt;ul&amp;gt;&lt;br /&gt;
	  &amp;lt;li&amp;gt;If you are installing SoftSpy for the first time, add FILEDEFs for the SPYDUMP, SPYPROC, SPYDATA, SPYTEMP, and ITSAUTH data sets to your&lt;br /&gt;
ONLINE startup JCL.  Samples of these FILEDEFs are:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;FILEDEF SPYPROC DISK SPYPROC DBV&amp;lt;i&amp;gt;rrr&amp;lt;/i&amp;gt; &amp;lt;i&amp;gt;filemode&amp;lt;/i&amp;gt;&lt;br /&gt;
FILEDEF SPYDUMP DISK SPYPROC DUMP *&lt;br /&gt;
FILEDEF SPYDATA DISK SPYDATA DATABASE &amp;lt;i&amp;gt;filemode&amp;lt;/i&amp;gt;&lt;br /&gt;
FILEDEF SPYTEMP DISK SPYTEMP DATABASE &amp;lt;i&amp;gt;filemode&amp;lt;/i&amp;gt;&lt;br /&gt;
FILEDEF ITSAUTH DISK ITSAUTH DATA &amp;lt;i&amp;gt;filemode&amp;lt;/i&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p &amp;gt;where &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;rrr&amp;lt;/var&amp;gt; is the current release level, such as 750 or 740.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;If the SoftSpy files are on OS format disks, use FILEDEFs of the following format:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;FILEDEF SPYPROC &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;filemode&amp;lt;/var&amp;gt; DSN SPYPROC DBV&amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;rrr&amp;lt;/var&amp;gt; M204&lt;br /&gt;
FILEDEF SPYDUMP DISK SPYPROC DUMP *&lt;br /&gt;
FILEDEF SPYDATA &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;filemode&amp;lt;/var&amp;gt; DSN SPYDATA M204&lt;br /&gt;
FILEDEF SPYTEMP &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;filemode&amp;lt;/var&amp;gt; DSN SPYTEMP M204&lt;br /&gt;
FILEDEF ITSAUTH &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;filemode&amp;lt;/var&amp;gt; DSN ITSAUTH DATA&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;where &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;rrr&amp;lt;/var&amp;gt; is the current release level, such as 750 or 740.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The installation process placed SPYDUMP on the MAINT204 200 disk. Use this dump of SPYPROC for the restore during the installation&lt;br /&gt;
process.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;If you are upgrading from a previous version of SoftSpy, you only need to add FILEDEFs for SPYDUMP and SPYPROC.  The FILEDEFs for SPYDATA,&lt;br /&gt;
SPYTEMP, and ITSAUTH should already be present.&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;Note:&amp;lt;/b&amp;gt; The SPYDUMP FILEDEF is only necessary to perform the installation and can be removed afterward.&amp;lt;/p&amp;gt;	&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Make sure that the SYSOPT (system options) X&#039;04&#039; bit is off.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;This setting indicates that &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;#160;204&amp;lt;/var&amp;gt; data definition commands can only be executed from within the File Management Facility of Dictionary/204. (This facility is not used to create and format the SPYDATA and SPYTEMP files and their fields as documented in [[#Online installation steps|Online installation steps]].) Normal SoftSpy operation is not affected by the SYSOPT X&#039;04&#039; bit setting.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Continue the installation as described in [[#Updating_CCAIN|Updating CCAIN.]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Installation on IBM z/VSE==&lt;br /&gt;
&lt;br /&gt;
This section describes the SoftSpy installation steps that are specific to the z/VSE operating system. &lt;br /&gt;
&lt;br /&gt;
Complete this part of the installation process before performing the installation steps in the following sections, which apply to all operating system environments:&lt;br /&gt;
&amp;lt;ul&amp;gt;&amp;lt;li&amp;gt;Updating CCAIN&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Online Installation Steps&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Verify the Installation&amp;lt;/li&amp;gt;&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Prerequisite: Installing Model&amp;amp;#160;204===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;Before installing this version of SoftSpy, you must have completed these &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;#160;204&amp;lt;/var&amp;gt; installation steps:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Install &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;#160;204&amp;lt;/var&amp;gt; nucleus&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Install Dictionary/204&amp;lt;/li&amp;gt;&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For details about Model 204 version 7.5, see [[Upgrading to Model 204 version 7.5 on IBM z/VSE]].&lt;br /&gt;
&lt;br /&gt;
For details about Model 204 version 7.4, refer to the &amp;lt;var class=&amp;quot;book&amp;quot;&amp;gt;[http://docs.rocketsoftware.com/nxt/gateway.dll/RKBnew556%2Fmodel%20204%2Fprevious%20versions%2Fv7.4%2Fm204_installzvse_v74.pdf Rocket Model 204 Installation Guide for IBM z/VSE, version 7.4]&amp;lt;/var&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; &lt;br /&gt;
&amp;lt;ul&amp;gt;&amp;lt;li&amp;gt;When you link-edit the Model 204 nucleus, ensure that the SSPY and MUSE text decks/CSECTs are linked in.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;If you are running Model 204 version 7.4 and you have never installed SoftSpy before, you must [[SoftSpy version 7.4 installation files|install SoftSpy version 7.4]] before upgrading to SoftSpy version 7.5.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Backing up data===&lt;br /&gt;
If you are upgrading from a previous version of SoftSpy, it is strongly recommended that you make a backup copy of your existing SPYPROC and SPYDATA files before proceeding. The upgrade process modifies these files, so a backup copy is required if you need to revert to the previous version.&lt;br /&gt;
&lt;br /&gt;
===Downloading and installing SoftSpy 7.5 files on z/VSE===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;This section describes how to download and modify the SoftSpy version 7.5 installation files.&amp;lt;/p&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; You must have either a [[Rocket M204 user ID]] or a Sirius user ID to download the installation files.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;If you have not previously installed SoftSpy, modify and submit the [[SoftSpy SPYALOC job stream|SPYALOC]] JCL job. This job allocates the &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;#160;204&amp;lt;/var&amp;gt; SoftSpy data sets SPYPROC, SPYDATA, and SPYTEMP.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SPYPROC, the SoftSpy procedure file, is distributed in a dump format. Download SPYPROC, in binary form, from the [https://m204.rocketsoftware.com/maint/ullist?nickname=ROCKET SOUL files download page] to a workstation file.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Upload the file from your workstation to your z/VSE system.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;RESTORE the file into a Model 204 SOUL file.&amp;lt;p&amp;gt;For detailed instructions, see [http://m204wiki.rocketsoftware.com/index.php?title=Web_help_download_SOUL_files#How_can_the_dump_file_be_uploaded_to_the_mainframe.3F Downloading and restoring SOUL files].&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Use the information in SPYPROC to determine size requirements for the dump file.&lt;br /&gt;
&amp;lt;br&amp;gt;Rocket Software provides an optional sample batch job, FTPSSPY, to assist in this transfer. FTPSSPY, cataloged in the JCL library in step 4, defines the file names and data set names used in subsequent installation jobs. If you choose to use FTPSSPY, modify this job as noted in its comments and submit it.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;b&amp;gt;Note:&amp;lt;/b&amp;gt; If you make changes to the names in FTPSSPY, you must use those names for all subsequent installation jobs; otherwise those jobs will fail.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Modify and submit [[Model 204 LINKONLN job stream for IBM z/VSE|LINKONLN]] and [[Upgrading to Model 204 version 7.5 on IBM z/VSE#Linking the BATCH204 phase|LINKB204]] to relink your BATCH204 and ONLINE phases.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Complete the installation process as described in the following section.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===z/VSE installation next steps===&lt;br /&gt;
The steps in this section apply to both SoftSpy 7.4 and SoftSpy 7.5 installation on z/VSE systems.&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Allocate the SoftSpy databases and ITSAUTH data set. &amp;lt;b&amp;gt;Note:&amp;lt;/b&amp;gt; ITSAUTH applies to version 7.4 only.&lt;br /&gt;
  &amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;If upgrading from a prior version of SoftSpy, execute the&lt;br /&gt;
[[#SPYRINST JCL|SPYRINST]] job from the JCL library. This job will allocate the new SPYPROC&lt;br /&gt;
file.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
If performing a SoftSpy installation for the first time,&lt;br /&gt;
execute the [[#SPYINST JCL|SPYINST]] job from the JCL library. This job will allocate SPYPROC,&lt;br /&gt;
SPYDATA, SPYTEMP, and ITSAUTH files.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;Database Name&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Number of 6184 byte pages&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Number of blocks on FBA devices&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;SPYPROC&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;1000&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;12500&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;SPYDATA&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;160&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;2133&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;SPYTEMP&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;112&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;1500&amp;lt;/td&amp;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;li&amp;gt;Modify ONLINE Startup JCL.&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;If you are installing SoftSpy for the first time, add DLBL, EXTENT and ASSGN statements for the SPYDUMP, SPYPROC, SPYDATA, SPYTEMP, and ITSAUTH data sets to your ONLINE startup JCL. Following are samples of these statements:&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;// DLBL SPYPROC,&#039;M204.SPYPROC&#039;,,DA&lt;br /&gt;
// EXTENT SYS021,volser&lt;br /&gt;
// ASSGN SYS021,DISK,VOL=volser,SHR&lt;br /&gt;
// DLBL SPYDATA,&#039;M204.SPYDATA&#039;,,DA&lt;br /&gt;
// EXTENT SYS021,volser&lt;br /&gt;
// ASSGN SYS021,DISK,VOL=volser,SHR&lt;br /&gt;
// DLBL SPYTEMP,&#039;M204.SPYTEMP&#039;,,DA&lt;br /&gt;
// EXTENT SYS021,volser&lt;br /&gt;
// ASSGN SYS021,DISK,VOL=volser,SHR&lt;br /&gt;
// DLBL SPYDUMP,&#039;M204.SPYPROC.DUMP&#039;,,DA&lt;br /&gt;
// EXTENT SYS021,volser&lt;br /&gt;
// ASSGN SYS021,DISK,VOL=volser,SHR&lt;br /&gt;
// DLBL ITSAUTH,&#039;M204.ITSAUTH&#039;,,SD&lt;br /&gt;
// EXTENT SYS021,volser&lt;br /&gt;
// ASSGN SYS021,DISK,VOL=volser,SHR&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;If you are upgrading from a previous version of SoftSpy, then you only need to add DLBL, EXTENT and ASSGN statements for SPYDUMP and SPYPROC. &lt;br /&gt;
The DLBL, EXTENT and ASSGN statements for SPYDATA, SPYTEMP, and ITSAUTH should already be present.&amp;lt;/li&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 SPYDUMP DD is only necessary to perform the installation and can be removed afterward.&amp;lt;/p&amp;gt;&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Make sure that the SYSOPT (system options) X&#039;04&#039; bit is off.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
The SYSOPT X&#039;04&#039; bit setting indicates that Model 204 data definition commands can only be executed from within the File Management Facility of Dictionary/204. (This facility is not used to create and format the SPYDATA and SPYTEMP files and their fields as documented in [[#Online installation steps|Online installation steps]].) Normal SoftSpy operation is not affected by the SYSOPT X&#039;04&#039; bit setting.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Continue the installation as described in &amp;quot;Updating CCAIN&amp;quot;.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Updating CCAIN==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p  &amp;gt;This section describes the changes required to the CCAIN&lt;br /&gt;
input stream to install and use SoftSpy. Depending on your situation, the&lt;br /&gt;
following changes might be needed, as described in this section:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Adding IODEV=55 threads&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Adjusting the NUSERS parameter&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Ensuring that a large enough server is available&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Adjusting the LENQTBL parameter&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Adjusting the SPCORE parameter for SoftSpy operation&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Adjusting the SPCORE parameter for MUSE operation&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
===Adding IODEV=55 threads===&lt;br /&gt;
&amp;lt;p  &amp;gt;Every concurrent end user SoftSpy session requires a&lt;br /&gt;
separate SoftSpy server thread. Each IODEV=55 statement that you add to the&lt;br /&gt;
CCAIN input stream will create a distinct SoftSpy server thread. The following&lt;br /&gt;
example illustrates the lines to be added to the CCAIN stream to create three&lt;br /&gt;
SoftSpy servers.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot; &amp;gt;&amp;lt;nowiki&amp;gt;IODEV=55,AUTOSYS=C&#039;&#039;,LIBUFF=255,LOBUFF=255,NORQS=5&lt;br /&gt;
IODEV=55,AUTOSYS=C&#039;&#039;,LIBUFF=255,LOBUFF=255,NORQS=5&lt;br /&gt;
IODEV=55,AUTOSYS=C&#039;&#039;,LIBUFF=255,LOBUFF=255,NORQS=5&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p  &amp;gt;The settings shown for the AUTOSYS and NORQS parameter are&lt;br /&gt;
required for SoftSpy to work properly. The settings shown for LIBUFF and&lt;br /&gt;
LOBUFF are necessary to minimize SoftSpy server table usage.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p  &amp;gt;In order to use SoftSpy from a particular full screen&lt;br /&gt;
thread, the size of the output page buffer (LOUTPB) must match the size of the&lt;br /&gt;
output page buffer of an available SoftSpy server thread. If you use different&lt;br /&gt;
values for LOUTPB for different full screen threads, then you should create&lt;br /&gt;
SoftSpy servers for each distinct value of LOUTPB.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Adjusting the NUSERS parameter===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;The NUSERS parameter needs to be increased by the number of IODEV=55 threads you have added to run SoftSpy servers. An increase in the NUSERS parameter might require a change to the size of the server data set. See the &amp;lt;var class=&amp;quot;book&amp;quot;&amp;gt;Rocket Model 204 System Manager&#039;s Guide&amp;lt;/var&amp;gt; for a complete discussion of server data sets.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Ensuring that a large enough server is available===&lt;br /&gt;
&amp;lt;p  &amp;gt;SoftSpy servers normally use a &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;#160;204&amp;lt;/var&amp;gt; SERVSIZE of&lt;br /&gt;
280,000. However, there are cases where a larger server is required. This is&lt;br /&gt;
because certain server tables whose sizes cannot be reset by SoftSpy contribute&lt;br /&gt;
to overall server size requirements. If the sum of the size of RTBL, LOUTPB,&lt;br /&gt;
and LFTBL exceeds 8,000 then a larger server will be required. The server size&lt;br /&gt;
requirement is increased beyond 280,000 by the amount that the specified sum&lt;br /&gt;
exceeds 8,000. Make sure that at least one in-core server is large enough to&lt;br /&gt;
support this requirement.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;Information about setting LOUTPB is contained in [[#Adding_IODEV.3D55_threads|Adding&lt;br /&gt;
IODEV=55 threads]]. SoftSpy automatically sets LFTBL&lt;br /&gt;
to NGROUP*4 for each of the IODEV=55 threads.  The size of RTBL depends on the&lt;br /&gt;
values of the NGROUP, NFILES, and NRMTFILE parameters.  The size of RTBL is&lt;br /&gt;
usually the most important influence on increased server size requirements.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p  &amp;gt;If the parallel query option of &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;#160;204&amp;lt;/var&amp;gt; is being used then&lt;br /&gt;
the size of RTBL is:&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p   style=&#039;text-indent:.5in&#039;&amp;gt;&amp;lt;span style=&#039;font-size:10.0pt;&lt;br /&gt;
line-height:115%;font-family:&amp;quot;Courier New&amp;quot;&#039;&amp;gt;( NGROUP + 12 ) * ( NFILES +&lt;br /&gt;
NRMTFILE + 3 ) + NRMTFILE + 1 &amp;lt;/span&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p  &amp;gt;Otherwise, the size of RTBL is:&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p   style=&#039;text-indent:.5in&#039;&amp;gt;&amp;lt;span style=&#039;font-size:10.0pt;&lt;br /&gt;
line-height:115%;font-family:&amp;quot;Courier New&amp;quot;&#039;&amp;gt;( NGROUP + 12 ) * ( NFILES + 3 ) &amp;lt;/span&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p  &amp;gt;In either case, the size of RTBL is rounded up to the next&lt;br /&gt;
higher multiple of eight.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Adjusting the LENQTBL parameter===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p  &amp;gt;When SoftSpy servers are run, the LENQTBL parameter might need&lt;br /&gt;
to be increased. The size of the enqueue table is based on the product of&lt;br /&gt;
NUSERS and LENQTBL. When NUSERS is small, the value of LENQTBL might need to&lt;br /&gt;
be set to at least 500.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Adjusting the SPCORE parameter for SoftSpy operation===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p  &amp;gt;The SPCORE parameter specifies the amount of storage to be&lt;br /&gt;
set aside above and below the 16Mb line for operating system and run-time&lt;br /&gt;
dynamic storage requests.  The value of this parameter might need to be&lt;br /&gt;
increased to accommodate the run-time requirements of SoftSpy.  The storage&lt;br /&gt;
required can be calculated with the formulas:&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:SoftSpy_install_SPCORE_formula.jpg|250 px]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p  &amp;gt;where &amp;lt;i&amp;gt;n&amp;lt;/i&amp;gt; is the number of threads running a SoftSpy&lt;br /&gt;
Server, and LOUTPB&amp;lt;i&amp;gt;&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;&amp;lt;/i&amp;gt; is the size of the output page buffer for&lt;br /&gt;
the given server thread.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p  &amp;gt;The additional SPCORE requirement is &amp;lt;i&amp;gt;a&amp;lt;/i&amp;gt;.  The value&lt;br /&gt;
derived for &amp;lt;i&amp;gt;b&amp;lt;/i&amp;gt; represents the amount of storage that is allocated above&lt;br /&gt;
the 16M line and does not impact SPCORE.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p  &amp;gt;To maintain the number of disk buffers, an increase in MVS&lt;br /&gt;
region size, CMS virtual machine size, or VSE partition size might be&lt;br /&gt;
necessary.  If increasing the region size is not viable, you can reduce either the&lt;br /&gt;
number of disk buffers or the number of in-memory servers.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Adjusting the SPCORE parameter for MUSE operation===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p  &amp;gt;When MUSE is in use, additional storage is required.  Although&lt;br /&gt;
SPCORE is not affected, region (or virtual machine) size could be impacted.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p  &amp;gt;The amount of storage needed for MUSE is computed by summing&lt;br /&gt;
the storage requirements of each simultaneous user of MUSE. For each user, the&lt;br /&gt;
amount of storage needed by MUSE is:&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p   style=&#039;text-indent:.5in&#039;&amp;gt;&amp;lt;i&amp;gt;&amp;lt;span style=&#039;font-size:10.0pt;&lt;br /&gt;
line-height:115%;font-family:&amp;quot;Courier New&amp;quot;&#039;&amp;gt;muse_storage&amp;lt;/span&amp;gt;&amp;lt;/i&amp;gt;&amp;lt;span&lt;br /&gt;
style=&#039;font-size:10.0pt;line-height:115%;font-family:&amp;quot;Courier New&amp;quot;&#039;&amp;gt; = &amp;lt;i&amp;gt;header_storage&amp;lt;/i&amp;gt;&lt;br /&gt;
+ &amp;lt;i&amp;gt;max_muse_streams&amp;lt;/i&amp;gt; * ( &amp;lt;i&amp;gt;header_storage&amp;lt;/i&amp;gt; + 1088 )&amp;lt;/span&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p  &amp;gt;where&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p   style=&#039;text-indent:.5in&#039;&amp;gt;&amp;lt;i&amp;gt;&amp;lt;span style=&#039;font-size:10.0pt;&lt;br /&gt;
line-height:115%;font-family:&amp;quot;Courier New&amp;quot;&#039;&amp;gt;header_storage&amp;lt;/span&amp;gt;&amp;lt;/i&amp;gt;&amp;lt;span&lt;br /&gt;
style=&#039;font-size:10.0pt;line-height:115%;font-family:&amp;quot;Courier New&amp;quot;&#039;&amp;gt; = 110 + (&lt;br /&gt;
MAXHDR + MAXTRL ) * ( HTLEN + 5 )&amp;lt;/span&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p  &amp;gt;and &amp;lt;i&amp;gt;max_muse_streams&amp;lt;/i&amp;gt; is the maximum number of MUSE&lt;br /&gt;
output streams (created by MUSE OPEN(C) or USE) that will be open at any given&lt;br /&gt;
time. For example, if&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p   style=&#039;text-indent:.5in&#039;&amp;gt;&amp;lt;i&amp;gt;&amp;lt;span style=&#039;font-size:10.0pt;&lt;br /&gt;
font-family:&amp;quot;Courier New&amp;quot;&#039;&amp;gt;max_muse_streams&amp;lt;/span&amp;gt;&amp;lt;/i&amp;gt;&amp;lt;span style=&#039;font-size:&lt;br /&gt;
10.0pt;font-family:&amp;quot;Courier New&amp;quot;&#039;&amp;gt; = 2&amp;lt;/span&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p   style=&#039;text-indent:.5in&#039;&amp;gt;&amp;lt;span style=&#039;font-size:10.0pt;&lt;br /&gt;
font-family:&amp;quot;Courier New&amp;quot;&#039;&amp;gt;MAXHDR = MAXTRL = 5&amp;lt;/span&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p   style=&#039;text-indent:.5in&#039;&amp;gt;&amp;lt;span style=&#039;font-size:10.0pt;&lt;br /&gt;
font-family:&amp;quot;Courier New&amp;quot;&#039;&amp;gt;HTLEN = 132&amp;lt;/span&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p  &amp;gt;then&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p   style=&#039;text-indent:.5in&#039;&amp;gt;&amp;lt;i&amp;gt;&amp;lt;span style=&#039;font-size:10.0pt;&lt;br /&gt;
font-family:&amp;quot;Courier New&amp;quot;&#039;&amp;gt;header_storage&amp;lt;/span&amp;gt;&amp;lt;/i&amp;gt;&amp;lt;span style=&#039;font-size:&lt;br /&gt;
10.0pt;font-family:&amp;quot;Courier New&amp;quot;&#039;&amp;gt; = 110 + ( 5 + 5 ) * ( 132 + 5 ) = 1480&amp;lt;/span&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p   style=&#039;text-indent:.5in&#039;&amp;gt;&amp;lt;i&amp;gt;&amp;lt;span style=&#039;font-size:10.0pt;&lt;br /&gt;
font-family:&amp;quot;Courier New&amp;quot;&#039;&amp;gt;muse_storage&amp;lt;/span&amp;gt;&amp;lt;/i&amp;gt;&amp;lt;span style=&#039;font-size:10.0pt;&lt;br /&gt;
font-family:&amp;quot;Courier New&amp;quot;&#039;&amp;gt; = 1480 + 2 * ( 1480 + 1088 ) = 6616&amp;lt;/span&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Online installation steps==&lt;br /&gt;
&lt;br /&gt;
This section describes SoftSpy installation steps that are&lt;br /&gt;
performed online from within &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;#160;204&amp;lt;/var&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Requirement:&amp;lt;/b&amp;gt; These steps must be performed using a&lt;br /&gt;
&amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;#160;204&amp;lt;/var&amp;gt; ONLINE that includes the SPYDUMP, SPYPROC, SPYDATA, SPYTEMP, and ITSAUTH data sets described in the installation section for each operating system. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Prerequisite:&amp;lt;/b&amp;gt; The CCAIN input stream for the ONLINE must have been updated as described in [[#Updating_CCAIN| Updating CCAIN]].&lt;br /&gt;
&lt;br /&gt;
Perform the following steps, as described in this section:&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Log on to &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;#160;204&amp;lt;/var&amp;gt;.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Stop the SoftSpy subsystem.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Create and restore the SPYPROC file.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Run the INSTALL.SOFTSPY procedure.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Set passwords for the SPYPROC and SPYDATA files&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Set the authorized product configuration.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Logging on to Model&amp;amp;#160;204===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;Log on to &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;#160;204&amp;lt;/var&amp;gt; using an account with system manager privileges.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;LOGON &amp;lt;i&amp;gt;accountname&lt;br /&gt;
password&amp;lt;/i&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Temporarily removing IODEV=55 threads===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;If SoftSpy has been previously installed, comment out the&lt;br /&gt;
IODEV=55 threads and reduce NUSERS by the number of threads that were commented&lt;br /&gt;
out.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;Add these threads back in and change NUSERS accordingly&lt;br /&gt;
before attempting to run SOFTSPY.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Stopping the SoftSpy subsystem===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;If SoftSpy has been previously installed, all use of SoftSpy&lt;br /&gt;
must be terminated before you proceed.  To terminate SoftSpy, issue the Model&lt;br /&gt;
204 command:&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;STOP SUBSYSTEM SOFTSPY&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Creating and restoring the SPYPROC file===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;Create and restore the SPYPROC file using the commands&lt;br /&gt;
below:&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;CREATE FILE SPYPROC&lt;br /&gt;
END&lt;br /&gt;
OPEN FILE SPYPROC&lt;br /&gt;
IN SPYPROC INITIALIZE&lt;br /&gt;
RESTORE 128 FROM SPYDUMP&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Running the INSTALL.SOFTSPY procedure===&lt;br /&gt;
&amp;lt;p  &amp;gt;The creation of the SoftSpy subsystem and the formatting of SPYTEMP and SPYDATA is performed by the INSTALL.SOFTSPY procedure. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;To begin the process, enter the following commands:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;OPEN SPYPROC&lt;br /&gt;
INCLUDE INSTALL.SOFTSPY&amp;lt;/p&amp;gt;&lt;br /&gt;
This procedure will prompt you for the information it needs to create the subsystem and to initialize or upgrade the SPYDATA file.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
The following prompt appears:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;$$Is SOFTSPY currently installed on this ONLINE (Y/N)?&amp;lt;/p&amp;gt;&lt;br /&gt;
  &amp;lt;ul&amp;gt;&lt;br /&gt;
    &amp;lt;li&amp;gt;If SoftSpy has previously been installed, and you want to perform an upgrade style installation of the new version, respond Y. This will cause access control lists and macros from the previous version contained in the SPYDATA file to be preserved.&lt;br /&gt;
    &amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;li&amp;gt;Otherwise, respond N.&lt;br /&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;li&amp;gt;&lt;br /&gt;
If you are performing an upgrade style installation, the following prompt appears:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;$$Enter READ password for SPYDATA:&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Enter a read password (one with at least X&#039;8041&#039; privdef privileges) for the SPYDATA file. If the SPYDATA file cannot be opened with read access using the specified password, the installation process will terminate with an error message.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;The following prompt appears:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;$$Enter READ/WRITE password for CCASYS:&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Enter a read/write password (one with at least X&#039;00C1&#039; privdef privileges) for the CCASYS file. This allows the procedure to perform all required subsystem management for the SoftSpy subsystem. If the CCASYS file cannot be opened with read/write access, the installation process will terminate with an error message.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;If a subsystem with the name SOFTSPY is defined that is not the SoftSpy subsystem, the following prompt appears:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;$$A subsystem named SOFTSPY already exists.  Replace (Y/N)?&amp;lt;/p&amp;gt;&lt;br /&gt;
  &amp;lt;ul&amp;gt;&lt;br /&gt;
    &amp;lt;li&amp;gt;If you want to replace the existing SoftSpy subsystem with the new&lt;br /&gt;
SoftSpy subsystem, respond Y.&amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;li&amp;gt;If not, respond N.  A response of N will terminate the installation process.&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;The following prompt appears:&lt;br /&gt;
&amp;lt;p  class=&amp;quot;code&amp;quot;&amp;gt;$$Enter an Administrator User ID. Press &amp;amp;lt;ENTER&amp;amp;gt; when finished.&amp;lt;/p&amp;gt;&lt;br /&gt;
Enter the &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;#160;204&amp;lt;/var&amp;gt; account of anyone who is to be given &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;#160;204&amp;lt;/var&amp;gt; ADMIN SCLASS privileges for the SoftSpy subsystem. Users added will supplement those added by previous installations of SoftSpy. The users in this SCLASS will be able to use the SoftSpy EDIT CONFIG command. Refer to the &amp;lt;var class=&amp;quot;book&amp;quot;&amp;gt;Rocket SoftSpy Reference Manual&amp;lt;/var&amp;gt; for a discussion of EDIT CONFIG.&lt;br /&gt;
&lt;br /&gt;
Subsequent changes to the list of users with ADMIN privileges for the subsystem must be made using the &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;#160;204&amp;lt;/var&amp;gt;&lt;br /&gt;
Subsystem Management Facility. Refer to the &amp;lt;var class=&amp;quot;book&amp;quot;&amp;gt;Rocket Model 204 System Manager&#039;s Guide&amp;lt;/var&amp;gt; for more information.&lt;br /&gt;
	&lt;br /&gt;
The user id will be checked for compliance with &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;#160;204&amp;lt;/var&amp;gt; conventions but will not be validated for existence in the CCASTAT file. The User ID prompt will appear repeatedly until you respond by pressing the Enter key without entering a User ID. The Model 204 account of the user who is running this procedure is included in the list automatically.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;If you are performing an upgrade style installation, you might receive the prompt: &lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;Macro &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;macro_identifier&amp;lt;/var&amp;gt; already exists.&lt;br /&gt;
&lt;br /&gt;
1. Replace with NEW version.&lt;br /&gt;
2. Discard NEW version.&lt;br /&gt;
3. Rename NEW version.&lt;br /&gt;
4. Rename OLD version.&lt;br /&gt;
&lt;br /&gt;
$$Please choose an option:&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;This prompt is issued when a SoftSpy macro being installed has the same name as an existing macro and the new macro is different from the&lt;br /&gt;
existing macro.&lt;br /&gt;
  &amp;lt;ul&amp;gt;&lt;br /&gt;
   &amp;lt;li&amp;gt;Enter 1 if you want the new version to replace the existing version.&amp;lt;/li&amp;gt;&lt;br /&gt;
   &amp;lt;li&amp;gt;Enter 2 if you want to discard the new version.&amp;lt;/li&amp;gt;&lt;br /&gt;
   &amp;lt;li&amp;gt;Enter 3 to save the new version under a different name.&amp;lt;/li&amp;gt;&lt;br /&gt;
   &amp;lt;li&amp;gt;Enter 4 to rename the existing macro and save the new version with the name displayed.&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;/ul&amp;gt; &lt;br /&gt;
&lt;br /&gt;
An invalid response will cause the prompt to be redisplayed.&lt;br /&gt;
&lt;br /&gt;
The following prompt appears:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;$$Please enter new name or press &amp;amp;lt;ENTER&amp;amp;gt; to accept: &amp;amp;quot;&amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;macro_identifier&amp;lt;/var&amp;gt;_BAK&amp;amp;quot;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you select option 3 or 4, you will be prompted for a new name for the new or old version of the macro, respectively. You can respond&lt;br /&gt;
with any valid SoftSpy macro name or press ENTER to accept the suggested name &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;macro_identifier&amp;lt;/var&amp;gt;_BAK. If &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;macro_identifier&amp;lt;/var&amp;gt;_BAK exists, the suggested name will have additional _BAK strings appended to it until a unique name can be presented.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Set Passwords for the SPYPROC and SPYDATA Files===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The SPYPROC, SPYDATA, and SPYTEMP files are set to private at the end of the successful execution of the INSTALL.SOFTSPY procedure. A read password for the SPYDATA file will be required to install future upgrades to SoftSpy, and a procedure execution password for the SPYPROC file will be required if you need to reinitialize the SPYTEMP file. It is recommended that you assign passwords for these files. The &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;#160;204&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;LOGCTL&amp;lt;/var&amp;gt; command is used to add passwords to CCASTAT, as shown in the following example:&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;LOGCTL A :SPYDATA&lt;br /&gt;
READ,X&#039;8441&#039;&lt;br /&gt;
&amp;amp;lt;ENTER&amp;amp;gt;&lt;br /&gt;
LOGCTL A :SPYPROC&lt;br /&gt;
EXECUTE,X&#039;8021&#039;&lt;br /&gt;
&amp;amp;lt;ENTER&amp;amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
In the above example, the password &amp;lt;code&amp;gt;READ&amp;lt;/code&amp;gt; is&lt;br /&gt;
assigned as the read password for the SPYDATA file, and the password&lt;br /&gt;
&amp;lt;code&amp;gt;EXECUTE&amp;lt;/code&amp;gt; is assigned as the procedure execution password for the&lt;br /&gt;
SPYPROC file. The &amp;lt;code&amp;gt;&amp;amp;lt;ENTER&amp;amp;gt;&amp;lt;/code&amp;gt; notation indicates that the command expects&lt;br /&gt;
further input, and the enter key is pressed to take the default. See [[LOGCTL command: Modifying file entries in the password table]] for a complete discussion of the &amp;lt;var&amp;gt;LOGCTL&amp;lt;/var&amp;gt; syntax and parameters.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Set the Authorized Product Configuration===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Enter the following command to invoke the SoftSpy configuration editor:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;SPY EDIT CONFIG&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;The editor displays a screen similar to the following figure.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;caption&amp;quot;&amp;gt;EDIT CONFIG Definition Screen&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:SoftSpy_EDIT_CONFIG1.JPG|450 px]]&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;Press the FORWARD PF key (PF8) to display the authorization entry screen.&amp;lt;/p&amp;gt; &lt;br /&gt;
&amp;lt;p&amp;gt;This screen is used to authorize your use of SoftSpy.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;caption&amp;quot;&amp;gt;EDIT CONFIG Authorization Entry Screen&amp;lt;/p&amp;gt;&lt;br /&gt;
[[File:SoftSpy_EDIT_CONFIG2.JPG|450 px]]&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Update this screen with any new configuration information, expiration date, and authorization key provided with your installation materials. If your authorization key is for an expiration date that has passed, you must contact Technical Support to obtain a new authorization key. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Once you have made any required changes, press the SAVE PF key (PF6) to save the configuration. Saving the configuration information will write it out to the SPYDATA file. It will also activate SoftSpy servers running in IODEV=55 threads.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Press the QUIT PF key (PF3) to exit the SoftSpy configuration editor. All authorized products should now be ready for use.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Verifying the installation==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;This section describes the process of verifying that SoftSpy&lt;br /&gt;
and MUSE are correctly installed and available for general use. &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Verify SoftSpy operation===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
To test that SoftSpy server(s) are enabled issue the command:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;SPY ON&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
When SoftSpy has been successfully&lt;br /&gt;
turned on, the following message will be displayed prior to the &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;#160;204&amp;lt;/var&amp;gt;&lt;br /&gt;
command prompt. (There will be a short delay prior to the message while the&lt;br /&gt;
SoftSpy User Language code precompiles.)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;SPY ON&lt;br /&gt;
SPY.021: For the exclusive use of SoftSpy Trial&lt;br /&gt;
&amp;amp;gt;&amp;amp;nbsp;&lt;br /&gt;
&amp;lt;/p&amp;gt;		&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Create an ad hoc procedure like the one shown below or include any&lt;br /&gt;
existing procedure that you have available.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;BEGIN&lt;br /&gt;
FOR %I FROM 1 TO 5&lt;br /&gt;
    %J = %I * %I&lt;br /&gt;
    PRINT %I AND &#039;SQUARED IS&#039; AND %J&lt;br /&gt;
END FOR&lt;br /&gt;
END&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The SoftSpy interactive evaluation screen will now be displayed on your terminal: &lt;br /&gt;
&amp;lt;p class=&amp;quot;caption&amp;quot;&amp;gt;SoftSpy Interactive Evaluation Screen&amp;lt;/p&amp;gt;&lt;br /&gt;
[[File:SoftSpy_Interactive_Evaluation_screen.jpg|450 px]]&lt;br /&gt;
&amp;lt;li&amp;gt;Type the command:&lt;br /&gt;
	&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;WATCH %I, %J&amp;lt;/p&amp;gt;&lt;br /&gt;
so that you can monitor the values of the percent variables as they change during evaluation.  Use PF4 to single step through the procedure or PF5 to run the procedure to its end.  You can also refer to the &amp;lt;var class=&amp;quot;book&amp;quot;&amp;gt;Rocket SoftSpy Reference Manual&amp;lt;/var&amp;gt; to try some of the other features of SoftSpy.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;At the completion of this test, turn off SoftSpy by issuing the command:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;SPY OFF&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can issue the SPY OFF command from&lt;br /&gt;
either the &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;#160;204&amp;lt;/var&amp;gt; command prompt or from the command area just above the PF key labels on the SoftSpy screen.&lt;br /&gt;
&amp;lt;/li&amp;gt;&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;If you experience any difficulties, contact [[Contacting_Rocket_Software_Technical_Support|Technical Support]].&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Verify MUSE operation===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;You can run two simple tests to verify that MUSE is&lt;br /&gt;
available for use: &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;To verify command-level MUSE, enter the following command at the Model&lt;br /&gt;
204 command prompt:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;MUSE CLOSE *&amp;lt;/p&amp;gt;&lt;br /&gt;
If no errors are issued, then command-level MUSE is active, and ready for use.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;To verify statement-level MUSE, enter and run the following request:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;BEGIN&lt;br /&gt;
MUSE CLOSE *&lt;br /&gt;
END&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If this simple request compiles and evaluates without errors, then statement-level MUSE is active and ready for use.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;If you experience any difficulties, contact [[Contacting_Rocket_Software_Technical_Support|Technical Support]].&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Customizing SoftSpy==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p &amp;gt;This section describes the process of customizing SoftSpy&lt;br /&gt;
for site-specific needs.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Customize the SoftSpy configuration===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;SoftSpy uses configuration information to determine the&lt;br /&gt;
access authority of end users during SoftSpy sessions. The configuration can&lt;br /&gt;
be modified only by those &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;#160;204&amp;lt;/var&amp;gt; users whose user identifiers have been&lt;br /&gt;
included in the SoftSpy ADMIN SCLASS through subsystem management. The initial&lt;br /&gt;
installation process will prompt you for a list of those user identifiers and&lt;br /&gt;
perform the required subsystem management tasks. If you want to modify the&lt;br /&gt;
list of users who are authorized to perform configuration changes, you must use&lt;br /&gt;
&amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;#160;204&amp;lt;/var&amp;gt; Subsystem Management.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;The SoftSpy configuration lets you limit end user access to&lt;br /&gt;
certain SoftSpy features. This is done by associating an Access Control List&lt;br /&gt;
(ACL) with a SoftSpy privilege through the EDIT CONFIG command. An ACL is a&lt;br /&gt;
list of &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;#160;204&amp;lt;/var&amp;gt; users who are to be granted privileges. The following table&lt;br /&gt;
shows which privileges can be limited and the name of the ACL associated with&lt;br /&gt;
each at the completion of an initial installation.&amp;lt;/p&amp;gt;&lt;br /&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;b&amp;gt;Privilege Name&amp;lt;/b&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;b&amp;gt;Associated ACL&amp;lt;/b&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;b&amp;gt;Meaning&amp;lt;/b&amp;gt;&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;M204 Ad Hoc&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;ADMIN&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;User can issue M204 command from SoftSpy command line or user macro.&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;M204 Macro&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;null&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;User can issue M204 command from system macros.&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;Read ACL&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;ADMIN&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;User can read access control lists.&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;Read MACRO&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;null&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;User can read system macros.&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;SoftSpy Server&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;ADMIN&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;User can issue the SPY SERVER command.&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;Spy ON&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;null&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;User can issue the SPY ON command.&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;Update ACL&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;ADMIN&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;User can update access control lists.&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;Update MACRO&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;ADMIN&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;User can update system macros.&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;&amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;#160;204&amp;lt;/var&amp;gt; users who are in the ADMIN SCLASS can use the&lt;br /&gt;
SoftSpy EDIT CONFIG command to change the name of the ACL associated with any of the commands listed above. When an end user attempts to use the command, the newly associated ACL will be checked. A null ACL name indicates that all end users may use the command.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;ACLs are constructed and maintained using the EDIT ACL&lt;br /&gt;
command. Initially, the only users who can perform this function are those&lt;br /&gt;
that were entered during the installation process. The ADMIN ACL is&lt;br /&gt;
constructed during an initial installation with the same user identifiers that&lt;br /&gt;
are put into the SoftSpy Subsystem ADMIN SCLASS.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;h3&amp;gt;Customize SoftSpy Environments&amp;lt;/h3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;The &amp;lt;i&amp;gt;Rocket SoftSpy Reference Manual&amp;lt;/i&amp;gt; provides&lt;br /&gt;
instructions for customizing SoftSpy environments to meet local needs. You can&lt;br /&gt;
change the following environments:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt;&lt;br /&gt;
	Base environment	&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt;Interactive Debug environment&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt;Interactive Performance Tuning environment&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt;Interactive Quality Assurance Testing environment&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;Each of these environments can be customized at two levels:&lt;br /&gt;
	&amp;lt;ul&amp;gt;&amp;lt;li&amp;gt;For all users of SoftSpy, or,&amp;lt;/li&amp;gt;&lt;br /&gt;
		&amp;lt;li&amp;gt;For individual users (by &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;#160;204&amp;lt;/var&amp;gt; User ID).&amp;lt;/li&amp;gt;&lt;br /&gt;
		&amp;lt;/ul&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;You can customize items such as PFKEY settings and data&lt;br /&gt;
display columns.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;The &amp;lt;var class=&amp;quot;book&amp;quot;&amp;gt;Rocket SoftSpy Reference Manual&amp;lt;/var&amp;gt; also&lt;br /&gt;
describes how to make SoftSpy skip over the interactive execution of selected&lt;br /&gt;
subsystems that are used as tools (such as SSTEST).  You can customize SoftSpy to&lt;br /&gt;
skip over any number of selected subsystems.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;Additionally, the &amp;lt;var class=&amp;quot;book&amp;quot;&amp;gt;Rocket SoftSpy Reference Manual&amp;lt;/var&amp;gt;&lt;br /&gt;
provides a complete listing of the SoftSpy macros, which you can customize as&lt;br /&gt;
needed.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==System Manager Considerations==&lt;br /&gt;
&amp;lt;p&amp;gt;SoftSpy uses background tasks called &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;SoftSpy servers&amp;lt;/var&amp;gt; that normally run in IODEV=55 threads to assist in program monitoring. When a User Language program is being executed under the control of SoftSpy, the program is&lt;br /&gt;
run in the user&#039;s normal server, and one of the server threads is used by SoftSpy to control and monitor the execution of the program. There must be one server thread for each simultaneous user of SoftSpy.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===SoftSpy and the MONITOR Command===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;SoftSpy uses two wait type codes displayed by using the MONITOR command. The codes appear in the WT column that contains the wait type for a user.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;The wait code values are: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;table class=&amp;quot;noBorder&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;38&amp;lt;/th&amp;gt; &amp;lt;td&amp;gt;Execution is suspended and the SoftSpy server is awaiting a request from a user.&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;39&amp;lt;/th&amp;gt; &amp;lt;td&amp;gt;A user is suspended while a SoftSpy server is performing operations for the user.&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&amp;gt;Both of these wait type codes are swappable but not bumpable.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===SoftSpy files===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;SoftSpy uses four different files. The usage of each file&lt;br /&gt;
is summarized below.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
 &amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;File&amp;lt;/th&amp;gt; &amp;lt;th&amp;gt;Description&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;SPYPROC&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;This file contains procedures and help information used by SoftSpy. It is never updated, and it can be shared between several different online systems. If this file is corrupted it can be restored from the installation materials.&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;SPYDATA&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;This file contains various types of data that must be retained. This includes configuration information, Access Control Lists (ACLs) and copies of all SoftSpy macros. A base version of this file is created by the installation process, but the information in this file is modified when configuration, ACL, or macro changes are made. Periodic backups of this file should be made for recovery purposes. A separate instance of this file is required for each online system.&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;SPYTEMP&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;This file serves as a scratch pad for information during the execution of SoftSpy. Currently defined window descriptions, copies of macros being edited, and PF key settings are examples of the information saved in SPYTEMP. The CREATE.SPYTEMP procedure in SPYPROC can be used to recreate this file if necessary. A separate instance of this file is required for each online system.&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;ITSAUTH&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;This file contains authorization data. It is a simple sequential file containing 256 byte fixed length records. It is refreshed when the SoftSpy&lt;br /&gt;
  configuration is saved using the SPY EDIT CONFIG command. If SoftSpy will be used in multiple online and batch systems, ITSAUTH should be shared among them.&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;
==Additional Installations==&lt;br /&gt;
&amp;lt;p&amp;gt;This section discusses the procedures to follow when you&lt;br /&gt;
have already installed the current version of SoftSpy and MUSE successfully,&lt;br /&gt;
and you wish to install them again in different ONLINE or BATCH204 jobs. These&lt;br /&gt;
procedures are designed to speed up the process for a system manager who is&lt;br /&gt;
very familiar with SoftSpy and MUSE installation and wants to save time. However,&lt;br /&gt;
it is never a problem to perform the entire installation process again.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Install SoftSpy in additional ONLINE jobs===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;If you are installing SoftSpy in additional ONLINEs under the same operating system and &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;#160;204&amp;lt;/var&amp;gt; release after an initial installation, you can use an abbreviated procedure.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;The SPYPROC file is never updated and can be shared by multiple ONLINEs running SoftSpy. Therefore, you can omit the [[#Creating and restoring the SPYPROC file|Creating and restoring the SPYPROC file]] step on subsequent ONLINEs.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;The DDs/DLBLs/ FILEDEFs for SPYPROC and ITSAUTH for each ONLINE can point to the same data set.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;Each ONLINE must have its own SPYTEMP and SPYDATA files.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;The INSTALL.SOFTSPY procedure must be run in each ONLINE to add the subsystem definition to CCASYS and to create and initialize SPYTEMP and SPYDATA.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Install MUSE in additional ONLINE and BATCH204 jobs===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;You might want to use MUSE in &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;#160;204&amp;lt;/var&amp;gt; ONLINE or&lt;br /&gt;
BATCH204 jobs in addition to the job where SoftSpy was initially installed. &lt;br /&gt;
For these additional job streams, add a DD/FILEDEF/DLBL for the previously&lt;br /&gt;
created ITSAUTH data set to the job stream.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==VSE JCL==&lt;br /&gt;
The following JCL files are used for SoftSpy installation on z/VSE systems:&lt;br /&gt;
&amp;lt;table class=&amp;quot;noBorder&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;SPYINST&amp;lt;/th&amp;gt; &amp;lt;td&amp;gt;allocates SoftSpy system files&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;SPYRINST&amp;lt;/th&amp;gt; &amp;lt;td&amp;gt;allocates SPYPROC and SPYDUMP files&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
In the JCL files below, the variable xxx has been substituted for the release number; for example:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;// LIBDEF PROC,SEARCH=M204LIB.V&amp;lt;I&amp;gt;xxx&amp;lt;/I&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
Replace &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;xxx&amp;lt;/var&amp;gt; with 750 or 740, as applicable; for example:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;// LIBDEF PROC,SEARCH=M204LIB.V740&amp;lt;/p&amp;gt;&lt;br /&gt;
===SPYINST JCL===&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;// JOB SPYINST&lt;br /&gt;
 * ********************************************************************&lt;br /&gt;
 *                           Rocket Model 204&lt;br /&gt;
 *                                &lt;br /&gt;
 * ********************************************************************&lt;br /&gt;
 /* SPYINST allocates SoftSpy system files.&lt;br /&gt;
 /* Note that in the allocate step the DLBL and EXTENTs are&lt;br /&gt;
 /* stated explicitly for each SoftSpy system file, while in&lt;br /&gt;
 /* the create step the SoftSpy proc is used. The allocate&lt;br /&gt;
 /* step cannot have the direct access (DA) code present on&lt;br /&gt;
 /* the DLBL statements, and the create step (and the online&lt;br /&gt;
 /* job) must have the (DA) code present.&lt;br /&gt;
 /* *&lt;br /&gt;
 /* Make sure that the explicit DLBL and EXTENT statements in&lt;br /&gt;
 /* the allocate step match the proc in all aspects except&lt;br /&gt;
 /* the DA codes.&lt;br /&gt;
 /*&lt;br /&gt;
 /* ***************************************************************&lt;br /&gt;
 /* ***************************************************************&lt;br /&gt;
 /*&lt;br /&gt;
 /* Add assign statements as needed:&lt;br /&gt;
 /* *&lt;br /&gt;
 /* // ASSGN SYS000,X&#039;CUU&#039;&lt;br /&gt;
 /*&lt;br /&gt;
 /* The JCL as it is provided assumes you have made&lt;br /&gt;
 /* standard assignments for the logical units (SYS000)&lt;br /&gt;
 /* you reference in your EXTENT statements.&lt;br /&gt;
 /* *&lt;br /&gt;
 /* ***************************************************************&lt;br /&gt;
 /* To adapt this stream to your particular installation the&lt;br /&gt;
 /* following changes should be made:&lt;br /&gt;
 /*&lt;br /&gt;
 /* (1) Modify the job statement to conform to your standards.&lt;br /&gt;
 /*&lt;br /&gt;
 /* (2) Change the DLBL and EXTENT to reflect your dataset&lt;br /&gt;
 /* names and locations as in other MODEL 204 jobs.&lt;br /&gt;
 /* assign SYS008 to a printer for the audit trail, or&lt;br /&gt;
 /* add DLBL and EXTENT statements for ccaaudit.&lt;br /&gt;
 /*&lt;br /&gt;
 /* ***************************************************************&lt;br /&gt;
 /*&lt;br /&gt;
 /* ***************************************************************&lt;br /&gt;
 /* step alloc: MODEL204 allocate of all SoftSpy system files *&lt;br /&gt;
 /* ************************************************************** *&lt;br /&gt;
 /*&lt;br /&gt;
 // EXEC PROC=M204JCL      DLBL for JCL sublibrary&lt;br /&gt;
 // LIBDEF PROC,SEARCH=M204LIB.&amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;xxx&amp;lt;/var&amp;gt;&lt;br /&gt;
 // EXEC PROC=M204V&amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;xxx&amp;lt;/var&amp;gt;    DLBL for V&amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;xxx&amp;lt;/var&amp;gt; M204 library&lt;br /&gt;
 // EXEC PROC=M204SYS    DLBLS FOR CCASTAT, CCATEMP&lt;br /&gt;
 // LIBDEF PHASE,SEARCH=M204LIB.V&amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;xxx&amp;lt;/var&amp;gt;&lt;br /&gt;
 // DLBL SPYPROC,&#039;M204.SPYPROC&#039;,99/366,SD&lt;br /&gt;
 // EXTENT SYS000,volser,,,0000,000 (AT LEAST 400 PAGES)&lt;br /&gt;
 // DLBL SPYDATA,&#039;M204.SPYDATA&#039;,99/366,SD&lt;br /&gt;
 // EXTENT SYS000,volser,,,0000,000 (AT LEAST 150 PAGES)&lt;br /&gt;
 // DLBL SPYTEMP,&#039;M204.SPYTEMP&#039;,99/366,SD&lt;br /&gt;
 // EXTENT SYS000,volser,,,0000,000 (AT LEAST 100 PAGES)&lt;br /&gt;
 // DLBL ITSAUTH,&#039;M204.ITSAUTH&#039;,99/366,SD&lt;br /&gt;
 // EXTENT SYS000,volser,,,0000,000 (AT LEAST 7 PAGES)&lt;br /&gt;
 // ASSGN SYS000,DISK,VOL=volser,SHR&lt;br /&gt;
 // ASSGN SYS008,PRINTER&lt;br /&gt;
 // EXEC ALLOCATE,SIZE=AUTO&lt;br /&gt;
 ALLOCATE FILE(SPYPROC,SPYDATA,SPYTEMP,ITSAUTH)&lt;br /&gt;
 /*&lt;br /&gt;
 // EXEC PROC=M204JCL      DLBL for JCL sublibrary&lt;br /&gt;
 // LIBDEF PROC,SEARCH=M204LIB.V&amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;xxx&amp;lt;/var&amp;gt;&lt;br /&gt;
 // EXEC LIBR&lt;br /&gt;
         ACCESS S=M204LIB.V&amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;xxx&amp;lt;/var&amp;gt;&lt;br /&gt;
         CATALOG SFTSPY.PROC REPLACE=YES&lt;br /&gt;
 // DLBL SPYDUMP,&#039;M204.SPYPROC.DUMP&#039;,,SD&lt;br /&gt;
 // EXTENT SYS000,volser&lt;br /&gt;
 // DLBL SPYPROC,&#039;M204.SPYPROC&#039;,,DA&lt;br /&gt;
 // EXTENT SYS000,volser&lt;br /&gt;
 // DLBL SPYDATA,&#039;M204.SPYDATA&#039;,,DA&lt;br /&gt;
 // EXTENT SYS000,volser&lt;br /&gt;
 // DLBL SPYTEMP,&#039;M204.SPYTEMP&#039;,,DA&lt;br /&gt;
 // EXTENT SYS000,volser&lt;br /&gt;
 // DLBL ITSAUTH,&#039;M204.ITSAUTH&#039;,,DA&lt;br /&gt;
 // EXTENT SYS000,volser&lt;br /&gt;
 /+&lt;br /&gt;
 /*&lt;br /&gt;
 /&amp;amp; &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===SPYRINST JCL===&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;// JOB SPYRINST&lt;br /&gt;
 * ********************************************************************&lt;br /&gt;
 *                           Rocket Model 204&lt;br /&gt;
 *                               &lt;br /&gt;
 * ********************************************************************&lt;br /&gt;
 /* SPYRINST allocates SPYPROC and SPYDUMP files.&lt;br /&gt;
 /* *&lt;br /&gt;
 /* Note that in the allocate step the DLBL and EXTENTs are&lt;br /&gt;
 /* stated explicitly for each SoftSpy system file, while in&lt;br /&gt;
 /* the create step the SoftSpy proc is used. The allocate&lt;br /&gt;
 /* step cannot have the direct access (DA) code present on&lt;br /&gt;
 /* the DLBL statements, and the create step (and the online&lt;br /&gt;
 /* job) must have the (DA) code present.&lt;br /&gt;
 /*&lt;br /&gt;
 /* Make sure that the explicit DLBL and EXTENT statements in&lt;br /&gt;
 /* the allocate step match the proc in all aspects except&lt;br /&gt;
 /* the DA codes.&lt;br /&gt;
 /*&lt;br /&gt;
 /* ***************************************************************&lt;br /&gt;
 /* ***************************************************************&lt;br /&gt;
 /* *&lt;br /&gt;
 /* Add assign statements as needed:&lt;br /&gt;
 /*&lt;br /&gt;
 /* // ASSGN SYS000,X&#039;CUU&#039;&lt;br /&gt;
 /*&lt;br /&gt;
 /* The jcl as it is provided assumes you have made&lt;br /&gt;
 /* standard assignments for the logical units (SYS000)&lt;br /&gt;
 /* you reference in your EXTENT statements.&lt;br /&gt;
 /*&lt;br /&gt;
 /* ***************************************************************&lt;br /&gt;
 /* To adapt this stream to your particular installation the&lt;br /&gt;
 /* following changes should be made:&lt;br /&gt;
 /*&lt;br /&gt;
 /* (1) Modify the job statement to conform to your standards.&lt;br /&gt;
 /*&lt;br /&gt;
 /* (2) Change the DLBL and EXTENT to reflect your dataset&lt;br /&gt;
 /* names and locations as in other MODEL 204 jobs.&lt;br /&gt;
 /* Assign SYS008 to a printer for the audit trail, or&lt;br /&gt;
 /* add DLBL and EXTENT statements for ccaaudit.&lt;br /&gt;
 /*&lt;br /&gt;
 /* ***************************************************************&lt;br /&gt;
 /*&lt;br /&gt;
 /* ***************************************************************&lt;br /&gt;
 /* step alloc: MODEL204 allocate of all SoftSpy system files&lt;br /&gt;
 /* ***************************************************************&lt;br /&gt;
 /*&lt;br /&gt;
 // EXEC PROC=M204JCL      DLBL for JCL sublibrary&lt;br /&gt;
 // LIBDEF PROC,SEARCH=M204LIB.V&amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;xxx&amp;lt;/var&amp;gt;&lt;br /&gt;
 // EXEC PROC=M204V&amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;xxx&amp;lt;/var&amp;gt;    DLBL for V&amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;xxx&amp;lt;/var&amp;gt; M204 library&lt;br /&gt;
 // EXEC PROC=M204SYS    DLBLS FOR CCASTAT, CCATEMP&lt;br /&gt;
 // LIBDEF PHASE,SEARCH=M204LIB.V&amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;xxx&amp;lt;/var&amp;gt;&lt;br /&gt;
 // DLBL SPYPROC,&#039;M204.SPYPROC&#039;,exp date,SD&lt;br /&gt;
 // EXTENT SYS000,volser,,,0000,000 (AT LEAST 400 PAGES)&lt;br /&gt;
 // ASSGN SYS008,PRINTER&lt;br /&gt;
 // EXEC ALLOCATE,SIZE=AUTO&lt;br /&gt;
 ALLOCATE FILE(SPYPROC)&lt;br /&gt;
 /*&lt;br /&gt;
 // EXEC PROC=M204JCL      DLBL for JCL sublibrary&lt;br /&gt;
 // LIBDEF PROC,SEARCH=M204LIB.V&amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;xxx&amp;lt;/var&amp;gt;&lt;br /&gt;
 // EXEC LIBR&lt;br /&gt;
         ACCESS S=M204LIB.V&amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;xxx&amp;lt;/var&amp;gt;&lt;br /&gt;
         CATALOG SFTSPY.PROC REPLACE=YES&lt;br /&gt;
 // DLBL SPYDUMP,&#039;M204.SPYPROC.DUMP&#039;,,SD&lt;br /&gt;
 // EXTENT SYS000,volser&lt;br /&gt;
 // DLBL SPYPROC,&#039;M204.SPYPROC&#039;,,DA&lt;br /&gt;
 // EXTENT SYS000,volser&lt;br /&gt;
 // DLBL SPYDATA,&#039;M204.SPYDATA&#039;,,DA&lt;br /&gt;
 // EXTENT SYS000,volser&lt;br /&gt;
 // DLBL SPYTEMP,&#039;M204.SPYTEMP&#039;,,DA&lt;br /&gt;
 // EXTENT SYS000,volser&lt;br /&gt;
 // DLBL ITSAUTH,&#039;M204.ITSAUTH&#039;,,DA&lt;br /&gt;
 // EXTENT SYS000,volser&lt;br /&gt;
 /+&lt;br /&gt;
 /*&lt;br /&gt;
 /&amp;amp;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:SoftSpy]]&lt;br /&gt;
[[Category:Installation]]&lt;/div&gt;</summary>
		<author><name>Mlarocca</name></author>
	</entry>
	<entry>
		<id>https://m204wiki.rocketsoftware.com/index.php?title=Upgrading_to_Model_204_version_7.5_on_IBM_z/OS&amp;diff=83624</id>
		<title>Upgrading to Model 204 version 7.5 on IBM z/OS</title>
		<link rel="alternate" type="text/html" href="https://m204wiki.rocketsoftware.com/index.php?title=Upgrading_to_Model_204_version_7.5_on_IBM_z/OS&amp;diff=83624"/>
		<updated>2016-04-04T13:27:15Z</updated>

		<summary type="html">&lt;p&gt;Mlarocca: /* Requirements */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div class=&amp;quot;toclimit-3&amp;quot;&amp;gt;__TOC__&amp;lt;/div&amp;gt;&lt;br /&gt;
==Overview==&lt;br /&gt;
This page describes the steps required to upgrade from Rocket Model 204 version 7.4 to version 7.5, on the IBM&amp;lt;sup&amp;gt;&amp;amp;reg;&amp;lt;/sup&amp;gt; z/OS&amp;lt;sup&amp;gt;&amp;amp;reg;&amp;lt;/sup&amp;gt; operating system.&lt;br /&gt;
&lt;br /&gt;
For information on the new features available in version 7.5, see the [[Release notes for Model 204 version 7.5|7.5 Release notes]].&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;table&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&amp;lt;p&amp;gt;In order to upgrade to Model 204 version 7.5, &amp;lt;b&amp;gt;you must have version 7.4&amp;lt;/b&amp;gt; and [[#Before you begin|various Early Warnings]] installed on your system..&amp;lt;/p&amp;gt; &amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt; &lt;br /&gt;
&lt;br /&gt;
To upgrade to version 7.5 simply download, upload, and link the 7.5 object modules available from the downloads page to install the 7.5 components.&lt;br /&gt;
&lt;br /&gt;
==Before you begin==&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;In order to upgrade to version 7.5, you must have version 7.4 and Early Warnings for Dictionary/204 through 740DI016 installed on your system.&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; If you plan to use v7.4 CRAM with your v7.5 installation, you will need to apply all 7.4 maintenance. See [[#CRAM|CRAM]] for details.&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
For information on Early Warnings, log in to the [http://www.rocketsoftware.com/support Rocket Customer Portal].&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;For system requirements for version 7.5, see the [[Release notes for Model 204 version 7.5#Operating system requirements|7.5 Release notes]].&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;You must have either a [[Rocket M204 user ID]] or a Sirius user ID to download the installation files.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The object library has the authorization zap (covering your licensed processors) preapplied, so you do not need to get a new authorization zap from the website. &amp;lt;br /&amp;gt;(The preapplied zap will authorize Model 204 itself and any separately purchased products such as SirScan.)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The object library also has the maintenance zaps (as of the time the stream was&lt;br /&gt;
prepared) preapplied, so you do not need to apply any maintenance as part of this installation. (You will only need to apply any new maintenance when it becomes available for this release.)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;steps&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Overview of upgrading steps==&lt;br /&gt;
 &lt;br /&gt;
Review the following high-level summary of steps before you begin downloading the &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model 204&amp;lt;/var&amp;gt; version 7.5 files.&lt;br /&gt;
 &lt;br /&gt;
For an example, see [[#Example_workflow_for_7.5:_download_through_installation|Example workflow for 7.5: download through installation]].&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;Use your [[Rocket M204 user ID]] to [[#downloading|download]] the Model 204 object library and the Model 204 macro library.&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;[[#uploading|Upload]] the downloaded components to the z/OS system on the IBM mainframe.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;[[#bldLibs|Build]] the RKOBJLIB object library and RKMACLIB macro library. (Once you have built these libraries, do not modify them.)&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Submit the job to [[#allocating|allocate the other data sets]] required for installation.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;If you have your own user $functions (FUNU), you must do the following steps:&lt;br /&gt;
&amp;lt;ol style=&amp;quot;list-style-type:lower-alpha;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[[#FUNU_7.5|Modify FUNU for 64-bit addressing]] considerations and store the modified source in your local source library.&amp;lt;/li&amp;gt; &lt;br /&gt;
&amp;lt;li&amp;gt;If you have any user-defined messages (MSGU), store them in your local source library.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[[#asmFUNU|Assemble]] FUNU (and MSGU, if applicable), with the output object file stored in your local object library.&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;If you use an external authorizer (such as RACF) for &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model 204&amp;lt;/var&amp;gt;, [[#secparm|assemble the &amp;lt;i&amp;gt;xxxx&amp;lt;/i&amp;gt;PARM security module]] (such as RACFPARM). The object file is then stored in your local object library.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;If you use the [[#ul_db2|UL/DB2 interface]], preprocess and assemble the USQL module.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;If you use other customized modules, such as CDTB, modify them as needed and [[#asm|assemble]] them.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Link the [[#lkonln|ONLINE]] load module.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;If you use the [[#link_ifam1|IFAM1]] and [[#link_ifam4|IFAM4]] load modules, link them.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Link the &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model 204&amp;lt;/var&amp;gt; [[#lkutils|utility load modules]].&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;If you use the [[#cics|CICS interface]], customize it, and then assemble and link the CICS modules.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;If you use the [[#tso|TSO]] interface, assemble and link-edit the TSO source modules.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;If you use [[#softspy|SoftSpy]], upgrade it for 7.5.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Object and macro libraries==&lt;br /&gt;
{{Template:Model 204 installation components}}&lt;br /&gt;
&lt;br /&gt;
==Building the object and macro libraries==&lt;br /&gt;
To build the object and macro libraries, you must download the object library and macro library; upload each library to the mainframe; and copy, modify, and run the NEW204LB job.&lt;br /&gt;
&amp;lt;div id=&amp;quot;downloading&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
===Downloading===&lt;br /&gt;
&amp;lt;!--Caution: &amp;lt;div&amp;gt; above--&amp;gt;&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Using your [[Rocket M204 user ID]] and password, log in to the [https://model204.rocketsoftware.com/maint/objlist Model 204 object file download page].&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Click the &amp;lt;b&amp;gt;Download object file&amp;lt;/b&amp;gt; link beside the object library that you want to download.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Go to the [https://model204.rocketsoftware.com/maint/maclist Model 204 macro library download page].&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Click the &amp;lt;b&amp;gt;Download macro library&amp;lt;/b&amp;gt; link beside the macro library that you want to download.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;div id=&amp;quot;uploading&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Uploading===&lt;br /&gt;
&amp;lt;!--Caution: &amp;lt;div&amp;gt; above--&amp;gt;&lt;br /&gt;
Once the object file and macro library are downloaded to your workstation, upload them to the z/OS system on the IBM mainframe. You can use any file transfer mechanism, including FTP and IND$FILE. &lt;br /&gt;
 &lt;br /&gt;
Specify these characteristics for the upload files:&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;table class=&amp;quot;noBorder&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&amp;lt;b&amp;gt;transfer format:&amp;lt;/b&amp;gt;&amp;lt;/td&amp;gt; &amp;lt;td&amp;gt;binary&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&amp;lt;b&amp;gt;record format:&amp;lt;/b&amp;gt;&amp;lt;/td&amp;gt; &amp;lt;td&amp;gt;FB&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&amp;lt;b&amp;gt;record size:&amp;lt;/b&amp;gt;&amp;lt;/td&amp;gt; &amp;lt;td&amp;gt;80 for object and macro libraries&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&amp;lt;b&amp;gt;block size:&amp;lt;/b&amp;gt;&amp;lt;/td&amp;gt; &amp;lt;td&amp;gt;6400 for object and macro libraries&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&amp;lt;b&amp;gt;storage size for both:&amp;lt;/b&amp;gt;&amp;lt;/td&amp;gt; &amp;lt;td&amp;gt;primary: 10 CYL; secondary: 5 CYL&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
For details on how to download and upload, see [[Downloading and uploading Model 204 installation components]].&lt;br /&gt;
&amp;lt;div id=&amp;quot;bldLibs&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Building the object and macro libraries (NEW204LB job stream)===&lt;br /&gt;
&amp;lt;!--Caution: &amp;lt;div&amp;gt; above--&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
After you upload the object and macro library input streams to the mainframe, build the object and macro libraries:&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Access the [http://sirius.sirius-software.com/download/new204lb.txt NEW204LB job stream] text file.&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Copy the job stream file into a local TSO library for editing.&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;On the first line of the job stream, modify the JOB card according to your local job card parameters.&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;On the final four lines, marked &amp;lt;code&amp;gt;2 &amp;amp;lt;&amp;amp;lt;&amp;lt;/code&amp;gt; ... &amp;lt;code&amp;gt;5 &amp;amp;lt;&amp;amp;lt;&amp;lt;/code&amp;gt; on the right:&lt;br /&gt;
&amp;lt;ol style=&amp;quot;list-style-type:lower-alpha;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Modify the &amp;lt;code&amp;gt;VERSION=&amp;lt;/code&amp;gt; parameter, specifying the two-digit version of &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model 204&amp;lt;/var&amp;gt; you are installing, such as 75.&lt;br /&gt;
&amp;lt;li&amp;gt;Modify the &amp;lt;code&amp;gt;HLQ=&amp;lt;/code&amp;gt; parameter, specifying the high-level qualifiers of all &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model 204&amp;lt;/var&amp;gt; installation data sets.&lt;br /&gt;
&amp;lt;li&amp;gt;Modify the &amp;lt;code&amp;gt;OBJINP=&amp;lt;/code&amp;gt; parameter, using the DSN of the object library input file that you uploaded to the mainframe.&lt;br /&gt;
&amp;lt;li&amp;gt;Modify the &amp;lt;code&amp;gt;MACINP=&amp;lt;/code&amp;gt; parameter, using the DSN of the macro library input file that you uploaded to the mainframe.&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Submit the &amp;lt;code&amp;gt;NEW204LB&amp;lt;/code&amp;gt; job to build the object library (&amp;quot;RKOBJLIB&amp;quot;) and macro library (&amp;quot;RKMACLIB&amp;quot;) on your z/OS system.&amp;lt;/li&amp;gt; &lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;div id=&amp;quot;notouch&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;warn&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Attention:&amp;lt;/b&amp;gt; Once you have built RKOBJLIB and RKMACLIB on your z/OS system, &amp;lt;b&amp;gt;do not&amp;lt;/b&amp;gt; modify them in any way.&amp;lt;br /&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
For example, &amp;lt;b&amp;gt;do not&amp;lt;/b&amp;gt; store other members into the object library; it should only contain the members as supplied in a download from the web site. Place object files that you might assemble (such as FUNU or RACFPARM) into your local object library.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====RKOBJLIB README file====&lt;br /&gt;
README, a member of RKOBJLIB, contains details on the object files and installation steps. Once you have built RKOBJLIB, you can use README as an installation checklist if desired.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;allocating&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Data sets for Model 204 upgrading==&lt;br /&gt;
&amp;lt;!--Caution: &amp;lt;div&amp;gt; above--&amp;gt;&lt;br /&gt;
There are three data sets used when upgrading to Model 204 7.5:&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;data set for the Model 204 load modules&lt;br /&gt;
&amp;lt;li&amp;gt;data set for the local source library&lt;br /&gt;
&amp;lt;li&amp;gt;data set for the local object library&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
The data set for the load modules will contain, after linking, the modules for the Model 204 product, including: ONLINE, IFAM1, and IFAM4. &lt;br /&gt;
&lt;br /&gt;
The local source library is used to store the customized source for modules such as FUNU, MSGU, and ACF2PARM, RACFPARM, or TOPSPARM.&lt;br /&gt;
&lt;br /&gt;
When the source is assembled, it is stored in the local object library.&lt;br /&gt;
&lt;br /&gt;
One of the members of the RKOBJLIB object library is named [[Model 204 data set allocation job stream for IBM z/OS|JALINSJ]], which is a job stream to allocate data sets for the installation. &amp;lt;code&amp;gt;JALINSJ&amp;lt;/code&amp;gt; contains information about naming conventions for the data sets.&lt;br /&gt;
&lt;br /&gt;
===Allocating data sets (JALINSJ job stream)===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Copy &amp;lt;code&amp;gt;JALINSJ&amp;lt;/code&amp;gt; into a local TSO library.&lt;br /&gt;
&amp;lt;li&amp;gt;Edit your copy of &amp;lt;code&amp;gt;JALINSJ&amp;lt;/code&amp;gt; for your configuration: &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Replace the first line with a JOB card.&lt;br /&gt;
&amp;lt;li&amp;gt;Edit the lines, near the top of the job stream, marked with numbers followed by &amp;lt;code&amp;gt;&amp;amp;lt;&amp;amp;lt;&amp;lt;/code&amp;gt;. The numbers correspond to numbered steps in the comments following these lines.&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Submit the &amp;lt;code&amp;gt;JALINSJ&amp;lt;/code&amp;gt; job to allocate the data set.&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;div id=&amp;quot;lkonln&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Linking the Model 204 ONLINE load module==&lt;br /&gt;
&amp;lt;!--Caution: &amp;lt;div&amp;gt; above--&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;div id=&amp;quot;onlnTable&amp;quot;&amp;gt;&amp;lt;/div&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;Notes:&amp;lt;/b&amp;gt; &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;If you use customized modules (such as FUNU, MSGU, ACF2PARM, RACFPARM, TOPSPARM, CDTB, or UL/DB2), you must [[#FUNU_7.5|modify]] them (if needed) and [[#asm|assemble]] them &amp;lt;b&amp;gt;before you link the ONLINE/IFAM1/IFAM4&amp;lt;/b&amp;gt; load modules.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;There is not a separate link step for BATCH204.  It is not maintained as a separate module; the same module as ONLINE is used, with a BATCH204 alias.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The INCLUDE TCPLIB(SNMPGSYS) statement for Horizon TCP/IP in the Online-link-edit job is no longer required and has been eliminated.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;A number of INLUDE LELIB(CEE*) statements have also been eliminated from the Online-link-edit job.  These were required to support several mathematical $functions but those $functions have been rewritten in Assembly language and are now automatically part of the Online load module.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; The INCLUDE IBMLIB(IEFSD095) statement is still required if block printing on separator pages is desired.  Usually the IBMLIB DD points to DSN=SYS1.AOSB0&amp;lt;/li&amp;gt;     &lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
One of the members of the RKOBJLIB object library is [[Model 204 ONLINE link job stream for z/OS|LKONLNJ]], which is a job stream to link the &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model 204&amp;lt;/var&amp;gt; ONLINE load module.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;LKONLNJ&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
===Linking ONLINE (LKONLNJ job stream)===&lt;br /&gt;
&amp;lt;!--Caution: &amp;lt;div&amp;gt; above--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Copy the &amp;lt;code&amp;gt;LKONLNJ&amp;lt;/code&amp;gt; job stream from RKOBJLIB into a local TSO library.&lt;br /&gt;
&amp;lt;li&amp;gt;Edit your copy of &amp;lt;code&amp;gt;LKONLNJ&amp;lt;/code&amp;gt; for your configuration:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Replace the first line with a JOB card.&lt;br /&gt;
&amp;lt;li&amp;gt;Edit the lines, near the top of the job stream, marked with 1-4 followed by &amp;lt;code&amp;gt;&amp;amp;lt;&amp;amp;lt;&amp;lt;/code&amp;gt;. The numbers correspond to numbered steps in the comments.&lt;br /&gt;
&amp;lt;li&amp;gt;As needed, edit the lines after &amp;lt;code&amp;gt;SYSLIN DD *&amp;lt;/code&amp;gt; that are marked with &amp;lt;code&amp;gt;&amp;amp;lt;&amp;amp;lt;&amp;lt;/code&amp;gt;.  See the comments at the top of the &amp;lt;code&amp;gt;SYSLIN&amp;lt;/code&amp;gt; sections (&amp;lt;b&amp;gt;A&amp;lt;/b&amp;gt;-&amp;lt;b&amp;gt;C&amp;lt;/b&amp;gt;) for instructions.&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Submit the &amp;lt;code&amp;gt;LKONLNJ&amp;lt;/code&amp;gt; job to link the ONLINE load module.&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
Concise editing instructions are provided in the &amp;lt;code&amp;gt;LKONLNJ&amp;lt;/code&amp;gt; file itself. More details about link-editing the ONLINE load module are provided in the following table.&lt;br /&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;1&amp;lt;/th&amp;gt;&amp;lt;td&amp;gt;You must specify a value for the HLQ symbolic parameter in the EXEC LKM204P statement.  The value of HLQ corresponds to the high-level qualifier used for the DSN for:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; the downloaded object library&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;the Model204 load library&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;other data sets that are required for installation&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;tr&amp;gt;&amp;lt;th&amp;gt;2&amp;lt;/th&amp;gt;&amp;lt;td&amp;gt;One of the modifications is &amp;lt;b&amp;gt;always required&amp;lt;/b&amp;gt;, based on whether the ONLINE is to use RSQL (for Connect*) or not. &lt;br /&gt;
&lt;br /&gt;
Uncomment only one of the following statements:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;To link an ONLINE that uses RSQL, you must uncomment  the INCLUDE RKOBJ204(&amp;lt;b&amp;gt;LKSQLONL&amp;lt;/b&amp;gt;) statement.&lt;br /&gt;
&amp;lt;li&amp;gt;To link an ONLINE that does not use RSQL, you must uncomment the INCLUDE RKOBJ204(&amp;lt;b&amp;gt;LKNOSONL&amp;lt;/b&amp;gt;) statement.&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;&amp;lt;th&amp;gt;3&amp;lt;/th&amp;gt;&amp;lt;td&amp;gt;If you use an external authorizer, such as RACF or ACF2, you must:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[[#asm|Assemble the xxxPARM]] for your external authorizer to add the object file (such as RACFPARM or ACF2PARM) to your local object library.&lt;br /&gt;
&amp;lt;li&amp;gt;In the SYSLIN DD *, uncomment the appropriate INCLUDE statement(s) for your external authorizer. &amp;lt;blockquote 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;&amp;lt;li&amp;gt;Uncomment either the &amp;quot;static&amp;quot; or &amp;quot;dynamic&amp;quot; INCLUDE statement, depending on your configuration.&amp;lt;li&amp;gt;If you use ACF2, there are two INCLUDE statements to be uncommented; one refers to your system ACF2 library.  You must also provide the DSN for the ACF2 library in the ACF2 symbolic parameter in the EXEC LKM204P statement.&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/blockquote&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;&amp;lt;th&amp;gt;4&amp;lt;/th&amp;gt;&amp;lt;td&amp;gt;If you have other programs that you assemble for your Model 204 ONLINE module, for example, [[#FUNU|FUNU]], assemble them into your local object library.  You &amp;lt;strong&amp;gt;do not&amp;lt;/strong&amp;gt; need to add additional INCLUDE statements for FUNU or other locally assembled object files; they are already in the include streams from RKOBJLIB.&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;5&amp;lt;/th&amp;gt;&amp;lt;td&amp;gt;If you have an MQ series load library, set the MQ symbolic parameter to the correct DSN in the EXEC LKM204P statement. This allows you to use the MQ Series feature of &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model 204&amp;lt;/var&amp;gt;, either if you are already authorized for it, or to support a trial of it, without requiring relinking of the load module. You must also uncomment the INCLUDE MQ statement in the SYSLIN input.&lt;br /&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;
&amp;lt;div id=&amp;quot;link_ifam1&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Linking the Model 204 IFAM1 load module==&lt;br /&gt;
&amp;lt;!--Caution: &amp;lt;div&amp;gt;*s* above--&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
One of the members of the RKOBJLIB object library is &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[http://m204wiki.rocketsoftware.com/index.php/Model_204_IFAM1_link_job_stream_for_IBM_z/OS?title=Model_204_IFAM1_link_job_stream_for_IBM_z/OS&amp;amp;target=blank LKIFAM1J]&amp;lt;/span&amp;gt;, which is a job stream to link the &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model 204&amp;lt;/var&amp;gt; IFAM1 load module. &lt;br /&gt;
&lt;br /&gt;
===Linking IFAM1 (LKIFAM1J job stream)===&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Copy the &amp;lt;code&amp;gt;LKIFAM1J&amp;lt;/code&amp;gt; job stream from RKOBJLIB into a local TSO library.&lt;br /&gt;
&amp;lt;li&amp;gt;Edit your copy of &amp;lt;code&amp;gt;LKIFAM1J&amp;lt;/code&amp;gt; for your configuration:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Replace the first line with a JOB card.&lt;br /&gt;
&amp;lt;li&amp;gt;Edit the lines, near the top of the job stream, marked with numbers followed by &amp;lt;code&amp;gt;&amp;amp;lt;&amp;amp;lt;&amp;lt;/code&amp;gt;. The numbers correspond to numbered steps in the comments following these lines.&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Submit the &amp;lt;code&amp;gt;LKIFAM1J&amp;lt;/code&amp;gt; job to link the IFAM1 load module.&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;link_ifam4&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Linking the Model 204 IFAM4 load module==&lt;br /&gt;
&amp;lt;!--Caution: &amp;lt;div&amp;gt;*s* above--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
One of the members of the RKOBJLIB object library is &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[http://m204wiki.rocketsoftware.com/index.php/Model_204_IFAM4_link_job_stream_for_IBM_z/OS?title=Model_204_IFAM4_link_job_stream_for_IBM_z/OS&amp;amp;target=blank LKIFAM4J]&amp;lt;/span&amp;gt;, which is a job stream to link the &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model 204&amp;lt;/var&amp;gt; IFAM4 load module.&lt;br /&gt;
 &lt;br /&gt;
===Linking IFAM4 (LKIFAM4J job stream)===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Copy the &amp;lt;code&amp;gt;LKIFAM4J&amp;lt;/code&amp;gt; job stream from RKOBJLIB into a local TSO library.&lt;br /&gt;
&amp;lt;li&amp;gt;Edit your copy of &amp;lt;code&amp;gt;LKIFAM4J&amp;lt;/code&amp;gt; for your configuration:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Replace the first line with a JOB card.&lt;br /&gt;
&amp;lt;li&amp;gt;Edit the lines, near the top of the job stream, marked with numbers followed by &amp;lt;code&amp;gt;&amp;amp;lt;&amp;amp;lt;&amp;lt;/code&amp;gt;. The numbers correspond to numbered steps in the comments following these lines.&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Submit the &amp;lt;code&amp;gt;LKIFAM4J&amp;lt;/code&amp;gt; job to link the IFAM4 load module.&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;div id=&amp;quot;lkutils&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;!--Caution: &amp;lt;div&amp;gt; above--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Linking the Model 204 utility load modules==&lt;br /&gt;
&amp;lt;!--Caution: &amp;lt;div&amp;gt; above--&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
Most of the utility load modules from Model 204 version 7.4 will continue to perform correctly when used with version 7.5.&lt;br /&gt;
 &lt;br /&gt;
However, you must use the 7.5 version of the following utilities, which are sensitive to the Model 204 journal and checkpoint format:&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&amp;lt;b&amp;gt;AUDIT204&amp;lt;/b&amp;gt;&amp;lt;/td&amp;gt; &amp;lt;td&amp;gt;Extract from journal, with report stats and analysis&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&amp;lt;b&amp;gt;MERGEJ&amp;lt;/b&amp;gt;&amp;lt;/td&amp;gt; &amp;lt;td&amp;gt;Merge concurrent journal streams&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&amp;lt;b&amp;gt;UTILC&amp;lt;/b&amp;gt;&amp;lt;/td&amp;gt; &amp;lt;td&amp;gt;Information from checkpoint stream&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&amp;lt;b&amp;gt;UTILJ&amp;lt;/b&amp;gt;&amp;lt;/td&amp;gt; &amp;lt;td&amp;gt;Information from journal stream; add EOF markers&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Linking the utility load modules (LKALLUTJ job stream)===&lt;br /&gt;
 &lt;br /&gt;
One of the members of the RKOBJLIB object library is [[Model 204 utilities link job stream for IBM z/OS|LKALLUTJ]], a job stream to link the &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model 204&amp;lt;/var&amp;gt; utility load modules.&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Copy &amp;lt;code&amp;gt;LKALLUTJ&amp;lt;/code&amp;gt; into a local TSO library.&lt;br /&gt;
&amp;lt;li&amp;gt;Edit your copy of &amp;lt;code&amp;gt;LKALLUTJ&amp;lt;/code&amp;gt; for your configuration:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Replace the first line with a JOB card.&lt;br /&gt;
&amp;lt;li&amp;gt;Supply your installation high level qualifier(s) in the following lines marked with &amp;lt;code&amp;gt;&amp;amp;lt;&amp;amp;lt;&amp;lt;/code&amp;gt;:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;for &amp;lt;code&amp;gt;hlq&amp;lt;/code&amp;gt; in the &amp;lt;code&amp;gt;JCLLIB ORDER=(hlq.&amp;lt;/code&amp;gt;... line after the &amp;lt;code&amp;gt;JOB&amp;lt;/code&amp;gt; card&lt;br /&gt;
&amp;lt;li&amp;gt;after &amp;lt;code&amp;gt;HLQ=&amp;lt;/code&amp;gt;, on the line after &amp;lt;code&amp;gt;EXEC LKALLUTP&amp;lt;/code&amp;gt; at the bottom of the job stream&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Submit the &amp;lt;code&amp;gt;LKALLUTJ&amp;lt;/code&amp;gt; job to link the utility load modules.&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;div id=&amp;quot;asm&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
==Assembling customized modules into your local object library (LOCAL.OBJLIB)==&lt;br /&gt;
&amp;lt;!--Caution: &amp;lt;div&amp;gt; above--&amp;gt;&lt;br /&gt;
Copy the customized source module (such as, FUNU, MSGU, ACF2PARM, RACFPARM, TOPSPARM, CDTB, or UL/DB2) from your current release into your local source library, if you have not already done so. &lt;br /&gt;
The local source library is not version-specific, so modules copied into it can be used for future installations.&lt;br /&gt;
&lt;br /&gt;
One of the members of the RKOBJLIB object library is [[Model 204 local member assembly job stream for IBM z/OS|JASMJ]], a job stream to assemble a member from your Model 204 local source library into your local object library (LOCAL.OBJLIB).&lt;br /&gt;
&lt;br /&gt;
===Assembling customized modules (JASMJ job stream)===&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Copy &amp;lt;code&amp;gt;JASMJ&amp;lt;/code&amp;gt; into a local TSO library.&lt;br /&gt;
&amp;lt;li&amp;gt;Edit your copy of &amp;lt;code&amp;gt;JASMJ&amp;lt;/code&amp;gt; for your configuration:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Replace the first line with a JOB card.&lt;br /&gt;
&amp;lt;li&amp;gt;Supply your installation high level qualifier(s) in the following lines marked with &amp;lt;code&amp;gt;&amp;amp;lt;&amp;amp;lt;&amp;lt;/code&amp;gt;:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;for &amp;lt;code&amp;gt;hlq&amp;lt;/code&amp;gt; in the &amp;lt;code&amp;gt;JCLLIB ORDER=(hlq.&amp;lt;/code&amp;gt;... line after the &amp;lt;code&amp;gt;JOB&amp;lt;/code&amp;gt; card&lt;br /&gt;
&amp;lt;li&amp;gt;after &amp;lt;code&amp;gt;HLQ=&amp;lt;/code&amp;gt;, on the ASM line at the bottom of the job stream&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Provide the member name to assemble (such as FUNU, MSGU, RACFPARM) on the &amp;lt;code&amp;gt;MEM=&amp;lt;/code&amp;gt; line.&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Submit the &amp;lt;code&amp;gt;JASMJ&amp;lt;/code&amp;gt; job to assemble the module into your local object library.&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;div id=&amp;quot;lkcram&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;secparm&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Setting up the security module==&lt;br /&gt;
&amp;lt;!--Caution: &amp;lt;div&amp;gt; above--&amp;gt;&lt;br /&gt;
This section assumes that if you are using a [[Security interfaces overview|security interface]] such as CA-ACF2, RACF, or CA-Top Secret, you have already installed it with Model 204 version 7.4.&lt;br /&gt;
&lt;br /&gt;
You will use the xxxxPARM provided with Model 204 release v7.4.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Review the Model 204 7.4 installation section for your interface to ensure that you have completed all of the steps:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[[CA-ACF2_MVS_interface#Installing_the_Model_204_CA-ACF2_MVS_Interface|CA-ACF2 (MVS)]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[[CA-ACF2_VM_interface#Installing_the_CA-ACF2_VM_Interface|CA-ACF2 (VM)]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[[Security_Server_(formerly_RACF)_interface#Installing_the_Security_Server_Interface|RACF]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[[CA-Top_Secret_interface#Installing_the_CA-Top_Secret_Interface|CA-Top Secret]]&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; [[#asm|Assemble]] the security module:&lt;br /&gt;
ACF2PARM, RACFPARM, or TOPSPARM.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Optional. Link the security module as described below if you want it to be dynamically loaded.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Linking the security module (LKSECRJ job stream)===&lt;br /&gt;
&lt;br /&gt;
Dynamic loading lets you modify the security parameters without having to relink Model 204, which would be required if the parameter module were linked into Model 204 directly. &lt;br /&gt;
&lt;br /&gt;
If you want Model 204 to dynamically load your security module during Model 204 ACF2, RACF, or TOPSECRET interface initialization, then you must link the corresponding security parameter module.&lt;br /&gt;
&lt;br /&gt;
One of the members of the RKOBJLIB object library is &amp;lt;code&amp;gt;LKSECRJ&amp;lt;/code&amp;gt;, a job stream to link-edit the security parameter module. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Copy [[Model 204 security module link job stream for IBM z/OS|LKSECRJ]] into a local TSO library.&lt;br /&gt;
&amp;lt;li&amp;gt;Edit your copy of &amp;lt;code&amp;gt;LKSECRJ&amp;lt;/code&amp;gt; for your configuration:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Replace the first line with a JOB card.&lt;br /&gt;
&amp;lt;li&amp;gt;Edit the lines, near the top of the job stream, marked with numbers followed by &amp;lt;code&amp;gt;&amp;amp;lt;&amp;amp;lt;&amp;lt;/code&amp;gt;. The numbers correspond to numbered steps in the comments following these lines.&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Submit the &amp;lt;code&amp;gt;LKSECRJ&amp;lt;/code&amp;gt; job to link-edit the security parameter module (ACF2PARM, RACFPARM, or TOPSPARM).&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;cics&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==CICS interface installation==&lt;br /&gt;
&amp;lt;!--Caution: &amp;lt;div&amp;gt; above--&amp;gt;&lt;br /&gt;
The Model 204 CICS interface allows CICS complete access to Model 204 facilities and supports CICS pseudo conversational programs.&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; It is not necessary to install the CICS interface if it has been installed for a previous version of Model 204. The load modules from the older version are compatible with version 7.5 of Model 204.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Requirements===&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;CICS Transaction Server support&lt;br /&gt;
&amp;lt;p&amp;gt;Rocket M204 supports the CICS Transaction Server versions 4.1, 4.2 and 5.3.&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Supporting TPROCESS COBOL applications&lt;br /&gt;
&amp;lt;p&amp;gt;If your CICS TPROCESS application was originally linked with AMODE=24, you must relink the CICS TPROCESS application specifying AMODE=31 because AMODE=24 is not supported.&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===CICS interface overview===&lt;br /&gt;
For an overview of the CICS interface, including storage requirements and a listing of CICS interface components, see [[CICS interface]].&lt;br /&gt;
 &lt;br /&gt;
===Installing the CICS interface===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Customize the interface by copying the CICFG copy member from RKMACLIB into your local source library and editing it as needed.&lt;br /&gt;
&amp;lt;p&amp;gt;For information on customizations needed for using the CICS Standard Mapping Service, see [[CICS interface]].&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Update the CICS System Definition (CSD) using one of the following methods:&lt;br /&gt;
&amp;lt;ul&amp;gt;&amp;lt;li&amp;gt;Resource Definition Online (CEDA). The supplied member CEDAM204 in RKMACLIB provides an example of the required PCT, PPT, and PLT definitions.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The IBM DFHSCDUP offline utility, to process the definitions in batch.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[[#CICS_alloc|Allocate]] a CICS user library.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[[#CICS_asm|Assemble and link]] the CICS modules.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Updating the CICS System Definition (CSD)===&lt;br /&gt;
You can update the CSD by using either CEDA or the DFHCSDUP utility and the CEDAM204 member of RKMACLIB. Use the values in the following table, where appropriate, for the method you choose. Information about&lt;br /&gt;
using CEDA follows the table.&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;b&amp;gt;CICS System Definition values&amp;lt;/b&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;User program&amp;lt;/th&amp;gt; &amp;lt;th&amp;gt;Program name&amp;lt;/th&amp;gt; &amp;lt;th&amp;gt;Transaction ID&amp;lt;/th&amp;gt; &amp;lt;th&amp;gt;Modifiable &amp;lt;br&amp;gt;CICFG symbol&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;TWA size&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;IFAM2 pseudo conversational&amp;lt;/td&amp;gt; &amp;lt;td&amp;gt;DFHPSF&amp;lt;/td&amp;gt; &amp;lt;td&amp;gt;DFHPSF is accessed by using a CICS LINK. It is never&lt;br /&gt;
invoked with a transaction ID from a terminal.&amp;lt;/td&amp;gt; &amp;lt;td /&amp;gt; &amp;lt;td /&amp;gt;&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Full-screen interface&amp;lt;/td&amp;gt; &amp;lt;td&amp;gt;M204PSFS&amp;lt;/td&amp;gt; &amp;lt;td&amp;gt;M204&amp;lt;/td&amp;gt; &amp;lt;td&amp;gt;&amp;amp;TRN&amp;lt;/td&amp;gt; &amp;lt;td&amp;gt;88&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Screen copy transaction&amp;lt;/td&amp;gt; &amp;lt;td&amp;gt;M204CRPS&amp;lt;/td&amp;gt; &amp;lt;td&amp;gt;U204&amp;lt;/td&amp;gt; &amp;lt;td /&amp;gt; &amp;lt;td /&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Screen print transaction&amp;lt;/td&amp;gt; &amp;lt;td&amp;gt;M204PRNT&amp;lt;/td&amp;gt; &amp;lt;td&amp;gt;P204&amp;lt;/td&amp;gt; &amp;lt;td&amp;gt;&amp;amp;COP&amp;lt;/td&amp;gt; &amp;lt;td&amp;gt;88&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
CEDA (the Resource Definition Online transaction) or the DFHCSDUP utility defines the transactions and programs to the CSD file.&lt;br /&gt;
 &lt;br /&gt;
If you are not using the CEDAM204 member, then define the transactions and programs by using CEDA&lt;br /&gt;
and the values in the previous table, as in the following example:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;CEDA DEFine PROG(program_name)&lt;br /&gt;
  GRoup(group_name)&lt;br /&gt;
  LANGuage(ASSEMBLER)&lt;br /&gt;
  RELoad(NO)&lt;br /&gt;
  RESident(NO) (Except for DFHPSF, RESident(YES))&lt;br /&gt;
  RSL(PUBLIC)&lt;br /&gt;
  STatus(ENABLED)&lt;br /&gt;
 &lt;br /&gt;
CEDA DEFine TRANsaction(trans_ID)&lt;br /&gt;
  GRoup(group_name)&lt;br /&gt;
  PROgram(program_name)&lt;br /&gt;
  TWASIZE(twa_size_value)&lt;br /&gt;
  .&lt;br /&gt;
  .&lt;br /&gt;
  .&lt;br /&gt;
  RSL(PUBLIC)&lt;br /&gt;
  .&lt;br /&gt;
  .&lt;br /&gt;
  .&lt;br /&gt;
 &lt;br /&gt;
CEDA CHeck GRoup(group_name) &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
You can use a transaction ID for a user program that is different from the value&lt;br /&gt;
shown in the previous table. However, if you do so, you must change the associated&lt;br /&gt;
CICFG symbol shown in the table.&lt;br /&gt;
 &lt;br /&gt;
As shown in the preceding example, group_name is any valid group name for the&lt;br /&gt;
user site.&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; Remember to add the groups to the GRPLIST for the particular CICS&lt;br /&gt;
region. If the groups are not added, they are not installed during each CICS initialization.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;CICS_alloc&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Allocating a CICS user library (JALCICSJ job stream)===&lt;br /&gt;
&amp;lt;!--Caution: &amp;lt;div&amp;gt; above--&amp;gt;&lt;br /&gt;
One of the members of the RKOBJLIB object library is [[Model 204 CICS user library allocation job stream for IBM z/OS|JALCICSJ]], a job stream to allocate an empty CICS user library. You must allocate the CICS user library before assembling and linking the CICS modules. &lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Copy &amp;lt;code&amp;gt;JALCICSJ&amp;lt;/code&amp;gt; into a local TSO library.&amp;lt;/li&amp;gt; &lt;br /&gt;
&amp;lt;li&amp;gt;Edit your copy of &amp;lt;code&amp;gt;JACICSJ&amp;lt;/code&amp;gt; for your configuration: &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Replace the first line with a JOB card.&amp;lt;/li&amp;gt; &lt;br /&gt;
&amp;lt;li&amp;gt;Supply your installation high level qualifier(s) in the following lines marked with &amp;lt;&amp;lt;: &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;for hlq in the JCLLIB ORDER=(hlq.... line after the JOB card &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;after HLQ=, on the line after EXEC LKALLUTP at the bottom of the job stream &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&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;Submit the &amp;lt;code&amp;gt;JALCICSJ&amp;lt;/code&amp;gt; job to allocate the CICS user library.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;CICS_asm&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
===Assembling and linking CICS modules (LKCICSJ job stream)===&lt;br /&gt;
&amp;lt;!--Caution: &amp;lt;div&amp;gt; above--&amp;gt;&lt;br /&gt;
One of the members of the RKOBJLIB object library is [[Model 204 CICS module assembly job stream for_ IBM z/OS|LKCICSJ]], a job stream to assemble and link the &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model 204&amp;lt;/var&amp;gt; CICS modules.&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Copy &amp;lt;code&amp;gt;LKCICSJ&amp;lt;/code&amp;gt; into a local TSO library.&lt;br /&gt;
&amp;lt;li&amp;gt;Edit your copy of &amp;lt;code&amp;gt;LKCICSJ&amp;lt;/code&amp;gt; for your configuration:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Replace the first line with a JOB card.&lt;br /&gt;
&amp;lt;li&amp;gt;Supply your Model 204 installation high level qualifier(s) in the following lines marked with &amp;lt;code&amp;gt;&amp;amp;lt;&amp;amp;lt;&amp;lt;/code&amp;gt;:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;for &amp;lt;code&amp;gt;hlq&amp;lt;/code&amp;gt; in the &amp;lt;code&amp;gt;JCLLIB ORDER=(hlq.&amp;lt;/code&amp;gt;... line after the &amp;lt;code&amp;gt;JOB&amp;lt;/code&amp;gt; card&lt;br /&gt;
&amp;lt;li&amp;gt;after &amp;lt;code&amp;gt;HLQ=&amp;lt;/code&amp;gt;, on the line after &amp;lt;code&amp;gt;EXEC JALCICSP&amp;lt;/code&amp;gt; at the bottom of the job stream&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Submit the &amp;lt;code&amp;gt;LKCICSJ&amp;lt;/code&amp;gt; job to assemble and link the CICS module.&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;tso&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==TSO interface installation==&lt;br /&gt;
&amp;lt;!--Caution: &amp;lt;div&amp;gt; above--&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; It is not necessary to install the TSO interface if it has been installed for a previous version of Model 204. The load modules from the older version are compatible with version 7.5 of Model 204.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The Model 204 TSO Interface enables the TSO user to communicate with a Model 204 Online.&lt;br /&gt;
&lt;br /&gt;
The TSO Interface consists of two assembly language modules, TSFS and TSUL, whose source is located in the macro library. The modules are completely reentrant, reusable, and refreshable. Installation requires assembly and link-editing of the TSO source modules.&lt;br /&gt;
&lt;br /&gt;
===Installing the TSO interface===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;If you are using TSO extensions, modify TSFS in the local source library by changing:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;&amp;amp;TSOV SETC &#039;TSO&#039; &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;to:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;&amp;amp;TSOV SETC &#039;TSOE&#039;&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Changing the &amp;amp;TSOV SETC &#039;TSO&#039; code in TSFS causes assembly of the NOEDIT form of the TPUT macro in the TSFS module. The NOEDIT form, required for 3270 extended data streams, allows proper handling of colors or highlighting in TSO extensions. NOEDIT is recommended for all TSO extensions.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Assemble and link the TSO modules, using the &amp;lt;code&amp;gt;LKTSOJ&amp;lt;/code&amp;gt; job.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Assembling TSO modules (LKTSOJ job stream)===&lt;br /&gt;
&lt;br /&gt;
One of the members of the RKOBJLIB object library is [[Model 204 TSO module assembly job stream for IBM z/OS|LKTSOJ]], a job stream to assemble and link the &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model 204&amp;lt;/var&amp;gt; TSO modules.&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Copy &amp;lt;code&amp;gt;LKTSOJ&amp;lt;/code&amp;gt; into a local TSO library.&lt;br /&gt;
&amp;lt;li&amp;gt;Edit your copy of &amp;lt;code&amp;gt;LKTSOJ&amp;lt;/code&amp;gt; for your configuration:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Replace the first line with a JOB card.&lt;br /&gt;
&amp;lt;li&amp;gt;Supply your installation high level qualifier(s) in the following lines marked with &amp;lt;code&amp;gt;&amp;amp;lt;&amp;amp;lt;&amp;lt;/code&amp;gt;:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;for &amp;lt;code&amp;gt;hlq&amp;lt;/code&amp;gt; in the &amp;lt;code&amp;gt;JCLLIB ORDER=(hlq.&amp;lt;/code&amp;gt;... line after the &amp;lt;code&amp;gt;JOB&amp;lt;/code&amp;gt; card&lt;br /&gt;
&amp;lt;li&amp;gt;after &amp;lt;code&amp;gt;HLQ=&amp;lt;/code&amp;gt;, on the line after &amp;lt;code&amp;gt;EXEC LKALLUTP&amp;lt;/code&amp;gt; at the bottom of the job stream&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Submit the &amp;lt;code&amp;gt;LKTSOJ&amp;lt;/code&amp;gt; job to assemble and link the TSO modules.&lt;br /&gt;
&amp;lt;/ol&amp;gt; &lt;br /&gt;
&amp;lt;div id=&amp;quot;FUNU&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==CRAM==&lt;br /&gt;
RKOBJLIB also contains LKCRAMJ, the job stream to link the CRAM load modules.  &lt;br /&gt;
&lt;br /&gt;
Versions 7.4 and later of the CRAM load modules are completely compatible with version 7.5 of Model 204. Deploying a new version of CRAM can be an intensive process, and because you have version 7.4 installed, it is not necessary. You can safely bypass linking the 7.5 CRAM modules. However, if you do not link the 7.5 CRAM modules, you will need to apply additional 7.4 maintenance.&lt;br /&gt;
&lt;br /&gt;
Your CRAM installation options are:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Install 7.5 XDM by running LKCRAMJ to link the 7.5 CRAM modules.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Install 7.4 XDM and then apply Early Warnings for Model 204. (You can do this by applying Autofix release EW3044, which includes these Early Warnings as well as Early Warnings for Dictionary/204 through 740DI016.)&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Sharing 7.1 XDM requires maintenance through 710EW172.&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;
==FUNU and optional MSGU==&lt;br /&gt;
&amp;lt;!--Caution: &amp;lt;div&amp;gt; above--&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
This section lists installation considerations if you have your own user-written $functions module (FUNU).&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; If you have your own FUNU or MSGU module, you must assemble it &amp;lt;b&amp;gt;before linking the ONLINE/IFAM1/IFAM4&amp;lt;/b&amp;gt; load modules.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;div id=&amp;quot;FUNU_7.5&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
===FUNU changes for version 7.5===&lt;br /&gt;
&amp;lt;!--Caution: &amp;lt;div&amp;gt; above--&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
{{Template:FUNU changes for 7.5}}&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;div id=&amp;quot;asmFUNU&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===FUNU (and MSGU) assembly===&lt;br /&gt;
&amp;lt;!--Caution: &amp;lt;div&amp;gt; above--&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
Copy the source from RKMACLIB into your local source library.&lt;br /&gt;
 &lt;br /&gt;
After making any changes required for this version of &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model 204&amp;lt;/var&amp;gt;, run &amp;lt;code&amp;gt;JASMJ&amp;lt;/code&amp;gt; to [[#asm|assemble]] FUNU into your local object library.  &lt;br /&gt;
&lt;br /&gt;
If needed, modify and run &amp;lt;code&amp;gt;JASMJ&amp;lt;/code&amp;gt; to assemble MSGU.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;You do &amp;lt;b&amp;gt;not&amp;lt;/b&amp;gt; need to insert any INCLUDE statements for either FUNU nor MSGU; they are already present in the INCLUDE member (LKSQLONL or LKNOSONL) provided in the downloaded object library.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;div id=&amp;quot;ul_db2&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Installing the UL/DB2 interface (JAUSQLJ job stream)==&lt;br /&gt;
&amp;lt;!--Caution: &amp;lt;div&amp;gt; above--&amp;gt;&lt;br /&gt;
To support the UL/DB2 interface, USQL code is delivered in source for you to preprocess for your version of DB2. If you use the UL/DB2 interface, assemble the source as described below &amp;lt;b&amp;gt;before linking the ONLINE/IFAM1/IFAM4&amp;lt;/b&amp;gt; load modules.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Copy [[Model 204 UL/DB2 job stream for IBM z/OS|JAUSQLJ]] into a local TSO library.&lt;br /&gt;
&amp;lt;li&amp;gt;Edit your copy of &amp;lt;code&amp;gt;JAUSQLJ&amp;lt;/code&amp;gt; for your configuration:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Replace the first line with a JOB card.&lt;br /&gt;
&amp;lt;li&amp;gt;Supply your installation high level qualifier(s) in the following lines marked with &amp;lt;code&amp;gt;&amp;amp;lt;&amp;amp;lt;&amp;lt;/code&amp;gt;:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;for &amp;lt;code&amp;gt;hlq&amp;lt;/code&amp;gt; in the &amp;lt;code&amp;gt;JCLLIB ORDER=(hlq.&amp;lt;/code&amp;gt;... line after the &amp;lt;code&amp;gt;JOB&amp;lt;/code&amp;gt; card&lt;br /&gt;
&amp;lt;li&amp;gt;on the line after &amp;lt;code&amp;gt;EXEC JAUSQLP&amp;lt;/code&amp;gt; at the bottom of the job stream set:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;HLQ=&amp;lt;/code&amp;gt;high level qualifier of all Model 204 installation DSNs&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;DB2HLQ=&amp;lt;/code&amp;gt;high level qualifier for your DB2 maclib.&amp;lt;/li&amp;gt; &lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Submit the &amp;lt;code&amp;gt;JAUSQLJ&amp;lt;/code&amp;gt; job to preprocess and assemble the USQL module.  The JAUSQLJ job executes the following two steps:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Run USQL (contained in RKMACLIB) through the DB2 preprocessor to process the EXEC SQL statements.  This step produces two data sets: the DBRM and the expanded USQL source.  The DBRM is saved as USQLDBRM in the local object library.  The expanded USQL source is passed to step two for assembly.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Assemble expanded USQL source into local object library.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Bind the DBRM as the plan with a site-specific plan name.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
For more information on UL/DB2, see the &amp;lt;var class=&amp;quot;book&amp;quot;&amp;gt;Rocket Model 204 User Language/DATABASE 2 Interface Guide&amp;lt;/var&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;softspy&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Upgrading SoftSpy for 7.5==&lt;br /&gt;
&amp;lt;!--Caution: &amp;lt;div&amp;gt; above--&amp;gt;&lt;br /&gt;
To upgrade SoftSpy for version 7.5, download, upload, and restore the SoftSpy procedure file, SPYPROC, which is distributed in a dump format.&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Download SPYPROC, in binary form, from the [https://m204.rocketsoftware.com/maint/ullist?nickname=ROCKET SOUL files download page] to a workstation file.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Upload the file from your workstation to your z/OS system.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;RESTORE the file into a Model 204 SOUL file.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt; &lt;br /&gt;
For detailed instructions, see [http://m204wiki.rocketsoftware.com/index.php?title=Web_help_download_SOUL_files#How_can_the_dump_file_be_uploaded_to_the_mainframe.3F Downloading and restoring SOUL files].&lt;br /&gt;
&lt;br /&gt;
==Verifying Model 204 7.5 on your system==&lt;br /&gt;
To perform an initial verification that your upgrade to 7.5 was successful, issue the following commands from the Model 204 command line.&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;Command&amp;lt;/th&amp;gt; &amp;lt;th&amp;gt;You should see...&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;ROCKET&amp;lt;/td&amp;gt; &amp;lt;td&amp;gt;A list of authorized M204 products (including 7.5) currently on your system.&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;DISPLAY ZAPS&amp;lt;/td&amp;gt; &amp;lt;td&amp;gt;A list of Model 204 zaps (including 7.5 zaps) on your system.&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;DICTADMIN&amp;lt;/td&amp;gt; &amp;lt;td&amp;gt;The Dictionary Administration subsystem, displaying &amp;lt;code&amp;gt;Release 7.5&amp;lt;/code&amp;gt; on its menu screens.&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;SUBSYSMGMT&amp;lt;/td&amp;gt; &amp;lt;td&amp;gt;The Application Subsystem facility, displaying &amp;lt;code&amp;gt;VER 7 REL 5&amp;lt;/code&amp;gt; on its menu screens.&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Example workflow for 7.5: download through installation==&lt;br /&gt;
This example shows one typical installation workflow: the site does not use RSQL, it uses the RACF external authorizer, and it does not have its own FUNU. The IBM system MQ loadlib is &amp;lt;code&amp;gt;MQSERIES.SCSQLOAD&amp;lt;/code&amp;gt; (this is typical in z/OS).&lt;br /&gt;
The high-level qualifier in this example is MYBUILD.&lt;br /&gt;
 &lt;br /&gt;
The other item needed is the member name &amp;lt;code&amp;gt;MYBLDOB&amp;lt;/code&amp;gt;, which is chosen arbitrarily for this example, and the following DSNs:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;MYBUILD.M204V75.RKOBJLIB.DISTRIB&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;MYBUILD.M204V75.RKOBJLIB&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;MYBUILD.M204V75.RKMACLIB.DISTRIB&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;MYBUILD.M204V75.RKMACLIB&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;MYBUILD.M204V75.LOCAL.OBJLIB&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;MYBUILD.M204V75.LOADLIB&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
===Build RKOBJLIB===&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Download the object library (M204V75.OBJ) from the downloads page.&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Upload to the mainframe, in binary format, with settings FB/80/6400, as &amp;lt;code&amp;gt;MYBUILD.M204V75.RKOBJLIB.DISTRIB&amp;lt;/code&amp;gt;.&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Download the macro library (M204V75_ZOS.MAC) from the downloads page.&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Upload to the mainframe, in binary format, with settings FB/80/6400, as &amp;lt;code&amp;gt;MYBUILD.M204V75.RKMACLIB.DISTRIB&amp;lt;/code&amp;gt;.&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Create the member MYBLDOB in my TSO library from a [http://sirius-software.com/download/new204lb.txt download] of the job stream to build the object and macro libraries, using the following at the end of the job stream:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;//BLD EXEC NEW204LB,VERSION=75,&lt;br /&gt;
//         HLQ=MYBUILD,&lt;br /&gt;
//         OBJINP=MYBUILD.M204V75.RKOBJLIB.DISTRIB,&lt;br /&gt;
//         MACINP=MYBUILD.M204V75.RKMACLIB.DISTRIB&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Run MYBLDOB from my TSO library. MYBLDOB deletes and then creates &amp;lt;code&amp;gt;MYBUILD.M204V75.RKOBJLIB&amp;lt;/code&amp;gt; and&lt;br /&gt;
&amp;lt;code&amp;gt;MYBUILD.M204V75.RKMACLIB&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Upload to the mainframe, in binary format, with settings FB/80/6400, as &amp;lt;code&amp;gt;MYBUILD.M204V75.RKMACLIB.DISTRIB&amp;lt;/code&amp;gt;.&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Create the member MYBLDDS in my TSO library by copying&lt;br /&gt;
the job stream from [[Model 204 data set allocation job stream for IBM z/OS|JALINSJ]], using the following at the end of the job stream:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;//BLD EXEC JALINSP, &lt;br /&gt;
// HLQ=MYBUILD &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Run MYBLDDS from my TSO library. MYBLDDS allocates an empty loadlib data set for the Model 204 load modules, an empty local source library for the customized source files, and an empty local object library for the customized local object modules, with the following names: &amp;lt;code&amp;gt;MYBUILD.M204V75.LOADLIB&amp;lt;/code&amp;gt;,  &amp;lt;code&amp;gt;MYBUILD.M204.LOCAL.SRCLIB&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;MYBUILD.M204V75.LOCAL.OBJLIB&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Assemble and link===&lt;br /&gt;
&amp;lt;ol &amp;gt; &lt;br /&gt;
&amp;lt;li&amp;gt;Copy the RACFPARM source to the &amp;lt;code&amp;gt;MYBUILD.M204.LOCAL.SRCLIB&amp;lt;/code&amp;gt; and make any necessary modifications.&lt;br /&gt;
&amp;lt;li&amp;gt;Create the member JASMSECJ in my TSO library by copying&lt;br /&gt;
the job stream from [[Model 204 local member assembly job stream for IBM z/OS|JASMJ]], using the following at the end of the job stream:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;//ASM     EXEC JASMP,HLQ=MYBUILD,    &lt;br /&gt;
//             MEM=RACFPARM           &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Run JASMSECJ from my TSO library; this assembles the RACFPARM source file in the &amp;lt;code&amp;gt;MYBUILD.M204.LOCAL.SRCLIB&amp;lt;/code&amp;gt; and stores the object in &amp;lt;code&amp;gt;MYBUILD.M204V75.LOCAL.OBJLIB&amp;lt;/code&amp;gt;.&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Copy the member LKONLNJ from &amp;lt;code&amp;gt;MYBUILD.M204V75.RKOBJLIB&amp;lt;/code&amp;gt; to my TSO library, and customize LKONLN as follows:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Make these changes at the top of the job stream:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;//            JCLLIB ORDER=(MYBUILD.M204V75.RKOBJLIB)&lt;br /&gt;
//LKONLN EXEC LKM204P,&lt;br /&gt;
//            HLQ=MYBUILD,&lt;br /&gt;
//            MQ=MQSERIES.SCSQLOAD&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Uncomment the &amp;lt;code&amp;gt;INCLUDE&amp;lt;/code&amp;gt; line for LKNOSONL (that is, without RSQL).&lt;br /&gt;
&amp;lt;li&amp;gt;Uncomment the &amp;lt;code&amp;gt;INCLUDE&amp;lt;/code&amp;gt; line for MQ.&lt;br /&gt;
&amp;lt;li&amp;gt;Uncomment the &amp;lt;code&amp;gt;INCLUDE&amp;lt;/code&amp;gt; line for my external authorizer module (such as RACFOS and RACFPARM).&lt;br /&gt;
&amp;lt;li&amp;gt;Submit the LKONLNJ job from my TSO library, this creates ONLINE (and BATCH204 alias) in MYBUILD.M204V75.LOADLIB.&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Perform a simple smoke test: run BATCH204 with &#039;DISPLAY ZAPS&#039; and &#039;ROCKET&#039; commands.&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;To link the utilities, copy member LKALLUTJ from &amp;lt;code&amp;gt;MYBUILD.M204V75.RKOBJLIB&amp;lt;/code&amp;gt; to my TSO library, and see all &amp;lt;code&amp;gt;&amp;amp;lt;&amp;amp;lt;&amp;lt;/code&amp;gt; lines to customize for my site; submit the LKALLUTJ job.&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Ensure that any JCL that performs deferred index sorting for &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model 204&amp;lt;/var&amp;gt; version 7.5&lt;br /&gt;
(typically, FLOD jobs) uses the new &amp;lt;code&amp;gt;MYBUILD.M204V75.LOADLIB&amp;lt;/code&amp;gt; for the E15 (OI15OS) and E35 (OI35OS) sort exits.&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[[Upgrading to Model 204 version 7.5 on IBM z/VM CMS]]&lt;br /&gt;
&amp;lt;li&amp;gt;[[Upgrading to Model 204 version 7.5 on IBM z/VSE]]&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Additional information==&lt;br /&gt;
Refer to the &amp;lt;var class=&amp;quot;book&amp;quot;&amp;gt;[[Media:M204_V7R4_zOS_Install.pdf|Rocket Model 204 Installation Guide for IBM z/OS, version 7.4]]&amp;lt;/var&amp;gt;, for additional installation information.&lt;br /&gt;
 &lt;br /&gt;
[[Category:Installation]]&lt;/div&gt;</summary>
		<author><name>Mlarocca</name></author>
	</entry>
	<entry>
		<id>https://m204wiki.rocketsoftware.com/index.php?title=Upgrading_to_Model_204_version_7.5_on_IBM_z/OS&amp;diff=81360</id>
		<title>Upgrading to Model 204 version 7.5 on IBM z/OS</title>
		<link rel="alternate" type="text/html" href="https://m204wiki.rocketsoftware.com/index.php?title=Upgrading_to_Model_204_version_7.5_on_IBM_z/OS&amp;diff=81360"/>
		<updated>2015-10-23T19:49:33Z</updated>

		<summary type="html">&lt;p&gt;Mlarocca: /* CRAM */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div class=&amp;quot;toclimit-3&amp;quot;&amp;gt;__TOC__&amp;lt;/div&amp;gt;&lt;br /&gt;
==Overview==&lt;br /&gt;
This page describes the steps required to upgrade from Rocket Model 204 version 7.4 to version 7.5, on the IBM&amp;lt;sup&amp;gt;&amp;amp;reg;&amp;lt;/sup&amp;gt; z/OS&amp;lt;sup&amp;gt;&amp;amp;reg;&amp;lt;/sup&amp;gt; operating system.&lt;br /&gt;
&lt;br /&gt;
For information on the new features available in version 7.5, see the [[Release notes for Model 204 version 7.5|7.5 Release notes]].&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;table&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&amp;lt;p&amp;gt;In order to upgrade to Model 204 version 7.5, &amp;lt;b&amp;gt;you must have version 7.4&amp;lt;/b&amp;gt; and [[#Before you begin|various Early Warnings]] installed on your system..&amp;lt;/p&amp;gt; &amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt; &lt;br /&gt;
&lt;br /&gt;
To upgrade to version 7.5 simply download, upload, and link the 7.5 object modules available from the downloads page to install the 7.5 components.&lt;br /&gt;
&lt;br /&gt;
==Before you begin==&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;In order to upgrade to version 7.5, you must have version 7.4 and Early Warnings for Dictionary/204 through 740DI016 installed on your system.&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; If you plan to use v7.4 CRAM with your v7.5 installation, you will need to apply all 7.4 maintenance. See [[#CRAM|CRAM]] for details.&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
For information on Early Warnings, log in to the [http://www.rocketsoftware.com/support Rocket Customer Portal].&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;For system requirements for version 7.5, see the [[Release notes for Model 204 version 7.5#Operating system requirements|7.5 Release notes]].&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;You must have either a [[Rocket M204 user ID]] or a Sirius user ID to download the installation files.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The object library has the authorization zap (covering your licensed processors) preapplied, so you do not need to get a new authorization zap from the website. &amp;lt;br /&amp;gt;(The preapplied zap will authorize Model 204 itself and any separately purchased products such as SirScan.)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The object library also has the maintenance zaps (as of the time the stream was&lt;br /&gt;
prepared) preapplied, so you do not need to apply any maintenance as part of this installation. (You will only need to apply any new maintenance when it becomes available for this release.)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;steps&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Overview of upgrading steps==&lt;br /&gt;
 &lt;br /&gt;
Review the following high-level summary of steps before you begin downloading the &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model 204&amp;lt;/var&amp;gt; version 7.5 files.&lt;br /&gt;
 &lt;br /&gt;
For an example, see [[#Example_workflow_for_7.5:_download_through_installation|Example workflow for 7.5: download through installation]].&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;Use your [[Rocket M204 user ID]] to [[#downloading|download]] the Model 204 object library and the Model 204 macro library.&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;[[#uploading|Upload]] the downloaded components to the z/OS system on the IBM mainframe.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;[[#bldLibs|Build]] the RKOBJLIB object library and RKMACLIB macro library. (Once you have built these libraries, do not modify them.)&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Submit the job to [[#allocating|allocate the other data sets]] required for installation.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;If you have your own user $functions (FUNU), you must do the following steps:&lt;br /&gt;
&amp;lt;ol style=&amp;quot;list-style-type:lower-alpha;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[[#FUNU_7.5|Modify FUNU for 64-bit addressing]] considerations and store the modified source in your local source library.&amp;lt;/li&amp;gt; &lt;br /&gt;
&amp;lt;li&amp;gt;If you have any user-defined messages (MSGU), store them in your local source library.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[[#asmFUNU|Assemble]] FUNU (and MSGU, if applicable), with the output object file stored in your local object library.&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;If you use an external authorizer (such as RACF) for &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model 204&amp;lt;/var&amp;gt;, [[#secparm|assemble the &amp;lt;i&amp;gt;xxxx&amp;lt;/i&amp;gt;PARM security module]] (such as RACFPARM). The object file is then stored in your local object library.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;If you use the [[#ul_db2|UL/DB2 interface]], preprocess and assemble the USQL module.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;If you use other customized modules, such as CDTB, modify them as needed and [[#asm|assemble]] them.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Link the [[#lkonln|ONLINE]] load module.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;If you use the [[#link_ifam1|IFAM1]] and [[#link_ifam4|IFAM4]] load modules, link them.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Link the &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model 204&amp;lt;/var&amp;gt; [[#lkutils|utility load modules]].&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;If you use the [[#cics|CICS interface]], customize it, and then assemble and link the CICS modules.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;If you use the [[#tso|TSO]] interface, assemble and link-edit the TSO source modules.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;If you use [[#softspy|SoftSpy]], upgrade it for 7.5.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Object and macro libraries==&lt;br /&gt;
{{Template:Model 204 installation components}}&lt;br /&gt;
&lt;br /&gt;
==Building the object and macro libraries==&lt;br /&gt;
To build the object and macro libraries, you must download the object library and macro library; upload each library to the mainframe; and copy, modify, and run the NEW204LB job.&lt;br /&gt;
&amp;lt;div id=&amp;quot;downloading&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
===Downloading===&lt;br /&gt;
&amp;lt;!--Caution: &amp;lt;div&amp;gt; above--&amp;gt;&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Using your [[Rocket M204 user ID]] and password, log in to the [https://model204.rocketsoftware.com/maint/objlist Model 204 object file download page].&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Click the &amp;lt;b&amp;gt;Download object file&amp;lt;/b&amp;gt; link beside the object library that you want to download.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Go to the [https://model204.rocketsoftware.com/maint/maclist Model 204 macro library download page].&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Click the &amp;lt;b&amp;gt;Download macro library&amp;lt;/b&amp;gt; link beside the macro library that you want to download.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;div id=&amp;quot;uploading&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Uploading===&lt;br /&gt;
&amp;lt;!--Caution: &amp;lt;div&amp;gt; above--&amp;gt;&lt;br /&gt;
Once the object file and macro library are downloaded to your workstation, upload them to the z/OS system on the IBM mainframe. You can use any file transfer mechanism, including FTP and IND$FILE. &lt;br /&gt;
 &lt;br /&gt;
Specify these characteristics for the upload files:&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;table class=&amp;quot;noBorder&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&amp;lt;b&amp;gt;transfer format:&amp;lt;/b&amp;gt;&amp;lt;/td&amp;gt; &amp;lt;td&amp;gt;binary&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&amp;lt;b&amp;gt;record format:&amp;lt;/b&amp;gt;&amp;lt;/td&amp;gt; &amp;lt;td&amp;gt;FB&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&amp;lt;b&amp;gt;record size:&amp;lt;/b&amp;gt;&amp;lt;/td&amp;gt; &amp;lt;td&amp;gt;80 for object and macro libraries&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&amp;lt;b&amp;gt;block size:&amp;lt;/b&amp;gt;&amp;lt;/td&amp;gt; &amp;lt;td&amp;gt;6400 for object and macro libraries&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&amp;lt;b&amp;gt;storage size for both:&amp;lt;/b&amp;gt;&amp;lt;/td&amp;gt; &amp;lt;td&amp;gt;primary: 10 CYL; secondary: 5 CYL&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
For details on how to download and upload, see [[Downloading and uploading Model 204 installation components]].&lt;br /&gt;
&amp;lt;div id=&amp;quot;bldLibs&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Building the object and macro libraries (NEW204LB job stream)===&lt;br /&gt;
&amp;lt;!--Caution: &amp;lt;div&amp;gt; above--&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
After you upload the object and macro library input streams to the mainframe, build the object and macro libraries:&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Access the [http://sirius.sirius-software.com/download/new204lb.txt NEW204LB job stream] text file.&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Copy the job stream file into a local TSO library for editing.&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;On the first line of the job stream, modify the JOB card according to your local job card parameters.&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;On the final four lines, marked &amp;lt;code&amp;gt;2 &amp;amp;lt;&amp;amp;lt;&amp;lt;/code&amp;gt; ... &amp;lt;code&amp;gt;5 &amp;amp;lt;&amp;amp;lt;&amp;lt;/code&amp;gt; on the right:&lt;br /&gt;
&amp;lt;ol style=&amp;quot;list-style-type:lower-alpha;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Modify the &amp;lt;code&amp;gt;VERSION=&amp;lt;/code&amp;gt; parameter, specifying the two-digit version of &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model 204&amp;lt;/var&amp;gt; you are installing, such as 75.&lt;br /&gt;
&amp;lt;li&amp;gt;Modify the &amp;lt;code&amp;gt;HLQ=&amp;lt;/code&amp;gt; parameter, specifying the high-level qualifiers of all &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model 204&amp;lt;/var&amp;gt; installation data sets.&lt;br /&gt;
&amp;lt;li&amp;gt;Modify the &amp;lt;code&amp;gt;OBJINP=&amp;lt;/code&amp;gt; parameter, using the DSN of the object library input file that you uploaded to the mainframe.&lt;br /&gt;
&amp;lt;li&amp;gt;Modify the &amp;lt;code&amp;gt;MACINP=&amp;lt;/code&amp;gt; parameter, using the DSN of the macro library input file that you uploaded to the mainframe.&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Submit the &amp;lt;code&amp;gt;NEW204LB&amp;lt;/code&amp;gt; job to build the object library (&amp;quot;RKOBJLIB&amp;quot;) and macro library (&amp;quot;RKMACLIB&amp;quot;) on your z/OS system.&amp;lt;/li&amp;gt; &lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;div id=&amp;quot;notouch&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;warn&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Attention:&amp;lt;/b&amp;gt; Once you have built RKOBJLIB and RKMACLIB on your z/OS system, &amp;lt;b&amp;gt;do not&amp;lt;/b&amp;gt; modify them in any way.&amp;lt;br /&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
For example, &amp;lt;b&amp;gt;do not&amp;lt;/b&amp;gt; store other members into the object library; it should only contain the members as supplied in a download from the web site. Place object files that you might assemble (such as FUNU or RACFPARM) into your local object library.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====RKOBJLIB README file====&lt;br /&gt;
README, a member of RKOBJLIB, contains details on the object files and installation steps. Once you have built RKOBJLIB, you can use README as an installation checklist if desired.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;allocating&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Data sets for Model 204 upgrading==&lt;br /&gt;
&amp;lt;!--Caution: &amp;lt;div&amp;gt; above--&amp;gt;&lt;br /&gt;
There are three data sets used when upgrading to Model 204 7.5:&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;data set for the Model 204 load modules&lt;br /&gt;
&amp;lt;li&amp;gt;data set for the local source library&lt;br /&gt;
&amp;lt;li&amp;gt;data set for the local object library&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
The data set for the load modules will contain, after linking, the modules for the Model 204 product, including: ONLINE, IFAM1, and IFAM4. &lt;br /&gt;
&lt;br /&gt;
The local source library is used to store the customized source for modules such as FUNU, MSGU, and ACF2PARM, RACFPARM, or TOPSPARM.&lt;br /&gt;
&lt;br /&gt;
When the source is assembled, it is stored in the local object library.&lt;br /&gt;
&lt;br /&gt;
One of the members of the RKOBJLIB object library is named [[Model 204 data set allocation job stream for IBM z/OS|JALINSJ]], which is a job stream to allocate data sets for the installation. &amp;lt;code&amp;gt;JALINSJ&amp;lt;/code&amp;gt; contains information about naming conventions for the data sets.&lt;br /&gt;
&lt;br /&gt;
===Allocating data sets (JALINSJ job stream)===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Copy &amp;lt;code&amp;gt;JALINSJ&amp;lt;/code&amp;gt; into a local TSO library.&lt;br /&gt;
&amp;lt;li&amp;gt;Edit your copy of &amp;lt;code&amp;gt;JALINSJ&amp;lt;/code&amp;gt; for your configuration: &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Replace the first line with a JOB card.&lt;br /&gt;
&amp;lt;li&amp;gt;Edit the lines, near the top of the job stream, marked with numbers followed by &amp;lt;code&amp;gt;&amp;amp;lt;&amp;amp;lt;&amp;lt;/code&amp;gt;. The numbers correspond to numbered steps in the comments following these lines.&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Submit the &amp;lt;code&amp;gt;JALINSJ&amp;lt;/code&amp;gt; job to allocate the data set.&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;div id=&amp;quot;lkonln&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Linking the Model 204 ONLINE load module==&lt;br /&gt;
&amp;lt;!--Caution: &amp;lt;div&amp;gt; above--&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;div id=&amp;quot;onlnTable&amp;quot;&amp;gt;&amp;lt;/div&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;Notes:&amp;lt;/b&amp;gt; &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;If you use customized modules (such as FUNU, MSGU, ACF2PARM, RACFPARM, TOPSPARM, CDTB, or UL/DB2), you must [[#FUNU_7.5|modify]] them (if needed) and [[#asm|assemble]] them &amp;lt;b&amp;gt;before you link the ONLINE/IFAM1/IFAM4&amp;lt;/b&amp;gt; load modules.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;There is not a separate link step for BATCH204.  It is not maintained as a separate module; the same module as ONLINE is used, with a BATCH204 alias.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
One of the members of the RKOBJLIB object library is [[Model 204 ONLINE link job stream for z/OS|LKONLNJ]], which is a job stream to link the &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model 204&amp;lt;/var&amp;gt; ONLINE load module.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;LKONLNJ&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
===Linking ONLINE (LKONLNJ job stream)===&lt;br /&gt;
&amp;lt;!--Caution: &amp;lt;div&amp;gt; above--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Copy the &amp;lt;code&amp;gt;LKONLNJ&amp;lt;/code&amp;gt; job stream from RKOBJLIB into a local TSO library.&lt;br /&gt;
&amp;lt;li&amp;gt;Edit your copy of &amp;lt;code&amp;gt;LKONLNJ&amp;lt;/code&amp;gt; for your configuration:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Replace the first line with a JOB card.&lt;br /&gt;
&amp;lt;li&amp;gt;Edit the lines, near the top of the job stream, marked with 1-4 followed by &amp;lt;code&amp;gt;&amp;amp;lt;&amp;amp;lt;&amp;lt;/code&amp;gt;. The numbers correspond to numbered steps in the comments.&lt;br /&gt;
&amp;lt;li&amp;gt;As needed, edit the lines after &amp;lt;code&amp;gt;SYSLIN DD *&amp;lt;/code&amp;gt; that are marked with &amp;lt;code&amp;gt;&amp;amp;lt;&amp;amp;lt;&amp;lt;/code&amp;gt;.  See the comments at the top of the &amp;lt;code&amp;gt;SYSLIN&amp;lt;/code&amp;gt; sections (&amp;lt;b&amp;gt;A&amp;lt;/b&amp;gt;-&amp;lt;b&amp;gt;C&amp;lt;/b&amp;gt;) for instructions.&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Submit the &amp;lt;code&amp;gt;LKONLNJ&amp;lt;/code&amp;gt; job to link the ONLINE load module.&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
Concise editing instructions are provided in the &amp;lt;code&amp;gt;LKONLNJ&amp;lt;/code&amp;gt; file itself. More details about link-editing the ONLINE load module are provided in the following table.&lt;br /&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;1&amp;lt;/th&amp;gt;&amp;lt;td&amp;gt;You must specify a value for the HLQ symbolic parameter in the EXEC LKM204P statement.  The value of HLQ corresponds to the high-level qualifier used for the DSN for:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; the downloaded object library&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;the Model204 load library&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;other data sets that are required for installation&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;tr&amp;gt;&amp;lt;th&amp;gt;2&amp;lt;/th&amp;gt;&amp;lt;td&amp;gt;One of the modifications is &amp;lt;b&amp;gt;always required&amp;lt;/b&amp;gt;, based on whether the ONLINE is to use RSQL (for Connect*) or not. &lt;br /&gt;
&lt;br /&gt;
Uncomment only one of the following statements:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;To link an ONLINE that uses RSQL, you must uncomment  the INCLUDE RKOBJ204(&amp;lt;b&amp;gt;LKSQLONL&amp;lt;/b&amp;gt;) statement.&lt;br /&gt;
&amp;lt;li&amp;gt;To link an ONLINE that does not use RSQL, you must uncomment the INCLUDE RKOBJ204(&amp;lt;b&amp;gt;LKNOSONL&amp;lt;/b&amp;gt;) statement.&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;&amp;lt;th&amp;gt;3&amp;lt;/th&amp;gt;&amp;lt;td&amp;gt;If you use an external authorizer, such as RACF or ACF2, you must:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[[#asm|Assemble the xxxPARM]] for your external authorizer to add the object file (such as RACFPARM or ACF2PARM) to your local object library.&lt;br /&gt;
&amp;lt;li&amp;gt;In the SYSLIN DD *, uncomment the appropriate INCLUDE statement(s) for your external authorizer. &amp;lt;blockquote 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;&amp;lt;li&amp;gt;Uncomment either the &amp;quot;static&amp;quot; or &amp;quot;dynamic&amp;quot; INCLUDE statement, depending on your configuration.&amp;lt;li&amp;gt;If you use ACF2, there are two INCLUDE statements to be uncommented; one refers to your system ACF2 library.  You must also provide the DSN for the ACF2 library in the ACF2 symbolic parameter in the EXEC LKM204P statement.&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/blockquote&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;&amp;lt;th&amp;gt;4&amp;lt;/th&amp;gt;&amp;lt;td&amp;gt;If you have other programs that you assemble for your Model 204 ONLINE module, for example, [[#FUNU|FUNU]], assemble them into your local object library.  You &amp;lt;strong&amp;gt;do not&amp;lt;/strong&amp;gt; need to add additional INCLUDE statements for FUNU or other locally assembled object files; they are already in the include streams from RKOBJLIB.&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;5&amp;lt;/th&amp;gt;&amp;lt;td&amp;gt;If you have an MQ series load library, set the MQ symbolic parameter to the correct DSN in the EXEC LKM204P statement. This allows you to use the MQ Series feature of &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model 204&amp;lt;/var&amp;gt;, either if you are already authorized for it, or to support a trial of it, without requiring relinking of the load module. You must also uncomment the INCLUDE MQ statement in the SYSLIN input.&lt;br /&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;
&amp;lt;div id=&amp;quot;link_ifam1&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Linking the Model 204 IFAM1 load module==&lt;br /&gt;
&amp;lt;!--Caution: &amp;lt;div&amp;gt;*s* above--&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
One of the members of the RKOBJLIB object library is &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[http://m204wiki.rocketsoftware.com/index.php/Model_204_IFAM1_link_job_stream_for_IBM_z/OS?title=Model_204_IFAM1_link_job_stream_for_IBM_z/OS&amp;amp;target=blank LKIFAM1J]&amp;lt;/span&amp;gt;, which is a job stream to link the &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model 204&amp;lt;/var&amp;gt; IFAM1 load module. &lt;br /&gt;
&lt;br /&gt;
===Linking IFAM1 (LKIFAM1J job stream)===&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Copy the &amp;lt;code&amp;gt;LKIFAM1J&amp;lt;/code&amp;gt; job stream from RKOBJLIB into a local TSO library.&lt;br /&gt;
&amp;lt;li&amp;gt;Edit your copy of &amp;lt;code&amp;gt;LKIFAM1J&amp;lt;/code&amp;gt; for your configuration:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Replace the first line with a JOB card.&lt;br /&gt;
&amp;lt;li&amp;gt;Edit the lines, near the top of the job stream, marked with numbers followed by &amp;lt;code&amp;gt;&amp;amp;lt;&amp;amp;lt;&amp;lt;/code&amp;gt;. The numbers correspond to numbered steps in the comments following these lines.&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Submit the &amp;lt;code&amp;gt;LKIFAM1J&amp;lt;/code&amp;gt; job to link the IFAM1 load module.&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;link_ifam4&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Linking the Model 204 IFAM4 load module==&lt;br /&gt;
&amp;lt;!--Caution: &amp;lt;div&amp;gt;*s* above--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
One of the members of the RKOBJLIB object library is &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[http://m204wiki.rocketsoftware.com/index.php/Model_204_IFAM4_link_job_stream_for_IBM_z/OS?title=Model_204_IFAM4_link_job_stream_for_IBM_z/OS&amp;amp;target=blank LKIFAM4J]&amp;lt;/span&amp;gt;, which is a job stream to link the &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model 204&amp;lt;/var&amp;gt; IFAM4 load module.&lt;br /&gt;
 &lt;br /&gt;
===Linking IFAM4 (LKIFAM4J job stream)===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Copy the &amp;lt;code&amp;gt;LKIFAM4J&amp;lt;/code&amp;gt; job stream from RKOBJLIB into a local TSO library.&lt;br /&gt;
&amp;lt;li&amp;gt;Edit your copy of &amp;lt;code&amp;gt;LKIFAM4J&amp;lt;/code&amp;gt; for your configuration:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Replace the first line with a JOB card.&lt;br /&gt;
&amp;lt;li&amp;gt;Edit the lines, near the top of the job stream, marked with numbers followed by &amp;lt;code&amp;gt;&amp;amp;lt;&amp;amp;lt;&amp;lt;/code&amp;gt;. The numbers correspond to numbered steps in the comments following these lines.&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Submit the &amp;lt;code&amp;gt;LKIFAM4J&amp;lt;/code&amp;gt; job to link the IFAM4 load module.&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;div id=&amp;quot;lkutils&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;!--Caution: &amp;lt;div&amp;gt; above--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Linking the Model 204 utility load modules==&lt;br /&gt;
&amp;lt;!--Caution: &amp;lt;div&amp;gt; above--&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
Most of the utility load modules from Model 204 version 7.4 will continue to perform correctly when used with version 7.5.&lt;br /&gt;
 &lt;br /&gt;
However, you must use the 7.5 version of the following utilities, which are sensitive to the Model 204 journal and checkpoint format:&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&amp;lt;b&amp;gt;AUDIT204&amp;lt;/b&amp;gt;&amp;lt;/td&amp;gt; &amp;lt;td&amp;gt;Extract from journal, with report stats and analysis&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&amp;lt;b&amp;gt;MERGEJ&amp;lt;/b&amp;gt;&amp;lt;/td&amp;gt; &amp;lt;td&amp;gt;Merge concurrent journal streams&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&amp;lt;b&amp;gt;UTILC&amp;lt;/b&amp;gt;&amp;lt;/td&amp;gt; &amp;lt;td&amp;gt;Information from checkpoint stream&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&amp;lt;b&amp;gt;UTILJ&amp;lt;/b&amp;gt;&amp;lt;/td&amp;gt; &amp;lt;td&amp;gt;Information from journal stream; add EOF markers&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Linking the utility load modules (LKALLUTJ job stream)===&lt;br /&gt;
 &lt;br /&gt;
One of the members of the RKOBJLIB object library is [[Model 204 utilities link job stream for IBM z/OS|LKALLUTJ]], a job stream to link the &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model 204&amp;lt;/var&amp;gt; utility load modules.&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Copy &amp;lt;code&amp;gt;LKALLUTJ&amp;lt;/code&amp;gt; into a local TSO library.&lt;br /&gt;
&amp;lt;li&amp;gt;Edit your copy of &amp;lt;code&amp;gt;LKALLUTJ&amp;lt;/code&amp;gt; for your configuration:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Replace the first line with a JOB card.&lt;br /&gt;
&amp;lt;li&amp;gt;Supply your installation high level qualifier(s) in the following lines marked with &amp;lt;code&amp;gt;&amp;amp;lt;&amp;amp;lt;&amp;lt;/code&amp;gt;:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;for &amp;lt;code&amp;gt;hlq&amp;lt;/code&amp;gt; in the &amp;lt;code&amp;gt;JCLLIB ORDER=(hlq.&amp;lt;/code&amp;gt;... line after the &amp;lt;code&amp;gt;JOB&amp;lt;/code&amp;gt; card&lt;br /&gt;
&amp;lt;li&amp;gt;after &amp;lt;code&amp;gt;HLQ=&amp;lt;/code&amp;gt;, on the line after &amp;lt;code&amp;gt;EXEC LKALLUTP&amp;lt;/code&amp;gt; at the bottom of the job stream&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Submit the &amp;lt;code&amp;gt;LKALLUTJ&amp;lt;/code&amp;gt; job to link the utility load modules.&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;div id=&amp;quot;asm&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
==Assembling customized modules into your local object library (LOCAL.OBJLIB)==&lt;br /&gt;
&amp;lt;!--Caution: &amp;lt;div&amp;gt; above--&amp;gt;&lt;br /&gt;
Copy the customized source module (such as, FUNU, MSGU, ACF2PARM, RACFPARM, TOPSPARM, CDTB, or UL/DB2) from your current release into your local source library, if you have not already done so. &lt;br /&gt;
The local source library is not version-specific, so modules copied into it can be used for future installations.&lt;br /&gt;
&lt;br /&gt;
One of the members of the RKOBJLIB object library is [[Model 204 local member assembly job stream for IBM z/OS|JASMJ]], a job stream to assemble a member from your Model 204 local source library into your local object library (LOCAL.OBJLIB).&lt;br /&gt;
&lt;br /&gt;
===Assembling customized modules (JASMJ job stream)===&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Copy &amp;lt;code&amp;gt;JASMJ&amp;lt;/code&amp;gt; into a local TSO library.&lt;br /&gt;
&amp;lt;li&amp;gt;Edit your copy of &amp;lt;code&amp;gt;JASMJ&amp;lt;/code&amp;gt; for your configuration:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Replace the first line with a JOB card.&lt;br /&gt;
&amp;lt;li&amp;gt;Supply your installation high level qualifier(s) in the following lines marked with &amp;lt;code&amp;gt;&amp;amp;lt;&amp;amp;lt;&amp;lt;/code&amp;gt;:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;for &amp;lt;code&amp;gt;hlq&amp;lt;/code&amp;gt; in the &amp;lt;code&amp;gt;JCLLIB ORDER=(hlq.&amp;lt;/code&amp;gt;... line after the &amp;lt;code&amp;gt;JOB&amp;lt;/code&amp;gt; card&lt;br /&gt;
&amp;lt;li&amp;gt;after &amp;lt;code&amp;gt;HLQ=&amp;lt;/code&amp;gt;, on the ASM line at the bottom of the job stream&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Provide the member name to assemble (such as FUNU, MSGU, RACFPARM) on the &amp;lt;code&amp;gt;MEM=&amp;lt;/code&amp;gt; line.&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Submit the &amp;lt;code&amp;gt;JASMJ&amp;lt;/code&amp;gt; job to assemble the module into your local object library.&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;div id=&amp;quot;lkcram&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;secparm&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Setting up the security module==&lt;br /&gt;
&amp;lt;!--Caution: &amp;lt;div&amp;gt; above--&amp;gt;&lt;br /&gt;
If you use a [[Security_interfaces_overview|security interface]] such as ACF2, RACF, or Top Secret:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; [[#asm|Assemble]] the security module:&lt;br /&gt;
ACF2PARM, RACFPARM, or TOPSPARM.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Optional. Link the security module as described below if you want it to be dynamically loaded.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Linking the security module (LKSECRJ job stream)===&lt;br /&gt;
&lt;br /&gt;
Dynamic loading lets you modify the security parameters without having to relink Model 204, which would be required if the parameter module were linked into Model 204 directly. &lt;br /&gt;
&lt;br /&gt;
If you want Model 204 to dynamically load your security module during Model 204 ACF2, RACF, or TOPSECRET interface initialization, then you must link the corresponding security parameter module.&lt;br /&gt;
&lt;br /&gt;
One of the members of the RKOBJLIB object library is &amp;lt;code&amp;gt;LKSECRJ&amp;lt;/code&amp;gt;, a job stream to link-edit the security parameter module. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Copy [[Model 204 security module link job stream for IBM z/OS|LKSECRJ]] into a local TSO library.&lt;br /&gt;
&amp;lt;li&amp;gt;Edit your copy of &amp;lt;code&amp;gt;LKSECRJ&amp;lt;/code&amp;gt; for your configuration:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Replace the first line with a JOB card.&lt;br /&gt;
&amp;lt;li&amp;gt;Edit the lines, near the top of the job stream, marked with numbers followed by &amp;lt;code&amp;gt;&amp;amp;lt;&amp;amp;lt;&amp;lt;/code&amp;gt;. The numbers correspond to numbered steps in the comments following these lines.&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Submit the &amp;lt;code&amp;gt;LKSECRJ&amp;lt;/code&amp;gt; job to link-edit the security parameter module (ACF2PARM, RACFPARM, or TOPSPARM).&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;cics&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==CICS interface installation==&lt;br /&gt;
&amp;lt;!--Caution: &amp;lt;div&amp;gt; above--&amp;gt;&lt;br /&gt;
The Model 204 CICS interface allows CICS complete access to Model 204 facilities and supports CICS pseudo conversational programs.&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; It is not necessary to install the CICS interface if it has been installed for a previous version of Model 204. The load modules from the older version are compatible with version 7.5 of Model 204.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Requirements===&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;CICS Transaction Server support&lt;br /&gt;
&amp;lt;p&amp;gt;Rocket M204 supports the CICS Transaction Server versions 3.1, 3.2, 4.1, and 4.2.&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Supporting TPROCESS COBOL applications&lt;br /&gt;
&amp;lt;p&amp;gt;If your CICS TPROCESS application was originally linked with AMODE=24, you must relink the CICS TPROCESS application specifying AMODE=31 because AMODE=24 is not supported.&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===CICS interface overview===&lt;br /&gt;
For an overview of the CICS interface, including storage requirements and a listing of CICS interface components, see [[CICS interface]].&lt;br /&gt;
 &lt;br /&gt;
===Installing the CICS interface===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Customize the interface by copying the CICFG copy member from RKMACLIB into your local source library and editing it as needed.&lt;br /&gt;
&amp;lt;p&amp;gt;For information on customizations needed for using the CICS Standard Mapping Service, see [[CICS interface]].&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Update the CICS System Definition (CSD) using one of the following methods:&lt;br /&gt;
&amp;lt;ul&amp;gt;&amp;lt;li&amp;gt;Resource Definition Online (CEDA). The supplied member CEDAM204 in RKMACLIB provides an example of the required PCT, PPT, and PLT definitions.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The IBM DFHSCDUP offline utility, to process the definitions in batch.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[[#CICS_alloc|Allocate]] a CICS user library.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[[#CICS_asm|Assemble and link]] the CICS modules.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Updating the CICS System Definition (CSD)===&lt;br /&gt;
You can update the CSD by using either CEDA or the DFHCSDUP utility and the CEDAM204 member of RKMACLIB. Use the values in the following table, where appropriate, for the method you choose. Information about&lt;br /&gt;
using CEDA follows the table.&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;b&amp;gt;CICS System Definition values&amp;lt;/b&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;User program&amp;lt;/th&amp;gt; &amp;lt;th&amp;gt;Program name&amp;lt;/th&amp;gt; &amp;lt;th&amp;gt;Transaction ID&amp;lt;/th&amp;gt; &amp;lt;th&amp;gt;Modifiable &amp;lt;br&amp;gt;CICFG symbol&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;TWA size&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;IFAM2 pseudo conversational&amp;lt;/td&amp;gt; &amp;lt;td&amp;gt;DFHPSF&amp;lt;/td&amp;gt; &amp;lt;td&amp;gt;DFHPSF is accessed by using a CICS LINK. It is never&lt;br /&gt;
invoked with a transaction ID from a terminal.&amp;lt;/td&amp;gt; &amp;lt;td /&amp;gt; &amp;lt;td /&amp;gt;&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Full-screen interface&amp;lt;/td&amp;gt; &amp;lt;td&amp;gt;M204PSFS&amp;lt;/td&amp;gt; &amp;lt;td&amp;gt;M204&amp;lt;/td&amp;gt; &amp;lt;td&amp;gt;&amp;amp;TRN&amp;lt;/td&amp;gt; &amp;lt;td&amp;gt;88&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Screen copy transaction&amp;lt;/td&amp;gt; &amp;lt;td&amp;gt;M204CRPS&amp;lt;/td&amp;gt; &amp;lt;td&amp;gt;U204&amp;lt;/td&amp;gt; &amp;lt;td /&amp;gt; &amp;lt;td /&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Screen print transaction&amp;lt;/td&amp;gt; &amp;lt;td&amp;gt;M204PRNT&amp;lt;/td&amp;gt; &amp;lt;td&amp;gt;P204&amp;lt;/td&amp;gt; &amp;lt;td&amp;gt;&amp;amp;COP&amp;lt;/td&amp;gt; &amp;lt;td&amp;gt;88&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
CEDA (the Resource Definition Online transaction) or the DFHCSDUP utility defines the transactions and programs to the CSD file.&lt;br /&gt;
 &lt;br /&gt;
If you are not using the CEDAM204 member, then define the transactions and programs by using CEDA&lt;br /&gt;
and the values in the previous table, as in the following example:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;CEDA DEFine PROG(program_name)&lt;br /&gt;
  GRoup(group_name)&lt;br /&gt;
  LANGuage(ASSEMBLER)&lt;br /&gt;
  RELoad(NO)&lt;br /&gt;
  RESident(NO) (Except for DFHPSF, RESident(YES))&lt;br /&gt;
  RSL(PUBLIC)&lt;br /&gt;
  STatus(ENABLED)&lt;br /&gt;
 &lt;br /&gt;
CEDA DEFine TRANsaction(trans_ID)&lt;br /&gt;
  GRoup(group_name)&lt;br /&gt;
  PROgram(program_name)&lt;br /&gt;
  TWASIZE(twa_size_value)&lt;br /&gt;
  .&lt;br /&gt;
  .&lt;br /&gt;
  .&lt;br /&gt;
  RSL(PUBLIC)&lt;br /&gt;
  .&lt;br /&gt;
  .&lt;br /&gt;
  .&lt;br /&gt;
 &lt;br /&gt;
CEDA CHeck GRoup(group_name) &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
You can use a transaction ID for a user program that is different from the value&lt;br /&gt;
shown in the previous table. However, if you do so, you must change the associated&lt;br /&gt;
CICFG symbol shown in the table.&lt;br /&gt;
 &lt;br /&gt;
As shown in the preceding example, group_name is any valid group name for the&lt;br /&gt;
user site.&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; Remember to add the groups to the GRPLIST for the particular CICS&lt;br /&gt;
region. If the groups are not added, they are not installed during each CICS initialization.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;CICS_alloc&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Allocating a CICS user library (JALCICSJ job stream)===&lt;br /&gt;
&amp;lt;!--Caution: &amp;lt;div&amp;gt; above--&amp;gt;&lt;br /&gt;
One of the members of the RKOBJLIB object library is [[Model 204 CICS user library allocation job stream for IBM z/OS|JALCICSJ]], a job stream to allocate an empty CICS user library. You must allocate the CICS user library before assembling and linking the CICS modules. &lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Copy &amp;lt;code&amp;gt;JALCICSJ&amp;lt;/code&amp;gt; into a local TSO library.&amp;lt;/li&amp;gt; &lt;br /&gt;
&amp;lt;li&amp;gt;Edit your copy of &amp;lt;code&amp;gt;JACICSJ&amp;lt;/code&amp;gt; for your configuration: &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Replace the first line with a JOB card.&amp;lt;/li&amp;gt; &lt;br /&gt;
&amp;lt;li&amp;gt;Supply your installation high level qualifier(s) in the following lines marked with &amp;lt;&amp;lt;: &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;for hlq in the JCLLIB ORDER=(hlq.... line after the JOB card &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;after HLQ=, on the line after EXEC LKALLUTP at the bottom of the job stream &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&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;Submit the &amp;lt;code&amp;gt;JALCICSJ&amp;lt;/code&amp;gt; job to allocate the CICS user library.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;CICS_asm&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
===Assembling and linking CICS modules (LKCICSJ job stream)===&lt;br /&gt;
&amp;lt;!--Caution: &amp;lt;div&amp;gt; above--&amp;gt;&lt;br /&gt;
One of the members of the RKOBJLIB object library is [[Model 204 CICS module assembly job stream for_ IBM z/OS|LKCICSJ]], a job stream to assemble and link the &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model 204&amp;lt;/var&amp;gt; CICS modules.&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Copy &amp;lt;code&amp;gt;LKCICSJ&amp;lt;/code&amp;gt; into a local TSO library.&lt;br /&gt;
&amp;lt;li&amp;gt;Edit your copy of &amp;lt;code&amp;gt;LKCICSJ&amp;lt;/code&amp;gt; for your configuration:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Replace the first line with a JOB card.&lt;br /&gt;
&amp;lt;li&amp;gt;Supply your Model 204 installation high level qualifier(s) in the following lines marked with &amp;lt;code&amp;gt;&amp;amp;lt;&amp;amp;lt;&amp;lt;/code&amp;gt;:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;for &amp;lt;code&amp;gt;hlq&amp;lt;/code&amp;gt; in the &amp;lt;code&amp;gt;JCLLIB ORDER=(hlq.&amp;lt;/code&amp;gt;... line after the &amp;lt;code&amp;gt;JOB&amp;lt;/code&amp;gt; card&lt;br /&gt;
&amp;lt;li&amp;gt;after &amp;lt;code&amp;gt;HLQ=&amp;lt;/code&amp;gt;, on the line after &amp;lt;code&amp;gt;EXEC JALCICSP&amp;lt;/code&amp;gt; at the bottom of the job stream&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Submit the &amp;lt;code&amp;gt;LKCICSJ&amp;lt;/code&amp;gt; job to assemble and link the CICS module.&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;tso&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==TSO interface installation==&lt;br /&gt;
&amp;lt;!--Caution: &amp;lt;div&amp;gt; above--&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; It is not necessary to install the TSO interface if it has been installed for a previous version of Model 204. The load modules from the older version are compatible with version 7.5 of Model 204.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The Model 204 TSO Interface enables the TSO user to communicate with a Model 204 Online.&lt;br /&gt;
&lt;br /&gt;
The TSO Interface consists of two assembly language modules, TSFS and TSUL, whose source is located in the macro library. The modules are completely reentrant, reusable, and refreshable. Installation requires assembly and link-editing of the TSO source modules.&lt;br /&gt;
&lt;br /&gt;
===Installing the TSO interface===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;If you are using TSO extensions, modify TSFS in the local source library by changing:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;&amp;amp;TSOV SETC &#039;TSO&#039; &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;to:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;&amp;amp;TSOV SETC &#039;TSOE&#039;&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Changing the &amp;amp;TSOV SETC &#039;TSO&#039; code in TSFS causes assembly of the NOEDIT form of the TPUT macro in the TSFS module. The NOEDIT form, required for 3270 extended data streams, allows proper handling of colors or highlighting in TSO extensions. NOEDIT is recommended for all TSO extensions.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Assemble and link the TSO modules, using the &amp;lt;code&amp;gt;LKTSOJ&amp;lt;/code&amp;gt; job.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Assembling TSO modules (LKTSOJ job stream)===&lt;br /&gt;
&lt;br /&gt;
One of the members of the RKOBJLIB object library is [[Model 204 utilities link job stream for IBM z/OS|LKTSOJ]], a job stream to assemble and link the &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model 204&amp;lt;/var&amp;gt; TSO modules.&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Copy &amp;lt;code&amp;gt;LKTSOJ&amp;lt;/code&amp;gt; into a local TSO library.&lt;br /&gt;
&amp;lt;li&amp;gt;Edit your copy of &amp;lt;code&amp;gt;LKTSOJ&amp;lt;/code&amp;gt; for your configuration:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Replace the first line with a JOB card.&lt;br /&gt;
&amp;lt;li&amp;gt;Supply your installation high level qualifier(s) in the following lines marked with &amp;lt;code&amp;gt;&amp;amp;lt;&amp;amp;lt;&amp;lt;/code&amp;gt;:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;for &amp;lt;code&amp;gt;hlq&amp;lt;/code&amp;gt; in the &amp;lt;code&amp;gt;JCLLIB ORDER=(hlq.&amp;lt;/code&amp;gt;... line after the &amp;lt;code&amp;gt;JOB&amp;lt;/code&amp;gt; card&lt;br /&gt;
&amp;lt;li&amp;gt;after &amp;lt;code&amp;gt;HLQ=&amp;lt;/code&amp;gt;, on the line after &amp;lt;code&amp;gt;EXEC LKALLUTP&amp;lt;/code&amp;gt; at the bottom of the job stream&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Submit the &amp;lt;code&amp;gt;LKTSOJ&amp;lt;/code&amp;gt; job to assemble and link the TSO modules.&lt;br /&gt;
&amp;lt;/ol&amp;gt; &lt;br /&gt;
&amp;lt;div id=&amp;quot;FUNU&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==CRAM==&lt;br /&gt;
RKOBJLIB also contains LKCRAMJ, the job stream to link the CRAM load modules.  &lt;br /&gt;
&lt;br /&gt;
Versions 7.4 and later of the CRAM load modules are completely compatible with version 7.5 of Model 204. Deploying a new version of CRAM can be an intensive process, and because you have version 7.4 installed, it is not necessary. You can safely bypass linking the 7.5 CRAM modules. However, if you do not link the 7.5 CRAM modules, you will need to apply additional 7.4 maintenance.&lt;br /&gt;
&lt;br /&gt;
Your CRAM installation options are:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Install 7.5 XDM by running LKCRAMJ to link the 7.5 CRAM modules.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Install 7.4 XDM and then apply Early Warnings for Model 204. (You can do this by applying Autofix release EW3044, which includes these Early Warnings as well as Early Warnings for Dictionary/204 through 740DI016.)&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Sharing 7.1 XDM requires maintenance through 710EW172.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==FUNU and optional MSGU==&lt;br /&gt;
&amp;lt;!--Caution: &amp;lt;div&amp;gt; above--&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
This section lists installation considerations if you have your own user-written $functions module (FUNU).&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; If you have your own FUNU or MSGU module, you must assemble it &amp;lt;b&amp;gt;before linking the ONLINE/IFAM1/IFAM4&amp;lt;/b&amp;gt; load modules.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;div id=&amp;quot;FUNU_7.5&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
===FUNU changes for version 7.5===&lt;br /&gt;
&amp;lt;!--Caution: &amp;lt;div&amp;gt; above--&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
{{Template:FUNU changes for 7.5}}&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;div id=&amp;quot;asmFUNU&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
===FUNU (and MSGU) assembly===&lt;br /&gt;
&amp;lt;!--Caution: &amp;lt;div&amp;gt; above--&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
Copy the source from RKMACLIB into your local source library.&lt;br /&gt;
 &lt;br /&gt;
After making any changes required for this version of &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model 204&amp;lt;/var&amp;gt;, run &amp;lt;code&amp;gt;JASMJ&amp;lt;/code&amp;gt; to [[#asm|assemble]] FUNU into your local object library.  &lt;br /&gt;
&lt;br /&gt;
If needed, modify and run &amp;lt;code&amp;gt;JASMJ&amp;lt;/code&amp;gt; to assemble MSGU.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;You do &amp;lt;b&amp;gt;not&amp;lt;/b&amp;gt; need to insert any INCLUDE statements for either FUNU nor MSGU; they are already present in the INCLUDE member (LKSQLONL or LKNOSONL) provided in the downloaded object library.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;div id=&amp;quot;ul_db2&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Installing the UL/DB2 interface (JAUSQLJ job stream)==&lt;br /&gt;
&amp;lt;!--Caution: &amp;lt;div&amp;gt; above--&amp;gt;&lt;br /&gt;
To support the UL/DB2 interface, USQL code is delivered in source for you to preprocess for your version of DB2. If you use the UL/DB2 interface, assemble the source as described below &amp;lt;b&amp;gt;before linking the ONLINE/IFAM1/IFAM4&amp;lt;/b&amp;gt; load modules.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Copy [[Model 204 UL/DB2 job stream for IBM z/OS|JAUSQLJ]] into a local TSO library.&lt;br /&gt;
&amp;lt;li&amp;gt;Edit your copy of &amp;lt;code&amp;gt;JAUSQLJ&amp;lt;/code&amp;gt; for your configuration:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Replace the first line with a JOB card.&lt;br /&gt;
&amp;lt;li&amp;gt;Supply your installation high level qualifier(s) in the following lines marked with &amp;lt;code&amp;gt;&amp;amp;lt;&amp;amp;lt;&amp;lt;/code&amp;gt;:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;for &amp;lt;code&amp;gt;hlq&amp;lt;/code&amp;gt; in the &amp;lt;code&amp;gt;JCLLIB ORDER=(hlq.&amp;lt;/code&amp;gt;... line after the &amp;lt;code&amp;gt;JOB&amp;lt;/code&amp;gt; card&lt;br /&gt;
&amp;lt;li&amp;gt;on the line after &amp;lt;code&amp;gt;EXEC JAUSQLP&amp;lt;/code&amp;gt; at the bottom of the job stream set:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;HLQ=&amp;lt;/code&amp;gt;high level qualifier of all Model 204 installation DSNs&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;DB2HLQ=&amp;lt;/code&amp;gt;high level qualifier for your DB2 maclib.&amp;lt;/li&amp;gt; &lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Submit the &amp;lt;code&amp;gt;JAUSQLJ&amp;lt;/code&amp;gt; job to preprocess and assemble the USQL module.  The JAUSQLJ job executes the following two steps:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Run USQL (contained in RKMACLIB) through the DB2 preprocessor to process the EXEC SQL statements.  This step produces two data sets: the DBRM and the expanded USQL source.  The DBRM is saved as USQLDBRM in the local object library.  The expanded USQL source is passed to step two for assembly.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Assemble expanded USQL source into local object library.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Bind the DBRM as the plan with a site-specific plan name.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
For more information on UL/DB2, see the &amp;lt;var class=&amp;quot;book&amp;quot;&amp;gt;Rocket Model 204 User Language/DATABASE 2 Interface Guide&amp;lt;/var&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;softspy&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Upgrading SoftSpy for 7.5==&lt;br /&gt;
&amp;lt;!--Caution: &amp;lt;div&amp;gt; above--&amp;gt;&lt;br /&gt;
To upgrade SoftSpy for version 7.5, download, upload, and restore the SoftSpy procedure file, SPYPROC, which is distributed in a dump format.&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Download SPYPROC, in binary form, from the [https://m204.rocketsoftware.com/maint/ullist?nickname=ROCKET SOUL files download page] to a workstation file.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Upload the file from your workstation to your z/OS system.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;RESTORE the file into a Model 204 SOUL file.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt; &lt;br /&gt;
For detailed instructions, see [http://m204wiki.rocketsoftware.com/index.php?title=Web_help_download_SOUL_files#How_can_the_dump_file_be_uploaded_to_the_mainframe.3F Downloading and restoring SOUL files].&lt;br /&gt;
&lt;br /&gt;
==Verifying Model 204 7.5 on your system==&lt;br /&gt;
To perform an initial verification that your upgrade to 7.5 was successful, issue the following commands from the Model 204 command line.&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;Command&amp;lt;/th&amp;gt; &amp;lt;th&amp;gt;You should see...&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;ROCKET&amp;lt;/td&amp;gt; &amp;lt;td&amp;gt;A list of authorized M204 products (including 7.5) currently on your system.&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;DISPLAY ZAPS&amp;lt;/td&amp;gt; &amp;lt;td&amp;gt;A list of Model 204 zaps (including 7.5 zaps) on your system.&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;DICTADMIN&amp;lt;/td&amp;gt; &amp;lt;td&amp;gt;The Dictionary Administration subsystem, displaying &amp;lt;code&amp;gt;Release 7.5&amp;lt;/code&amp;gt; on its menu screens.&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;SUBSYSMGMT&amp;lt;/td&amp;gt; &amp;lt;td&amp;gt;The Application Subsystem facility, displaying &amp;lt;code&amp;gt;VER 7 REL 5&amp;lt;/code&amp;gt; on its menu screens.&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Example workflow for 7.5: download through installation==&lt;br /&gt;
This example shows one typical installation workflow: the site does not use RSQL, it uses the RACF external authorizer, and it does not have its own FUNU. The IBM system MQ loadlib is &amp;lt;code&amp;gt;MQSERIES.SCSQLOAD&amp;lt;/code&amp;gt; (this is typical in z/OS).&lt;br /&gt;
The high-level qualifier in this example is MYBUILD.&lt;br /&gt;
 &lt;br /&gt;
The other item needed is the member name &amp;lt;code&amp;gt;MYBLDOB&amp;lt;/code&amp;gt;, which is chosen arbitrarily for this example, and the following DSNs:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;MYBUILD.M204V75.RKOBJLIB.DISTRIB&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;MYBUILD.M204V75.RKOBJLIB&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;MYBUILD.M204V75.RKMACLIB.DISTRIB&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;MYBUILD.M204V75.RKMACLIB&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;MYBUILD.M204V75.LOCAL.OBJLIB&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;MYBUILD.M204V75.LOADLIB&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
===Build RKOBJLIB===&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Download the object library (M204V75.OBJ) from the downloads page.&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Upload to the mainframe, in binary format, with settings FB/80/6400, as &amp;lt;code&amp;gt;MYBUILD.M204V75.RKOBJLIB.DISTRIB&amp;lt;/code&amp;gt;.&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Download the macro library (M204V75_ZOS.MAC) from the downloads page.&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Upload to the mainframe, in binary format, with settings FB/80/6400, as &amp;lt;code&amp;gt;MYBUILD.M204V75.RKMACLIB.DISTRIB&amp;lt;/code&amp;gt;.&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Create the member MYBLDOB in my TSO library from a [http://sirius-software.com/download/new204lb.txt download] of the job stream to build the object and macro libraries, using the following at the end of the job stream:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;//BLD EXEC NEW204LB,VERSION=75,&lt;br /&gt;
//         HLQ=MYBUILD,&lt;br /&gt;
//         OBJINP=MYBUILD.M204V75.RKOBJLIB.DISTRIB,&lt;br /&gt;
//         MACINP=MYBUILD.M204V75.RKMACLIB.DISTRIB&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Run MYBLDOB from my TSO library. MYBLDOB deletes and then creates &amp;lt;code&amp;gt;MYBUILD.M204V75.RKOBJLIB&amp;lt;/code&amp;gt; and&lt;br /&gt;
&amp;lt;code&amp;gt;MYBUILD.M204V75.RKMACLIB&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Upload to the mainframe, in binary format, with settings FB/80/6400, as &amp;lt;code&amp;gt;MYBUILD.M204V75.RKMACLIB.DISTRIB&amp;lt;/code&amp;gt;.&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Create the member MYBLDDS in my TSO library by copying&lt;br /&gt;
the job stream from [[Model 204 data set allocation job stream for IBM z/OS|JALINSJ]], using the following at the end of the job stream:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;//BLD EXEC JALINSP, &lt;br /&gt;
// HLQ=MYBUILD &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Run MYBLDDS from my TSO library. MYBLDDS allocates an empty loadlib data set for the Model 204 load modules, an empty local source library for the customized source files, and an empty local object library for the customized local object modules, with the following names: &amp;lt;code&amp;gt;MYBUILD.M204V75.LOADLIB&amp;lt;/code&amp;gt;,  &amp;lt;code&amp;gt;MYBUILD.M204.LOCAL.SRCLIB&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;MYBUILD.M204V75.LOCAL.OBJLIB&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Assemble and link===&lt;br /&gt;
&amp;lt;ol &amp;gt; &lt;br /&gt;
&amp;lt;li&amp;gt;Copy the RACFPARM source to the &amp;lt;code&amp;gt;MYBUILD.M204.LOCAL.SRCLIB&amp;lt;/code&amp;gt; and make any necessary modifications.&lt;br /&gt;
&amp;lt;li&amp;gt;Create the member JASMSECJ in my TSO library by copying&lt;br /&gt;
the job stream from [[Model 204 local member assembly job stream for IBM z/OS|JASMJ]], using the following at the end of the job stream:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;//ASM     EXEC JASMP,HLQ=MYBUILD,    &lt;br /&gt;
//             MEM=RACFPARM           &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Run JASMSECJ from my TSO library; this assembles the RACFPARM source file in the &amp;lt;code&amp;gt;MYBUILD.M204.LOCAL.SRCLIB&amp;lt;/code&amp;gt; and stores the object in &amp;lt;code&amp;gt;MYBUILD.M204V75.LOCAL.OBJLIB&amp;lt;/code&amp;gt;.&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Copy the member LKONLNJ from &amp;lt;code&amp;gt;MYBUILD.M204V75.RKOBJLIB&amp;lt;/code&amp;gt; to my TSO library, and customize LKONLN as follows:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Make these changes at the top of the job stream:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;//            JCLLIB ORDER=(MYBUILD.M204V75.RKOBJLIB)&lt;br /&gt;
//LKONLN EXEC LKM204P,&lt;br /&gt;
//            HLQ=MYBUILD,&lt;br /&gt;
//            MQ=MQSERIES.SCSQLOAD&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Uncomment the &amp;lt;code&amp;gt;INCLUDE&amp;lt;/code&amp;gt; line for LKNOSONL (that is, without RSQL).&lt;br /&gt;
&amp;lt;li&amp;gt;Uncomment the &amp;lt;code&amp;gt;INCLUDE&amp;lt;/code&amp;gt; line for MQ.&lt;br /&gt;
&amp;lt;li&amp;gt;Uncomment the &amp;lt;code&amp;gt;INCLUDE&amp;lt;/code&amp;gt; line for my external authorizer module (such as RACFOS and RACFPARM).&lt;br /&gt;
&amp;lt;li&amp;gt;Submit the LKONLNJ job from my TSO library, this creates ONLINE (and BATCH204 alias) in MYBUILD.M204V75.LOADLIB.&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Perform a simple smoke test: run BATCH204 with &#039;DISPLAY ZAPS&#039; and &#039;ROCKET&#039; commands.&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;To link the utilities, copy member LKALLUTJ from &amp;lt;code&amp;gt;MYBUILD.M204V75.RKOBJLIB&amp;lt;/code&amp;gt; to my TSO library, and see all &amp;lt;code&amp;gt;&amp;amp;lt;&amp;amp;lt;&amp;lt;/code&amp;gt; lines to customize for my site; submit the LKALLUTJ job.&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Ensure that any JCL that performs deferred index sorting for &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model 204&amp;lt;/var&amp;gt; version 7.5&lt;br /&gt;
(typically, FLOD jobs) uses the new &amp;lt;code&amp;gt;MYBUILD.M204V75.LOADLIB&amp;lt;/code&amp;gt; for the E15 (OI15OS) and E35 (OI35OS) sort exits.&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[[Upgrading to Model 204 version 7.5 on IBM z/VM CMS]]&lt;br /&gt;
&amp;lt;li&amp;gt;[[Upgrading to Model 204 version 7.5 on IBM z/VSE]]&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Additional information==&lt;br /&gt;
Refer to the &amp;lt;i&amp;gt;[http://m204wiki.rocketsoftware.com/images/d/de/M204_V7R4_zOS_Install.pdf Rocket Model 204 Installation Guide for IBM z/OS, version 7.4]&amp;lt;/i&amp;gt;, for additional installation information.&lt;br /&gt;
 &lt;br /&gt;
[[Category:Installation]]&lt;/div&gt;</summary>
		<author><name>Mlarocca</name></author>
	</entry>
	<entry>
		<id>https://m204wiki.rocketsoftware.com/index.php?title=XDMSSN_parameter&amp;diff=80858</id>
		<title>XDMSSN parameter</title>
		<link rel="alternate" type="text/html" href="https://m204wiki.rocketsoftware.com/index.php?title=XDMSSN_parameter&amp;diff=80858"/>
		<updated>2015-09-22T19:24:08Z</updated>

		<summary type="html">&lt;p&gt;Mlarocca: /* Summary */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:XDMSSN parameter subtitle}}&lt;br /&gt;
==Summary==&lt;br /&gt;
&amp;lt;dl&amp;gt;&lt;br /&gt;
&amp;lt;dt&amp;gt;Default value&lt;br /&gt;
&amp;lt;dd&amp;gt;Current setting of the z/OS subsystem name linked into the IGCLM244 module&lt;br /&gt;
&amp;lt;dt&amp;gt;Parameter type&lt;br /&gt;
&amp;lt;dd&amp;gt;System&lt;br /&gt;
&amp;lt;dt&amp;gt;Where set&lt;br /&gt;
&amp;lt;dd&amp;gt;Cannot be reset&lt;br /&gt;
&amp;lt;dt&amp;gt;Related products&lt;br /&gt;
&amp;lt;dd&amp;gt;All&lt;br /&gt;
&amp;lt;dt&amp;gt;Introduced&lt;br /&gt;
&amp;lt;dd&amp;gt;&amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model 204 V6.1&amp;lt;/var&amp;gt;&lt;br /&gt;
&amp;lt;/dl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
&amp;lt;p&amp;gt;The XDMSSN parameter passes a z/OS subsystem name that bypasses the IGCLM244 value.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;This parameter is available for z/OS with XDM only and can pass the subsystem name inside the channel parameter in the form: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;subsystem&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
[[Category:System parameters]]&lt;br /&gt;
[[Category:Parameters]]&lt;/div&gt;</summary>
		<author><name>Mlarocca</name></author>
	</entry>
	<entry>
		<id>https://m204wiki.rocketsoftware.com/index.php?title=SERVGA_parameter&amp;diff=78032</id>
		<title>SERVGA parameter</title>
		<link rel="alternate" type="text/html" href="https://m204wiki.rocketsoftware.com/index.php?title=SERVGA_parameter&amp;diff=78032"/>
		<updated>2015-06-29T14:54:03Z</updated>

		<summary type="html">&lt;p&gt;Mlarocca: /* Description */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:SERVGA parameter subtitle}}&lt;br /&gt;
==Summary==&lt;br /&gt;
&amp;lt;dl&amp;gt;&lt;br /&gt;
&amp;lt;dt&amp;gt;Default value&lt;br /&gt;
&amp;lt;dd&amp;gt;0&lt;br /&gt;
&amp;lt;dt&amp;gt;Parameter type&lt;br /&gt;
&amp;lt;dd&amp;gt;System&lt;br /&gt;
&amp;lt;dt&amp;gt;Where set&lt;br /&gt;
&amp;lt;dd&amp;gt;On User 0&#039;s parameter line&lt;br /&gt;
&amp;lt;dt&amp;gt;Related products&lt;br /&gt;
&amp;lt;dd&amp;gt;All&lt;br /&gt;
&amp;lt;dt&amp;gt;Introduced&lt;br /&gt;
&amp;lt;dd&amp;gt;&amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model 204 V7.5&amp;lt;/var&amp;gt;&lt;br /&gt;
&amp;lt;/dl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The &amp;lt;var&amp;gt;SERVGA&amp;lt;/var&amp;gt; parameter controls which server tables are allocated in the ATB-swappable-server area.&amp;lt;/p&amp;gt;&lt;br /&gt;
In Model 204 7.5 and later, only QTBL and NTBL (in bold below) can alternatively be placed above-the-bar in a swappable area.&amp;lt;br&amp;gt;&lt;br /&gt;
Each server table to be allocated in that area is controlled by a bit in &amp;lt;var&amp;gt;SERVGA&amp;lt;/var&amp;gt;; if the bit is on, the corresponding server table is allocated in the ATB-swappable-server area.&lt;br /&gt;
&lt;br /&gt;
The bits are:&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;Bit&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Server table placed above the bar&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;X&#039;02000000&#039;&amp;lt;/code&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;FTBL&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;X&#039;00800000&#039;&amp;lt;/code&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;GTBL &amp;amp;mdash; requires version 7.5 or later of &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model 204&amp;lt;/var&amp;gt;.&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;X&#039;00004000&#039;&amp;lt;/code&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;&#039;&#039;&#039;NTBL&#039;&#039;&#039; &amp;amp;mdash; requires version 7.5 or later of &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model 204&amp;lt;/var&amp;gt;.&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;X&#039;00002000&#039;&amp;lt;/code&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;&#039;&#039;&#039;QTBL&#039;&#039;&#039; &amp;amp;mdash; requires version 7.5 or later of &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model 204&amp;lt;/var&amp;gt;.&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;X&#039;01000000&#039;&amp;lt;/code&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;XTBL &amp;amp;mdash; requires version 7.6 or later of &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model 204&amp;lt;/var&amp;gt;.&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;X&#039;00400000&#039;&amp;lt;/code&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;ITBL &amp;amp;mdash; requires version 7.6 or later of &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model 204&amp;lt;/var&amp;gt;.&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;X&#039;00100000&#039;&amp;lt;/code&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;FSCB &amp;amp;mdash; requires version 7.6 or later of &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model 204&amp;lt;/var&amp;gt;.&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;X&#039;00080000&#039;&amp;lt;/code&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;STBL &amp;amp;mdash; requires version 7.6 or later of &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model 204&amp;lt;/var&amp;gt;.&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;X&#039;00040000&#039;&amp;lt;/code&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;VTBL &amp;amp;mdash; requires version 7.6 or later of &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model 204&amp;lt;/var&amp;gt;.&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;X&#039;00020000&#039;&amp;lt;/code&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;TTBL &amp;amp;mdash; requires version 7.6 or later of &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model 204&amp;lt;/var&amp;gt;.&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;X&#039;00010000&#039;&amp;lt;/code&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;HTBFRS &amp;amp;mdash; requires version 7.6 or later of &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model 204&amp;lt;/var&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;
&amp;lt;var&amp;gt;[[SERVGSZ parameter|SERVGSZ]]&amp;lt;/var&amp;gt; is the amount of space in bytes required for the swappable above-the-bar server tables per server. The total amount of storage allocated for swappable above-the-bar server areas equals &amp;lt;var&amp;gt;SERVGSZ&amp;lt;/var&amp;gt; rounded to 4K and multiplied by &amp;lt;var&amp;gt;[[NSERVS parameter|NSERVS]]&amp;lt;/var&amp;gt;.&lt;br /&gt;
When sizing &amp;lt;var&amp;gt;SERVGSZ&amp;lt;/var&amp;gt;, it should accomodate the largest swappable above-the-bar table sizes that might be needed.&lt;br /&gt;
&lt;br /&gt;
The above mentioned tables can alternatively be placed above-the-bar in a non-swappable area. This can be indicated with the &amp;lt;var&amp;gt;[[SERVNSA parameter|SERVNSA]]&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;[[SERVNSSZ parameter|SERVNSSZ]]&amp;lt;/var&amp;gt; parameters. The bits corresponding to the tables should not be set in both &amp;lt;var&amp;gt;SERVNSA&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;SERVGA&amp;lt;/var&amp;gt; &amp;amp;mdash; if they are, an error message is issued and the Online fails to come up.  &lt;br /&gt;
&lt;br /&gt;
{{Template:SERVGA/SERVGSZ common}}&lt;br /&gt;
&lt;br /&gt;
[[Category:System parameters]]&lt;br /&gt;
[[Category:Parameters]]&lt;/div&gt;</summary>
		<author><name>Mlarocca</name></author>
	</entry>
	<entry>
		<id>https://m204wiki.rocketsoftware.com/index.php?title=Upgrading_to_Model_204_version_7.5_on_IBM_z/OS&amp;diff=76414</id>
		<title>Upgrading to Model 204 version 7.5 on IBM z/OS</title>
		<link rel="alternate" type="text/html" href="https://m204wiki.rocketsoftware.com/index.php?title=Upgrading_to_Model_204_version_7.5_on_IBM_z/OS&amp;diff=76414"/>
		<updated>2015-03-04T15:16:30Z</updated>

		<summary type="html">&lt;p&gt;Mlarocca: /* Assembling customized modules into your local object library (LOCAL.OBJLIB) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div class=&amp;quot;toclimit-3&amp;quot;&amp;gt;__TOC__&amp;lt;/div&amp;gt;&lt;br /&gt;
==Overview==&lt;br /&gt;
This page describes the steps required to upgrade from Rocket Model 204 version 7.4 to version 7.5, on the IBM z/OS operating system.&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;table&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&amp;lt;p&amp;gt;In order to upgrade to Model 204 version 7.5, &amp;lt;b&amp;gt;you must have version 7.4&amp;lt;/b&amp;gt; and [[#Before you begin|various Early Warnings]] installed on your system..&amp;lt;/p&amp;gt; &amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt; &lt;br /&gt;
&lt;br /&gt;
To upgrade to version 7.5 simply download, upload, and link the 7.5 object modules available from the downloads page to install the 7.5 components.&lt;br /&gt;
&lt;br /&gt;
==Before you begin==&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;In order to upgrade to version 7.5, you must have version 7.4 and Early Warnings for Dictionary/204 through 740DI016 installed on your system.&lt;br /&gt;
&amp;lt;p&amp;gt;For information on Early Warnings, log in to the [http://www.rocketsoftware.com/support Rocket Customer Portal].&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; If you plan to use v7.4 CRAM with your v7.5 installation, you will need to apply all 7.4 maintenance. See [[#CRAM|CRAM]] for details.&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
For information on Early Warnings, log in to the [http://www.rocketsoftware.com/support Rocket Customer Portal].&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;For system requirements for version 7.5, see the [[Release notes for Model 204 version 7.5#Operating system requirements|7.5 Release notes]].&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;You must have either a [[Rocket M204 user ID]] or a Sirius user ID to download the installation files.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The object library has the authorization zap (covering your licensed processors) preapplied, so you do not need to get a new authorization zap from the website. &amp;lt;br /&amp;gt;(The preapplied zap will authorize Model 204 itself and any separately purchased products such as MP/204 and SirScan.)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The object library also has the maintenance zaps (as of the time the stream was&lt;br /&gt;
prepared) preapplied, so you do not need to apply any maintenance as part of this installation. (You will only need to apply any new maintenance when it becomes available for this release.)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;steps&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Overview of upgrading steps==&lt;br /&gt;
 &lt;br /&gt;
Review the following high-level summary of steps before you begin downloading the &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model 204&amp;lt;/var&amp;gt; version 7.5 files.&lt;br /&gt;
 &lt;br /&gt;
For an example, see [[#Example_workflow_for_7.5:_download_through_installation|Example workflow for 7.5: download through installation]].&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;Use your [[Rocket M204 user ID]] to [[#downloading|download]] the Model 204 object library and the Model 204 macro library.&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;[[#uploading|Upload]] (FTP) the downloaded components to the z/OS system on the IBM mainframe.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;[[#bldLibs|Build]] the RKOBJLIB object library and RKMACLIB macro library. (Once you have built these libraries, do not modify them.)&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Submit the job to [[#allocating|allocate the other data sets]] required for installation.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;If you have your own user $functions (FUNU), you must do the following steps:&lt;br /&gt;
&amp;lt;ol style=&amp;quot;list-style-type:lower-alpha;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[[#FUNU_7.5|Modify FUNU for 64-bit addressing]] considerations and store the modified source in your local source library.&amp;lt;/li&amp;gt; &lt;br /&gt;
&amp;lt;li&amp;gt;If you have any user-defined messages (MSGU), store them in your local source library.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[[#asmFUNU|Assemble]] FUNU (and MSGU, if applicable), with the output object file stored in your local object library.&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;If you use an external authorizer (such as RACF) for &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model 204&amp;lt;/var&amp;gt;, [[#secparm|assemble the &amp;lt;i&amp;gt;xxxx&amp;lt;/i&amp;gt;PARM security module]] (such as RACFPARM). The object file is then stored in your local object library.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;If you use the [[#ul_db2|UL/DB2 interface]], preprocess and assemble the USQL module.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;If you use other customized modules, such as CDTB, modify them as needed and [[#asm|assemble]] them.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Link the [[#lkonln|ONLINE]] load module.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;If you use the [[#link_ifam1|IFAM1]] and [[#link_ifam4|IFAM4]] load modules, link them.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Link the &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model 204&amp;lt;/var&amp;gt; [[#lkutils|utility load modules]].&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;If you use the [[#cics|CICS interface]], customize it, and then assemble and link the CICS modules.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;If you use the [[#tso|TSO]] interface, assemble and link-edit the TSO source modules.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;If you use [[#softspy|SoftSpy]], upgrade it for 7.5.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Object and macro libraries==&lt;br /&gt;
{{Template:Model 204 installation components}}&lt;br /&gt;
&lt;br /&gt;
==Building the object and macro libraries==&lt;br /&gt;
To build the object and macro libraries, you must download the object library and macro library; upload (FTP) each library to the mainframe; and copy, modify, and run the NEW204LB job.&lt;br /&gt;
&amp;lt;div id=&amp;quot;downloading&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
===Downloading===&lt;br /&gt;
&amp;lt;!--Caution: &amp;lt;div&amp;gt; above--&amp;gt;&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Using your [[Rocket M204 user ID]] and password, log in to the [https://model204.rocketsoftware.com/maint/objlist Model 204 object file download page].&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Click the &amp;lt;b&amp;gt;Download object file&amp;lt;/b&amp;gt; link beside the object library that you want to download.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Go to the [https://model204.rocketsoftware.com/maint/maclist Model 204 macro library download page].&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Click the &amp;lt;b&amp;gt;Download macro library&amp;lt;/b&amp;gt; link beside the macro library that you want to download.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;div id=&amp;quot;uploading&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Uploading (FTP)===&lt;br /&gt;
&amp;lt;!--Caution: &amp;lt;div&amp;gt; above--&amp;gt;&lt;br /&gt;
Once the object file and macro library are downloaded to your workstation, FTP them to the z/OS system on the IBM mainframe.&lt;br /&gt;
 &lt;br /&gt;
Specify these characteristics for the upload files:&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;table class=&amp;quot;noBorder&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&amp;lt;b&amp;gt;transfer format:&amp;lt;/b&amp;gt;&amp;lt;/td&amp;gt; &amp;lt;td&amp;gt;binary&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&amp;lt;b&amp;gt;record format:&amp;lt;/b&amp;gt;&amp;lt;/td&amp;gt; &amp;lt;td&amp;gt;FB&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&amp;lt;b&amp;gt;record size:&amp;lt;/b&amp;gt;&amp;lt;/td&amp;gt; &amp;lt;td&amp;gt;80 for object and macro libraries&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&amp;lt;b&amp;gt;block size:&amp;lt;/b&amp;gt;&amp;lt;/td&amp;gt; &amp;lt;td&amp;gt;6400 for object and macro libraries&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&amp;lt;b&amp;gt;storage size for both:&amp;lt;/b&amp;gt;&amp;lt;/td&amp;gt; &amp;lt;td&amp;gt;primary: 10 CYL; secondary: 5 CYL&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
For details on how to download and upload, see [[Downloading and uploading Model 204 installation components]].&lt;br /&gt;
&amp;lt;div id=&amp;quot;bldLibs&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Building the object and macro libraries (NEW204LB job stream)===&lt;br /&gt;
&amp;lt;!--Caution: &amp;lt;div&amp;gt; above--&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
After you upload the object and macro library input streams to the mainframe, build the object and macro libraries:&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Access the [http://sirius.sirius-software.com/download/new204lb.txt NEW204LB job stream] text file.&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Copy the job stream file into a local TSO library for editing.&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;On the first line of the job stream, modify the JOB card according to your local job card parameters.&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;On the final four lines, marked &amp;lt;code&amp;gt;2 &amp;amp;lt;&amp;amp;lt;&amp;lt;/code&amp;gt; ... &amp;lt;code&amp;gt;5 &amp;amp;lt;&amp;amp;lt;&amp;lt;/code&amp;gt; on the right:&lt;br /&gt;
&amp;lt;ol style=&amp;quot;list-style-type:lower-alpha;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Modify the &amp;lt;code&amp;gt;VERSION=&amp;lt;/code&amp;gt; parameter, specifying the two-digit version of &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model 204&amp;lt;/var&amp;gt; you are installing, such as 75.&lt;br /&gt;
&amp;lt;li&amp;gt;Modify the &amp;lt;code&amp;gt;HLQ=&amp;lt;/code&amp;gt; parameter, specifying the high-level qualifiers of all &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model 204&amp;lt;/var&amp;gt; installation data sets.&lt;br /&gt;
&amp;lt;li&amp;gt;Modify the &amp;lt;code&amp;gt;OBJINP=&amp;lt;/code&amp;gt; parameter, using the DSN of the object library input file that you uploaded to the mainframe.&lt;br /&gt;
&amp;lt;li&amp;gt;Modify the &amp;lt;code&amp;gt;MACINP=&amp;lt;/code&amp;gt; parameter, using the DSN of the macro library input file that you uploaded to the mainframe.&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Submit the &amp;lt;code&amp;gt;NEW204LB&amp;lt;/code&amp;gt; job to build the object library (&amp;quot;RKOBJLIB&amp;quot;) and macro library (&amp;quot;RKMACLIB&amp;quot;) on your z/OS system.&amp;lt;/li&amp;gt; &lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;div id=&amp;quot;notouch&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;warn&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Attention:&amp;lt;/b&amp;gt; Once you have built RKOBJLIB and RKMACLIB on your z/OS system, &amp;lt;b&amp;gt;do not&amp;lt;/b&amp;gt; modify them in any way.&amp;lt;br /&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
For example, &amp;lt;b&amp;gt;do not&amp;lt;/b&amp;gt; store other members into the object library; it should only contain the members as supplied in a download from the web site. Place object files that you might assemble (such as FUNU or RACFPARM) into your local object library.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====RKOBJLIB README file====&lt;br /&gt;
README, a member of RKOBJLIB, contains details on the object files and installation steps. Once you have built RKOBJLIB, you can use README as an installation checklist if desired.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;allocating&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Data sets for Model 204 upgrading==&lt;br /&gt;
&amp;lt;!--Caution: &amp;lt;div&amp;gt; above--&amp;gt;&lt;br /&gt;
There are three data sets used when upgrading to Model 204 7.5:&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;data set for the Model 204 load modules&lt;br /&gt;
&amp;lt;li&amp;gt;data set for the local source library&lt;br /&gt;
&amp;lt;li&amp;gt;data set for the local object library&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
The data set for the load modules will contain, after linking, the modules for the Model 204 product, including: ONLINE, IFAM1, and IFAM4. &lt;br /&gt;
&lt;br /&gt;
The local source library is used to store the customized source for modules such as FUNU, MSGU, and ACF2PARM, RACFPARM, or TOPSPARM.&lt;br /&gt;
&lt;br /&gt;
When the source is assembled, it is stored in the local object library.&lt;br /&gt;
&lt;br /&gt;
One of the members of the RKOBJLIB object library is named [[Model 204 data set allocation job stream for IBM z/OS|JALINSJ]], which is a job stream to allocate data sets for the installation. &amp;lt;code&amp;gt;JALINSJ&amp;lt;/code&amp;gt; contains information about naming conventions for the data sets.&lt;br /&gt;
&lt;br /&gt;
===Allocating data sets (JALINSJ job stream)===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Copy &amp;lt;code&amp;gt;JALINSJ&amp;lt;/code&amp;gt; into a local TSO library.&lt;br /&gt;
&amp;lt;li&amp;gt;Edit your copy of &amp;lt;code&amp;gt;JALINSJ&amp;lt;/code&amp;gt; for your configuration: &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Replace the first line with a JOB card.&lt;br /&gt;
&amp;lt;li&amp;gt;Edit the lines, near the top of the job stream, marked with numbers followed by &amp;lt;code&amp;gt;&amp;amp;lt;&amp;amp;lt;&amp;lt;/code&amp;gt;. The numbers correspond to numbered steps in the comments following these lines.&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Submit the &amp;lt;code&amp;gt;JALINSJ&amp;lt;/code&amp;gt; job to allocate the data set.&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;div id=&amp;quot;lkonln&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Linking the Model 204 ONLINE load module==&lt;br /&gt;
&amp;lt;!--Caution: &amp;lt;div&amp;gt; above--&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;div id=&amp;quot;onlnTable&amp;quot;&amp;gt;&amp;lt;/div&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;Notes:&amp;lt;/b&amp;gt; &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;If you use customized modules (such as FUNU, MSGU, ACF2PARM, RACFPARM, TOPSPARM, CDTB, or UL/DB2), you must [[#FUNU_7.5|modify]] them (if needed) and [[#asm|assemble]] them &amp;lt;b&amp;gt;before you link the ONLINE/IFAM1/IFAM4&amp;lt;/b&amp;gt; load modules.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;There is not a separate link step for BATCH204.  It is not maintained as a separate module; the same module as ONLINE is used, with a BATCH204 alias.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
One of the members of the RKOBJLIB object library is [[Model 204 ONLINE link job stream for z/OS|LKONLNJ]], which is a job stream to link the &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model 204&amp;lt;/var&amp;gt; ONLINE load module.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;LKONLNJ&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
===Linking ONLINE (LKONLNJ job stream)===&lt;br /&gt;
&amp;lt;!--Caution: &amp;lt;div&amp;gt; above--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Copy the &amp;lt;code&amp;gt;LKONLNJ&amp;lt;/code&amp;gt; job stream from RKOBJLIB into a local TSO library.&lt;br /&gt;
&amp;lt;li&amp;gt;Edit your copy of &amp;lt;code&amp;gt;LKONLNJ&amp;lt;/code&amp;gt; for your configuration:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Replace the first line with a JOB card.&lt;br /&gt;
&amp;lt;li&amp;gt;Edit the lines, near the top of the job stream, marked with 1-4 followed by &amp;lt;code&amp;gt;&amp;amp;lt;&amp;amp;lt;&amp;lt;/code&amp;gt;. The numbers correspond to numbered steps in the comments.&lt;br /&gt;
&amp;lt;li&amp;gt;As needed, edit the lines after &amp;lt;code&amp;gt;SYSLIN DD *&amp;lt;/code&amp;gt; that are marked with &amp;lt;code&amp;gt;&amp;amp;lt;&amp;amp;lt;&amp;lt;/code&amp;gt;.  See the comments at the top of the &amp;lt;code&amp;gt;SYSLIN&amp;lt;/code&amp;gt; sections (&amp;lt;b&amp;gt;A&amp;lt;/b&amp;gt;-&amp;lt;b&amp;gt;C&amp;lt;/b&amp;gt;) for instructions.&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Submit the &amp;lt;code&amp;gt;LKONLNJ&amp;lt;/code&amp;gt; job to link the ONLINE load module.&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
Concise editing instructions are provided in the &amp;lt;code&amp;gt;LKONLNJ&amp;lt;/code&amp;gt; file itself. More details about link-editing the ONLINE load module are provided in the following table.&lt;br /&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;1&amp;lt;/th&amp;gt;&amp;lt;td&amp;gt;You must specify a value for the HLQ symbolic parameter in the EXEC LKM204P statement.  The value of HLQ corresponds to the high-level qualifier used for the DSN for:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; the downloaded object library&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;the Model204 load library&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;other data sets that are required for installation&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;tr&amp;gt;&amp;lt;th&amp;gt;2&amp;lt;/th&amp;gt;&amp;lt;td&amp;gt;One of the modifications is &amp;lt;b&amp;gt;always required&amp;lt;/b&amp;gt;, based on whether the ONLINE is to use RSQL (for Connect*) or not. &lt;br /&gt;
&lt;br /&gt;
Uncomment only one of the following statements:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;To link an ONLINE that uses RSQL, you must uncomment  the INCLUDE RKOBJ204(&amp;lt;b&amp;gt;LKSQLONL&amp;lt;/b&amp;gt;) statement.&lt;br /&gt;
&amp;lt;li&amp;gt;To link an ONLINE that does not use RSQL, you must uncomment the INCLUDE RKOBJ204(&amp;lt;b&amp;gt;LKNOSONL&amp;lt;/b&amp;gt;) statement.&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;&amp;lt;th&amp;gt;3&amp;lt;/th&amp;gt;&amp;lt;td&amp;gt;If you use an external authorizer, such as RACF or ACF2, you must:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[[#asm|Assemble the xxxPARM]] for your external authorizer to add the object file (such as RACFPARM or ACF2PARM) to your local object library.&lt;br /&gt;
&amp;lt;li&amp;gt;In the SYSLIN DD *, uncomment the appropriate INCLUDE statement(s) for your external authorizer. &amp;lt;blockquote 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;&amp;lt;li&amp;gt;Uncomment either the &amp;quot;static&amp;quot; or &amp;quot;dynamic&amp;quot; INCLUDE statement, depending on your configuration.&amp;lt;li&amp;gt;If you use ACF2, there are two INCLUDE statements to be uncommented; one refers to your system ACF2 library.  You must also provide the DSN for the ACF2 library in the ACF2 symbolic parameter in the EXEC LKM204P statement.&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/blockquote&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;&amp;lt;th&amp;gt;4&amp;lt;/th&amp;gt;&amp;lt;td&amp;gt;If you have other programs that you assemble for your Model 204 ONLINE module, for example, [[#FUNU|FUNU]], assemble them into your local object library.  You &amp;lt;strong&amp;gt;do not&amp;lt;/strong&amp;gt; need to add additional INCLUDE statements for FUNU or other locally assembled object files; they are already in the include streams from RKOBJLIB.&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;5&amp;lt;/th&amp;gt;&amp;lt;td&amp;gt;If you have an MQ series load library, set the MQ symbolic parameter to the correct DSN in the EXEC LKM204P statement. This allows you to use the MQ Series feature of &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model 204&amp;lt;/var&amp;gt;, either if you are already authorized for it, or to support a trial of it, without requiring relinking of the load module. You must also uncomment the INCLUDE MQ statement in the SYSLIN input.&lt;br /&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;
&amp;lt;div id=&amp;quot;link_ifam1&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Linking the Model 204 IFAM1 load module==&lt;br /&gt;
&amp;lt;!--Caution: &amp;lt;div&amp;gt;*s* above--&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
One of the members of the RKOBJLIB object library is &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[http://m204wiki.rocketsoftware.com/index.php/Model_204_IFAM1_link_job_stream_for_IBM_z/OS?title=Model_204_IFAM1_link_job_stream_for_IBM_z/OS&amp;amp;target=blank LKIFAM1J]&amp;lt;/span&amp;gt;, which is a job stream to link the &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model 204&amp;lt;/var&amp;gt; IFAM1 load module. &lt;br /&gt;
&lt;br /&gt;
===Linking IFAM1 (LKIFAM1J job stream)===&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Copy the &amp;lt;code&amp;gt;LKIFAM1J&amp;lt;/code&amp;gt; job stream from RKOBJLIB into a local TSO library.&lt;br /&gt;
&amp;lt;li&amp;gt;Edit your copy of &amp;lt;code&amp;gt;LKIFAM1J&amp;lt;/code&amp;gt; for your configuration:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Replace the first line with a JOB card.&lt;br /&gt;
&amp;lt;li&amp;gt;Edit the lines, near the top of the job stream, marked with numbers followed by &amp;lt;code&amp;gt;&amp;amp;lt;&amp;amp;lt;&amp;lt;/code&amp;gt;. The numbers correspond to numbered steps in the comments following these lines.&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Submit the &amp;lt;code&amp;gt;LKIFAM1J&amp;lt;/code&amp;gt; job to link the IFAM1 load module.&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;link_ifam4&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Linking the Model 204 IFAM4 load module==&lt;br /&gt;
&amp;lt;!--Caution: &amp;lt;div&amp;gt;*s* above--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
One of the members of the RKOBJLIB object library is &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[http://m204wiki.rocketsoftware.com/index.php/Model_204_IFAM4_link_job_stream_for_IBM_z/OS?title=Model_204_IFAM4_link_job_stream_for_IBM_z/OS&amp;amp;target=blank LKIFAM4J]&amp;lt;/span&amp;gt;, which is a job stream to link the &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model 204&amp;lt;/var&amp;gt; IFAM4 load module.&lt;br /&gt;
 &lt;br /&gt;
===Linking IFAM4 (LKIFAM4J job stream)===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Copy the &amp;lt;code&amp;gt;LKIFAM4J&amp;lt;/code&amp;gt; job stream from RKOBJLIB into a local TSO library.&lt;br /&gt;
&amp;lt;li&amp;gt;Edit your copy of &amp;lt;code&amp;gt;LKIFAM4J&amp;lt;/code&amp;gt; for your configuration:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Replace the first line with a JOB card.&lt;br /&gt;
&amp;lt;li&amp;gt;Edit the lines, near the top of the job stream, marked with numbers followed by &amp;lt;code&amp;gt;&amp;amp;lt;&amp;amp;lt;&amp;lt;/code&amp;gt;. The numbers correspond to numbered steps in the comments following these lines.&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Submit the &amp;lt;code&amp;gt;LKIFAM4J&amp;lt;/code&amp;gt; job to link the IFAM4 load module.&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;div id=&amp;quot;lkutils&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;!--Caution: &amp;lt;div&amp;gt; above--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Linking the Model 204 utility load modules==&lt;br /&gt;
&amp;lt;!--Caution: &amp;lt;div&amp;gt; above--&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
Most of the utility load modules from Model 204 version 7.4 will continue to perform correctly when used with version 7.5.&lt;br /&gt;
 &lt;br /&gt;
However, you must use the 7.5 version of the following utilities, which are sensitive to the Model 204 journal and checkpoint format:&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&amp;lt;b&amp;gt;AUDIT204&amp;lt;/b&amp;gt;&amp;lt;/td&amp;gt; &amp;lt;td&amp;gt;Extract from journal, with report stats and analysis&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&amp;lt;b&amp;gt;MERGEJ&amp;lt;/b&amp;gt;&amp;lt;/td&amp;gt; &amp;lt;td&amp;gt;Merge concurrent journal streams&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&amp;lt;b&amp;gt;UTILC&amp;lt;/b&amp;gt;&amp;lt;/td&amp;gt; &amp;lt;td&amp;gt;Information from checkpoint stream&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&amp;lt;b&amp;gt;UTILJ&amp;lt;/b&amp;gt;&amp;lt;/td&amp;gt; &amp;lt;td&amp;gt;Information from journal stream; add EOF markers&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Linking the utility load modules (LKALLUTJ job stream)===&lt;br /&gt;
 &lt;br /&gt;
One of the members of the RKOBJLIB object library is [[Model 204 utilities link job stream for IBM z/OS|LKALLUTJ]], a job stream to link the &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model 204&amp;lt;/var&amp;gt; utility load modules.&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Copy &amp;lt;code&amp;gt;LKALLUTJ&amp;lt;/code&amp;gt; into a local TSO library.&lt;br /&gt;
&amp;lt;li&amp;gt;Edit your copy of &amp;lt;code&amp;gt;LKALLUTJ&amp;lt;/code&amp;gt; for your configuration:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Replace the first line with a JOB card.&lt;br /&gt;
&amp;lt;li&amp;gt;Supply your installation high level qualifier(s) in the following lines marked with &amp;lt;code&amp;gt;&amp;amp;lt;&amp;amp;lt;&amp;lt;/code&amp;gt;:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;for &amp;lt;code&amp;gt;hlq&amp;lt;/code&amp;gt; in the &amp;lt;code&amp;gt;JCLLIB ORDER=(hlq.&amp;lt;/code&amp;gt;... line after the &amp;lt;code&amp;gt;JOB&amp;lt;/code&amp;gt; card&lt;br /&gt;
&amp;lt;li&amp;gt;after &amp;lt;code&amp;gt;HLQ=&amp;lt;/code&amp;gt;, on the line after &amp;lt;code&amp;gt;EXEC LKALLUTP&amp;lt;/code&amp;gt; at the bottom of the job stream&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Submit the &amp;lt;code&amp;gt;LKALLUTJ&amp;lt;/code&amp;gt; job to link the utility load modules.&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;div id=&amp;quot;asm&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
==Assembling customized modules into your local object library (LOCAL.OBJLIB)==&lt;br /&gt;
&amp;lt;!--Caution: &amp;lt;div&amp;gt; above--&amp;gt;&lt;br /&gt;
Copy the customized source module (such as, FUNU, MSGU, ACF2PARM, RACFPARM, TOPSPARM, CDTB, or UL/DB2) from your current release into your local source library, if you have not already done so. &lt;br /&gt;
The local source library is not version-specific, so modules copied into it can be used for future installations.&lt;br /&gt;
&lt;br /&gt;
One of the members of the RKOBJLIB object library is [[Model 204 local member assembly job stream for IBM z/OS|JASMJ]], a job stream to assemble a member from your Model 204 local source library into your local object library (LOCAL.OBJLIB).&lt;br /&gt;
&lt;br /&gt;
===Assembling customized modules (JASMJ job stream)===&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Copy &amp;lt;code&amp;gt;JASMJ&amp;lt;/code&amp;gt; into a local TSO library.&lt;br /&gt;
&amp;lt;li&amp;gt;Edit your copy of &amp;lt;code&amp;gt;JASMJ&amp;lt;/code&amp;gt; for your configuration:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Replace the first line with a JOB card.&lt;br /&gt;
&amp;lt;li&amp;gt;Supply your installation high level qualifier(s) in the following lines marked with &amp;lt;code&amp;gt;&amp;amp;lt;&amp;amp;lt;&amp;lt;/code&amp;gt;:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;for &amp;lt;code&amp;gt;hlq&amp;lt;/code&amp;gt; in the &amp;lt;code&amp;gt;JCLLIB ORDER=(hlq.&amp;lt;/code&amp;gt;... line after the &amp;lt;code&amp;gt;JOB&amp;lt;/code&amp;gt; card&lt;br /&gt;
&amp;lt;li&amp;gt;after &amp;lt;code&amp;gt;HLQ=&amp;lt;/code&amp;gt;, on the ASM line at the bottom of the job stream&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Provide the member name to assemble (such as FUNU, MSGU, RACFPARM) on the &amp;lt;code&amp;gt;MEM=&amp;lt;/code&amp;gt; line.&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Submit the &amp;lt;code&amp;gt;JASMJ&amp;lt;/code&amp;gt; job to assemble the module into your local object library.&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;div id=&amp;quot;lkcram&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;secparm&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Setting up the security module==&lt;br /&gt;
&amp;lt;!--Caution: &amp;lt;div&amp;gt; above--&amp;gt;&lt;br /&gt;
If you use a [[Security_interfaces_overview|security interface]] such as ACF2, RACF, or Top Secret:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; [[#asm|Assemble]] the security module:&lt;br /&gt;
ACF2PARM, RACFPARM, or TOPSPARM.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Optional. Link the security module as described below if you want it to be dynamically loaded.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Linking the security module (LKSECRJ job stream)===&lt;br /&gt;
&lt;br /&gt;
Dynamic loading lets you modify the security parameters without having to relink Model 204, which would be required if the parameter module were linked into Model 204 directly. &lt;br /&gt;
&lt;br /&gt;
If you want Model 204 to dynamically load your security module during Model 204 ACF2, RACF, or TOPSECRET interface initialization, then you must link the corresponding security parameter module.&lt;br /&gt;
&lt;br /&gt;
One of the members of the RKOBJLIB object library is &amp;lt;code&amp;gt;LKSECRJ&amp;lt;/code&amp;gt;, a job stream to link-edit the security parameter module. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Copy [[Model 204 security module link job stream for IBM z/OS|LKSECRJ]] into a local TSO library.&lt;br /&gt;
&amp;lt;li&amp;gt;Edit your copy of &amp;lt;code&amp;gt;LKSECRJ&amp;lt;/code&amp;gt; for your configuration:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Replace the first line with a JOB card.&lt;br /&gt;
&amp;lt;li&amp;gt;Edit the lines, near the top of the job stream, marked with numbers followed by &amp;lt;code&amp;gt;&amp;amp;lt;&amp;amp;lt;&amp;lt;/code&amp;gt;. The numbers correspond to numbered steps in the comments following these lines.&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Submit the &amp;lt;code&amp;gt;LKSECRJ&amp;lt;/code&amp;gt; job to link-edit the security parameter module (ACF2PARM, RACFPARM, or TOPSPARM).&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;cics&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==CICS interface installation==&lt;br /&gt;
&amp;lt;!--Caution: &amp;lt;div&amp;gt; above--&amp;gt;&lt;br /&gt;
The Model 204 CICS interface allows CICS complete access to Model 204 facilities and supports CICS pseudo conversational programs.&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; It is not necessary to install the CICS interface if it has been installed for a previous version of Model 204. The load modules from the older version are compatible with version 7.5 of Model 204.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Requirements===&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;CICS Transaction Server support&lt;br /&gt;
&amp;lt;p&amp;gt;Rocket M204 supports the CICS Transaction Server versions 3.1, 3.2, 4.1, and 4.2.&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Supporting TPROCESS COBOL applications&lt;br /&gt;
&amp;lt;p&amp;gt;If your CICS TPROCESS application was originally linked with AMODE=24, you must relink the CICS TPROCESS application specifying AMODE=31 because AMODE=24 is not supported.&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===CICS interface overview===&lt;br /&gt;
For an overview of the CICS interface, including storage requirements and a listing of CICS interface components, see [[CICS interface]].&lt;br /&gt;
 &lt;br /&gt;
===Installing the CICS interface===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Customize the interface by copying the CICFG copy member from RKMACLIB into your local source library and editing it as needed.&lt;br /&gt;
&amp;lt;p&amp;gt;For information on customizations needed for using the CICS Standard Mapping Service, see [[CICS interface]].&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Update the CICS System Definition (CSD) using one of the following methods:&lt;br /&gt;
&amp;lt;ul&amp;gt;&amp;lt;li&amp;gt;Resource Definition Online (CEDA). The supplied member CEDAM204 in RKMACLIB provides an example of the required PCT, PPT, and PLT definitions.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The IBM DFHSCDUP offline utility, to process the definitions in batch.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[[#CICS_alloc|Allocate]] a CICS user library.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[[#CICS_asm|Assemble and link]] the CICS modules.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Updating the CICS System Definition (CSD)===&lt;br /&gt;
You can update the CSD by using either CEDA or the DFHCSDUP utility and the CEDAM204 member of RKMACLIB. Use the values in the following table, where appropriate, for the method you choose. Information about&lt;br /&gt;
using CEDA follows the table.&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;b&amp;gt;CICS System Definition values&amp;lt;/b&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;User program&amp;lt;/th&amp;gt; &amp;lt;th&amp;gt;Program name&amp;lt;/th&amp;gt; &amp;lt;th&amp;gt;Transaction ID&amp;lt;/th&amp;gt; &amp;lt;th&amp;gt;Modifiable &amp;lt;br&amp;gt;CICFG symbol&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;TWA size&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;IFAM2 pseudo conversational&amp;lt;/td&amp;gt; &amp;lt;td&amp;gt;DFHPSF&amp;lt;/td&amp;gt; &amp;lt;td&amp;gt;DFHPSF is accessed by using a CICS LINK. It is never&lt;br /&gt;
invoked with a transaction ID from a terminal.&amp;lt;/td&amp;gt; &amp;lt;td /&amp;gt; &amp;lt;td /&amp;gt;&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Full-screen interface&amp;lt;/td&amp;gt; &amp;lt;td&amp;gt;M204PSFS&amp;lt;/td&amp;gt; &amp;lt;td&amp;gt;M204&amp;lt;/td&amp;gt; &amp;lt;td&amp;gt;&amp;amp;TRN&amp;lt;/td&amp;gt; &amp;lt;td&amp;gt;88&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Screen copy transaction&amp;lt;/td&amp;gt; &amp;lt;td&amp;gt;M204CRPS&amp;lt;/td&amp;gt; &amp;lt;td&amp;gt;U204&amp;lt;/td&amp;gt; &amp;lt;td /&amp;gt; &amp;lt;td /&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Screen print transaction&amp;lt;/td&amp;gt; &amp;lt;td&amp;gt;M204PRNT&amp;lt;/td&amp;gt; &amp;lt;td&amp;gt;P204&amp;lt;/td&amp;gt; &amp;lt;td&amp;gt;&amp;amp;COP&amp;lt;/td&amp;gt; &amp;lt;td&amp;gt;88&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
CEDA (the Resource Definition Online transaction) or the DFHCSDUP utility defines the transactions and programs to the CSD file.&lt;br /&gt;
 &lt;br /&gt;
If you are not using the CEDAM204 member, then define the transactions and programs by using CEDA&lt;br /&gt;
and the values in the previous table, as in the following example:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;CEDA DEFine PROG(program_name)&lt;br /&gt;
  GRoup(group_name)&lt;br /&gt;
  LANGuage(ASSEMBLER)&lt;br /&gt;
  RELoad(NO)&lt;br /&gt;
  RESident(NO) (Except for DFHPSF, RESident(YES))&lt;br /&gt;
  RSL(PUBLIC)&lt;br /&gt;
  STatus(ENABLED)&lt;br /&gt;
 &lt;br /&gt;
CEDA DEFine TRANsaction(trans_ID)&lt;br /&gt;
  GRoup(group_name)&lt;br /&gt;
  PROgram(program_name)&lt;br /&gt;
  TWASIZE(twa_size_value)&lt;br /&gt;
  .&lt;br /&gt;
  .&lt;br /&gt;
  .&lt;br /&gt;
  RSL(PUBLIC)&lt;br /&gt;
  .&lt;br /&gt;
  .&lt;br /&gt;
  .&lt;br /&gt;
 &lt;br /&gt;
CEDA CHeck GRoup(group_name) &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
You can use a transaction ID for a user program that is different from the value&lt;br /&gt;
shown in the previous table. However, if you do so, you must change the associated&lt;br /&gt;
CICFG symbol shown in the table.&lt;br /&gt;
 &lt;br /&gt;
As shown in the preceding example, group_name is any valid group name for the&lt;br /&gt;
user site.&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; Remember to add the groups to the GRPLIST for the particular CICS&lt;br /&gt;
region. If the groups are not added, they are not installed during each CICS initialization.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;CICS_alloc&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Allocating a CICS user library (JALCICSJ job stream)===&lt;br /&gt;
&amp;lt;!--Caution: &amp;lt;div&amp;gt; above--&amp;gt;&lt;br /&gt;
One of the members of the RKOBJLIB object library is [[Model 204 CICS user library allocation job stream for IBM z/OS|JALCICSJ]], a job stream to allocate an empty CICS user library. You must allocate the CICS user library before assembling and linking the CICS modules. &lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Copy &amp;lt;code&amp;gt;JALCICSJ&amp;lt;/code&amp;gt; into a local TSO library.&amp;lt;/li&amp;gt; &lt;br /&gt;
&amp;lt;li&amp;gt;Edit your copy of &amp;lt;code&amp;gt;JACICSJ&amp;lt;/code&amp;gt; for your configuration: &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Replace the first line with a JOB card.&amp;lt;/li&amp;gt; &lt;br /&gt;
&amp;lt;li&amp;gt;Supply your installation high level qualifier(s) in the following lines marked with &amp;lt;&amp;lt;: &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;for hlq in the JCLLIB ORDER=(hlq.... line after the JOB card &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;after HLQ=, on the line after EXEC LKALLUTP at the bottom of the job stream &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&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;Submit the &amp;lt;code&amp;gt;JALCICSJ&amp;lt;/code&amp;gt; job to allocate the CICS user library.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;CICS_asm&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
===Assembling and linking CICS modules (LKCICSJ job stream)===&lt;br /&gt;
&amp;lt;!--Caution: &amp;lt;div&amp;gt; above--&amp;gt;&lt;br /&gt;
One of the members of the RKOBJLIB object library is [[Model 204 CICS module assembly job stream for_ IBM z/OS|LKCICSJ]], a job stream to assemble and link the &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model 204&amp;lt;/var&amp;gt; CICS modules.&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Copy &amp;lt;code&amp;gt;LKCICSJ&amp;lt;/code&amp;gt; into a local TSO library.&lt;br /&gt;
&amp;lt;li&amp;gt;Edit your copy of &amp;lt;code&amp;gt;LKCICSJ&amp;lt;/code&amp;gt; for your configuration:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Replace the first line with a JOB card.&lt;br /&gt;
&amp;lt;li&amp;gt;Supply your Model 204 installation high level qualifier(s) in the following lines marked with &amp;lt;code&amp;gt;&amp;amp;lt;&amp;amp;lt;&amp;lt;/code&amp;gt;:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;for &amp;lt;code&amp;gt;hlq&amp;lt;/code&amp;gt; in the &amp;lt;code&amp;gt;JCLLIB ORDER=(hlq.&amp;lt;/code&amp;gt;... line after the &amp;lt;code&amp;gt;JOB&amp;lt;/code&amp;gt; card&lt;br /&gt;
&amp;lt;li&amp;gt;after &amp;lt;code&amp;gt;HLQ=&amp;lt;/code&amp;gt;, on the line after &amp;lt;code&amp;gt;EXEC JALCICSP&amp;lt;/code&amp;gt; at the bottom of the job stream&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Submit the &amp;lt;code&amp;gt;LKCICSJ&amp;lt;/code&amp;gt; job to assemble and link the CICS module.&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;tso&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==TSO interface installation==&lt;br /&gt;
&amp;lt;!--Caution: &amp;lt;div&amp;gt; above--&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; It is not necessary to install the TSO interface if it has been installed for a previous version of Model 204. The load modules from the older version are compatible with version 7.5 of Model 204.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The Model 204 TSO Interface enables the TSO user to communicate with a Model 204 Online.&lt;br /&gt;
&lt;br /&gt;
The TSO Interface consists of two assembly language modules, TSFS and TSUL, whose source is located in the macro library. The modules are completely reentrant, reusable, and refreshable. Installation requires assembly and link-editing of the TSO source modules.&lt;br /&gt;
&lt;br /&gt;
===Installing the TSO interface===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;If you are using TSO extensions, modify TSFS in the local source library by changing:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;&amp;amp;TSOV SETC &#039;TSO&#039; &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;to:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;&amp;amp;TSOV SETC &#039;TSOE&#039;&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Changing the &amp;amp;TSOV SETC &#039;TSO&#039; code in TSFS causes assembly of the NOEDIT form of the TPUT macro in the TSFS module. The NOEDIT form, required for 3270 extended data streams, allows proper handling of colors or highlighting in TSO extensions. NOEDIT is recommended for all TSO extensions.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Assemble and link the TSO modules, using the &amp;lt;code&amp;gt;LKTSOJ&amp;lt;/code&amp;gt; job.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Assembling TSO modules (LKTSOJ job stream)===&lt;br /&gt;
&lt;br /&gt;
One of the members of the RKOBJLIB object library is [[Model 204 utilities link job stream for IBM z/OS|LKTSOJ]], a job stream to assemble and link the &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model 204&amp;lt;/var&amp;gt; TSO modules.&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Copy &amp;lt;code&amp;gt;LKTSOJ&amp;lt;/code&amp;gt; into a local TSO library.&lt;br /&gt;
&amp;lt;li&amp;gt;Edit your copy of &amp;lt;code&amp;gt;LKTSOJ&amp;lt;/code&amp;gt; for your configuration:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Replace the first line with a JOB card.&lt;br /&gt;
&amp;lt;li&amp;gt;Supply your installation high level qualifier(s) in the following lines marked with &amp;lt;code&amp;gt;&amp;amp;lt;&amp;amp;lt;&amp;lt;/code&amp;gt;:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;for &amp;lt;code&amp;gt;hlq&amp;lt;/code&amp;gt; in the &amp;lt;code&amp;gt;JCLLIB ORDER=(hlq.&amp;lt;/code&amp;gt;... line after the &amp;lt;code&amp;gt;JOB&amp;lt;/code&amp;gt; card&lt;br /&gt;
&amp;lt;li&amp;gt;after &amp;lt;code&amp;gt;HLQ=&amp;lt;/code&amp;gt;, on the line after &amp;lt;code&amp;gt;EXEC LKALLUTP&amp;lt;/code&amp;gt; at the bottom of the job stream&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Submit the &amp;lt;code&amp;gt;LKTSOJ&amp;lt;/code&amp;gt; job to assemble and link the TSO modules.&lt;br /&gt;
&amp;lt;/ol&amp;gt; &lt;br /&gt;
&amp;lt;div id=&amp;quot;FUNU&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==CRAM==&lt;br /&gt;
RKOBJLIB also contains LKCRAMJ, the job stream to link the CRAM load modules.  &lt;br /&gt;
&lt;br /&gt;
Versions 7.4 and later of the CRAM load modules are completely compatible with version 7.5 of Model 204. Deploying a new version of CRAM can be an intensive process, and because you have version 7.4 installed, it is not necessary. You can safely bypass linking the 7.5 CRAM modules. However, if you do not link the 7.5 CRAM modules, you will need to apply additional 7.4 maintenance.&lt;br /&gt;
&lt;br /&gt;
Your CRAM installation options are:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Install 7.5 XDM by running LKCRAMJ to link the 7.5 CRAM modules.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Install 7.4 XDM and then apply Early Warnings for Model 204 through 740EW172. (You can do this by applying Autofix release EW3044, which includes these Early Warnings as well as Early Warnings for Dictionary/204 through 740DI016.)&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==FUNU and optional MSGU==&lt;br /&gt;
&amp;lt;!--Caution: &amp;lt;div&amp;gt; above--&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
This section lists installation considerations if you have your own user-written $functions module (FUNU).&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; If you have your own FUNU or MSGU module, you must assemble it &amp;lt;b&amp;gt;before linking the ONLINE/IFAM1/IFAM4&amp;lt;/b&amp;gt; load modules.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;div id=&amp;quot;FUNU_7.5&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
===FUNU changes for version 7.5===&lt;br /&gt;
&amp;lt;!--Caution: &amp;lt;div&amp;gt; above--&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
{{Template:FUNU changes for 7.5}}&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;div id=&amp;quot;asmFUNU&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
===FUNU (and MSGU) assembly===&lt;br /&gt;
&amp;lt;!--Caution: &amp;lt;div&amp;gt; above--&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
Copy the source from RKMACLIB into your local source library.&lt;br /&gt;
 &lt;br /&gt;
After making any changes required for this version of &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model 204&amp;lt;/var&amp;gt;, run &amp;lt;code&amp;gt;JASMJ&amp;lt;/code&amp;gt; to [[#asm|assemble]] FUNU into your local object library.  &lt;br /&gt;
&lt;br /&gt;
If needed, modify and run &amp;lt;code&amp;gt;JASMJ&amp;lt;/code&amp;gt; to assemble MSGU.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;You do &amp;lt;b&amp;gt;not&amp;lt;/b&amp;gt; need to insert any INCLUDE statements for either FUNU nor MSGU; they are already present in the INCLUDE member (LKSQLONL or LKNOSONL) provided in the downloaded object library.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;div id=&amp;quot;ul_db2&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Installing the UL/DB2 interface (JAUSQLJ job stream)==&lt;br /&gt;
&amp;lt;!--Caution: &amp;lt;div&amp;gt; above--&amp;gt;&lt;br /&gt;
To support the UL/DB2 interface, USQL code is delivered in source for you to preprocess for your version of DB2. If you use the UL/DB2 interface, assemble the source as described below &amp;lt;b&amp;gt;before linking the ONLINE/IFAM1/IFAM4&amp;lt;/b&amp;gt; load modules.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Copy [[Model 204 UL/DB2 job stream for IBM z/OS|JAUSQLJ]] into a local TSO library.&lt;br /&gt;
&amp;lt;li&amp;gt;Edit your copy of &amp;lt;code&amp;gt;JAUSQLJ&amp;lt;/code&amp;gt; for your configuration:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Replace the first line with a JOB card.&lt;br /&gt;
&amp;lt;li&amp;gt;Supply your installation high level qualifier(s) in the following lines marked with &amp;lt;code&amp;gt;&amp;amp;lt;&amp;amp;lt;&amp;lt;/code&amp;gt;:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;for &amp;lt;code&amp;gt;hlq&amp;lt;/code&amp;gt; in the &amp;lt;code&amp;gt;JCLLIB ORDER=(hlq.&amp;lt;/code&amp;gt;... line after the &amp;lt;code&amp;gt;JOB&amp;lt;/code&amp;gt; card&lt;br /&gt;
&amp;lt;li&amp;gt;on the line after &amp;lt;code&amp;gt;EXEC JAUSQLP&amp;lt;/code&amp;gt; at the bottom of the job stream set:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;HLQ=&amp;lt;/code&amp;gt;high level qualifier of all Model 204 installation DSNs&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;DB2HLQ=&amp;lt;/code&amp;gt;high level qualifier for your DB2 maclib.&amp;lt;/li&amp;gt; &lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Submit the &amp;lt;code&amp;gt;JAUSQLJ&amp;lt;/code&amp;gt; job to preprocess and assemble the USQL module.  The JAUSQLJ job executes the following two steps:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Run USQL (contained in RKMACLIB) through the DB2 preprocessor to process the EXEC SQL statements.  This step produces two data sets: the DBRM and the expanded USQL source.  The DBRM is saved as USQLDBRM in the local object library.  The expanded USQL source is passed to step two for assembly.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Assemble expanded USQL source into local object library.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Bind the DBRM as the plan with a site-specific plan name.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
For more information on UL/DB2, see the &amp;lt;var class=&amp;quot;book&amp;quot;&amp;gt;Rocket Model 204 User Language/DATABASE 2 Interface Guide&amp;lt;/var&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;softspy&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Upgrading SoftSpy for 7.5==&lt;br /&gt;
&amp;lt;!--Caution: &amp;lt;div&amp;gt; above--&amp;gt;&lt;br /&gt;
To upgrade SoftSpy for version 7.5, download, upload, and restore the SoftSpy procedure file, SPYPROC, which is distributed in a dump format.&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Download SPYPROC, in binary form, from the [https://m204.rocketsoftware.com/maint/ullist?nickname=ROCKET SOUL files download page] to a workstation file.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Upload (FTP) the file from your workstation to your z/OS system.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;RESTORE the file into a Model 204 SOUL file.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt; &lt;br /&gt;
For detailed instructions, see [http://m204wiki.rocketsoftware.com/index.php?title=Web_help_download_SOUL_files#How_can_the_dump_file_be_uploaded_to_the_mainframe.3F Downloading and restoring SOUL files].&lt;br /&gt;
&lt;br /&gt;
==Verifying Model 204 7.5 on your system==&lt;br /&gt;
To perform an initial verification that your upgrade to 7.5 was successful, issue the following commands from the Model 204 command line.&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;Command&amp;lt;/th&amp;gt; &amp;lt;th&amp;gt;You should see...&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;ROCKET&amp;lt;/td&amp;gt; &amp;lt;td&amp;gt;A list of authorized M204 products (including 7.5) currently on your system.&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;DISPLAY ZAPS&amp;lt;/td&amp;gt; &amp;lt;td&amp;gt;A list of Model 204 zaps (including 7.5 zaps) on your system.&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;DICTADMIN&amp;lt;/td&amp;gt; &amp;lt;td&amp;gt;The Dictionary Administration subsystem, displaying &amp;lt;code&amp;gt;Release 7.5&amp;lt;/code&amp;gt; on its menu screens.&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;SUBSYSMGMT&amp;lt;/td&amp;gt; &amp;lt;td&amp;gt;The Application Subsystem facility, displaying &amp;lt;code&amp;gt;VER 7 REL 5&amp;lt;/code&amp;gt; on its menu screens.&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Example workflow for 7.5: download through installation==&lt;br /&gt;
This example shows one typical installation workflow: the site does not use RSQL, it uses the RACF external authorizer, and it does not have its own FUNU. The IBM system MQ loadlib is &amp;lt;code&amp;gt;MQSERIES.SCSQLOAD&amp;lt;/code&amp;gt; (this is typical in z/OS).&lt;br /&gt;
The high-level qualifier in this example is MYBUILD.&lt;br /&gt;
 &lt;br /&gt;
The other item needed is the member name &amp;lt;code&amp;gt;MYBLDOB&amp;lt;/code&amp;gt;, which is chosen arbitrarily for this example, and the following DSNs:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;MYBUILD.M204V75.RKOBJLIB.DISTRIB&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;MYBUILD.M204V75.RKOBJLIB&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;MYBUILD.M204V75.RKMACLIB.DISTRIB&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;MYBUILD.M204V75.RKMACLIB&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;MYBUILD.M204V75.LOCAL.OBJLIB&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;MYBUILD.M204V75.LOADLIB&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
===Build RKOBJLIB===&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Download the object library (M204V75.OBJ) from the downloads page.&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Upload to the mainframe, in binary format, with settings FB/80/6400, as &amp;lt;code&amp;gt;MYBUILD.M204V75.RKOBJLIB.DISTRIB&amp;lt;/code&amp;gt;.&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Download the macro library (M204V75_ZOS.MAC) from the downloads page.&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Upload to the mainframe, in binary format, with settings FB/80/6400, as &amp;lt;code&amp;gt;MYBUILD.M204V75.RKMACLIB.DISTRIB&amp;lt;/code&amp;gt;.&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Create the member MYBLDOB in my TSO library from a [http://sirius-software.com/download/new204lb.txt download] of the job stream to build the object and macro libraries, using the following at the end of the job stream:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;//BLD EXEC NEW204LB,VERSION=75,&lt;br /&gt;
//         HLQ=MYBUILD,&lt;br /&gt;
//         OBJINP=MYBUILD.M204V75.RKOBJLIB.DISTRIB,&lt;br /&gt;
//         MACINP=MYBUILD.M204V75.RKMACLIB.DISTRIB&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Run MYBLDOB from my TSO library. MYBLDOB deletes and then creates &amp;lt;code&amp;gt;MYBUILD.M204V75.RKOBJLIB&amp;lt;/code&amp;gt; and&lt;br /&gt;
&amp;lt;code&amp;gt;MYBUILD.M204V75.RKMACLIB&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Upload to the mainframe, in binary format, with settings FB/80/6400, as &amp;lt;code&amp;gt;MYBUILD.M204V75.RKMACLIB.DISTRIB&amp;lt;/code&amp;gt;.&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Create the member MYBLDDS in my TSO library by copying&lt;br /&gt;
the job stream from [[Model 204 data set allocation job stream for IBM z/OS|JALINSJ]], using the following at the end of the job stream:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;//BLD EXEC JALINSP, &lt;br /&gt;
// HLQ=MYBUILD &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Run MYBLDDS from my TSO library. MYBLDDS allocates an empty loadlib data set for the Model 204 load modules, an empty local source library for the customized source files, and an empty local object library for the customized local object modules, with the following names: &amp;lt;code&amp;gt;MYBUILD.M204V75.LOADLIB&amp;lt;/code&amp;gt;,  &amp;lt;code&amp;gt;MYBUILD.M204.LOCAL.SRCLIB&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;MYBUILD.M204V75.LOCAL.OBJLIB&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Assemble and link===&lt;br /&gt;
&amp;lt;ol &amp;gt; &lt;br /&gt;
&amp;lt;li&amp;gt;Copy the RACFPARM source to the &amp;lt;code&amp;gt;MYBUILD.M204.LOCAL.SRCLIB&amp;lt;/code&amp;gt; and make any necessary modifications.&lt;br /&gt;
&amp;lt;li&amp;gt;Create the member JASMSECJ in my TSO library by copying&lt;br /&gt;
the job stream from [[Model 204 local member assembly job stream for IBM z/OS|JASMJ]], using the following at the end of the job stream:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;//ASM     EXEC JASMP,HLQ=MYBUILD,    &lt;br /&gt;
//             MEM=RACFPARM           &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Run JASMSECJ from my TSO library; this assembles the RACFPARM source file in the &amp;lt;code&amp;gt;MYBUILD.M204.LOCAL.SRCLIB&amp;lt;/code&amp;gt; and stores the object in &amp;lt;code&amp;gt;MYBUILD.M204V75.LOCAL.OBJLIB&amp;lt;/code&amp;gt;.&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Copy the member LKONLNJ from &amp;lt;code&amp;gt;MYBUILD.M204V75.RKOBJLIB&amp;lt;/code&amp;gt; to my TSO library, and customize LKONLN as follows:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Make these changes at the top of the job stream:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;//            JCLLIB ORDER=(MYBUILD.M204V75.RKOBJLIB)&lt;br /&gt;
//LKONLN EXEC LKM204P,&lt;br /&gt;
//            HLQ=MYBUILD,&lt;br /&gt;
//            MQ=MQSERIES.SCSQLOAD&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Uncomment the &amp;lt;code&amp;gt;INCLUDE&amp;lt;/code&amp;gt; line for LKNOSONL (that is, without RSQL).&lt;br /&gt;
&amp;lt;li&amp;gt;Uncomment the &amp;lt;code&amp;gt;INCLUDE&amp;lt;/code&amp;gt; line for MQ.&lt;br /&gt;
&amp;lt;li&amp;gt;Uncomment the &amp;lt;code&amp;gt;INCLUDE&amp;lt;/code&amp;gt; line for my external authorizer module (such as RACFOS and RACFPARM).&lt;br /&gt;
&amp;lt;li&amp;gt;Submit the LKONLNJ job from my TSO library, this creates ONLINE (and BATCH204 alias) in MYBUILD.M204V75.LOADLIB.&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Perform a simple smoke test: run BATCH204 with &#039;DISPLAY ZAPS&#039; and &#039;ROCKET&#039; commands.&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;To link the utilities, copy member LKALLUTJ from &amp;lt;code&amp;gt;MYBUILD.M204V75.RKOBJLIB&amp;lt;/code&amp;gt; to my TSO library, and see all &amp;lt;code&amp;gt;&amp;amp;lt;&amp;amp;lt;&amp;lt;/code&amp;gt; lines to customize for my site; submit the LKALLUTJ job.&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Ensure that any JCL that performs deferred index sorting for &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model 204&amp;lt;/var&amp;gt; version 7.5&lt;br /&gt;
(typically, FLOD jobs) uses the new &amp;lt;code&amp;gt;MYBUILD.M204V75.LOADLIB&amp;lt;/code&amp;gt; for the E15 (OI15OS) and E35 (OI35OS) sort exits.&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[[Upgrading to Model 204 version 7.5 on IBM z/VM CMS]]&lt;br /&gt;
&amp;lt;li&amp;gt;[[Upgrading to Model 204 version 7.5 on IBM z/VSE]]&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Additional information==&lt;br /&gt;
Refer to the &amp;lt;i&amp;gt;[http://m204wiki.rocketsoftware.com/images/d/de/M204_V7R4_zOS_Install.pdf Rocket Model 204 Installation Guide for IBM z/OS, version 7.4]&amp;lt;/i&amp;gt;, for additional installation information.&lt;br /&gt;
 &lt;br /&gt;
[[Category:Installation]]&lt;/div&gt;</summary>
		<author><name>Mlarocca</name></author>
	</entry>
	<entry>
		<id>https://m204wiki.rocketsoftware.com/index.php?title=Downloading_and_uploading_Model_204_installation_components&amp;diff=74283</id>
		<title>Downloading and uploading Model 204 installation components</title>
		<link rel="alternate" type="text/html" href="https://m204wiki.rocketsoftware.com/index.php?title=Downloading_and_uploading_Model_204_installation_components&amp;diff=74283"/>
		<updated>2014-12-17T20:08:13Z</updated>

		<summary type="html">&lt;p&gt;Mlarocca: /* FTP JCL example */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;===Downloading object files===&lt;br /&gt;
From the downloads page, you can download a file directly or have it emailed. Receiving the object deck through e-mail might take a little longer than downloading it directly, but it allows you to schedule a set of objects to be sent to a different person in your organization.&lt;br /&gt;
&lt;br /&gt;
To download a file, click the &amp;lt;b&amp;gt;Download object file&amp;lt;/b&amp;gt; link beside the object that you want.&lt;br /&gt;
&lt;br /&gt;
To email a file:&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Fill in the &amp;lt;b&amp;gt;Target e-mail address&amp;lt;/b&amp;gt; field at the top of the downloads list.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Click the &amp;lt;b&amp;gt;Email object file&amp;lt;/b&amp;gt; link beside the object that you want. &lt;br /&gt;
&lt;br /&gt;
The object deck will be e-mailed to the specified address as an attachment.&amp;lt;/li&amp;gt; &lt;br /&gt;
&amp;lt;li&amp;gt;Save the attachment to a local file and then upload it to the mainframe exactly as if you had downloaded it directly.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Uploading object files===&lt;br /&gt;
Once the object files are downloaded to the workstation, you must upload them to the z/OS system on the IBM mainframe.&lt;br /&gt;
You can use any file transfer mechanism, including FTP and IND$FILE. &lt;br /&gt;
Regardless of the transfer mechanism, you must observe the following rules: &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Transfer the object file in &amp;lt;b&amp;gt;binary&amp;lt;/b&amp;gt; format. (No translation from ASCII to EBCDIC must occur as a result of the upload.)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Specify storage size and the RECFM, LRECL, and BLOCKSIZE characteristics of the data set for the object you are transferring:&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;record format&amp;lt;/th&amp;gt; &amp;lt;td&amp;gt;FB (fixed record length with block records)&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;record size&amp;lt;/th&amp;gt; &amp;lt;td&amp;gt;80 for object and macro libraries; &amp;lt;br /&amp;gt;6184 for procedure files&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;block size&amp;lt;/th&amp;gt; &amp;lt;td&amp;gt;6400 for object and macro libraries; &amp;lt;br /&amp;gt;6184 for procedure files&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;storage size&amp;lt;/th&amp;gt;&amp;lt;td&amp;gt;primary: 10 CYL; secondary: 5 CYL&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you are using FTP to upload a file:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Use the SITE command if the FTP client is on the workstation and the server is on the mainframe. &lt;br /&gt;
(In this case the SITE command might have to be sent as a &amp;quot;quote&amp;quot; to the mainframe. How this is done depends on your workstation&#039;s FTP client.)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Use the LOCSITE command if the FTP client is on the mainframe and the server is on the workstation.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===FTP JCL example===&lt;br /&gt;
The following z/OS JCL to FTP from the FTP server also shows the use of LOCSITE:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;//jobcard            &lt;br /&gt;
//FTP      EXEC PGM=FTP,PARM=&#039;(EXIT=4,TRAC,TI=20)&#039; &lt;br /&gt;
//* (PARM is optional)&lt;br /&gt;
//OUTPUT   DD SYSOUT=*                             &lt;br /&gt;
//SYSPRINT DD SYSOUT=*                             &lt;br /&gt;
//INPUT    DD *                                    &lt;br /&gt;
ipaddress (or domain name) of ftp server, n.n.n.n                                     &lt;br /&gt;
user login                                          &lt;br /&gt;
pswd                                         &lt;br /&gt;
binary                                             &lt;br /&gt;
LOCSITE CYL                                        &lt;br /&gt;
LOCSITE PRIMARY=10                                 &lt;br /&gt;
LOCSITE SECONDARY=5                                &lt;br /&gt;
LOCSITE LRECL=80                                   &lt;br /&gt;
LOCSITE BLOCKSIZE=6400                             &lt;br /&gt;
LOCSITE RECFM=FB                                   &lt;br /&gt;
CD \M204V75                                        &lt;br /&gt;
get  M204V75.INT &#039;M204.V75.OBJ.DOWNLOAD&#039; (replace  &lt;br /&gt;
get  M204V75_ZOS.MAC &#039;M204.V75.MAC.DOWNLOAD&#039; (replace    &lt;br /&gt;
QUIT                                               &lt;br /&gt;
/*   &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mlarocca</name></author>
	</entry>
	<entry>
		<id>https://m204wiki.rocketsoftware.com/index.php?title=SOUL_$functions&amp;diff=71014</id>
		<title>SOUL $functions</title>
		<link rel="alternate" type="text/html" href="https://m204wiki.rocketsoftware.com/index.php?title=SOUL_$functions&amp;diff=71014"/>
		<updated>2014-08-01T14:14:39Z</updated>

		<summary type="html">&lt;p&gt;Mlarocca: /* Summary of standard functions */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Overview==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Some operations are inefficient or impossible to code in a high-level programming language like User Language. To overcome this difficulty, User Language provides a variety of functions, which are assembly language subroutines you can call from within a User Language request.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The name of each User Language function begins with a dollar sign ($). For this reason, they are often referred to as $functions (dollar functions).&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
==Types of functions==&lt;br /&gt;
 &lt;br /&gt;
===Functions provided by User Language===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The functions provided by User Language are divided into two sets. One set is supplied as a standard feature and includes functions for data editing, data validation, and other purposes. The other set of functions (mathematical functions) is an optional feature of &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; and contains mathematical and scientific subroutines.    &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
In order to save machine resources, your site might have chosen to omit some of the standard functions as well as some or all of the mathematical functions. If a request calls a function that is not yet installed, compile-time errors result. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===User-written functions===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
In addition to the functions provided by User Language, some customer sites write their own functions based on their particular needs.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Before using any user-written functions, make sure that your site&#039;s FUNU module has been reassembled with the macro library supplied with the current release. Also, please be sure to carefully test your user-written functions before your system goes into production. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;p class=&amp;quot;note&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Note:&amp;lt;/b&amp;gt;&lt;br /&gt;
It is recommended that all user-written functions use the STMG/LMG Assembly Language instructions to save and restore any registers that are modified.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Customers are individually responsible for any functions they write. Rocket Software takes no responsibility for user-written functions or their documentation.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Using functions==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can use functions in several ways, including, as a term in:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;An expression in a variable assignment statement, for example:&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;%X=$EDIT(2573,&#039;99999&#039;)&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The specifications in a PRINT statement&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 PRINT statement can include a function call anywhere a field name can be used. For example:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;PRINT $EDIT(2573,&#039;99999&#039;)&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;An expression in a conditional statement, for example:&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;IF $EDIT(2573,&#039;99999&#039;) EQ 02573 THEN...&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;An expression which serves as the argument to another function, for example:&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;%L=$LEN($EDIT(2573,&#039;99999&#039;))&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The direct use of function calls in some statements, such as FIND, results in compilation errors.     &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Comparing successful and unsuccessful $function code====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If your request is coded as follows:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;BEGIN&lt;br /&gt;
$EDIT(2573,&#039;99999&#039;)&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 error is your result:&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 M204.0229: INVALID STATEMENT $EDIT(2573,&#039;99999&#039;)&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
However, if you code your request as follows, it works properly:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;BEGIN&lt;br /&gt;
PRINT $EDIT(2573,&#039;99999&#039;)&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;* Or *&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;* %X=$EDIT(2573,&#039;99999&#039;) *&lt;br /&gt;
END&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Function return values===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Each function returns a single value to the calling request. For example, this function sets %A equal to the user&#039;s login account name:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;%a = $account&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
This function causes the length of the current value of the FULLNAME field to be compared to 10:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;IF $LEN(FULLNAME) GT 10 THEN&lt;br /&gt;
   .&lt;br /&gt;
   .&lt;br /&gt;
   .&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Function arguments===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Some functions require one or more arguments which allow you to pass information to the subroutine. Some functions take no arguments. Arguments must be enclosed in parentheses and separated by commas. For example:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;IF $READ(&#039;CONTINUE?&#039;) EQ &#039;YES&#039; THEN&lt;br /&gt;
   .&lt;br /&gt;
   .&lt;br /&gt;
   .&lt;br /&gt;
%X = $mod(COUNT IN CT, %BASE)&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Rules for function arguments====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Function arguments follow the normal rules for arithmetic expressions. Arguments can include other function calls and can perform any type of computation. See the section [[Using variables and values in computation#Expressions|Expressions]] for detailed information on expression syntax.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Argument evaluation and conversion====&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; evaluates each argument to a function as either a string or a number. When this data type conflicts with the data type required by the function, the following rules apply:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;If an argument is expected to be numeric but is a string, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; converts the string to a number according to the conversion rules described in the assignment statement discussion in [[Using variables and values in computation#Relationship between %variable assignment and declaration|Relationship between %variable assignment and declaration]] and [[Using variables and values in computation#Conversion|Conversion]]. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;If an argument is expected to be a string but is numeric, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; converts the number to a string. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;If the original number contains decimal places, they are lost during the conversion.&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;
==Sending email messages via User Language==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The User Language &amp;lt;var&amp;gt;$SNDMAIL&amp;lt;/var&amp;gt; function simplifies sending an email message to issuing a single function call. You can easily send an email message using User Language without writing a procedure and without having an extensive knowledge of sockets or SMTP protocol.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Internet Protocol (IP) addressing====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
On z/OS systems only, Model 204 supports both IPv6 and IPv4 addressing.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Limitations of the $SNDMAIL function under z/VM and z/VSE====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
&amp;lt;var&amp;gt;$SNDMAIL&amp;lt;/var&amp;gt; is supported with the following exceptions:&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;[[SMTPCADD parameter|SMTPCADD]]&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;[[SMTPSADD parameter|SMTPSADD]]&amp;lt;/var&amp;gt; addresses must be supplied in internet protocol (IP) address protocol, not as domain names. You must supply IPv4 (dotted-decimal) internet addresses for the &amp;lt;var&amp;gt;SMTPCADD&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;SMTPSADD&amp;lt;/var&amp;gt; parameters.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Likewise, if the client and server names are specified using the SMAILD image rather than using the CCAIN parameters &amp;lt;var&amp;gt;SMTPCADD&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;SMTPSADD&amp;lt;/var&amp;gt;, the SERVERDDNAME and CLIENTDDNAME values must be supplied rather than the SERVERNAME and CLIENTNAME values. &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; does not support IPv6 addressing on z/VM or z/VSE systems.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Enabling $SNDMAIL===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The first requirement for enabling the use of $SNDMAIL is to set the following four required CCAIN parameters:&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;Parameter&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;SMTP purpose&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;SMTPCADD&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;SMTP client address. The client is the &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; address space. &lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
On z/OS systems:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Set this parameter to one of the following: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Symbolic name, such as MYMVS1, or SMTP.MYDOMAIN.COM.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Dotted decimal address, such as 182.148.55.206.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;IPV6 address, with up to 8 halfwords separated by colons, such as &amp;lt;code&amp;gt;C0:12:46:F0:00:00:00:01&amp;lt;/code&amp;gt;, which can also be written as &amp;lt;code&amp;gt;C0:12:46:F0::01&amp;lt;/code&amp;gt;. In other words, the double colon shows that there are missing halfwords of binary zeros.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
On z/VM or z/VSE systems:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Set this parameter to the dotted decimal address, such as &amp;lt;code&amp;gt;182.148.55.206&amp;lt;/code&amp;gt;.&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;SMTPCPRT&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;SMTP client port. The default value is 7700.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;SMTPSADD&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;SMTP server address.&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
On z/OS systems:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Set this parameter to one of the following: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Symbolic name, such as MYMVS1, or SMTP.MYDOMAIN.COM.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Dotted decimal address, such as 182.148.55.206.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;IPV6 address, with up to 8 halfwords separated by colons, such as &amp;lt;code&amp;gt;C0:12:46:F0:00:00:00:01&amp;lt;/code&amp;gt;, which can also be written as &amp;lt;code&amp;gt;C0:12:46:F0::01&amp;lt;/code&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;
On z/VM or z/VSE systems:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Set this parameter to the dotted decimal address, such as &amp;lt;code&amp;gt;182.148.55.206&amp;lt;/code&amp;gt;.&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;SMTPSPRT&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;SMTP server port. The default value is 25, which is standard for most SMTP servers.&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;
Your system manager can dynamically reset these parameters while the run is up. If you use the domain name for either &amp;lt;var&amp;gt;SMTPCADD&amp;lt;/var&amp;gt; or &amp;lt;var&amp;gt;SMTPSADD&amp;lt;/var&amp;gt;, you must have the following DD allocated to the Online:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;//SYSTCPD DD DSN=TCPIP.PROFILE(TCPDATA),DISP=SHR&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
This is the TCP/IP profile data set required to support the resolution of IP domain names. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
On some SMTP servers, a valid email address is required for the &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;%from&amp;lt;/var&amp;gt; argument in the &amp;lt;var&amp;gt;$SNDMAIL&amp;lt;/var&amp;gt; function. Most SMTP activity requires a valid SMTP server.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====$SNDMAIL and BATCH204====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
&amp;lt;var&amp;gt;$SNDMAIL&amp;lt;/var&amp;gt; is supported in BATCH204 if you relink BATCH204 with the following objects after V7R4 installation:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;TC62 (or TC62DOS on z/VSE systems)&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;TCIU&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;TCSE&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;LU62&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;FUNR (or FUNRDOS on z/VSE systems)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
After relinking you need to ensure that the following SMTP parameters are set in the ONLINE and BATCH204 CCAIN:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SMTPCADD&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;SMTPSADD&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;SMTPCPRT&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;SMTPSPRT&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===$SNDMAIL===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The &amp;lt;var&amp;gt;$SNDMAIL&amp;lt;/var&amp;gt; function sends an email message using the values you enter for the &amp;lt;var&amp;gt;$SNDMAIL&amp;lt;/var&amp;gt; arguments. &amp;lt;var&amp;gt;$SNDMAIL&amp;lt;/var&amp;gt; lets you send an email message with an optional attachment.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Syntax====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The syntax for the &amp;lt;var&amp;gt;$SNDMAIL&amp;lt;/var&amp;gt; function is:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;$SNDMAIL(%SUBJ,%RCPT,%BODY,%FROM,%TO,%CC,%BCC,&#039;EMAILD&#039;,%ATTACH,&#039;C&#039;)&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;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;%SUBJ, which is optional, specifies a %variable or literal that contains the topic line.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;%RCPT, which is optional, specifies a %variable or an image that contains the destination addresses, separated by commas. &lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If %RCPT is omitted, the destination addresses are taken from the %TO, %CC and %BCC arguments. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If %RCPT is an image, the image name must be enclosed within quotation marks, for example &#039;DEPT-ADDR&#039;.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;%BODY specifies a %variable or an image that contains the text of the message. If %BODY is an image, the image name must be enclosed in quotation marks, for example &#039;MSG-TXT&#039;.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;%FROM specifies a %variable that contains the FROM header field of up to 255 bytes. Although %FROM is optional, you should supply it, otherwise messages could fail when speaking to another SMTP server. If %FROM is omitted, the logged-on user ID is used. The email server may append the domain name to the given %FROM value.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;%TO, %CC, and %BC, which are optional, specify a %variable that contains the TO, CC, and BCC header fields, respectively, of up to 255 bytes each.&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Address must be enclosed in carets (&amp;lt;&amp;gt;), for example: M204-help &amp;lt;M204support@rocketsoftware.com&amp;gt;.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&#039;EMAILD&#039;, which is optional, specifies image data.  The parameter provides the ability to override the values specified in CCAIN for SMTPSPRT, SMTPCPRT, SMTPSADD, and SMTPCADD.  If &#039;EMAILD&#039; is present, it must be in the following format, with the items in the following order: &lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;* EMAILD - IMAGE WITH SMTP PARAMETERS&lt;br /&gt;
IMAGE EMAILD                                                                      &lt;br /&gt;
     SERVERPORT    IS BINARY LEN 4    ;*SMTPSPRT                                                &lt;br /&gt;
     CLIENTPORT    IS BINARY LEN 4    ;*SMTPCPRT                                                &lt;br /&gt;
     SERVERNAME    IS STRING LEN 255  ;*SMTPSADD                                              &lt;br /&gt;
     CLIENTNAME    IS STRING LEN 255  ;*SMTPCADD                                            &lt;br /&gt;
     SERVERDD      IS STRING LEN 15   ;*Server dotted decimal address IPv4 format (optional)             &lt;br /&gt;
     CLIENTDD      IS STRING LEN 15   ;*Client dotted decimal address IPv4 format (optional)            &lt;br /&gt;
     SERVERIPV6    IS STRING LEN 45   ;*Server dotted decimal address IPv6 format (optional) &lt;br /&gt;
     CLIENTIPV6    IS STRING LEN 45   ;*Client dotted decimal address IPv6 format (optional) &lt;br /&gt;
END IMAGE                                                                         &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The SERVERIPV6 and CLIENTIPV6 fields are provided for the IPv6 colon-separated network addresses. These two fields are optional, to provide backward compatibility.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;%ATTACH, which is optional, specifies a %variable or literal with the name of an attachment that will be appended to the message. The attachment is assumed to be in the Universal Buffer at offset 0 (also called position 1). The length of the attachment is defined by the $Buffer_Used value. If the %ATTACH parameter is omitted, there is no attachment.&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The function encodes the attachment using Base64 encoding, and may also translate it depending on the 10th argument.&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&#039;C&#039;, which is optional and is available as of Model 204 version 7.5, specifies that the object in the buffer will be translated to ASCII before being attached to the email. Alternatively, you can set this parameter to a percent variable with the value &#039;C&#039;. For example, translation to ASCII could be useful if the $SNDMAIL attachment is a CLOB (CHARACTER-LARGE-OBJECT) such as a text document.  If this argument is not specified with the value &#039;C&#039; or &#039;c&#039;, the attachment is sent as binary, that is, without translation.&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
In this example, the CLOB.TXT attachment will be translated to ASCII before being attached to the email:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;%RC = $SNDMAIL(%SUBJECT,,%BODY,%FROM,%TO,,,,&#039;CLOB.TXT&#039;,&#039;C&#039;)&lt;br /&gt;
&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;
===Setting CCAIN parameters for $SNDMAIL===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can set the following CCAIN parameters as default values for $SNDMAIL.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SMTPCADD is the default SMTP client address, the TCP/IP domain for the operating system, for the $SNDMAIL function. You can specify SMTPCADD as:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;(z/OS, z/VM, or z/VSE) Internet Protocol (IP) address, IPv4 format. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;(z/OS) Domain name of up to 255 bytes. If the first character of the address is an alphabetic character (A to Z), it is automatically evaluated as a domain name.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;(z/OS) IPV6 address, with up to 8 halfwords separated by colons, such as:&lt;br /&gt;
&amp;lt;code&amp;gt;C0:12:46:F0:00:00:00:01&amp;lt;/code&amp;gt;, which can also be written as &amp;lt;code&amp;gt;C0:12:46:F0::01&amp;lt;/code&amp;gt;. In other words, the double colon shows that there are missing halfwords of binary zeros.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can override SMTPCADD for a specific call by entering a different value in the EMAILD argument of the $SNDMAIL function call.&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;SMTPCPRT is the default SMTP client port for the $SNDMAIL function. The value can be any value in the user range &amp;amp;mdash; normally above 4095 and up to 32767.&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can override SMTPCPRT for a specific call by entering a different value in the EMAILD argument of the $SNDMAIL function call.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;SMTPSADD is the default SMTP server address for the $SNDMAIL function. You can specify SMTPSADD as:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;(z/OS, z/VM, or z/VSE) Internet Protocol (IP) address, IPv4 format.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;(z/OS) Domain name of up to 255 bytes. If the first character of the address is an alphabetic character (A to Z), it is automatically evaluated as a domain name.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;(z/OS) IPV6 address, with up to 8 halfwords separated by colons, such as: &amp;lt;code&amp;gt;C0:12:46:F0:00:00:00:01&amp;lt;/code&amp;gt;, which can also be written as &amp;lt;code&amp;gt;C0:12:46:F0::01&amp;lt;/code&amp;gt;. In other words, the double colon shows that there are missing halfwords of binary zeros.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can override SMTPSADD for a specific call by entering a different value in the EMAILD argument of the $SNDMAIL function call.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;SMTPSPRT is the default SMTP server port for the $SNDMAIL function. SMTPSPRT is normally set to the standard SMTP value of 25. You can override SMTPSPRT for a specific call by entering a different value in the EMAILD argument of the $SNDMAIL function.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
===Examples of running $SNDMAIL===&lt;br /&gt;
 &lt;br /&gt;
====Example 1====&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;%FROM  = &#039;me@mydomain.com&#039;&lt;br /&gt;
%TO    = &#039;My Friend &amp;lt;you@yourdomain.com&amp;gt;&#039;&lt;br /&gt;
%BNAME = &#039;mypicture.jpg&#039;&lt;br /&gt;
&lt;br /&gt;
MODIFY BUFFER CLEAR&lt;br /&gt;
&lt;br /&gt;
IN LOBSVR FOR 1 RECORD WHERE SVRKEY = %SVRKEY&lt;br /&gt;
  %ISIZE = $LOBLEN(SVRLOB)&lt;br /&gt;
  PRINT &#039;SIZE OF &#039; WITH %SVRKEY WITH &#039; IS &#039; WITH %ISIZE&lt;br /&gt;
  BUFFER, 1, %ISIZE = SVRLOB, 1, %ISIZE&lt;br /&gt;
END FOR&lt;br /&gt;
&lt;br /&gt;
PRINT &#039;BUFFER USED IS &#039; WITH $buffer_used&lt;br /&gt;
%SUBJECT   = &#039;THIS SENDS A JPG FROM LOBSVR - &#039; WITH %SVRKEY&lt;br /&gt;
%BODY      = &#039;THIS BODY CONTAINS &#039; WITH %SVRKEY&lt;br /&gt;
%RC        = $SNDMAIL(%SUBJECT,,%BODY,%FROM,%TO,,,,%BNAME)&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
In the previous example, a binary object (BLOB) is retrieved from the database and placed at position 1 in the buffer. The $SNDMAIL function sends this as a Base64-encoded attachment.&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 second parameter (the RCPTTO addresses) is omitted. The function creates this using the %TO parameter.&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;%TO  =&#039;JANE &amp;lt;YOU@YOURCORP.COM&amp;gt;&#039;&lt;br /&gt;
%BODY=&#039;See you at 9:30 AM tomorrow in the conference room&#039;&lt;br /&gt;
%RC  =$SNDMAIL(,,%BODY,,%TO)&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Example 3====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The EMAILD argument is used to override the default domain names and ports.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;IMAGE EMAILD&lt;br /&gt;
     SERVERPORT    IS BINARY LEN 4    ;*SMTPSPRT                                                &lt;br /&gt;
     CLIENTPORT    IS BINARY LEN 4    ;*SMTPCPRT                                                &lt;br /&gt;
     SERVERNAME    IS STRING LEN 255  ;*SMTPSADD                                              &lt;br /&gt;
     CLIENTNAME    IS STRING LEN 255  ;*SMTPCADD                                            &lt;br /&gt;
  END IMAGE&lt;br /&gt;
 &lt;br /&gt;
  PREPARE IMAGE EMAILD&lt;br /&gt;
  %EMAILD:SERVERNAME  = &#039;MAIL.SERVER.COM&#039;&lt;br /&gt;
  %EMAILD:CLIENTNAME  = &#039;MYMVSSYSTEM&#039;&lt;br /&gt;
  %EMAILD:SERVERPORT  = 25&lt;br /&gt;
  %EMAILD:CLIENTPORT  = 5601&lt;br /&gt;
  %FROM     = &#039;ME@MYCORP.COM&#039;&lt;br /&gt;
  %TO       = &#039;JANE &amp;lt;YOU@YOURCORP.COM&amp;gt;&#039;&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;* RCPTTO is defined as an image here, allowing the string of&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;* addressees to be more than 255 bytes long.&lt;br /&gt;
  IMAGE RCPTTO&lt;br /&gt;
     EMRCPT1    IS STRING LEN 255&lt;br /&gt;
  END IMAGE&lt;br /&gt;
 &lt;br /&gt;
  PREPARE IMAGE RCPTTO&lt;br /&gt;
  %RCPTTO:EMRCPT1 = &#039;YOU@YOURCORP.COM&#039;&lt;br /&gt;
  IMAGE BODY&lt;br /&gt;
     BODY1   IS STRING LEN 240&lt;br /&gt;
     BODY2   IS STRING LEN 240&lt;br /&gt;
  END IMAGE&lt;br /&gt;
 &lt;br /&gt;
  PREPARE IMAGE BODY&lt;br /&gt;
  %S = &#039;EXAMPLE 1&#039;                     /?    SUBJECT LINE     ?/&lt;br /&gt;
  %BODY:BODY1 = &#039;THIS IS BODY1 WHICH IS PART OF AN IMAGE&#039;&lt;br /&gt;
  %BODY:BODY2 = &#039;SO THE BODY TEXT CAN BE MORE THAN 255 BYTES LONG&#039;&lt;br /&gt;
  %RC         = $SNDMAIL(%S,&#039;RCPTTO&#039;,&#039;BODY&#039;,%FROM,%TO,,,&#039;EMAILD&#039;)&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Example 4====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
This example illustrates using EMAILD in an IPV6 environment. The lines that differ from Example 3 are shown in bold.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;IMAGE EMAILD&lt;br /&gt;
     SERVERPORT    IS BINARY LEN 4    ;*SMTPSPRT                                                &lt;br /&gt;
     CLIENTPORT    IS BINARY LEN 4    ;*SMTPCPRT                                                &lt;br /&gt;
     SERVERNAME    IS STRING LEN 255  ;*SMTPSADD                                              &lt;br /&gt;
     CLIENTNAME    IS STRING LEN 255  ;*SMTPCADD                                            &lt;br /&gt;
     SERVERDD      IS STRING LEN 15   ;*Server dotted decimal address IPv4 format (optional)             &lt;br /&gt;
     CLIENTDD      IS STRING LEN 15   ;*Client dotted decimal address IPv4 format (optional)            &lt;br /&gt;
     SERVERIPV6    IS STRING LEN 45   ;*Server dotted decimal address IPv6 format (optional) &lt;br /&gt;
     &amp;lt;b&amp;gt;CLIENTIPV6    IS STRING LEN 45   ;*Client dotted decimal address IPv6 format (optional)&amp;lt;/b&amp;gt; &lt;br /&gt;
END IMAGE                                                                         &lt;br /&gt;
 &lt;br /&gt;
PREPARE IMAGE EMAILD&lt;br /&gt;
%EMAILD:SERVERPORT = 25&lt;br /&gt;
%EMAILD:CLIENTPORT = 5601&lt;br /&gt;
%EMAILD:SERVERNAME = &#039;MAIL.SERVER.COM&#039;&lt;br /&gt;
&amp;lt;b&amp;gt;%EMAILD:CLIENTIPV6 = &#039;C0:12:46:F0::01&#039;&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
%FROM = &#039;ME@MYCORP.COM&#039;&lt;br /&gt;
%TO = &#039;JANE &amp;lt;YOU@YOURCORP.COM&amp;gt;&#039;&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;* RCPTTO is defined as an image here, allowing the string of&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;* addressees to be more than 255 bytes long.&lt;br /&gt;
  IMAGE RCPTTO&lt;br /&gt;
EMRCPT1 IS STRING LEN 255&lt;br /&gt;
  END IMAGE&lt;br /&gt;
 &lt;br /&gt;
  PREPARE IMAGE RCPTTO&lt;br /&gt;
%RCPTTO:EMRCPT1 = &#039;YOU@YOURCORP.COM&#039;&lt;br /&gt;
IMAGE BODY&lt;br /&gt;
     BODY1  IS STRING LEN 240&lt;br /&gt;
     BODY2  IS STRING LEN 240&lt;br /&gt;
END IMAGE&lt;br /&gt;
 &lt;br /&gt;
  PREPARE IMAGE BODY&lt;br /&gt;
%S = &#039;EXAMPLE 1&#039; /? SUBJECT LINE ?/&lt;br /&gt;
%BODY:BODY1 = &#039;THIS IS BODY1 WHICH IS PART OF AN IMAGE&#039;&lt;br /&gt;
%BODY:BODY2 = &#039;SO THE BODY TEXT CAN BE MORE THAN 255 BYTES LONG&#039;&lt;br /&gt;
%RC = $SNDMAIL(%S,&#039;RCPTTO&#039;,&#039;BODY&#039;,%FROM,%TO,,,&#039;EMAILD&#039;)&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===ASCII translation===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
All text, except an optional binary attachment, is translated from EBCDIC to ASCII before sending.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Line ends===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Text that is part of the header and body can include EBCDIC CRLF strings (X&#039;0D25&#039;) that are translated to ASCII along with the rest of the text.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Reserved names===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The $SNDMAIL function uses Interface names CCAEM000 through CCAEM999. The user does not specify these names &amp;amp;mdash; the link name is generated by the function.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Socket limits===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Up to 31 sockets are available on each link. If no more sockets are available on a particular link (CCAEM000, for example), the next link is tried. Thus, a maximum of 31,000 simultaneous email threads is theoretically possible.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Size of email message===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The FROM, TO, CC, BCC, RCPTTO addresses, and body length, excluding the optional binary attachment, must total less than 27454 bytes.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Return code===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The $SNDMAIL function returns a fixed full word binary return code. See [[#Handling error condition return codes|Handling error condition return codes]] for possible values.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===RCPTTO parameter===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If the $SNDMAIL EMAILD argument is omitted, the RCPTTO addresses are constructed from the addresses contained in the %TO, %CC, and %BCC arguments.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The sum of the lengths of the RCPTTO address string, (If supplied) and the body text cannot exceed 30,700.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Using quotation marks===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You must enclose the names of images within quotation marks, for example:  &#039;BODY&#039;. However, do not enclose the percent variable values within quotation marks, for example: %SUBJECT, not &#039;%SUBJECT&#039;.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Server and client names in the EMAILD parameters===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
In the EMAILD image, on a z/OS system, you can specify either or both the server and client names as domain names, for example: &amp;lt;var&amp;gt;SMTPSERVER.YOURDOMAIN.COM&amp;lt;/var&amp;gt; or as an Internet Protocol (IP) address. If you specify the domain name, a TCP/IP call looks up the IP address. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;If one field is present, all fields must be present, even if the optional fields are left blank. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;If a name or port field is absent, it is taken from the CCAIN parameters SMTPSADD, SMTPCADD, SMTPSPRT, and SMTPCPRT. &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 two port parameters have defaults: the SMTPSPRT default is 25; the SMTPCPRT default is 7700.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The two address parameters, SMTPSADD and SMTPCADD, can be specified either as domain names of up to 255 bytes or as IP addresses. If the address begins with an alphabetic character (A to Z), it is automatically evaluated as a domain name. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The four CCAIN default parameters SMTPSADD, SMTPCADD, SMTPSPRT, and SMTPCPRT can be examined using VIEW and changed using RESET.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===References===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
For more information about the standards used in this function, please refer to these Internet Request for Comments documents:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;RFC822, Standard for the format of ARPA Internet Text Messages&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;RFC2821, Simple Mail Transfer Protocol&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;RFC3548, The Base16, Base32, and Base64 Data Encoding&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;
===Error codes for $SNDMAIL===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The $SNDMAIL function issues a return code. An error in $SNDMAIL gives a return code of -1, and it is $StatusD that contains the error code. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The negative error codes starting with -999 are listed in [[#Handling error condition return codes|Handling error condition return codes]]. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
It is also possible that $SNDMAIL will return a positive error code, which comes from TCP/IP and is documented in the IBM TCP/IP documentation, TCP/IP V3.2 for MVS: API Reference, Appendix D. For example, an error code of 60 means that the connection attempt timed out. $SOCKET calls give the same errors.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
However, in the case of a non-zero (error) return code, the following message is issued to the user:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;M204.2799: $SNDMAIL ERROR errortext&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When an attempt is made to set or reset the SMTPCADD or SMTPSADD parameters and the address translation fails, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; issues the following messages:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;RESET SMTPCADD CCAGGGG&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;*** M204.2834: ADDRESS LOOKUP FAILED FOR CCAGGGG&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;*** 1  M204.1123: PARAMETER SMTPCADD NOT RESET&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Handling error condition return codes===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
[[#Handling error condition return codes|Handling error condition return codes]] lists the possible $SOCKET return codes.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;caption&amp;gt;$Socket return codes&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;SMTP&lt;br /&gt;
Error text &amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Numeric&lt;br /&gt;
value &amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;&lt;br /&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&amp;gt;ERBADARG &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;-999 &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;BAD ARGUMENT&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;ERNOTOPN &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;-998 &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;NOT OPEN&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;ERNOSTOR &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;-997 &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;NO STORAGE&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;ERIMAGER &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;-996 &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;IMAGE FAILURE&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;ERBADLNK &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;-995 &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;BAD LINK&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;ERNOTREL &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;-994 &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;SOCD NOT RELEASED&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;ERPHYERR &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;-993 &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;LINK DEAD&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;ERNOLINK &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;-992 &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;LINK UNKNOWN&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;ERTRUNC &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;-991 &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;VARIABLE TRUNCATION (READ CALL)&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;ERNOSOCK &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;-990 &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;SOCKET NOT FOUND&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;ERTRUNC2 &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;-989 &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;TRUNCATION ERROR ON IMAGE&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;EROPSYS &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;-988 &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;FUNCTION UNSUPPORTED ON THIS OPSYS&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; &amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;-987 &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Not used&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;ERNOSRCD &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;-986 &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;NO SRCD&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;ERFDSLIM &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;-985 &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;TOO MANY SOCKETS&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;ERBADUBN &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;-984 &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;UNIVERSAL BUFFER NOT THERE&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;ERBADUBL &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;-983 &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;UNIVERSAL BUFFER LENGTH ERROR&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;ERBADUBA &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;-982 &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;UNIVERSAL BUFFER ALLOCATION ERROR&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;EREMREAD &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;-981 &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;ERROR WITH EMAIL SERVER READ&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;EREMWRIT &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;-980 &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;ERROR WITH EMAIL SERVER WRITE&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;ERGHBERR &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;-979 &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;SKIP=0 ERROR ON GETHOST CALL&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;ERGHERR1 &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;-978 &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;T1 LT 0 ERROR ON GETHOST CALL&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;ERGHERR2 &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;-977 &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;NO ADDRESSES RETURNED&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;
 &lt;br /&gt;
When an error message (with code 5xx) is returned from the SMTP server, the following error message is displayed:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;M204.2796: &#039;SMTP %C&#039;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
where %C is the error message returned by SMTP.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
For the other error codes above, the following error message is returned, in addition to $StatusD being set.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;M204.2799: &#039;$SNDMAIL ERROR %C&#039;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
where %C is listed in the following table:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;caption&amp;gt;Error text message possibilities for M204.2799&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;%C in message 2799 &amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;$StatusD code(s)&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;IN PARAMETER &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;999&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;- SOCKET NOT FOUND &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;990&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;- FUNCTION NOT SUPPORTED ON THIS SYSTEM &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;998&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;- NO SRCD &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;986&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;- TOO MANY SOCKETS &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;985&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;WITH UNIVERSAL BUFFER &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;984, 983, 982&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;Reading from SMTP server &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;981&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;Writing to SMTP server &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;980&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;Using GETHOSTBYNAME lookup &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;979, 978, 977&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;GETTING STORAGE &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;997&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;IN IMAGE PROCESSING &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;996&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;WITH TCP LINK &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;995, 998, 993, 992&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;- SOCD NOT RELEASED &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;994&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;READING DATA - TRUNCATION &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;991&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;
==Summary of standard functions==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
The following table lists the standard &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;SOUL&amp;lt;/var&amp;gt; functions in alphabetical order. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
See also:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[[SOUL $functions#Using_functions|Using functions]] reviews coding in &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;SOUL&amp;lt;/var&amp;gt; with $functions.&lt;br /&gt;
&amp;lt;li&amp;gt;[[List of $functions]] contains the many additional $functions available as of version 7.5 of &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model 204&amp;lt;/var&amp;gt;.&lt;br /&gt;
&amp;lt;/ul&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;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;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;[[$Account]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Account under which the user is logged in.&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;[[$Acct]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;User ID under which the user is logged in.&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;[[$Alpha]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Whether a string is composed of only the letters A through Z.&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;[[$AlphNum]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Whether a string is composed of only the letters A through Z and digits 0 through 9.&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;[[$ArrSize]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Number of elements in a particular dimension of an array.&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;[[$Ascii]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Input string, converted from EBCDIC to ASCII.&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;[[$Binary]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;A number converted into fixed-point binary.&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;[[$BldProc]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Enables a request to build a temporary procedure.&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;[[$Buffer_Position]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Current Universal Buffer position.&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;[[$Buffer_Size]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Size of user&#039;s Universal Buffer.&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;[[$Buffer_Used]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Amount of data currently in Universal Buffer&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;[[$CenqCt]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Number of unused entries within the resource enqueuing table.&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;[[$ChkMod]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Whether the terminal operator entered data in any full-screen input field.&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;[[$ChkTag]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Whether any erroneous full-screen input has been entered by the end user.&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;[[$ChkPat]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Syntax of a pattern.&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;[[$Code]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Encoding facility.&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;[[$Curfile]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Name of the file from which the current record has been selected.&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;[[$Currec]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Integer equal to the internal number of the current record.&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;[[$C2X]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;A translation of each byte within a character string to its two-byte&lt;br /&gt;
hexadecimal representation.&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;[[$Date]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Current date in yy-mm-dd format.&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;[[$DateChg]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Specified number of days, added to or subtracted from a given date.&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;[[$DateChk]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Whether a given date is valid.&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;[[$DateCnv]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Date converted to a format specified by the user.&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;[[$DateDif]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Difference in days between two dates.&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;[[$DateP]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Current date in &amp;quot;dd mon yy&amp;quot; format.&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;[[$DayI]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Number reflecting current day of the week.&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;[[$Deblank]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Substring of a string, with leading and trailing blanks removed.&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;[[$Decode]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Decoding facility.&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;[[$Dscr]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Decoding facility.&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;[[$Dsn]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Data set name when you specify a file&#039;s DD name and the ordinal number.&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;[[$DsnNum]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Total number of data sets defined for a file when you specify the file&#039;s DD name.&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;[[$EcfStat]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Returns the detailed completion code from the previous EXTERNAL statement.&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;[[$Edit]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Edited numeric and alphanumeric text&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;[[$Eformat]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Exponent notations from converted numeric values&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;[[$Encrypt]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;A one-way encryption of a character 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&amp;gt;[[$Enter]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Efficient terminal dialogue with users of data entry applications.&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;[[$ErrClr]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Clears the error message text returned by the $Errmsg and $Fsterr functions.&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;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;[[$Errmsg]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Prefix and text of the last counting error or request cancellation message received.&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;[[$FDef]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;String that describes the attributes of a field in 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;/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;[[$FieldgroupId]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;The ID of the current field group. (Available as of Model 204 version 7.5.)&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;[[$FieldgroupOccurrence]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;The current occurrence number of the field group. (Available as of Model 204 version 7.5.)&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;[[$FldLen]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Length of a field.&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;[[$Float]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Floating-point to a 4-byte string without conversion (4-byte floating point number to a 4-byte 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&amp;gt;[[$FloatD]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Floating-point to a 4-byte string without conversion (8-byte floating point number to an 8-byte 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&amp;gt;[[$FlsAcc]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;User&#039;s access rights to a particular field.&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;[[$FlsChk]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Whether a given set of field level security accesses is valid for a field.&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;[[$Fsterr]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Variable-length string containing the prefix and the first counting error message or request cancellation message received by the user since the last time the count was reset to zero.&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;[[$Getg]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Information stored by a $SETG function.&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;[[$GetL]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Line number of the current line on the page on the user&#039;s terminal or on the output data set specified by a USE command.&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;[[$GetP]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Page number currently on the user&#039;s terminal or on the output data set specified by a USE command.&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;[[$GrmLoc]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Location of a missing member.&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;[[$GrmName]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;File name of a missing member.&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;[[$GrnLeft]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Number of optional files that may fail before MAXFAIL is exceeded.&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;[[$GrnMiss]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Number of missing members.&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;[[$HPage]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;String of special characters whose length is equal to the value specified as the $HPage argument.&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;[[$Hsh]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;A hash value from a converted string value. A hash value is a distinct numeric representation of a given string value.&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;[[$Incrg]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Performs simple arithmetic on global variables.&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;[[$Index]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;After comparing two strings, a number equal to the first position within the first string at which the second string appears; the same function as $SCAN.&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;[[$Itsopen]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Whether or not a file is open.&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;[[$Itsremote]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Whether the current file or group is remote or scattered.&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;[[$Jobcode]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Allows a request that is part of one step of a &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; batch run to communicate with a subsequent step.&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;[[$LangSpc]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;String containing the binary value of a character in a specified language.&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;[[$LangSrt]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;A binary string translated to sort according to the NLSORT macro for the specified language.&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;[[$LangUst]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Previously $LangSrt&#039;ed  string translated back to its original form.&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;[[$Len]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Length of a value in a field.&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;[[$Lowcase]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;A lower case string translated from an uppercase or mixed case 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&amp;gt;[[$LstFld]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Field names in a file, along with their field descriptions, into an image.&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;[[$LstProc]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Information that is stored for a procedure.&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;[[$MisGrup]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Group name if the error occurred in group context, null if in file context.&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;[[$MisName]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;File name of a missing member or 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;[[$MisNum]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Number of files that failed in a 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;[[$MisLoc]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Location of a missing member or 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;[[$MisStmt]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Statement that caused the ON unit to be entered.&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;[[$Mod]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Remainder that results when one argument is divided by the another argument.&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;[[$Occurs]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Whether a field has the OCCURS attribute.&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;[[$Oneof]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Table lookup that can replace a series of IF conditions.&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;[[$Pack]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Packed decimal representation of a 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&amp;gt;[[$Pad]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Designated character padded to the left.&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;[[$PadR]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Designated character padded to the right&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;[[$RdProc]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Lines of a User Language procedure, retrieved in sequential order, that is stored in 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;/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;[[$Read]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;An echo of the data a user enters as a request is evaluated&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;[[$ReadInv]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Performs the same function as $READ, except that input from the terminal is not echoed.&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;[[$ReadLc]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;An echo of the data a user enters as a request is evaluated, except that case translation is deactivated, regardless of the current *UPPER or *LOWER setting.&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;[[$Remote]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;VTAMNAME value of the originating &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; region when using SNA Communications Server (formerly VTAM) TRANSFER to transfer between &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; regions.&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;[[$Reverse]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Reversed order of a 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&amp;gt;[[$RlcFile]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Name of the file in which the last record locking conflict occurred.&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;[[$RlcRec]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Internal record number for which the last record locking conflict occurred.&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;[[$RlcUid]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;ID of the user who caused an ON FIND CONFICT or ON RECORD LOCKING CONFLICT. If the conflicting user is on a remote node, $RLCUID also returns the name of the node.&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;[[$RlcUsr]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;User number of the user with which the request conflicted when the last record locking conflict occurred.&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;[[$Round]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Number, rounded to a specified number of decimal places.&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;[[$Scan]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;After comparing two strings, a number equal to the first position within the first string at which the second string appears; the same function as $INDEX.&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;[[$Sclass]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Current user&#039;s subsystem user class.&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;[[$Setg]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;A created or changed entry in the global variable section of GTBL.&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;[[$SetL]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Sets the current line counter for the output device currently in effect.&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;[[$SetP]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Sets the current page number for the output device currently in effect.&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;[[$Slstats]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Resets the recording of since-last statistics anywhere within a request.&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;[[$Sndx]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;SOUNDEX code of an argument.&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;[[$Square]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;A number multiplied by itself.&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;[[$Stat]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Current value of any user statistic.&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;[[$Status]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;The success or failure of the last executed external I/O or program communication statement.&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;[[$StatusD]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;More detailed description of a condition returned by $STATUS.&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;[[$Strip]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;A number with suppressed leading zeros.&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;[[$Substr]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Substring of a 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&amp;gt;[[$Subsys]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Status of an APSY subsystem.&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;[[$Time]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Current time in hh:mm:ss format.&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;[[$Unbin]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Value converted from binary to string representation.&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;[[$Unblank]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Contents of an argument, removing leading and trailing blanks, and compressing multiple embedded blanks to one blank character.&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;[[$Unfloat]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Character string that represents a numeric counted string of 4 or 8 bytes, which contains a floating point.&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;[[$Unpack]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Unpacked decimal data &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;[[$UnqRec]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
In the case of a uniqueness violation, returns the file-relative record number of the record that already contains the field name = value pair&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If no uniqueness violation occurred. returns -1.&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;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;[[$Upcase]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;An uppercase string converted from a lower or mixed case 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&amp;gt;[[$Update]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Name of the group update file or the current 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;[[$UpdFld]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Name of the field for which a field level constraint violation has occurred, or a blank if no violation occurred.&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;[[$UpdFile]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Name of the file in which a field level constraint violation has occurred, or a blank if no violation occurred.&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;[[$UpdLoc]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Location name (node name) of the current update unit (Parallel Query Option/204 only).&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;[[$UpdOval]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Value of the original field occurrence causing a constraint violation, when invoked from an ON FCC unit following the detection of an AT-MOST-ONE field-level constraint conflict. &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;[[$UpdRec]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;File-relative record number of the record whose update caused a field level constraint violation, or -1 if no violation occurred.&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;[[$UpdStat]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Numeric value denoting the type of field level constraint violation that has occurred, or 0 if no violation occurred.&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;[[$UpdStmt]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Type of User Language updating statement causing a field level constraint violation, or a blank if no violation occurred.&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;[[$UpdVal]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Field value causing a field level constraint violation, or a blank if no violation occurred.&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;[[$User]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;User&#039;s user number.&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;[[$Userid]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;User ID under which the user is logged in.&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;[[$UsrPriv]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Whether a user ID has been granted specific &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; 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;[[$Verify]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Whether every character in one string is present in a second 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&amp;gt;[[$View]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Value of a parameter.&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;[[$Vnum]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Whether a given argument is in a valid format for a SORT BY VALUE NUMERICAL statement or for any type of mathematical operation.&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;[[$Word]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;P word in a specified string, delimited by a blank or optionally specified character.&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;[[$Words]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Number of words in a specified string, delimited by a blank or optionally specified character.&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;[[$X2C]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;One-byte EBCDIC characters translated from a string of 2-byte hexadecimal character.&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;
[[Category:SOUL]]&lt;/div&gt;</summary>
		<author><name>Mlarocca</name></author>
	</entry>
	<entry>
		<id>https://m204wiki.rocketsoftware.com/index.php?title=$Fsterr&amp;diff=71013</id>
		<title>$Fsterr</title>
		<link rel="alternate" type="text/html" href="https://m204wiki.rocketsoftware.com/index.php?title=$Fsterr&amp;diff=71013"/>
		<updated>2014-08-01T14:01:01Z</updated>

		<summary type="html">&lt;p&gt;Mlarocca: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;p&amp;gt;The &amp;lt;var&amp;gt;$FstErr&amp;lt;/var&amp;gt; function returns a string containing the prefix and text of the first counting error message or request cancellation message received by the user. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;A null value is returned if no counting error or request cancellation message has been received since:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The beginning of 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; session&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The last call to the &amp;lt;var&amp;gt;[[$ErrClr]]&amp;lt;/var&amp;gt; function&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Processing 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; statement&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;Refer to the Rocket &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; Messages Manual for more information on counting messages. This function takes no arguments.             &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;var&amp;gt;$FstErr&amp;lt;/var&amp;gt; is not available for Host Language Interface applications. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;The &amp;lt;var&amp;gt;$FstErr&amp;lt;/var&amp;gt; function requires an additional 88 bytes in the fixed portion of the server.&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;A sample &amp;lt;var&amp;gt;$FstErr&amp;lt;/var&amp;gt; function with an &amp;lt;var&amp;gt;On Error&amp;lt;/var&amp;gt; unit follows. To learn about &amp;lt;var&amp;gt;On Error&amp;lt;/var&amp;gt; units, see [[Subroutines#ON units|ON units]].&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;begin&lt;br /&gt;
fsterr.proc:   on error&lt;br /&gt;
                  print &#039;The request is ending&#039;&lt;br /&gt;
                  print &#039;The first error message was:&#039;&lt;br /&gt;
                  print $fstErr&lt;br /&gt;
               end on&lt;br /&gt;
 &lt;br /&gt;
get.recs:      find all records for which&lt;br /&gt;
                  agent = blake&lt;br /&gt;
               end find&lt;br /&gt;
               for each record in get.recs&lt;br /&gt;
                  .&lt;br /&gt;
                  .&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;The maximum length of the returned string is determined by the setting of the &amp;lt;var&amp;gt;[[ERRMSGL parameter|ERRMSGL]]&amp;lt;/var&amp;gt; parameter. That parameter defaults to 80 which means a maximum of 79 characters are returned, but &amp;lt;var&amp;gt;ERRMSGL&amp;lt;/var&amp;gt; can be set as high as 256 which means up to 255 characters would be returned.&lt;br /&gt;
==See also==&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;the [[IFGERR IFAM function]]&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;[[$Errmsg]]&amp;lt;/var&amp;gt;, which returns the &amp;lt;b&amp;gt;most recent&amp;lt;/b&amp;gt; counting error message.&lt;br /&gt;
&amp;lt;li&amp;gt;The &amp;lt;var&amp;gt;[[ERRMSGL parameter|ERRMSGL]]&amp;lt;/var&amp;gt; parameter, which determines the length of errors returned by &amp;lt;var&amp;gt;$Errmsg&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;$Fsterr&amp;lt;/var&amp;gt;.&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
[[Category:SOUL $functions]]&lt;/div&gt;</summary>
		<author><name>Mlarocca</name></author>
	</entry>
	<entry>
		<id>https://m204wiki.rocketsoftware.com/index.php?title=$ErrMsg&amp;diff=71012</id>
		<title>$ErrMsg</title>
		<link rel="alternate" type="text/html" href="https://m204wiki.rocketsoftware.com/index.php?title=$ErrMsg&amp;diff=71012"/>
		<updated>2014-08-01T13:59:34Z</updated>

		<summary type="html">&lt;p&gt;Mlarocca: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;p&amp;gt;The &amp;lt;var&amp;gt;$ErrMsg&amp;lt;/var&amp;gt; function returns a string containing the prefix and text of the last counting error message or request cancellation message received by the user. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;A null value is returned if no counting error or request cancellation message has been received since:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The beginning of 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; session&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The last call to the &amp;lt;var&amp;gt;[[$ErrClr]]&amp;lt;/var&amp;gt; function.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Processing 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; statement&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;Refer to the Rocket &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; Messages Manual for more information on counting messages. This function takes no arguments.             &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;A sample &amp;lt;var&amp;gt;$ErrMsg&amp;lt;/var&amp;gt; function with an &amp;lt;var&amp;gt;On Error&amp;lt;/var&amp;gt; unit follows. To learn about &amp;lt;var&amp;gt;On Error&amp;lt;/var&amp;gt; units, see [[Subroutines#ON units|ON units]].&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;begin&lt;br /&gt;
error.proc: on error&lt;br /&gt;
               print &#039;The request is ending&#039;&lt;br /&gt;
               print &#039;The last error message received was:&#039;&lt;br /&gt;
               print $errMsg&lt;br /&gt;
            end on&lt;br /&gt;
get.recs:   find all records for which&lt;br /&gt;
               agent = casola&lt;br /&gt;
            end find&lt;br /&gt;
            for each record in get.recs&lt;br /&gt;
               .&lt;br /&gt;
               .&lt;br /&gt;
               .&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;The maximum length of the returned string is determined by the setting of the &amp;lt;var&amp;gt;[[ERRMSGL parameter|ERRMSGL]]&amp;lt;/var&amp;gt; parameter. That parameter defaults to 80 which means a maximum of 79 characters are returned, but &amp;lt;var&amp;gt;ERRMSGL&amp;lt;/var&amp;gt; can be set as high as 256 which means up to 255 characters would be returned.&lt;br /&gt;
==See also==&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;the [[IFGERR IFAM function]]&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;[[$Fsterr]]&amp;lt;/var&amp;gt;, which returns the &amp;lt;b&amp;gt;first&amp;lt;/b&amp;gt; counting error message.&lt;br /&gt;
&amp;lt;li&amp;gt;The &amp;lt;var&amp;gt;[[ERRMSGL parameter|ERRMSGL]]&amp;lt;/var&amp;gt; parameter, which determines the length of errors returned by &amp;lt;var&amp;gt;$Errmsg&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;$FstErr&amp;lt;/var&amp;gt;.&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
[[Category:SOUL $functions]]&lt;/div&gt;</summary>
		<author><name>Mlarocca</name></author>
	</entry>
	<entry>
		<id>https://m204wiki.rocketsoftware.com/index.php?title=Images&amp;diff=71011</id>
		<title>Images</title>
		<link rel="alternate" type="text/html" href="https://m204wiki.rocketsoftware.com/index.php?title=Images&amp;diff=71011"/>
		<updated>2014-08-01T13:56:23Z</updated>

		<summary type="html">&lt;p&gt;Mlarocca: &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;
This article describes a feature of User Language, called images, that allows:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;A request to read and process non-&amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; files, that is, sequential and VSAM files, and terminal input, such as a Host Language IFDIAL thread&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;A request to write to sequential files and terminals &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The creation of formatted blocks of storage that can be used to build records or to process data that is not in a format automatically recognized by &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;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Terminology===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Before reviewing the capabilities and requirements of images, you should be familiar with the following terms that are used throughout this discussion:&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;Term &amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Definition&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;Array&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Ordered arrangement of data elements. Multiple occurrences of an item or a group of items. &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;Block &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;A contiguous storage area into which a record is read or from which a record is written. Also, block can be a contiguous storage area in which data can be manipulated.&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;Image&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;A description of the format of data in a block.&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;Item&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;An individual string or number in an image. &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;
===Global images===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Global images provide a means for passing image data from one request to another, and for efficiently managing more than one image in one request.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Although there are some differences in the way you use the DECLARE IMAGE statement, you generally define and use global images the same as you do non-global images. See [[Global features#Global images and screens|Global images and screens]] where a discussion of global screens, menus, and images begins.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
==Using images==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
See [[Global features#Global images and screens|Global images and screens]] for a discussion of global images.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Reading external files or terminal input===&lt;br /&gt;
 &lt;br /&gt;
====Input sources====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The image feature lets a request read and process records from the following sources of input:       &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;Input sources &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;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Sequential or&lt;br /&gt;
VSAM files &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Any number of sequential or VSAM files can be read and processed. If VSAM files are used, the files must be keyed sequential (KSDS). KSDS files can be accessed using an alternate index path. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
For more information on the types of files and keys that can be used,&lt;br /&gt;
see the &amp;lt;var&amp;gt;[[DEFINE DATASET command|DEFINE DATASET]]&amp;lt;/var&amp;gt; command.    &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;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Terminal &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Terminal input can be read and processed. A terminal can consist of the physical device on which the request is run, or a User Language connection that has been made from a Host Language application program by using the IFDIAL function. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
For more information on IFDIAL, refer to the &amp;lt;var class=&amp;quot;book&amp;quot;&amp;gt;Rocket Model&amp;amp;nbsp;204 Host Language Interface Reference Manual&amp;lt;/var&amp;gt;. &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;
 &lt;br /&gt;
====External records====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Records read from sequential or VSAM files and data passed from the terminal are referred to as external records in this discussion to distinguish them from &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; records. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The format of the external record is described by a structure called an image. Multiple descriptions of a record are allowed, as discussed later in this article. User Language statements can refer to each item described in the image definition.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Reading records into an image====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
User Language statements, which are documented beginning with [[#Processing images|Processing images]], let the request open the file, read records into the image, and close the file. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
For keyed VSAM files, the request can position the file to read sequentially starting with any record in the file.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Writing to sequential files or a terminal===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The image feature lets a request write records to any number of sequential files or to a terminal. This capability allows multiple output files and reports to be written by a single pass of the database. &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; Only printable characters of a record are displayed on a physical terminal device. Therefore, images used to write to a physical terminal device should be defined with string items only.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Defining storage blocks===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can define the data in a block of storage as an image. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The image definition can consist of item definitions as well as definitions of areas in the block that do not need to be accessed. Items in the image can be filled with constants, %variables, fields from a &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; record, screen items, items from the current block or another block, and expressions. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Each item defined in the image can be referred to by User Language statements.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Possible uses====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
In addition to sequential file, VSAM file, or terminal I/O processing, the ability to manipulate a block of storage has several other uses. For example, you can:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Construct print lines by filling in items in one or more images at various points in a request. Once the print lines are complete, you can print the lines.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Copy into an image fields in &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; records that have formats not directly recognized by User Language; the individual parts of the field then can be accessed as image items. For example, if the user wants to use packed decimal data that is stored in a &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; field, the data can be moved into an image item and used directly. This eliminates the need to use the $PACK function to convert the data prior to its use.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Store blocks of data of up to 255 bytes as a single field, copied to an image, and the parts of the block can be referred to separately. Data that is stored as a single, large field, for example, a line of text, can be moved into an image that defines the data as one or more items. The items then can be referred to separately. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Pass data from one request to another.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;You can manipulate more than one image at a time in an application, for example, in an HORIZON application involving simultaneous conversations.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;You can use images to structure the local working storage of a request in a more disciplined manner than is possible with %variables.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
==Defining an image==&lt;br /&gt;
 &lt;br /&gt;
===Managing blocks===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You must define the layout of the block before it can be used by the request. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
A block is defined by one or more images that describe the data in the block. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Images describe blocks of data up to 32,767 bytes in length.   &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Define an image before referring to it===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
In a request, an image definition must precede any references to the image. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Understanding how data is described by images===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
To design applications using images, you can review the following summary of how images are used to describe different views of the data is provided below:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Using images, the application can access any piece of data in the block. As many as 255 images can describe the same block.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Although a single request can contain more than one block of images, the total number of images for all blocks within each request cannot exceed 256 images.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;You can define multiple images to provide different views of the same data. This is similar to the COBOL capability to REDEFINE a piece of storage. The multiple image capability enables the request to read in a record, determine the format of the data in the record, and access different data items in the record according to format.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;You can define the image items as strings or numbers. Numbers can have binary, floating point, packed decimal, zoned decimal, and exponential formats. &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; automatically handles all data type conversions when referring to image items.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;You can define fixed and variable length arrays within an image. Each array element can contain one or more items. Arrays can be nested up to 255 levels deep.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;You can define image items precisely or their length can be determined during evaluation. Similarly, the number of array occurrences can be determined during evaluation. This capability allows the request to handle all types of data structures. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Image components===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Each block definition must begin with an IMAGE statement and end with an END IMAGE statement. Between these statements, the following components are used to describe the contents of the block:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Image definitions&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Item definitions&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Array definitions&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Reserved area definitions &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Comments, blank lines, and INCLUDE statements can also be part of a block definition.  &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Concurrent access to multiple records of the same format===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
One image definition is required for each record to be accessed concurrently. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If you need concurrent access to multiple records of the same format, the image definition must be duplicated with a different name. This can be done easily by using an INCLUDE statement inside the image definition.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
==Image naming and reference conventions==&lt;br /&gt;
 &lt;br /&gt;
===Rules for image names===&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;An image name is a character string that consists of any number of letters, numbers, and some special characters. The name can have no embedded blanks, colons, or &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; reserved characters. Refer to [[Reserved words and characters]] for a complete list of reserved characters.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;An image cannot have the same name as a screen or menu.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;If IMAGE, MENU, or SCREEN is an image name, it must be preceded by the keyword IMAGE in READ IMAGE and PREPARE statements.  &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Rules for item names and array names===&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Item and array names follow the same naming conventions as image names.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Every image item name and array name must be unique within the block definition. An item name or array name can be reused in different blocks, screens, and menus.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;An item (or array) name and its image name cannot have a combined length exceeding 253.   &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Rule for reserved item names===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The item name READLEN is reserved by &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; to contain the length of the last record read into the block. This value can be obtained from the variable %imagename:READLEN. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Do not duplicate names in the same block===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Do not duplicate item, array, and image names within the same block. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===References===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
To identify the item uniquely, all references outside the image definition must include the image name and item name and must be specified in this format:&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;%imagename&amp;lt;/span&amp;gt;:&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;itemname&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
For example:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;%INVENTORY:PART.NO&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
identifies the item PART.NO in the image INVENTORY.     &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
==IMAGE and END IMAGE statements==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The IMAGE statement starts the definition of the image. Each image can contain a description of the complete block or can redefine a portion of another image.&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 IMAGE statement is:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;IMAGE &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;imagename&amp;lt;/span&amp;gt; [AT {&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;itemname&amp;lt;/span&amp;gt; | &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;imagname1&amp;lt;/span&amp;gt; &lt;br /&gt;
 | &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;arrayname&amp;lt;/span&amp;gt;} &lt;br /&gt;
 | GLOBAL [PERMANENT | TEMPORARY] &lt;br /&gt;
 | [PERMANENT | TEMPORARY] GLOBAL &lt;br /&gt;
 | COMMON]&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;imagename&amp;lt;/var&amp;gt; is the name of the image. Every image name defined in a request must be unique. The image name specified in the IMAGE statement is assigned to the image being defined; other User Language statements in the request can subsequently refer to this name.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;The AT clause is optional and specifies the starting location of a redefinition. If the AT clause is omitted, the image definition starts at the beginning of the block. The location can be defined by one of the following options:&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;itemname&amp;lt;/var&amp;gt; is the name of an item in a previously defined image in this block.&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;imagename1&amp;lt;/var&amp;gt; is the name of an image previously defined in this block.&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;arrayname&amp;lt;/var&amp;gt; is the name of an array in a previously defined image in this block. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;blockquote class=&amp;quot;note&amp;quot;&amp;gt;&amp;lt;p&amp;gt;&amp;lt;b&amp;gt;Note:&amp;lt;/b&amp;gt;&lt;br /&gt;
You cannot use the AT clause with a GLOBAL image, since you can only define the first image in a multi-image block as a global image.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Specifying COMMON, or specifying neither COMMON nor GLOBAL, results in the image being stored in FSCB. Common elements, as well as DECLARE and COMMON, are discussed in detail in [[Subroutines#Subroutines|Subroutines]].   &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;GLOBAL specifies to store the image in GTBL. Global images have an implied scope of COMMON (see above). &lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Restrictions to the GLOBAL option====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You must not specify the GLOBAL attribute for an image that has an image item defined with either of the following attributes:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;OCCURS UNKNOWN&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;LEN UNKNOWN&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 multi-image blocks, you can specify only the first image as GLOBAL; you must not specify subsequent images in a multi-image block as GLOBAL.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;PERMANENT can be used only with global images. Permanent global images persist across request boundaries; that is, they are maintained in GTBL even after a request has been terminated.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;TEMPORARY can be used with only global images. TEMPORARY global images are allocated in GTBL, but are deleted at request termination. For example, use a TEMPORARY global image when you do not need to pass the image to another request; using TEMPORARY global images eliminates the need to explicitly delete globals that do not need to persist.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===END IMAGE statement===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The END IMAGE statement must be the last statement in an image definition. END IMAGE terminates the definition of all images that describe the same block.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The format of this statement is:       &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;END IMAGE&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Examples of image definitions===&lt;br /&gt;
 &lt;br /&gt;
====Single image definition====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
An example of the definition of a single image follows:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;IMAGE GENERAL.LEDGER.RECORD&lt;br /&gt;
      GL.RECORD.TYPE  IS STRING LEN 1&lt;br /&gt;
      GL.NUMBER       IS STRING LEN 10 DP 3&lt;br /&gt;
      GL.INV.TYPE     IS STRING LEN 2&lt;br /&gt;
END IMAGE&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Multiple image definition for the same block====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The following example illustrates two images that define the same block. Each image completely defines the block, with the items named GL.RECORD.TYPE and AR.RECORD.TYPE both located at the first byte in the block.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;IMAGE GENERAL.LEDGER.RECORD&lt;br /&gt;
      GL.RECORD.TYPE  IS STRING LEN 1&lt;br /&gt;
      GL.NUMBER       IS STRING LEN 10 DP 3&lt;br /&gt;
      GL.INV.TYPE     IS STRING LEN 2&lt;br /&gt;
IMAGE ACCOUNTS.REC.RECORD&lt;br /&gt;
      AR.RECORD.TYPE  IS STRING LEN 1&lt;br /&gt;
      AR.ACCT.NO      IS STRING LEN 6&lt;br /&gt;
      AR.BALANCE      IS PACKED DIGITS 9 DP 2&lt;br /&gt;
END IMAGE&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Multiple image definition with shared items====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When an image redefines part of another image, the AT clause names an item or array in an image already defined in the record. Items preceding the named item or array in the block are combined with items defined following the IMAGE statement to create the complete image description.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Therefore, the preceding example also could be defined in the following manner. The example illustrates two images that define the same block but share at least one item in common. In this example, the item RECORD.TYPE is shared by both images, and can be referred to by prefixing the item name by either image name. The items GL.NUMBER and AR.ACCT.NO both begin at position 2 in the block.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;IMAGE GENERAL.LEDGER.RECORD&lt;br /&gt;
      GL.RECORD.TYPE  IS STRING LEN 1&lt;br /&gt;
      GL.NUMBER       IS STRING LEN 10 DP 3&lt;br /&gt;
      GL.INV.TYPE     IS STRING LEN 2&lt;br /&gt;
IMAGE ACCOUNTS.REC.RECORD AT GL.NUMBER&lt;br /&gt;
      AR.ACCT.NO      IS STRING LEN 6&lt;br /&gt;
      AR.BALANCE      IS PACKED DIGITS 9 DP 2&lt;br /&gt;
END IMAGE&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Special considerations for multiple image blocks===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When you define multiple image blocks, take note whether the sum of the individual image items completely defines the block. Is there undefined space between the image items? If there are, you must initialize the space, otherwise you might get unexpected results, as illustrated in the following code.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Using uninitialized disk space====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
In the following multiple image block, PART1, PART2, and PART3 define parts of the block without defining or initializing the space between them. When LINE is defined, which encompasses the entire block, the system assumes that entire block has already been defined, because LINE begins at the same place as PART1. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;R HDRCTL 0&lt;br /&gt;
BEGIN&lt;br /&gt;
 &lt;br /&gt;
IMAGE A&lt;br /&gt;
    PART1 IS STRING LEN 10&lt;br /&gt;
    PART2 IS STRING LEN 5 AT 16&lt;br /&gt;
    PART3 IS STRING LEN 5 AT 26&lt;br /&gt;
    LINE IS STRING LEN 30 AT PART1&lt;br /&gt;
END IMAGE&lt;br /&gt;
 &lt;br /&gt;
PREPARE IMAGE A&lt;br /&gt;
 &lt;br /&gt;
%A:PART1 = &#039;XXXXXXXXXX&#039;&lt;br /&gt;
%A:PART2 = &#039;YYYYY&#039;&lt;br /&gt;
%A:PART3 = &#039;ZZZZZ&#039;&lt;br /&gt;
 &lt;br /&gt;
SET HEADER 1 %A:LINE&lt;br /&gt;
NP&lt;br /&gt;
PRINT &#039;%A:LINE = &#039; WITH %A:LINE&lt;br /&gt;
PRINT &#039;$C2X(%A:LINE) = &#039; WITH $C2X(%A:LINE)&lt;br /&gt;
END&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
However, when output from the previous procedure is displayed, a stray numeral two appears twice in the header. This system read the string of zeros for the uninitialized space in the header (shown in the line that begins $C2X) and automatically substituted the page number. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;02.142 MAY 22 10.11.11                                            PAGE 2&lt;br /&gt;
XXXXXXXXXX    2YYYYY    2ZZZZZ&lt;br /&gt;
%A:LINE = XXXXXXXXXX     YYYYY     ZZZZZ&lt;br /&gt;
$C2X(%A:LINE) = E7E7E7E7E7E7E70000000000E8E8E8E8E80000000000E9E9E9E9E9&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Using initialized disk space====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Refining the previous code, the spaces between PART 1 and PART2 and PART3 are initialized by the intervening SKIP statements.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;R HDRCTL 0&lt;br /&gt;
BEGIN&lt;br /&gt;
 &lt;br /&gt;
IMAGE A&lt;br /&gt;
    PART1 IS STRING LEN 10&lt;br /&gt;
    SKIP 5 POSITIONS INITIAL BLANK&lt;br /&gt;
    PART2 IS STRING LEN 5 AT 16&lt;br /&gt;
    SKIP 5 POSITIONS INITIAL BLANK&lt;br /&gt;
    PART3 IS STRING LEN 5 AT 26&lt;br /&gt;
    LINE IS STRING LEN 30 AT PART1&lt;br /&gt;
END IMAGE&lt;br /&gt;
 &lt;br /&gt;
PREPARE IMAGE A&lt;br /&gt;
 &lt;br /&gt;
%A:PART1 = &#039;XXXXXXXXXX&#039;&lt;br /&gt;
%A:PART2 = &#039;YYYYY&#039;&lt;br /&gt;
%A:PART3 = &#039;ZZZZZ&#039;&lt;br /&gt;
 &lt;br /&gt;
SET HEADER 1 %A:LINE&lt;br /&gt;
NP&lt;br /&gt;
PRINT &#039;%A:LINE = &#039; WITH %A:LINE&lt;br /&gt;
PRINT &#039;$C2X(%A:LINE) = &#039; WITH $C2X(%A:LINE)&lt;br /&gt;
END&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Now the output displays the expected results. The line that begins $C2X has the hexadecimal representation of white space between the defined areas meaning that the space is initialized. The system prints only the white spaces.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;02.142 MAY 22 10.12.26                                            PAGE 2&lt;br /&gt;
XXXXXXXXXX     YYYYY     ZZZZZ&lt;br /&gt;
%A:LINE = XXXXXXXXXX     YYYYY     ZZZZZ&lt;br /&gt;
$C2X(%A:LINE) = E7E7E7E7E7E7E74040404040E8E8E8E8E84040404040E9E9E9E9E9&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
==Defining image items==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You must define each item in an image that is referred to by the request. Use an item definition to describe the following attributes for an item:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Data type &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Length &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;Number of occurrences&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Editing options&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Syntax====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The general format of an item definition is:&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;itemname&amp;lt;/span&amp;gt; [IS [TYPE] &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;type&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;description&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;itemname&amp;lt;/var&amp;gt; is the name by which the item is referred to.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;TYPE is an optional keyword.&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;type&amp;lt;/var&amp;gt; specifies the data type of the item. Data type options are:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;String&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Binary&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Large Object data&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Packed decimal&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Zoned decimal&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Floating point&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Exponential notation &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;var class=&amp;quot;term&amp;quot;&amp;gt;description&amp;lt;/var&amp;gt; is the length, position, number of occurrences, and editing options specified for the item based on the data type. &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 format used when defining an item for each data type is provided in the following table. In addition, an example of an image item definition appears in [[#Item definition examples|Item definition examples]]:  &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;Term&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&amp;gt;Numeric&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;All types except STRING are considered numeric.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;NULL&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Binary zeros.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Omitted&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;The option is omitted from the item description and no default is specified.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;String&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;A string of characters. A string must be enclosed in single quotes if it contains any of the following characters: blank, =, (, ), &amp;lt;, &amp;gt;, or ^.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;ZERO&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Numeric zero of the correct format for numeric items. String and EFORMAT items are set to a single character zero.      &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;
==Defining a string item==&lt;br /&gt;
 &lt;br /&gt;
====Syntax====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Define string items with this syntax: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;STRING {LEN {&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;n&amp;lt;/span&amp;gt; | UNKNOWN} [DP {&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;k&amp;lt;/span&amp;gt; | *}] | TO &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;position&amp;lt;/span&amp;gt;} &lt;br /&gt;
 [PAD {BLANK | &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt; | NULL}] &lt;br /&gt;
 [STRIP | NOSTRIP] [JUSTIFY {LEFT | RIGHT}] &lt;br /&gt;
 [INITIAL {BLANK | string | ZERO | NULL}] &lt;br /&gt;
 [AFTER {&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;itemname&amp;lt;/span&amp;gt; | &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;arrayname&amp;lt;/span&amp;gt;} &lt;br /&gt;
 | AT {&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;position&amp;lt;/span&amp;gt; | &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;itemname&amp;lt;/span&amp;gt; | &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;imagname1&amp;lt;/span&amp;gt; | &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;arrayname&amp;lt;/span&amp;gt;}] &lt;br /&gt;
 [OCCURS {&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;n&amp;lt;/span&amp;gt; [DEPENDING ON {&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;itemname&amp;lt;/span&amp;gt; | &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;%variable&amp;lt;/span&amp;gt;}] &lt;br /&gt;
 | UNKNOWN}]&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;LEN specifies the length either as 1-255 bytes or as UNKNOWN, if the length is determined by the request and the IDENTIFY statement establishes the length. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;TO specifies the last byte position of the item in the image as a number from 1 to 32767. The length (LEN) or end (TO) position of the item is required unless the length has been specified in a DEFAULT statement.   &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;DP (optional) specifies either that the item has from 0 to 15 decimal places as specified by k, or that the number of decimal places is variable.  &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;DP k represents the number of places retained when a number is stored into an item and the number of places assumed to be present in data read from an external record. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;If DP * is specified, all decimal places in the item are retained. If this option is omitted, the default is zero. Do not use DP, if the value to be moved to the item contains a decimal point. &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;PAD (optional) defines the fill character. If a value is shorter than an item to which it is being moved, the pad character fills the remainder of the item. If PAD is omitted, a blank is assumed. Padding is done on the right end of left-justified items and on the left end of right-justified items. &lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The pad character can be a single quoted character, a hexadecimal value expressed as X&#039;hh&#039;, or a decimal number. The hexadecimal or decimal value can be from 0 to 255.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;STRIP, the default, specifies to remove the pad characters, if an item value is extracted from an image. NOSTRIP specifies to keep the pad characters.    &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;JUSTIFY (optional) specifies whether a value is to be left- or right-justified when moved into an item by an assignment statement or when stripping on extraction. If JUSTIFY is omitted, the default is left-justified.   &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;INITIAL (optional) defines the value placed in the item by a PREPARE statement and in unused occurrences when a record is read from a sequential file, VSAM file, or terminal into an image. If an INITIAL clause is omitted, BLANK is the default initial value. &lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====AFTER and AT clauses====&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The AFTER and AT clauses are optional and mutually exclusive. Their function is as follows:&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
An AFTER clause defines the location of an item as immediately following the end of the specified item or array. This option is particularly useful when an item is redefined and the total length of the items in a redefinition is less than the length of the item.   &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
An AT clause defines the location of the item in the image as adjacent to an item or array or redefines the space defined by a previously defined item. If the location is not adjacent in a forward direction to the previous item definition, a SKIP is implied (see [[#DEFAULT SKIP statement|DEFAULT SKIP statement]]). If position is used, the location is relative to the beginning of the image. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The position option can have a value from 1 through 32767. The item or array named in the AT clause cannot have a DEPENDING ON option.    &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Consider the following restrictions when using an AFTER or AT clause:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Outside of an array definition, the AFTER or AT clause cannot name an item inside the array.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Within an array definition, the AFTER or AT clause cannot name an item outside of the array. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;If neither AFTER nor AT are specified, the item abuts the end of the preceding item or the start of the image.&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;
====OCCURS clause====&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The OCCURS clause (optional) specifies that there are multiple occurrences of the item. The OCCURS clause options are as follows: &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;n&amp;lt;/var&amp;gt; specifies the maximum number of occurrences of the item for a depending array and the exact number of occurrences of the item for a fixed array. The value of &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;n&amp;lt;/var&amp;gt; can be from 1 to 32767. Space for the maximum number of occurrences is reserved in a block created by a PREPARE statement or when a block is read from a sequential file, VSAM file, or terminal.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;The DEPENDING ON clause identifies the item or %variable that contains the current number of occurrences of this item. An item specified in this clause must be part of this image, cannot have length specified as UNKNOWN, cannot be an array element, and cannot be positioned in the image following an item defined with LEN UNKNOWN or an array defined with OCCURS UNKNOWN.   &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;UNKNOWN specifies that the number of occurrences of the item is determined by the User Language request and that the IDENTIFY statement establishes the number of occurrences.   &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
==Defining a binary item==&lt;br /&gt;
 &lt;br /&gt;
====Syntax====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Define binary items with this syntax:   &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;BINARY {LEN {&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;n&amp;lt;/span&amp;gt; | UNKNOWN} | BITS &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;n&amp;lt;/span&amp;gt; | TO &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;position&amp;lt;/span&amp;gt;} &lt;br /&gt;
 [BP &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;n&amp;lt;/span&amp;gt;] &lt;br /&gt;
 [SIGNED | UNSIGNED] [ALIGN] &lt;br /&gt;
 [INITIAL {NULL | &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;number&amp;lt;/span&amp;gt; | BLANK | ZERO}] &lt;br /&gt;
 [AFTER {&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;itemname&amp;lt;/span&amp;gt; | &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;arrayname&amp;lt;/span&amp;gt;} &lt;br /&gt;
 | AT {&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;position&amp;lt;/span&amp;gt; | &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;itemname&amp;lt;/span&amp;gt; | &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;imagname1&amp;lt;/span&amp;gt; | &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;arrayname&amp;lt;/span&amp;gt;}] &lt;br /&gt;
 [OCCURS {&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;n&amp;lt;/span&amp;gt; [DEPENDING ON {&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;itemname&amp;lt;/span&amp;gt; | &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;%variable&amp;lt;/span&amp;gt;}] &lt;br /&gt;
 | UNKNOWN}]&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;LEN specifies the length as 1-4 bytes or as UNKNOWN if the length is determined by the request and the IDENTIFY statement establishes the length.   &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;BITS specifies the length as 8, 16, 24, or 32 bits. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;TO specifies the last byte position of the item in the image as a number from 1 to 32767. The length or end (TO) position of the item is required unless provided in a DEFAULT statement.    &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;BP (optional) specifies the number of binary places retained when a number is stored in the item and the number of places assumed present in data read from an external record. The number of places can range from zero to the number of bits defined by the length option, the maximum is 31 bits. IF BP is omitted, the default value is zero.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;SIGNED, optional and the default, specifies that a negative number can be stored in the item in two&#039;s complement form. UNSIGNED, optional, specifies that the item is always positive and that the leftmost bit is part of the number.  &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;
If a negative number is read into an UNSIGNED BINARY item, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; uses the absolute value of that number. &amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;ALIGN, optional, specifies that the item is aligned as follows: &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;BINARY LEN 2 on a halfword boundary&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;BINARY LEN 4 on a fullword boundary &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The ALIGN option is ignored for 1- and 3-byte BINARY items.&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 item is aligned by inserting a SKIP statement preceding the item so that the item&#039;s location is on the correct boundary. In arrays, a SKIP is inserted at the end of each occurrence of the array and any parent array to make the length of each occurrence a multiple of the largest aligned item in the array.   &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The ALIGN option cannot be specified for an item:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;When length is defined as UNKNOWN. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;When location is unknown during compilation because a previously defined item specified LEN UNKNOWN or OCCURS UNKNOWN. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Containing an AT clause that specifies a location that is not already aligned on the proper storage boundary.&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;INITIAL (optional) defines the value placed in the item by a PREPARE statement and in unused occurrences when a record is read from a sequential file, VSAM file, or terminal into an image. If this option is omitted, NULL is the default initial value.     &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;The AFTER and AT clauses are mutually exclusive and optionally define the location of the item in the image. For a complete discussion, see [[#Defining a string item|Defining a string item]]. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;The optional OCCURS clause specifies that there are multiple occurrences of the item. For a complete discussion, see [[#Defining a string item|Defining a string item]].  &lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
==Defining a packed decimal item==&lt;br /&gt;
 &lt;br /&gt;
====Syntax====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Define packed decimal items with this syntax: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;PACKED {LEN {&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;n&amp;lt;/span&amp;gt; | UNKNOWN} | DIGITS &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;n&amp;lt;/span&amp;gt; | TO &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;position&amp;lt;/span&amp;gt;} &lt;br /&gt;
 [DP &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;n&amp;lt;/span&amp;gt;] &lt;br /&gt;
 [SIGNED | UNSIGNED] &lt;br /&gt;
 [INITIAL {ZERO | &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;number&amp;lt;/span&amp;gt; | BLANK | NULL}] &lt;br /&gt;
 [AFTER {&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;itemname&amp;lt;/span&amp;gt; | &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;arrayname&amp;lt;/span&amp;gt;} &lt;br /&gt;
 | AT {&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;position&amp;lt;/span&amp;gt; | &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;itemname&amp;lt;/span&amp;gt; | &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;imagname1&amp;lt;/span&amp;gt; | &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;arrayname&amp;lt;/span&amp;gt;}] &lt;br /&gt;
 [OCCURS {&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;n&amp;lt;/span&amp;gt; [DEPENDING ON {&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;itemname&amp;lt;/span&amp;gt; | &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;%variable&amp;lt;/span&amp;gt;}]&lt;br /&gt;
 | UNKNOWN}]&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;LEN specifies the length as 1-8 bytes or as UNKNOWN if the length is determined by the request and the IDENTIFY statement establishes the length. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;DIGITS specifies the length as 1-15 decimal digits. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;TO specifies the last byte position of the item in the image as a number from 1 to 32767. The length or end (TO) position of the item is required unless provided in a DEFAULT statement.  &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;DP (optional) and specifies the number of decimal places to be retained when a number is stored in this item, that is, the number of places assumed present in data read from an external record. The value of n can range from 0 to 15. If this option is omitted, the default is zero.   &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;SIGNED, optional and the default, specifies that the item can contain a positive or negative number. The sign stored with the number is a hexadecimal C for a positive number and D for a negative number.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;UNSIGNED (optional) specifies that the item is always a positive number and that the sign stored with the number is a hexadecimal F.    &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;INITIAL (optional) defines the value placed in the item by a PREPARE statement and in unused occurrences when a record is read from a sequential file, VSAM file, or terminal into an image. If this option is omitted, the default initial value is a packed zero.   &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;The mutually exclusive and optional AFTER and AT clauses define the location of the item in the image. For a complete discussion, see [[#Defining a string item|Defining a string item]].   &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;The optional OCCURS clause specifies that there are multiple occurrences of the item. For a complete discussion, see [[#Defining a string item|Defining a string item]].    &lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
==Defining a zoned decimal item==&lt;br /&gt;
 &lt;br /&gt;
====Syntax====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Define zoned decimal items with this syntax:    &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;ZONED {LEN {&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;n&amp;lt;/span&amp;gt; | UNKNOWN} | DIGITS &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;n&amp;lt;/span&amp;gt; | TO &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;position&amp;lt;/span&amp;gt;} &lt;br /&gt;
 [DP &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;n&amp;lt;/span&amp;gt;] &lt;br /&gt;
 [SIGNED | UNSIGNED] &lt;br /&gt;
 [INITIAL {ZERO | &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;number&amp;lt;/span&amp;gt; | BLANK | NULL}] &lt;br /&gt;
 [AFTER {&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;itemname&amp;lt;/span&amp;gt; | &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;arrayname&amp;lt;/span&amp;gt;} &lt;br /&gt;
 | AT {&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;position&amp;lt;/span&amp;gt; | &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;itemname&amp;lt;/span&amp;gt; | &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;imagname1&amp;lt;/span&amp;gt; | &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;arrayname&amp;lt;/span&amp;gt;}] &lt;br /&gt;
 [OCCURS {&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;n&amp;lt;/span&amp;gt; [DEPENDING ON {&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;itemname&amp;lt;/span&amp;gt; | &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;%variable&amp;lt;/span&amp;gt;}] | UNKNOWN}]&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;LEN specifies the length as 1-15 bytes or as UNKNOWN if the length is determined by the request and the IDENTIFY statement establishes the length. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;DIGITS specifies the length as 1-15 decimal digits. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;TO specifies the last byte position of the item in the image as a number from 1 to 32767. The length or end (TO) position of the item is required unless provided in a DEFAULT statement.    &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;DP, optional, specifies the number of decimal places to be retained when a number is stored in this item, that is, the number of places assumed present in data read from an external record. The value of n can range from 0 to 15. If this option is omitted, the default is zero.   &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;SIGNED, optional and the default, specifies that the item can contain a positive or negative number. The sign stored with the number is a hexadecimal C for a positive number and D for a negative number. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;UNSIGNED, optional, specifies that the item is always a positive number and that the sign stored with the number is a hexadecimal F.    &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;INITIAL is optional and defines the value placed in the item by a PREPARE statement and in unused occurrences when a record is read from a sequential file, VSAM file, or terminal into an image. If this option is omitted, the default initial value is zoned decimal zeros.     &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;The mutually exclusive and optional AFTER and AT clauses define the location of the item in the image. For a complete discussion, see [[#Defining a string item|Defining a string item]].     &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;The optional OCCURS clause specifies that there are multiple occurrences of the item. For a complete discussion, see [[#Defining a string item|Defining a string item]].  &lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
==Defining a floating point item==&lt;br /&gt;
 &lt;br /&gt;
====Syntax====&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;FLOAT {LEN {&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;n&amp;lt;/span&amp;gt; | UNKNOWN} TO &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;position&amp;lt;/span&amp;gt; &lt;br /&gt;
 [INITIAL {ZERO | &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;number&amp;lt;/span&amp;gt; | BLANK | NULL}] [ALIGN]&lt;br /&gt;
 [AFTER {&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;itemname&amp;lt;/span&amp;gt; | &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;arrayname&amp;lt;/span&amp;gt;} &lt;br /&gt;
 | AT {&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;position&amp;lt;/span&amp;gt; | &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;itemname&amp;lt;/span&amp;gt; | &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;imagname1&amp;lt;/span&amp;gt; | &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;arrayname&amp;lt;/span&amp;gt;}] &lt;br /&gt;
 [OCCURS {&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;n&amp;lt;/span&amp;gt; [DEPENDING ON {&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;itemname&amp;lt;/span&amp;gt; | &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;%variable&amp;lt;/span&amp;gt;}] | UNKNOWN}]&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;LEN specifies the length as either 4, 8, or 16 bytes or as UNKNOWN if the length is determined by the request and the IDENTIFY statement establishes the length. &lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Although you can move 16-byte floating-point values between data sets and files, intermediate results and %variables inside User Language are 8 bytes long. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Arithmetic manipulations and data conversions retain only 15 significant decimal digits in 8 bytes.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;TO specifies the last byte position of the item in the image as a number from 1 to 32767. The length or end (TO) position of the item is required unless provided in a DEFAULT statement.   &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;INITIAL, optional, defines the value placed in the item by a PREPARE statement and in unused occurrences when a record is read from a sequential file, VSAM file, or terminal into an image. If this option is omitted, the default initial value is a floating point zero.     &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;ALIGN, optional, specifies that the item is aligned as follows:  &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;FLOAT LEN 4 on a fullword boundary&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;FLOAT LEN 8 on a doubleword boundary&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;FLOAT LEN 16 on a doubleword boundary &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The item is aligned by inserting a SKIP statement preceding the item so that the item&#039;s location is on the correct boundary. In arrays, a SKIP statement is inserted at the end of each occurrence of the array and any parent array to make the length of each occurrence a multiple of the largest aligned item in the array.   &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 ALIGN option cannot be specified for an item: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;When length is defined a UNKNOWN.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;When location is unknown during compilation because a previously defined item specified LEN UNKNOWN or OCCURS UNKNOWN.  &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Containing an AT clause that specifies a location that is not already aligned on the proper storage boundary. &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;The AFTER and AT clauses are mutually exclusive and optionally define the location of the item in the image. For a complete discussion, see [[#Defining a string item|Defining a string item]].   &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;The OCCURS clause is optional and specifies that there are multiple occurrences of the item. For a complete discussion, see [[#Defining a string item|Defining a string item]].   &lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
==Defining an exponential notation item==&lt;br /&gt;
 &lt;br /&gt;
====Syntax====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Define exponential notation items with this syntax:    &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;EFORMAT {LEN {&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;n&amp;lt;/span&amp;gt; | UNKNOWN} | TO &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;position&amp;lt;/span&amp;gt;} &lt;br /&gt;
 [PAD {BLANK | &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt; | NULL}] &lt;br /&gt;
 [STRIP | NOSTRIP] [JUSTIFY {LEFT | RIGHT}] &lt;br /&gt;
 [INITIAL {BLANK | &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;string&amp;lt;/span&amp;gt; | ZERO | NULL}] [DIGITS &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;n&amp;lt;/span&amp;gt;] &lt;br /&gt;
 [DP &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;n&amp;lt;/span&amp;gt;] [AFTER {&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;itemname&amp;lt;/span&amp;gt; | &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;arrayname&amp;lt;/span&amp;gt;}&lt;br /&gt;
 | AT {&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;position&amp;lt;/span&amp;gt; | &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;itemname&amp;lt;/span&amp;gt; | &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;imagname1&amp;lt;/span&amp;gt; | &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;arrayname&amp;lt;/span&amp;gt;}]&lt;br /&gt;
 [OCCURS {&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;n&amp;lt;/span&amp;gt; [DEPENDING ON {&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;itemname&amp;lt;/span&amp;gt; | &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;%variable&amp;lt;/span&amp;gt;}] | UNKNOWN}]&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;LEN specifies the length either as 1-255 bytes or as UNKNOWN if the length is determined by the request and the IDENTIFY statement establishes the length. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;TO specifies the last byte position of the item in the image as a number from 1 to 32767. The length or end (TO) position of the item is required unless provided in a DEFAULT statement.    &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;PAD, optional, defines the fill character. If a value is shorter than an item to which it is being moved, the pad character fills the remainder of the item. Padding is done on the right end of items that are left-justified and on the left end for items that are right-justified. The pad character can be a single quoted character, a hexadecimal value expressed as X&#039;hh&#039;, or a decimal number from 1 to 255.   &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;STRIP, the default, specifies that the pad character is removed if an item value is extracted from an image. NOSTRIP specifies to keep the pad characters.   &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;JUSTIFY, optional, specifies whether a value is to be left- or right-justified when moved into an item by an assignment statement. The default behavior is left-justified.   &amp;lt;/li&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
&amp;lt;li&amp;gt;INITIAL is optional and defines the value placed in the item by a PREPARE statement and in unused occurrences when a record is read from a sequential file, VSAM file, or terminal into an image. A single character zero is the default value.     &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;DIGITS specifies the maximum number of significant digits &amp;amp;mdash; the total number of digits to the left and right of the decimal point. The value of n can be a number from 1 to 15.   &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;DP specifies the number of digits to be placed to the right of the decimal point when a value is moved into the item.   &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;The mutually exclusive and optional AFTER and AT clauses define the location of the item in the image. See [[#Defining a string item|Defining a string item]], for a complete discussion.      &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;The optional OCCURS clause specifies that there are multiple occurrences of the item. See [[#Defining a string item|Defining a string item]] for a complete discussion. &lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
==Item definition examples==&lt;br /&gt;
 &lt;br /&gt;
===An image containing various item types===&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;IMAGE GENERAL.LEDGER.RECORD&lt;br /&gt;
       GL.RECORD.TYPE       IS STRING LEN 1&lt;br /&gt;
       GL.NUMBER            IS ZONED LEN 10 DP 0&lt;br /&gt;
       GL.INV.TYPE          IS STRING LEN 2&lt;br /&gt;
       GL.DEPRECIATION.CODE IS STRING LEN 2&lt;br /&gt;
       GL.BOOK.VALUE        IS PACKED DIGITS 9 DP 2&lt;br /&gt;
       GL.YEARS.REMAINING   IS BINARY LEN 4&lt;br /&gt;
       GL.QUANTITY.ON.HAND  IS BINARY LEN 4&lt;br /&gt;
       GL.ITEM.SIZE         IS FLOAT LEN 4&lt;br /&gt;
END IMAGE&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Using the AT and AFTER clauses===&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;IMAGE PRINT.DATA&lt;br /&gt;
PRINT.LINE1   IS STRING LEN 133 DP *&lt;br /&gt;
PRINT.CC      IS STRING LEN 1 AT PRINT.LINE1&lt;br /&gt;
PRINT.ITEM1   IS STRING LEN 8&lt;br /&gt;
SKIP 2 POSITIONS&lt;br /&gt;
PRINT.ITEM2   IS STRING LEN 7&lt;br /&gt;
SKIP 2 POSITIONS&lt;br /&gt;
PRINT.ITEM3   IS STRING LEN 8&lt;br /&gt;
SKIP 2 POSITIONS&lt;br /&gt;
PRINT.ITEM4   IS STRING LEN 6&lt;br /&gt;
PRINT.LINE2   IS STRING LEN 133 DP * AFTER PRINT.LINE1&lt;br /&gt;
END IMAGE&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
In the preceding example, PRINT.LINE2 is placed adjacent to the end of PRINT.LINE1. Without the AFTER clause, an AT clause would be required to specify the numeric position of PRINT.LINE2 in the image.     &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
==Defining arrays==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
An &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;array&amp;lt;/var&amp;gt; contains multiple occurrences of a single item or a group of items. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Array definition statements===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When an array is composed of a single item, the array can be defined by using the OCCURS clause on the item definition or an ARRAY statement. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When an array is composed of more than one item, the array is defined by using an ARRAY statement and is followed by definitions of the items that compose each element of the array.              &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
None of the items in an array or subordinate array can specify LEN UNKNOWN or OCCURS UNKNOWN.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Types of arrays===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The format of the ARRAY statement depends on which of the following types of arrays is being defined:&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;For type of array... &amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;The number of occurrences in the array is...&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;Fixed occurrence &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Constant.&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;Depending &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Constant as defined in the image, but a record that is read from a sequential file, VSAM file, or terminal or is written to a sequential file or terminal can contain a smaller number of occurrences.&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;Unknown &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Not known. The maximum number of occurrences must be specified during evaluation by using the [[#IDENTIFY statement|IDENTIFY statement]]. &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;
===ARRAY and END ARRAY statements===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You define an array with an ARRAY statement. The definitions of items and subordinate arrays follow the ARRAY statement. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You specify the end of the array with an END ARRAY statement. END ARRAY ends the definition of the array defined by the preceding ARRAY statement. In addition, an IMAGE or END IMAGE statement ends all preceding ARRAY definitions.   &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
==Defining a fixed occurrence array==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
A &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;fixed occurrence array&amp;lt;/var&amp;gt; has a specified number of occurrences. Each external record read from a sequential file, VSAM file, or terminal or written to a sequential file or terminal is assumed to contain that number of occurrences.  &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 ARRAY statement used to define a fixed occurrence array is:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;ARRAY [&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;arrayname&amp;lt;/span&amp;gt;] OCCURS &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;n&amp;lt;/span&amp;gt; &lt;br /&gt;
 [AFTER {&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;itemname&amp;lt;/span&amp;gt; | &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;arrayname&amp;lt;/span&amp;gt;} &lt;br /&gt;
 | AT {&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;position&amp;lt;/span&amp;gt; | &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;itemname&amp;lt;/span&amp;gt; | &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;imagname1&amp;lt;/span&amp;gt; | &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;arrayname&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;arrayname&amp;lt;/var&amp;gt; (optional) names the array. An array must be named if it is specified in the AT clause of an image definition or in the AFTER or AT clauses in an item definition.     &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;n&amp;lt;/var&amp;gt; is the number of occurrences of the items in the array, which can range from 1 to 32767.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;AFTER and AT clauses are mutually exclusive and optionally specify the location of the array in the image. See [[#Defining a string item|Defining a string item]] for detailed information. &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 example of an image contains a fixed occurrence array. In this example, each element of the SALES.MONTHLY array contains the item SALES.TOTAL and five occurrences of the item SALES.BY.MODEL.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;IMAGE SALES&lt;br /&gt;
      ARRAY SALES.MONTHLY OCCURS 12&lt;br /&gt;
            SALES.TOTAL        IS PACKED DIGITS 9 DP 2&lt;br /&gt;
            SALES.BY.MODEL     IS PACKED DIGITS 9 DP 2 -&lt;br /&gt;
                                    OCCURS 5&lt;br /&gt;
      END ARRAY&lt;br /&gt;
END IMAGE&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The same image could be written as:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;IMAGE SALES&lt;br /&gt;
      ARRAY SALES.MONTHLY OCCURS 12&lt;br /&gt;
            SALES.TOTAL          IS PACKED DIGITS 9 DP 2&lt;br /&gt;
            ARRAY OCCURS 5&lt;br /&gt;
                  SALES.BY.MODEL IS PACKED DIGITS 9 DP 2&lt;br /&gt;
            END ARRAY&lt;br /&gt;
      END ARRAY&lt;br /&gt;
END IMAGE&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
==Defining a depending array==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
A &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;depending array&amp;lt;/var&amp;gt; has a fixed number of occurrences in the image, but a smaller number of occurrences can be found in records read from a sequential file, VSAM file, or terminal or records written to a sequential file or terminal. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Depending variable===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
A depending variable is used to specify the actual number of occurrences that exist in the record.   &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The depending variable is used in this manner:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;When a record is read from a sequential file, VSAM file, or terminal into an image, the record is assumed to contain only the number of occurrences specified by the value in the depending variable. The depending variable must have a value from zero to the maximum number of occurrences in the array. The occurrences specified in the variable are moved to the image and any remaining occurrences are initialized. When an image is created by a PREPARE IMAGE statement, space in the image is allocated for the maximum number of occurrences.     &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;When a record is written from an image to a sequential file or terminal, the record is assumed to contain only the number of occurrences specified by the value in the depending variable. Therefore, the record is written with all unfilled occurrences removed.  &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 subordinate array has a depending variable, the value of that variable applies to all occurrences of the outer array. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Restrictions====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
A depending array cannot be redefined in the current image or in any other image in the block. In addition, a depending array and the AFTER or AT clause are mutually exclusive.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Syntax====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The form of the ARRAY statement used for defining a depending array is:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;ARRAY [&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;arrayname&amp;lt;/span&amp;gt;] OCCURS &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;n&amp;lt;/span&amp;gt; DEPENDING ON {&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;itemname&amp;lt;/span&amp;gt; | &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;%variable&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;arrayname&amp;lt;/var&amp;gt;, optional, names the array. An array must be named if it is specified in the AT clause of an image definition or in the AFTER or AT clauses of an item definition.     &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;n&amp;lt;/var&amp;gt; is the number of occurrences of the items in the array, which can range from 1 to 32767.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;The DEPENDING ON clause names a previously defined %variable or item within the image that contains the actual number of occurrences in an input record. An item used as the depending variable cannot: &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Be an array element&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Vary in length, that is, be defined with LEN UNKNOWN&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Follow any varying length item or array in the image.   &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;
====Example====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The following example of an image contains an array with a depending variable is shown below. In this example, SALES.MODELS contains 15 occurrences of the item SALES.MODEL.NO. Therefore, the external record can contain from 0 to 15 occurrences.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;IMAGE SALES&lt;br /&gt;
      SALES.MODELS            IS BINARY LEN 2&lt;br /&gt;
      ARRAY OCCURS 15 DEPENDING ON SALES.MODELS&lt;br /&gt;
            SALES.MODEL.NO    IS PACKED DIGITS 9 INITIAL 0&lt;br /&gt;
      END ARRAY&lt;br /&gt;
END IMAGE&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If a record is read into the previous image, the number of items defined by the value of the item SALES.MODELS are moved from the record into the array. Any occurrences of SALES.MODEL.NO not filled in the array from the record are initialized to zero. Before a record is written from the SALES image to a sequential file or terminal, the number of items defined by the value of the item SALES.MODELS are moved from the array into the record. Any unused occurrences are not present in the record written to the sequential file or terminal.       &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
==Defining an unknown array==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
An array must be defined as &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;unknown&amp;lt;/var&amp;gt; when you cannot determine the maximum number of occurrences until after the data moves into the image. The number of occurrences in the array is specified as UNKNOWN. During evaluation, the IDENTIFY statement is used to specify the number of occurrences in the array before any item in the array is referred to.   &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 ARRAY statement used for defining an unknown array is:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;ARRAY [&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;arrayname&amp;lt;/span&amp;gt;] OCCURS UNKNOWN &lt;br /&gt;
 [AFTER {&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;itemname&amp;lt;/span&amp;gt; | &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;arrayname&amp;lt;/span&amp;gt;} &lt;br /&gt;
 | AT {&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;position&amp;lt;/span&amp;gt; | &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;itemname&amp;lt;/span&amp;gt; | &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;imaginename1&amp;lt;/span&amp;gt; &lt;br /&gt;
 | &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;arrayname&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;arrayname&amp;lt;/var&amp;gt; is required and names the array. This name is used to identify the array in IDENTIFY statements that specify the number of occurrences during evaluation.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;The AFTER and AT clauses are mutually exclusive and optionally specify the location of the array in the image. See [[#Defining a string item|Defining a string item]] for detailed information. &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;
This example illustrates the use of unknown arrays. In this example, the number of occurrences of the array TRANSACTION is contained in the item TRANS.COUNT. Before the items TRANS.NO, TRANS.AMT, or TRANS.CUST can be referred to, the IDENTIFY statement is executed to set the number of occurrences.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;TRANS.COUNT         IS BINARY LEN 4&lt;br /&gt;
ARRAY TRANSACTION OCCURS UNKNOWN&lt;br /&gt;
   TRANS.NO         IS PACKED LEN 5&lt;br /&gt;
   TRANS.AMT        IS PACKED LEN 7 DP 2&lt;br /&gt;
   TRANS.CUST       IS STRING LEN 10&lt;br /&gt;
END ARRAY&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
==Referring to array elements==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Individual items within an array are identified by subscripts. The &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;subscript&amp;lt;/var&amp;gt; is enclosed in parentheses and can be any expression that evaluates to a number from 1 to the maximum size of the array.  &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Nested arrays===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If arrays are nested, subscripts are required for each nesting level and are separated by commas. The outermost array is the first subscript.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Example====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
In this example, the fifth student in the second course would be referred to as COURSE.STUDENT(2,5).&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;IMAGE COURSE.DATA&lt;br /&gt;
      ARRAY OCCURS 20&lt;br /&gt;
        COURSE.NUMBER      IS BINARY LEN 4&lt;br /&gt;
        COURSE.NAME        IS STRING LEN 25&lt;br /&gt;
        COURSE.INSTRUCTOR  IS STRING LEN 20&lt;br /&gt;
         COURSE.STUDENT     IS STRING LEN 20 OCCURS 30&lt;br /&gt;
      END ARRAY&lt;br /&gt;
END IMAGE&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
==Initialization of array values==&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; lets you specify multiple value assignments into array dimensions within a single User Language assignment statement by adding an asterisk (*) as the subscript value. Using the asterisk is valid for percent variable arrays and image arrays.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Example 1====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The following statement sets all elements in all dimensions to 0:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;%ARRAY.ITEM (*,*,*) = 0&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Example 2====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If an array is defined as occurs 3, occurs 4, occurs 2, &amp;lt;code&amp;gt;%ARRAY.ITEM(*,2,*) = 9&amp;lt;/code&amp;gt; is equivalent to the following:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;%ARRAY.ITEM(1,2,1) = 9&lt;br /&gt;
%ARRAY.ITEM(1,2,2) = 9&lt;br /&gt;
%ARRAY.ITEM(2,2,1) = 9&lt;br /&gt;
%ARRAY.ITEM(2,2,2) = 9&lt;br /&gt;
%ARRAY.ITEM(3,2,1) = 9&lt;br /&gt;
%ARRAY.ITEM(3,2,2) = 9&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Example 3====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The following example prints AAA and 100:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;BEGIN&lt;br /&gt;
 IMAGE TEST&lt;br /&gt;
 ARRAY OCCURS 5&lt;br /&gt;
  PART1 IS BINARY LEN 2&lt;br /&gt;
  PART2 IS FLOAT LEN 8&lt;br /&gt;
  PART3 IS STRING LEN 3 OCCURS 4&lt;br /&gt;
  PART4 IS FLOAT LEN 8 OCCURS 2&lt;br /&gt;
 END ARRAY&lt;br /&gt;
END IMAGE&lt;br /&gt;
PREPARE IMAGE TEST&lt;br /&gt;
%TEST:PART3(3,*) = &#039;AAA&#039;&lt;br /&gt;
%TEST:PART4(*,2) = 100&lt;br /&gt;
PRINT %TEST:PART3(3,4)&lt;br /&gt;
PRINT %TEST:PART4(2,2)&lt;br /&gt;
END&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Example 4====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The asterisk is not valid on the right side of a User Language assignment statement. The following statement is invalid and causes a compilation error:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;%X = %ARRAY.ITEM(*,*,*)&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
==Using Large Object fields with a very large array==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If you have a very large array that is densely populated and not a preallocated field, you may improve performance by storing this array of data in a Large Object field.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When an array of data is used as a field that is not preallocated, then each field reference includes the overhead of walking through the record to find that fieldname(fieldoccurrence) value.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
With a Large Object field, you can directly address each item using the &amp;lt;offset&amp;gt;,&amp;lt;length&amp;gt; syntax available for Large Object fields.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
There is one Table B access to retrieve the Large Object descriptor, and one Table E access to read the page that your data resides on, no matter how far into the object the data resides.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
There may be a substantial CPU reduction for applications that reference large arrays as Large Object data instead of holding each array entry in a field occurrence.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;warn&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Cautionary usage note:&amp;lt;/b&amp;gt; Disk space utilization: Each Large Object field requires the total Large Object length rounded up to the next 6184 bytes of space.This is because Large Object data is a collection of Table E pages; you cannot allocate just part of a page.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
==Defining reserved space==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The format of the entire block does not have to be specified in an image definition. When items are not contiguous, space must be reserved to correctly position the items. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Space is reserved automatically by an AT clause that places an item beyond the end of the last defined item.      &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===SKIP statement===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Space is reserved explicitly by using the SKIP statement. The space reserved by a SKIP statement can be initialized by a PREPARE statement but cannot be accessed.     &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 SKIP statement for reserving space is:&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;itemname&amp;lt;/span&amp;gt; IS] SKIP &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;n&amp;lt;/span&amp;gt; POSITION[S] &lt;br /&gt;
  [INITIAL {NULL | &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt; | BLANK}]&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;The &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;itemname&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;IS&amp;lt;/var&amp;gt; clause (optional) names a reserved area that can be referred to by an AFTER or AT clause.&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;n&amp;lt;/var&amp;gt; is the number of bytes to be reserved. A maximum of 32767 bytes can be reserved.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;The INITIAL clause indicates the character with which the area is filled by PREPARE and IDENTIFY statements. Options are as follows:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;character &amp;amp;mdash; a single quoted character, a decimal number from 1 to 255, or a hexadecimal value expressed as X&#039;hh&#039;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;BLANK &amp;amp;mdash; white spaces&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;NULL &amp;amp;mdash; binary zeros &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 the INITIAL clause is omitted, NULL is the default.   &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;
====Example====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
This sample SKIP statement reserves two bytes before the next image item: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;SKIP 2 POSITIONS&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
==DEFAULT TYPE and DEFAULT SKIP statements==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can provide default values for image item options to eliminate repetition of these options on each item definition, using:     &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;DEFAULT TYPE&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;DEFAULT SKIP &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===DEFAULT TYPE statement===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The DEFAULT TYPE statement lets you set default option values for each item type. The options specified on a DEFAULT TYPE statement for an item type are applied to each item of that type defined between the default statement and the next default statement of the same item type.   &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 DEFAULT TYPE statement is:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;DEFAULT [TYPE] &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;type&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;options&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;The optional TYPE keyword specifies a default data type for any item definition that does not explicitly define the data type. Without the TYPE keyword, the statement defines the default option values for an item type without defining the default item type.&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;type&amp;lt;/var&amp;gt; specifies the data type of the item. Valid values are STRING, BINARY, FLOAT, PACKED, ZONED, or EFORMAT.&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;options&amp;lt;/var&amp;gt; specifies any of the options that are valid for the item type except for the TO, AFTER, AT, and OCCURS clauses. &lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===DEFAULT SKIP statement===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The DEFAULT SKIP statement specifies the default length or initial value for a SKIP statement or an implied skip. It can appear anywhere in an image definition and remains in effect until the next DEFAULT SKIP statement.&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 DEFAULT SKIP statement is:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;DEFAULT SKIP &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;n&amp;lt;/span&amp;gt; POSITION[S] &lt;br /&gt;
  [INITIAL {NULL | &#039;&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;character&amp;lt;/span&amp;gt;&#039; | BLANK}]&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;n&amp;lt;/var&amp;gt; is a positive integer that specifies the number of bytes to be reserved. A maximum of 32767 bytes can be reserved.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;The INITIAL clause indicates the fill character for PREPARE and IDENTIFY statements. Options are as follows: &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;character&amp;lt;/var&amp;gt; &amp;amp;mdash; a single quoted character, a decimal number from 1 to 255, or a hexadecimal value expressed as X&#039;hh&#039;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;BLANK &amp;amp;mdash; white space&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;NULL &amp;amp;mdash; binary zeros &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 the INITIAL clause is omitted, NULL is the default. &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;
===Example of DEFAULT statements===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The following examples show how an image can be described without and then with DEFAULT statements.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Without DEFAULT statements====&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;IMAGE SALES&lt;br /&gt;
      SALES.YEAR.TOTAL     IS PACKED DIGITS 7 DP 2&lt;br /&gt;
      SALES.MONTH.TOTAL    IS PACKED DIGITS 7 DP 2&lt;br /&gt;
      SALES.REP.NO         IS PACKED DIGITS 5&lt;br /&gt;
      SALES.REP.NAME       IS STRING LEN 20&lt;br /&gt;
      SALES.REP.ADDRESS.1  IS STRING LEN 20&lt;br /&gt;
      SALES.REP.ADDRESS.2  IS STRING LEN 20&lt;br /&gt;
END IMAGE&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====With DEFAULT statements====&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;IMAGE SALES&lt;br /&gt;
 DEFAULT TYPE STRING LEN 20&lt;br /&gt;
 DEFAULT PACKED DIGITS 7 DP 2&lt;br /&gt;
 &lt;br /&gt;
 * THE FOLLOWING TWO ITEMS DEFAULT TO DIGITS 7 DP 2&lt;br /&gt;
 &lt;br /&gt;
       SALES.YEAR.TOTAL    IS PACKED&lt;br /&gt;
       SALES.MONTH.TOTAL   IS PACKED&lt;br /&gt;
 &lt;br /&gt;
 * DP 0 IS NECESSARY ON THE NEXT LINE IN ORDER TO AVOID&lt;br /&gt;
 * THE DEFAULT OF 2&lt;br /&gt;
 &lt;br /&gt;
       SALES.REP.NO        IS PACKED DIGITS 5 DP 0&lt;br /&gt;
 &lt;br /&gt;
 * THE FOLLOWING 3 ITEMS DEFAULT TO STRING LEN 20&lt;br /&gt;
 &lt;br /&gt;
       SALES.REP.NAME&lt;br /&gt;
       SALES.REP.ADDRESS.1&lt;br /&gt;
       SALES.REP.ADDRESS.2&lt;br /&gt;
END IMAGE&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
==Processing images==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Once a block is defined, you can use the following statements to process external records and to manipulate a block of storage. &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;Statement&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Action undertaken&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&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Closes a sequential file, VSAM file, or terminal opened by the 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;IDENTIFY&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Defines an active image and establishes the length for items or array occurrences defined as UNKNOWN.&amp;lt;/td&amp;gt;&lt;br /&gt;
&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&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Opens a sequential file, VSAM file, or terminal for processing.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;POSITION&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Specifies the next record to be read sequentially in a VSAM KSDS 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;PREPARE&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Initializes an image.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;READ IMAGE&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Reads a record from a sequential file, VSAM file, or terminal.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;RELEASE POSITION&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Terminates the browse operation established by a POSITION statement.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;WRITE IMAGE&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Writes a record to a sequential file or to a terminal.&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;
===Key field for VSAM files===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When the VSAM key is not in character format, special handling is required to supply the key in the format required by VSAM. If the key is supplied as a %variable or image item that has a numeric type, the READ IMAGE and POSITION statements attempt to convert the numeric value to string.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The suggested technique to resolve this problem is to define the image of the record with the key field defined in the format expected by VSAM and redefined as a string of the same length. The key value is moved to the key item and the string item name is provided in the READ or POSITION statement. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
An example of this technique for a VSAM file that has a 4-byte binary key is illustrated below:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;IMAGE VSAM.REC&lt;br /&gt;
      KEY IS BINARY LEN 4&lt;br /&gt;
      KEY.STR IS STRING LEN 4 AT KEY&lt;br /&gt;
        .&lt;br /&gt;
       (additional items)&lt;br /&gt;
        .&lt;br /&gt;
END IMAGE&lt;br /&gt;
OPEN DATASET VSAMFILE&lt;br /&gt;
    IF $Status NE 0 THEN&lt;br /&gt;
        PRINT $Errmsg&lt;br /&gt;
        STOP&lt;br /&gt;
    END IF&lt;br /&gt;
%KEYVAL = $READ(&#039;KEY VALUE = &#039;)&lt;br /&gt;
PREPARE VSAM.REC&lt;br /&gt;
%VSAM.REC:KEY = %KEYVAL&lt;br /&gt;
READ IMAGE VSAM.REC FROM VSAMFILE KEY EQ %VSAM.REC:KEY.STR&lt;br /&gt;
        .&lt;br /&gt;
        .&lt;br /&gt;
        .&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Close statement==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The &amp;lt;var&amp;gt;Close&amp;lt;/var&amp;gt; statement lets the request close a sequential file, VSAM file, or a terminal opened by the request. &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;Close&amp;lt;/var&amp;gt; statement is:&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;literal&amp;quot;&amp;gt;Close&amp;lt;/span&amp;gt; {&amp;lt;span class=&amp;quot;literal&amp;quot;&amp;gt;Dataset&amp;lt;/span&amp;gt; {&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;ext-filename&amp;lt;/span&amp;gt; | &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;%variable&amp;lt;/span&amp;gt;}&lt;br /&gt;
 | &amp;lt;span class=&amp;quot;literal&amp;quot;&amp;gt;External&amp;lt;/span&amp;gt; {&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;ext-filename&amp;lt;/span&amp;gt; | &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;%variable&amp;lt;/span&amp;gt;} &lt;br /&gt;
 | [&amp;lt;span class=&amp;quot;literal&amp;quot;&amp;gt;External&amp;lt;/span&amp;gt;] &amp;lt;span class=&amp;quot;literal&amp;quot;&amp;gt;Terminal&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;You must specify either the &amp;lt;var&amp;gt;Dataset&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;External&amp;lt;/var&amp;gt;, or &amp;lt;var&amp;gt;Terminal&amp;lt;/var&amp;gt; keyword.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;The &amp;lt;var&amp;gt;Dataset&amp;lt;/var&amp;gt; keyword specifies that the entity to be closed is a non-&amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; file, that is, a sequential or VSAM file.    &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;The &amp;lt;var&amp;gt;External&amp;lt;/var&amp;gt; keyword specifies that the entity to be closed is a non-&amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; file, that is, a sequential or VSAM file, or a terminal.    &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;ext-filename&amp;lt;/var&amp;gt; specifies the name of the sequential or VSAM file to close, that is, the name used in the &amp;lt;var&amp;gt;Open&amp;lt;/var&amp;gt; statement. Also, a %variable can provide the file name.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Terminal&amp;lt;/var&amp;gt; specifies that the terminal currently opened by the &amp;lt;var&amp;gt;Open&amp;lt;/var&amp;gt; statement should be closed. Also, a %variable can supply the word &amp;lt;var&amp;gt;Terminal&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;
===Closing a Model 204 file===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The &amp;lt;var&amp;gt;Close&amp;lt;/var&amp;gt; statement can be used only for closing external files or terminals. To close a &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; file, you may use the &amp;lt;var&amp;gt;[[$Close]]&amp;lt;/var&amp;gt; function within a &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;User Language&amp;lt;/var&amp;gt; request, or the &amp;lt;var&amp;gt;[[CLOSE command|CLOSE]]&amp;lt;/var&amp;gt; command outside a request.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
==IDENTIFY statement==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The IDENTIFY statement establishes: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Active image, if multiple images define the same block.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Length of items that were defined as UNKNOWN.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Number of occurrences for arrays that were defined as UNKNOWN. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Syntax====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The complete syntax for the IDENTIFY statement follows. The form of the IDENTIFY statement used to perform each of these activities is then discussed in detail.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;IDENTIFY {[IMAGE] &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;imagename&amp;lt;/span&amp;gt; &lt;br /&gt;
 | &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;%imagename&amp;lt;/span&amp;gt;:&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;itemname&amp;lt;/span&amp;gt; LEN {&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;n&amp;lt;/span&amp;gt; | &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;%variable&amp;lt;/span&amp;gt;} &lt;br /&gt;
 | {&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;%imagename&amp;lt;/span&amp;gt;:&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;arrayname&amp;lt;/span&amp;gt; | &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;%imagename&amp;lt;/span&amp;gt;:&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;itemname&amp;lt;/span&amp;gt;}&lt;br /&gt;
   OCCURS {&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;n&amp;lt;/span&amp;gt; | &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;%variable&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;imagename&amp;lt;/var&amp;gt; refers to an image that was previously described in an image definition.&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;%imagename&amp;lt;/var&amp;gt;:&amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;itemname&amp;lt;/var&amp;gt; is an item that was defined with LEN UNKNOWN or OCCURS UNKNOWN.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;The LEN clause specifies the length in bytes of the item or a %variable that contains the length. The length cannot exceed 255 bytes. &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;%imagename&amp;lt;/var&amp;gt;:&amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;arrayname&amp;lt;/var&amp;gt; is an array that was defined with OCCURS UNKNOWN.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;The OCCURS clause specifies the number of occurrences of the item or a %variable that contains the number. The number of occurrences cannot exceed 32767. &lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Establishing an active image===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Use the following form of the IDENTIFY statement to switch the active image to the named imaged, when multiple images define the same block:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;IDENTIFY [IMAGE] &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;imagename&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 IDENTIFY statement also initializes the items, if any, that were not initialized by a previous READ IMAGE or PREPARE 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; Use the IDENTIFY statement instead of a PREPARE statement for requests in which you want to maintain data passed in an image.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Use with global images====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When used with global images, the IDENTIFY IMAGE statement, can cause request termination due to either: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Definition mismatches. See [[Global features#Consistency checks performed|Consistency checks performed]] for a description.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Insufficient space in GTBL. See the&lt;br /&gt;
&amp;lt;var class=&amp;quot;book&amp;quot;&amp;gt;[http://www.rocketsoftware.com/m204/products/model204/documentation/v7r4/M204-System-Mgr/view Rocket Model 204 System Manager&#039;s Guide]&amp;lt;/var&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 IDENTIFY IMAGE statement does not refresh a global image, if a copy of that image is already in GTBL. The IDENTIFY IMAGE statement simply makes the specified image active. See [[Global features#Images and screen processing|Images and screen processing]] for a diagram showing the structure of GTBL followed by a discussion of performance considerations with respect to the definition of global objects.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Establishing lengths for UNKNOWN items===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Use the following form of the IDENTIFY statement to set the length for items defined with LEN UNKNOWN:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;IDENTIFY &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;%imaginename&amp;lt;/span&amp;gt;:&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;itemname&amp;lt;/span&amp;gt; LEN {&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;n&amp;lt;/span&amp;gt; | &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;%variable&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 location of an item is established when the length of every preceding variable length item and array is established. The length cannot be changed after it is defined by an IDENTIFY statement. If you must enlarge an array after the length is established, copy the image to another image where the array is larger using assignment statements.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Establishing occurrences for UNKNOWN arrays===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Use the following form of the IDENTIFY statement to set the number of occurrences for arrays or items defined with OCCURS UNKNOWN:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;IDENTIFY {&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;%imagename&amp;lt;/span&amp;gt;:&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;arrayname&amp;lt;/span&amp;gt; &lt;br /&gt;
 | &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;%imagename&amp;lt;/span&amp;gt;:&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;itemname&amp;lt;/span&amp;gt;} OCCURS {&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;n&amp;lt;/span&amp;gt; | &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;%variable&amp;lt;/span&amp;gt;}&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You cannot change the number of occurrences after they are defined by an IDENTIFY statement. If you issue an IDENTIFY statement for an item whose length was previously set by an IDENTIFY statement, the request is cancelled. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You must issue a PREPARE statement before another IDENTIFY statement can be issued on the same item. If you need to enlarge an array after the number of occurrences is established, you must copy the image to another image where the array is larger using assignment.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
==MODIFY BUFFER statement==&lt;br /&gt;
 &lt;br /&gt;
====Function====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Manages the Universal Buffer size and can also keep messages or overwrite them with a fill character.&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;MODIFY BUFFER [SIZE=&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;n&amp;lt;/span&amp;gt; | &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;%variable&amp;lt;/span&amp;gt; [PRESERVE | NOPRESERVE]] &lt;br /&gt;
  [FILL [X&#039;&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;nn&amp;lt;/span&amp;gt;&#039; | C&#039;&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;x&amp;lt;/span&amp;gt;&#039;] | CLEAR]&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;BUFFER (formerly and still accepted as MQ_BUFFER) specifies the Universal Buffer area. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;SIZE specifies the number of bytes allocated for the BUFFER area. If the value of the SIZE option enlarges or shrinks the current buffer, the buffer contents are overwritten.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;PRESERVE specifies to retain the buffer contents. If a storage allocation error occurs, the value of 8 is set in the $STATUS return code (which is the standard WebSphere MQ value for this error).  &lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If the data was truncated when the buffer was shrunk, then the value of 14 for data truncation is set in $STATUS, although the operation succeeds.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;CLEAR option, the default, specifies to overwrite the buffer with X&#039;00&#039;.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;FILL option specifies a fill-character to use; for example, X&#039;40&#039; fills with blanks. The FILL option can also be a decimal number and/or the equals sign (=), or it can be an alpha character (C) and/or the equals sign. If a value is not specified after the keyword FILL, the default value is the CLEAR option.&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If the FILL or CLEAR option is specified, the behavior of MODIFY BUFFER statement depends on what other options are used:&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;If... &amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Then...&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;FILL/CLEAR, SIZE, and NOPRESERVE are specified, or FILL is specified without SIZE &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Entire buffer is filled with the fill character.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;FILL/CLEAR, SIZE, and PRESERVE are specified &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Fill character is used to fill the new portion of the buffer after the preserved data only if the buffer size is increased. &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;
 &lt;br /&gt;
====Usage====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The MODIFY BUFFER statement requires that you specify at least one option. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When you overwrite the contents of BUFFER area, the value of $Buffer_Used is set to zero and the value of $Buffer_Position is set to one. See [[$Buffer_Size#$Buffer_Size|$Buffer_Size]] and [[$Buffer_Used#$Buffer_Used|$Buffer_Used]].&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If you exceed the 2-gigabyte limit on the size of BUFFER, $STATUS returns a value of 34. A negative number or a number less than UBUFSZ is changed to UBUFSZ.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==OPEN statement==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The OPEN statement opens a sequential file, VSAM file, or terminal for processing.    &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====DEFINE DATASET required====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Before a VSAM file or a DOS sequential file can be opened, it must previously have been&lt;br /&gt;
defined using the &amp;lt;var&amp;gt;[[DEFINE DATASET command|DEFINE DATASET]]&amp;lt;/var&amp;gt; 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 OPEN statement is:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;OPEN {[DATASET | EXTERNAL] &lt;br /&gt;
 {&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;ext-filename&amp;lt;/span&amp;gt; | &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;%variable&amp;lt;/span&amp;gt;} &lt;br /&gt;
 | [EXTERNAL] {TERMINAL | &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;%variable&amp;lt;/span&amp;gt;}} &lt;br /&gt;
 FOR {INPUT [OUTPUT] | OUTPUT [INPUT] | INOUT} &lt;br /&gt;
 [PASSWORD {&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;value&amp;lt;/span&amp;gt; | &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;%variable&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;Either the DATASET or EXTERNAL keyword must be specified to open a sequential (non-&amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt;) file. DATASET and EXTERNAL should not be specified for opening &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;&amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;ext-filename&amp;lt;/var&amp;gt; specifies the name of external file (that is, the sequential or VSAM file) to be opened. The external file name is the name specified in the DEFINE DATASET command or, for sequential files, the OS DDNAME or CMS FILEDEF. You can provide the external file name can be provided in a %variable.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;TERMINAL specifies that the entity to be opened is a terminal. The word TERMINAL can be provided in a %variable.    &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;The required FOR clause specifies the type of I/O processing that is performed on the opened external file or terminal. An external file or terminal must be at least opened for INPUT to be read into an image and opened for OUTPUT to write data from an image.  &lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The INPUT OUTPUT, OUTPUT INPUT, and INOUT combination options are valid only for the TERMINAL keyword.  &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 PASSWORD clause is required for only password protected VSAM data sets. The clause generates an error when used with an OPEN TERMINAL statement, but is ignored in all other cases.  &lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
With the PASSWORD clause, the password can be specified directly or can be provided as the value of a %variable. Password validation is performed during evaluation and is not checked during compilation. &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;
====Usage notes====&lt;br /&gt;
 &lt;br /&gt;
====OPEN statement in remote context====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
This form of the OPEN statement is not supported in remote context. Using the AT keyword with any of the keywords DATASET, EXTERNAL, or TERMINAL generates the following error message, which is not displayed on the terminal, but can be retrieved with the $Errmsg function:&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 the DATASET or EXTERNAL keyword is not specified and an entity is opened other than a terminal, &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 of the file in the following order:   &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ol&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; temporary groups&amp;lt;/li&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; permanent groups&amp;lt;/li&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; files &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
This search order is consistent with the search order that &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; uses at command level for the OPEN command. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Opening non-Model 204 data sets from within procedures====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If a User Language procedure attempts to open an already open non-&amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; data set at evaluation time, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; softly restarts the user with the following counting error message:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;M204.2153 DATASET &amp;lt;i&amp;gt;name&amp;lt;/i&amp;gt; IS ALREADY OPEN&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Clearing messages====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
An OPEN statement automatically clears $Fsterr and $Errmsg. You can also clear the messages accessed by $Fsterr and $Errmsg, using the $ErrClr function; for more details, see [[$ErrClr#$ErrClr|$ErrClr]].&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
==POSITION statement==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The POSITION statement specifies the next record to be read sequentially in a VSAM KSDS file. An established position is used by the READ NEXT statement to locate the next record to be returned. A new position can be established at any time by executing another POSITION statement.   &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
This POSITION statement is not to be confused with the POSITION statement used to recall a position in a found set or list which has been saved using the REMEMBER option during FOR loop processing. See [[Global features#POSITION statement|POSITION statement]].&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 POSITION statement is:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;POSITION {&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;ext-filename&amp;lt;/span&amp;gt; | &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;%variable&amp;lt;/span&amp;gt;} &lt;br /&gt;
  AT KEY &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;operator&amp;lt;/span&amp;gt; {&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;value&amp;lt;/span&amp;gt; | &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;%variable&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;ext-filename&amp;lt;/var&amp;gt; is the name of the VSAM file specified in the OPEN statement. The name can be provided as the value of a %variable. &lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;ext-filename&amp;lt;/var&amp;gt; is provided as a literal, it cannot be the name of a found set or list.&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;var class=&amp;quot;term&amp;quot;&amp;gt;operator&amp;lt;/var&amp;gt; specifies that the key of the record to be retrieved must be equal to or greater than or equal to the specified value. Valid operators are: =, &amp;gt;=, EQ, or GE.&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;value&amp;lt;/var&amp;gt; specifies the key at or beyond which the file is positioned for subsequent reads. The key can be provided as the value of a %variable.&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;value&amp;lt;/var&amp;gt; is a null string, a key of binary zeros is substituted. The first record in the file is returned if the operator is &amp;gt;= or GE. If the operator is = or EQ, a record is found only if it has a key of all binary zeros. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If the length of &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;value&amp;lt;/var&amp;gt; is less than the length of the VSAM key, the key is treated as generic. A generic key search is satisfied when the value matches the same number of characters at the beginning of the VSAM key. The portion of the VSAM key that is longer than the value is ignored in the comparison.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If the VSAM key is not a character string, special handling is required. For information on how to specify the key when the key is not a string, refer to [[#Key field for VSAM files|Key field for VSAM files]].   &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;
==PREPARE statement==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The PREPARE statement initializes an image and makes it the active image. This is required when image items are accessed prior to reading an external record into the image. PREPARE initializes the block associated with the image with the values specified in the INITIAL clauses of the item definitions or DEFAULT statements.    &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Previous identifications of lengths of items defined as length UNKNOWN or number of occurrences of arrays defined with OCCURS UNKNOWN are lost. The IDENTIFY statement must be executed again to establish length or number of occurrences.    &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 PREPARE statement is:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;PREPARE [IMAGE] &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;imagename&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;imagename&amp;lt;/var&amp;gt; refers to an image that was previously described in an image definition. The keyword IMAGE is required if imagename is IMAGE, MENU, or SCREEN.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Use with global images===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The PREPARE IMAGE statement, when used with global images, can cause request termination due to either: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Definition mismatches (see [[Global features#Consistency checks performed|Consistency checks performed]] for a description for global images)&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Insufficient space in GTBL (see the&lt;br /&gt;
&amp;lt;var class=&amp;quot;book&amp;quot;&amp;gt;[http://www.rocketsoftware.com/m204/products/model204/documentation/v7r4/M204-System-Mgr/view Rocket Model 204 System Manager&#039;s Guide]&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;
==READ IMAGE statement==&lt;br /&gt;
 &lt;br /&gt;
====Purpose====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The READ IMAGE statement reads a record from a sequential or VSAM file or terminal into the image and sets the image as the active image. Or, the READ IMAGE statement reads the contents of the Universal Buffer.   &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;READ [IMAGE] &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;imagename&amp;lt;/span&amp;gt; FROM &lt;br /&gt;
     [BUFFER [POSITION={&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;%pvariable&amp;lt;/span&amp;gt; | &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;n&amp;lt;/span&amp;gt;}] &lt;br /&gt;
     {MAXLEN={&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;%lvariable&amp;lt;/span&amp;gt; | &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;n&amp;lt;/span&amp;gt;}]] | &lt;br /&gt;
     [{&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;ext-filename&amp;lt;/span&amp;gt; | TERMINAL | &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;%variable&amp;lt;/span&amp;gt;} &lt;br /&gt;
     [PROMPT {&#039;&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;text&amp;lt;/span&amp;gt;&#039; | &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;%variable&amp;lt;/span&amp;gt;}] &lt;br /&gt;
     [NEXT | KEY &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;operator&amp;lt;/span&amp;gt; {&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;value&amp;lt;/span&amp;gt; | &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;%variable&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;imagename&amp;lt;/var&amp;gt; is an image that was previously described in an image definition. The keyword IMAGE is required if imagename is IMAGE, MENU, or SCREEN. &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;imagename&amp;lt;/var&amp;gt; also specifies a message to read in the Universal Buffer area.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;The FROM clause determines which use of the READ IMAGE statement to employ: &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Reading Large Object data from the Universal Buffer&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Reading from a sequential file or the terminal&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;BUFFER (formerly, and still accepted as MQ_BUFFER) specifies the Universal Buffer area.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;POSITION must be in the range 1-16,777,216. If not, the operation returns $STATUS=10 and $STATUSD=20 return codes. &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;%pvariable&amp;lt;/var&amp;gt; or &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;n&amp;lt;/var&amp;gt; specifies where in the buffer to begin reading. &lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If POSITION=&amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;%pvariable&amp;lt;/var&amp;gt; is specified and &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;%pvariable&amp;lt;/var&amp;gt; is greater than $Buffer_Used, the operation returns $STATUS=10 and $STATUSD=20.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The starting position in the buffer is determined by POSITION=&amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;%pvar&amp;lt;/var&amp;gt;, if that was specified; $Buffer_Position, otherwise.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The ending position in the buffer is determined by the lowest of starting position, plus &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;%lvariable&amp;lt;/var&amp;gt;, if MAXLEN=&amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;%lvariable&amp;lt;/var&amp;gt; was specified as the value of $Buffer_Used.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;MAXLEN=%lvariable specifies the maximum number of bytes to copy into the image. The actual number copied might be less than that, either because the number of bytes available in the BUFFER area (from the starting position) is less, or because the size of the image is less. &lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
MAXLEN must be in the range 1-32,767. If not, the operation returns $STATUS=10 and $STATUSD=19.&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;var class=&amp;quot;term&amp;quot;&amp;gt;ext-filename&amp;lt;/var&amp;gt; specifies that records are read from a previously opened sequential or VSAM file. The name of the file can be provided as the value of a %variable.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;TERMINAL specifies that records are read from the terminal. The word TERMINAL can be provided as the value of a %variable.    &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;The optional PROMPT clause is used with only the TERMINAL option. It specifies to display a prompt sign before the READ is performed. Prompting is especially useful for synchronizing communication between the User Language request and Host Language program. &lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The PROMPT string can be as many as 255 characters. The string can be provided as a string type %variable.&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 NEXT option reads the next record in the file. NEXT is the default, if the KEY clause is omitted. A READ IMAGE statement with the NEXT option can be executed only following an OPEN, POSITION, or READ NEXT statement.    &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;The KEY clause identifies the record to read. The KEY clause is valid only for VSAM files and the value is converted to a string. A READ IMAGE statement with the KEY clause automatically performs a RELEASE POSITION.&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Key clause options are &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;operator&amp;lt;/var&amp;gt; and &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;value&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;&amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;operator&amp;lt;/var&amp;gt; specifies that the key of the record to be retrieved must be equal to or greater than or equal to the specified value. Valid operators are: =, &amp;gt;=, EQ, or GE.&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;value&amp;lt;/var&amp;gt; is the key that locates the record. It can be supplied in a %variable.&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If the value is a null string, a key of binary zeros is substituted. The first record in the file is returned, if the operator is &amp;gt;= or GE. If the operator is = or EQ, a record is found only if it has a key of all binary zeros. If the length of the value is less than the length of the VSAM key, the key is treated as generic. A generic key search is satisfied when the value matches the same number of characters at the beginning of the VSAM key. The portion of the VSAM key that is longer than the value is ignored in the comparison.&amp;lt;/p&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 the VSAM key is not a character string, special handling is required. For information on how to specify the key when the key is not a string, refer to [[#Key field for VSAM files|Key field for VSAM files]]. &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;
====Usage====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
This statement is valid only if the file or terminal from which the record is read is currently open for INPUT, INPUT OUTPUT, or INOUT. READ IMAGE processing reads data until the Universal Buffer is exhausted, or the image is filled. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The part of the message selected is copied from BUFFER area to the image:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Contents of the BUFFER area are unchanged.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;$Buffer_Used is unchanged.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;$Buffer_Position is set to the byte after the last byte copied.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;No error indication is given, if the image is not big enough to hold the data. &lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===BUFFER area positioning===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If POSITION is specified:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Numeric value, expressed as either a constant or variable, indicates where in the buffer to begin reading; the count starts from 1. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Beyond the end of the data, then the image is unchanged; READLEN is set to 0. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;If the value is nonnumeric, less than one, or beyond the end of the data, then the statement fails with a nonzero $STATUS value. &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 the POSITION option is not specified:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Data is extracted from the buffer at the point where the last READ left off, or from the beginning of the buffer if this is the first READ after any other statement (including WebSphere MQ statements). &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Once the buffer has been emptied, subsequent READ statements that do not specify POSITION set READLEN to 0, and leave the target image unchanged.  &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;
After a READ IMAGE statement is issued, use the value of READLEN to determine how many bytes were actually copied. If no bytes were copied, READLEN=0.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The bytes in the image at offsets higher than the READLEN value are unchanged.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
To determine the number of bytes remaining, use the following formula: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;bytes remaining = ($buffer_used - $buffer_position + 1)&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Record positioning===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If no position has been set prior to a READ NEXT, the position is assumed to be at the beginning of the file.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The record is positioned in the image according to the following rules:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;If the record is longer than the image, the record is truncated.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;If the record is smaller than the image, items beyond the end of the data are filled with the INITIAL value. An item that is partially filled by the input data is filled with the pad character for STRING and EFORMAT items and with binary zeros for BINARY, PACKED, ZONED, and FLOAT items.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;When there are arrays with depending variables, each such array is filled with the number of elements specified in the depending variable. The remainder of the array is initialized according to the INITIAL clauses. The remaining data is move to the image following the array.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;If the length of the image is unknown because items or arrays have length or number of occurrences specified as UNKNOWN, the block is filled with as much of the external record as fits in the remaining physical buffer space.  &lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Length of the external record===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The length of the external record is stored in the variable &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;%imagename&amp;lt;/var&amp;gt;:READLEN.   &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Previous identifications of lengths of items defined as length UNKNOWN or number of occurrences of arrays defined with OCCURS UNKNOWN are lost. The IDENTIFY statement must be executed again to establish length or number of occurrences.    &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
==RELEASE POSITION statement==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The RELEASE POSITION statement terminates a browse operation established by a POSITION statement. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Execution of a RELEASE POSITION statement releases the VSAM string that maintains the current position in the file. The number of these strings is limited, and freeing the string as soon as the browse is finished allows other users to access the file.&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; A POSITION statement automatically is released by another POSITION statement, a READ IMAGE statement with a KEY clause, a CLOSE statement, or the end of the request.   &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 RELEASE POSITION statement is:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;RELEASE POSITION {&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;ext-filename&amp;lt;/span&amp;gt; | &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;%variable&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;ext-filename&amp;lt;/var&amp;gt; is the name of the external file used in the POSITION statement. A %variable also can be used to supply the external file name. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
==WRITE IMAGE statement==&lt;br /&gt;
 &lt;br /&gt;
====Purpose====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The WRITE IMAGE statement loads data into the Universal Buffer or writes an active image to a sequential file or to the terminal.&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 WRITE IMAGE statement is:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;WRITE [IMAGE] &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;imagename&amp;lt;/span&amp;gt; ON &lt;br /&gt;
      [BUFFER [POSITION=&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;%pvariable&amp;lt;/span&amp;gt; | &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;n&amp;lt;/span&amp;gt;] &lt;br /&gt;
      [MAXLEN={&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;%lvariable&amp;lt;/span&amp;gt; | &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;n&amp;lt;/span&amp;gt;}]]&lt;br /&gt;
      | {&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;seq-filename&amp;lt;/span&amp;gt; | TERMINAL | &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;%variable&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;imagename&amp;lt;/var&amp;gt; specifies a message to place in the message buffer.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;The ON clause determines which use of the WRITE IMAGE statement to employ: writing to a sequential file or the terminal or writing Large Object data to the Universal Buffer.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;BUFFER (formerly, and still accepted as MQ_BUFFER) specifies the Universal Buffer area.&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;%pvariable&amp;lt;/var&amp;gt; or &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;n&amp;lt;/var&amp;gt; specifies where in the buffer to start the placement.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;POSITION must be in the range 1-16,777,216. If not, the operation returns $STATUS=10 and $STATUSD=20. &lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The starting position in the buffer is determined by:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;POSITION=&amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;%pvariable&amp;lt;/var&amp;gt;, if that was specified.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;$Buffer_Position, otherwise.&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;MAXLEN=&amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;%lvariable&amp;lt;/var&amp;gt; specifies the maximum number of bytes to copy from the image. The actual number copied is less than &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;%lvariable&amp;lt;/var&amp;gt;, if the size of the image is less. &lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
MAXLEN must be in the range 1-32,767. If not, the operation returns $STATUS=10 and $STATUSD=19. The amount of data to copy is determined by:&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;If MAXLEN=&amp;lt;i&amp;gt;%lvar&amp;lt;/i&amp;gt; is &amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Then copy...&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;Not specified &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Current length of the image.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Specified &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Lesser of %lvariable and the current length of the image.&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;
 &lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;seq-filename&amp;lt;/var&amp;gt; specifies the name of the sequential file to which the image should be written. A %variable also can be used to supply the name of the sequential file.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;TERMINAL specifies that the image should be written to the terminal. A %variable also can be used to supply the word TERMINAL.  &lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If you specify the TERMINAL option on the WRITE IMAGE statement, data type translation is not performed for the terminal output.   &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;
====Usage====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The WRITE IMAGE statement is valid only if the file or terminal from which the record is read currently is open for OUTPUT, OUTPUT INPUT, or INOUT values. &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; When the WRITE IMAGE statement is used for a depending array, unused occurrences of the array are eliminated from the output.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If an MQPUT or MQPUT1 statement is issued with the BUFFER option, the buffer must contain a message, otherwise the operation fails with a nonzero $STATUS value.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If the last WebSphere MQ operation was a successful put or get, then an MQPUT or MQPUT1 statement with the BUFFER options puts the message most recently processed. In all other cases, at least one WRITE IMAGE imagename ON BUFFER statement must have been issued.&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; Issue an MQPUT statement with the BUFFER option after a WRITE IMAGE imagename ON BUFFER statement, otherwise $STATUS indicates there is no data in the buffer.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Image positioning====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The data in the image is loaded into the buffer. Where the data is placed in the buffer depends on whether the POSITION option was specified. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If POSITION was not specified:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;On the first such WRITE IMAGE after any other User Language statement or WebSphere MQ statement, the data is loaded starting in the first-byte position in the buffer.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;On subsequent WRITE IMAGE statements, data is loaded immediately following the data from the most recent WRITE. &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 POSITION is specified as:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Numeric value, expressed as either a constant or variable that indicates where in the buffer to begin to place the data, then the count starts from 1. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Nonnumeric, less than one, or larger than the current size of the buffer, then the statement fails with a nonzero $STATUS value. &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 ending position in the buffer is determined by the starting position, plus the amount of data to copy.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If the size of the user&#039;s BUFFER area is less than the ending position, the existing BUFFER area is expanded to a size equal to the ending position (data within the BUFFER area is preserved).&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The data is copied from the image to the BUFFER area:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;$Buffer_Position is set to the byte after the last byte copied.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;$Buffer_Used is set according to the following rule: if data was written past the previous $Buffer_Used point, then $Buffer_Used is the point written to by the WRITE IMAGE; otherwise, it is unchanged. &lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Error handling==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Error conditions encountered during the processing of image I/O statements &amp;amp;mdash; CLOSE, OPEN, POSITION, READ IMAGE, RELEASE POSITION, and WRITE IMAGE &amp;amp;mdash; 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. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The request should check for errors after the execution of each I/O statement by using the $Status function. The text of the most recently issued error message then can be retrieved by using the $Errmsg function. Refer to [[$ErrClr#$ErrClr|$ErrClr]] and [[$Status#$Status|$Status]] for more information.   &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===$Status return codes===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The values that can be returned by $Status are listed below:&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;Code &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;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;
&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;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Either an end of file was detected by a READ NEXT statement or a matching key was not found for the criteria specified in a READ KEY or POSITION statement. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
This code is only a warning; the request continues but cannot refer to the image before the next READ KEY or POSITION statement.&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 align=&amp;quot;right&amp;quot;&amp;gt;2&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
A serious error has occurred such as an OPEN statement failure or an attempt to access an unopened file. The request continues, but the statement that generated the status code has not completed successfully. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The failed statement cannot set an image active, resulting in the cancellation of the request if the image is referred to before being set active. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The error that occurred can be retrieved by using the $Errmsg function to obtain the last counting or cancellation error 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;/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;
 &lt;br /&gt;
===Detecting ABEND codes in User Language===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; intercepts an ABEND, the ABEND code and reason code are saved in the user&#039;s KOMM and can be accessed by the &amp;lt;var&amp;gt;[[$Status]]&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;[[$StatusD]]&amp;lt;/var&amp;gt; $functions. The values of $Status and $StatusD are set 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;$function&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Value&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Where&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;$Status&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;System ABEND code&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;System code is not zero&amp;lt;/td&amp;gt;&lt;br /&gt;
&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;User ABEND code&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;User code is not zero&amp;lt;/td&amp;gt;&lt;br /&gt;
&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;255 (X&#039;FF&#039;)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;ABEND code =&amp;gt; X&#039;F00&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;$StatusD&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Concatenated values of the $Status values:&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
&amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;sss&amp;lt;/var&amp;gt; is the system ABEND code&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;uuu&amp;lt;/var&amp;gt; is the user ABEND code&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;rr&amp;lt;/var&amp;gt; is the ABEND reason code&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;p&amp;gt;&lt;br /&gt;
If the ABEND is related to a communications I/O error, the SNA Communications Server (formerly VTAM), LU 6.2, or TCP/IP error routines set $Status and $StatusD with the result of the Terminal I/O and so override the ABEND code information.&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; It is possible to get an ABEND code of all zeros. Some IBM system routines terminate with an ABEND U000 when they are invoked without APF authorization.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The ABEND code is not available in the z/VSE environment.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Sample requests==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
This section presents three examples illustrating the use of images in a request.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Using the READ KEY facility===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The following request illustrates the use of the READ KEY facility. The printed record is the one with a VSAM key equal to a user-specified value.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;BEGIN&lt;br /&gt;
        IMAGE EMP.REC&lt;br /&gt;
            CODE IS STRING LEN 8&lt;br /&gt;
            JOB.DESC IS STRING LEN 50&lt;br /&gt;
            NUM IS STRING LEN 7 DP *&lt;br /&gt;
        END IMAGE&lt;br /&gt;
        OPEN DATASET VSAMDS1 FOR INPUT&lt;br /&gt;
        IF $STATUS NE 0 THEN&lt;br /&gt;
            PRINT $Errmsg&lt;br /&gt;
            STOP&lt;br /&gt;
        END IF&lt;br /&gt;
PROMPT: %KEY = $READ(&#039;ENTER KEY&#039;)&lt;br /&gt;
        IF %KEY = &#039;END&#039; THEN&lt;br /&gt;
            JUMP TO EXIT&lt;br /&gt;
        END IF&lt;br /&gt;
        READ IMAGE EMP.REC FROM VSAMDS1 KEY EQ %KEY&lt;br /&gt;
        IF $STATUS EQ 1 THEN&lt;br /&gt;
            PRINT &#039;RECORD NOT FOUND&#039;&lt;br /&gt;
        ELSEIF $STATUS EQ 2 THEN&lt;br /&gt;
            PRINT $Errmsg&lt;br /&gt;
            JUMP TO EXIT&lt;br /&gt;
        ELSE&lt;br /&gt;
            PRINT &#039;CODE = &#039; WITH %EMP.REC:CODE&lt;br /&gt;
            PRINT &#039;JOB DESCRIPTION = &#039; WITH -&lt;br /&gt;
                 %EMP.REC:JOB.DESC&lt;br /&gt;
            PRINT &#039;NUMBER = &#039; WITH %EMP.REC:NUM&lt;br /&gt;
        END IF&lt;br /&gt;
        JUMP TO PROMPT&lt;br /&gt;
EXIT:   CLOSE DATASET VSAMDS1&lt;br /&gt;
END&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The preceding request could be rewritten in the manner shown in Example 2 to print information from ten successive records of the VSAM file. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Using a POSITION statement===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The starting position in this example is established in the file through the use of the POSITION statement and a user-specified key.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;BEGIN&lt;br /&gt;
        IMAGE EMP.REC&lt;br /&gt;
            CODE IS STRING LEN 8&lt;br /&gt;
            JOB.DESC IS STRING LEN 50&lt;br /&gt;
            NUM IS STRING LEN 7 DP *&lt;br /&gt;
        END IMAGE&lt;br /&gt;
        OPEN DATASET VSAMDS1 FOR INPUT                                             IF $STATUS NE 0 THEN&lt;br /&gt;
                 PRINT $Errmsg&lt;br /&gt;
                 STOP&lt;br /&gt;
            END IF&lt;br /&gt;
PROMPT: %KEY = $READ(&#039;ENTER KEY&#039;)&lt;br /&gt;
        IF %KEY = &#039;END&#039; THEN&lt;br /&gt;
            JUMP TO EXIT&lt;br /&gt;
        END IF&lt;br /&gt;
        POSITION VSAMDS1 AT KEY GE %KEY&lt;br /&gt;
        FOR %CT FROM 1 TO 10&lt;br /&gt;
            READ IMAGE EMP.REC FROM VSAMDS1&lt;br /&gt;
                IF $STATUS EQ 1 THEN&lt;br /&gt;
                    PRINT &#039;END OF FILE&#039;&lt;br /&gt;
                    JUMP TO PROMPT&lt;br /&gt;
                ELSEIF $STATUS EQ 2 THEN&lt;br /&gt;
                    PRINT $Errmsg&lt;br /&gt;
                    JUMP TO EXIT&lt;br /&gt;
                ELSE&lt;br /&gt;
                    PRINT &#039;CODE = &#039; WITH %EMP.REC:CODE&lt;br /&gt;
                    PRINT &#039;JOB DESCRIPTION = &#039; WITH -&lt;br /&gt;
                         %EMP.REC:JOB.DESC&lt;br /&gt;
                    PRINT &#039;NUMBER = &#039; WITH %EMP.REC:NUM&lt;br /&gt;
                END IF&lt;br /&gt;
        END FOR&lt;br /&gt;
        JUMP TO PROMPT&lt;br /&gt;
EXIT:   CLOSE DATASET VSAMDS1&lt;br /&gt;
        END&lt;br /&gt;
&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 request reads a sequential file that contains output from a previously issued PRINT ALL INFORMATION (PAI) statement. The foundset data is now in a data set. The request also handles non-PAI lines that might be found in the sequential file as separators; see the sample output that follows. The file being processed in this request contains PAI data for a CENSUS file.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;BEGIN&lt;br /&gt;
IMAGE PAI&lt;br /&gt;
    LINE IS STRING LEN 255&lt;br /&gt;
    FIELDNAME IS STRING AT LINE LEN UNKNOWN&lt;br /&gt;
    SKIP 3 POSITIONS&lt;br /&gt;
    VALUE IS STRING LEN UNKNOWN&lt;br /&gt;
END IMAGE&lt;br /&gt;
 &lt;br /&gt;
      OPEN DATASET OUTTAPE2 FOR INPUT&lt;br /&gt;
      IF $STATUS EQ 1 THEN&lt;br /&gt;
          JUMP TO DONE&lt;br /&gt;
      ELSEIF $STATUS EQ 2 THEN&lt;br /&gt;
          PRINT &#039;OPEN ERROR: &#039; WITH $Errmsg&lt;br /&gt;
          STOP&lt;br /&gt;
      END IF&lt;br /&gt;
READ: READ PAI FROM OUTTAPE2&lt;br /&gt;
      IF $STATUS EQ 1 THEN&lt;br /&gt;
          JUMP TO DONE&lt;br /&gt;
      ELSEIF $STATUS EQ 2 THEN&lt;br /&gt;
          PRINT &#039;READ ERROR: &#039; WITH $Errmsg&lt;br /&gt;
          STOP&lt;br /&gt;
      END IF&lt;br /&gt;
      %A = $INDEX(%PAI:LINE,&#039; = &#039;)-1&lt;br /&gt;
      IF %A GE 0 THEN&lt;br /&gt;
          %B = %PAI:READLEN-%A-3&lt;br /&gt;
          IDENTIFY %PAI:FIELDNAME LEN %A&lt;br /&gt;
          IDENTIFY %PAI:VALUE LEN %B&lt;br /&gt;
          PRINT &#039;FIELD=&#039;&#039;&#039; WITH %PAI:FIELDNAME WITH &#039;&#039;&#039;&#039; -&lt;br /&gt;
            WITH &#039;VALUE=&#039;&#039;&#039; AT 35 WITH %PAI:VALUE WITH &#039;&#039;&#039;&#039;&lt;br /&gt;
      ELSE&lt;br /&gt;
          PRINT %PAI:LINE&lt;br /&gt;
      END IF&lt;br /&gt;
      JUMP TO READ&lt;br /&gt;
DONE: PRINT &#039;END OF INPUT FILE&#039;&lt;br /&gt;
      END&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The preceding request generates output in the format illustrated below. (This is the recommended format for file reorganization, as discussed in [[File reorganization and table compaction]].)&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;*&lt;br /&gt;
FIELD=&#039;HOUSEHOLD ID&#039;        VALUE=&#039;53690&#039;&lt;br /&gt;
FIELD=&#039;AGE&#039;                 VALUE=&#039;21&#039;&lt;br /&gt;
FIELD=&#039;OCCUPATION&#039;          VALUE=&#039;CLERK&#039;&lt;br /&gt;
FIELD=&#039;SEX&#039;                 VALUE=&#039;FEMALE&#039;&lt;br /&gt;
FIELD=&#039;PLACE SIZE&#039;          VALUE=&#039;50000&#039;&lt;br /&gt;
FIELD=&#039;RELATION&#039;            VALUE=&#039;UNRELATED&#039;&lt;br /&gt;
FIELD=&#039;FATHERS BIRTHPLACE&#039;  VALUE=&#039;UNITED STATES&#039;&lt;br /&gt;
FIELD=&#039;MOTHERS BIRTHPLACE&#039;  VALUE=&#039;UNITED STATES&#039;&lt;br /&gt;
FIELD=&#039;BIRTHPLACE&#039;          VALUE=&#039;NORTH CENTRAL REGION&#039;&lt;br /&gt;
FIELD=&#039;MOTHER TONGUE&#039;       VALUE=&#039;ENGLISH&#039;&lt;br /&gt;
FIELD=&#039;SCHOOL&#039;              VALUE=&#039;4 YEARS HIGH SCHOOL&#039;&lt;br /&gt;
FIELD=&#039;ROOMS&#039;               VALUE=&#039;GROUP QUARTERS&#039;&lt;br /&gt;
FIELD=&#039;FAMILY SIZE&#039;         VALUE=&#039;NOT IN A FAMILY&#039;&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;*&lt;br /&gt;
FIELD=&#039;HOUSEHOLD ID&#039;        VALUE=&#039;42860&#039;&lt;br /&gt;
FIELD=&#039;AGE&#039;                 VALUE=&#039;36&#039;&lt;br /&gt;
FIELD=&#039;OCCUPATION&#039;          VALUE=&#039;SALESMAN&#039;&lt;br /&gt;
FIELD=&#039;SEX&#039;                 VALUE=&#039;MALE&#039;&lt;br /&gt;
FIELD=&#039;PLACE SIZE&#039;          VALUE=&#039;50000&#039;&lt;br /&gt;
FIELD=&#039;RELATION&#039;            VALUE=&#039;HEAD&#039;&lt;br /&gt;
FIELD=&#039;FATHERS BIRTHPLACE&#039;  VALUE=&#039;UNITED STATES&#039;&lt;br /&gt;
FIELD=&#039;MOTHERS BIRTHPLACE&#039;  VALUE=&#039;UNITED STATES&#039;&lt;br /&gt;
FIELD=&#039;BIRTHPLACE&#039;          VALUE=&#039;SOUTHERN REGION&#039;&lt;br /&gt;
FIELD=&#039;MOTHER TONGUE&#039;       VALUE=&#039;ENGLISH&#039;&lt;br /&gt;
FIELD=&#039;SCHOOL&#039;              VALUE=&#039;1-3 YEARS COLLEGE&#039;&lt;br /&gt;
FIELD=&#039;ROOMS&#039;               VALUE=&#039;4&#039;&lt;br /&gt;
FIELD=&#039;FAMILY SIZE&#039;         VALUE=&#039;4&#039;&lt;br /&gt;
END OF INPUT FILE&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>Mlarocca</name></author>
	</entry>
	<entry>
		<id>https://m204wiki.rocketsoftware.com/index.php?title=$ERRCLR&amp;diff=71010</id>
		<title>$ERRCLR</title>
		<link rel="alternate" type="text/html" href="https://m204wiki.rocketsoftware.com/index.php?title=$ERRCLR&amp;diff=71010"/>
		<updated>2014-08-01T13:52:24Z</updated>

		<summary type="html">&lt;p&gt;Mlarocca: Mlarocca moved page $ERRCLR to $ErrClr: Lower case change&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[$ErrClr]]&lt;/div&gt;</summary>
		<author><name>Mlarocca</name></author>
	</entry>
	<entry>
		<id>https://m204wiki.rocketsoftware.com/index.php?title=$ErrClr&amp;diff=71009</id>
		<title>$ErrClr</title>
		<link rel="alternate" type="text/html" href="https://m204wiki.rocketsoftware.com/index.php?title=$ErrClr&amp;diff=71009"/>
		<updated>2014-08-01T13:52:24Z</updated>

		<summary type="html">&lt;p&gt;Mlarocca: Mlarocca moved page $ERRCLR to $ErrClr: Lower case change&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;p&amp;gt;The $ERRCLR function clears the error message text returned by the $ERRMSG and $FSTERR functions. The $ERRCLR function takes no argument.&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 class=&amp;quot;code&amp;quot;&amp;gt;%DUMMY=$ERRCLR&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
[[Category:SOUL $functions]]&lt;/div&gt;</summary>
		<author><name>Mlarocca</name></author>
	</entry>
	<entry>
		<id>https://m204wiki.rocketsoftware.com/index.php?title=ERRLEN_parameter&amp;diff=71008</id>
		<title>ERRLEN parameter</title>
		<link rel="alternate" type="text/html" href="https://m204wiki.rocketsoftware.com/index.php?title=ERRLEN_parameter&amp;diff=71008"/>
		<updated>2014-08-01T13:50:19Z</updated>

		<summary type="html">&lt;p&gt;Mlarocca: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:ERRLEN parameter subtitle}}&lt;br /&gt;
==Summary==&lt;br /&gt;
&amp;lt;dl&amp;gt;&lt;br /&gt;
&amp;lt;dt&amp;gt;Default value&lt;br /&gt;
&amp;lt;dd&amp;gt;80&lt;br /&gt;
&amp;lt;dt&amp;gt;Parameter type&lt;br /&gt;
&amp;lt;dd&amp;gt;System&lt;br /&gt;
&amp;lt;dt&amp;gt;Where set&lt;br /&gt;
&amp;lt;dd&amp;gt;On User 0&#039;s parameter line and viewable only during system initialization&lt;br /&gt;
&amp;lt;dt&amp;gt;Related products&lt;br /&gt;
&amp;lt;dd&amp;gt;All&lt;br /&gt;
&amp;lt;dt&amp;gt;Introduced&lt;br /&gt;
&amp;lt;dd&amp;gt;&amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model 204 V6.1&amp;lt;/var&amp;gt; or earlier&lt;br /&gt;
&amp;lt;/dl&amp;gt;&lt;br /&gt;
==Description==&lt;br /&gt;
&amp;lt;p&amp;gt;The length of serious error messages saved for the VIEW ERRORS command&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;ERRLEN specifies the number of characters saved from the original messages. Each message is saved with an 18-character prefix, which is not included in ERRLEN.&amp;lt;/p&amp;gt;&lt;br /&gt;
==See also==&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The [[ERRMSGL parameter]], which determines the length of errors returned by &amp;lt;var&amp;gt;[[$Errmsg]]&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;[[$Fsterr]]&amp;lt;/var&amp;gt;.&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
[[Category:System parameters]]&lt;br /&gt;
[[Category:Parameters]]&lt;/div&gt;</summary>
		<author><name>Mlarocca</name></author>
	</entry>
	<entry>
		<id>https://m204wiki.rocketsoftware.com/index.php?title=Data_maintenance&amp;diff=71007</id>
		<title>Data maintenance</title>
		<link rel="alternate" type="text/html" href="https://m204wiki.rocketsoftware.com/index.php?title=Data_maintenance&amp;diff=71007"/>
		<updated>2014-08-01T13:47:46Z</updated>

		<summary type="html">&lt;p&gt;Mlarocca: &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;
&amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; data are maintained and updated with a variety of [[SOUL]] statements. This topic describes data maintenance statements and special conditions regarding their usage. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Data maintenance statements===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Use the following statements to perform basic data maintenance (record and field additions and updates):&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;Statement &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;&amp;lt;var&amp;gt;ADD&amp;lt;/var&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Place a new field-value pair on a record.&amp;lt;/td&amp;gt;&lt;br /&gt;
&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;CHANGE&amp;lt;/var&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Alter the value of fields in a record.&amp;lt;/td&amp;gt;&lt;br /&gt;
&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&amp;lt;/var&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Remove fields from a record.&amp;lt;/td&amp;gt;&lt;br /&gt;
&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 RECORD&amp;lt;/var&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Remove a record from a &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; file; this statement reclaims space occupied by the deleted record.&amp;lt;/td&amp;gt;&lt;br /&gt;
&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 RECORDS&amp;lt;/var&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Remove sets of records from a &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; file; this statement executes faster than the DELETE RECORD statement but does not reclaim the space occupied by the deleted records.&amp;lt;/td&amp;gt;&lt;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;&amp;lt;var&amp;gt;FILE RECORDS UNDER&amp;lt;/var&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Save retrieved or collected sets of record numbers for reference in later requests. &amp;lt;/td&amp;gt;&lt;br /&gt;
&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;STORE RECORD&amp;lt;/var&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Put a new record into 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;/td&amp;gt;&lt;br /&gt;
&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;UPDATE RECORD &amp;lt;/var&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Perform a series of field-level updates in a single call. This statement is intended for use with &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Parallel Query Option/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;
&lt;br /&gt;
====Example data====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Each statement is discussed separately in the sections that follow. To illustrate their usage, assume that the following two records have been stored:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;VIN = A99999998E           VIN = X99999999Z&lt;br /&gt;
MAKE = FORD                MAKE = FORD&lt;br /&gt;
COLOR = GREEN              COLOR = RED&lt;br /&gt;
YEAR = 88                  YEAR = 04&lt;br /&gt;
MODEL = FOCUS              MODEL = MUSTANG&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Using For Each Record loops===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The SOUL data maintenance statements handle one record at a time, therefore the data maintenance statements are always part of a &amp;lt;var&amp;gt;For Each Record&amp;lt;/var&amp;gt; loop. The data maintenance may involve a field-value pair for the field.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
==ADD statement==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The &amp;lt;var&amp;gt;ADD&amp;lt;/var&amp;gt; statement adds a new occurrence of a field and/or value to a record.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Syntax====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The basic format of the ADD statement is:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;ADD &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;fieldname&amp;lt;/span&amp;gt; = {&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;value&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;expression&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;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;fieldname&amp;lt;/span&amp;gt; identifies the field in a record.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;value&amp;lt;/span&amp;gt; specifies the value you want to store.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;(&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;expression&amp;lt;/span&amp;gt;) can be used in place of value to specify the resolved value at the time of evaluation. (&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;expression&amp;lt;/span&amp;gt;) can be a function call, string concatenation, arithmetic operation, User Language construct, or Boolean expression. The expression must be enclosed in parentheses to invoke the expression compiler; otherwise the value will be treated as a literal string.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&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; For Large Object data in &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; V7.5 and later, a file must be defined with the &amp;lt;var&amp;gt;[[FILEORG parameter|FILEORG]]&amp;lt;/var&amp;gt; X&#039;100&#039; bit in order to use the above syntax.  With LOB fields, the assigned value is typically held in a &amp;lt;var&amp;gt;[[Longstrings|Longstring]]&amp;lt;/var&amp;gt; variable. [[Large Object field processing for non-FILEORG X&#039;100&#039; files|In non-FILEORG X&#039;100&#039; files, a special syntax must be used to ADD a LOB field.]]&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Example====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Referring to the two sample stored records (see [[#Data used in examples in this topic|Data used in examples in this topic]]), this request:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;BEGIN&lt;br /&gt;
FIND.RECS: FIND ALL RECORDS FOR WHICH&lt;br /&gt;
              MAKE = FORD&lt;br /&gt;
              BODY IS NOT PRESENT&lt;br /&gt;
           END FIND&lt;br /&gt;
           FOR EACH RECORD IN FIND.RECS&lt;br /&gt;
              ADD BODY = 2DR&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;
would change the records to:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;VIN = A99999998E         VIN = X99999999Z&lt;br /&gt;
MAKE = FORD              MAKE = FORD&lt;br /&gt;
COLOR = GREEN            COLOR = RED&lt;br /&gt;
BODY = 2DR               BODY = 2DR&lt;br /&gt;
YEAR = 98                YEAR = 04&lt;br /&gt;
MODEL = FOCUS            MODEL = MUSTANG&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Usage====&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The &amp;lt;var&amp;gt;ADD&amp;lt;/var&amp;gt; statement places an additional occurrence of a field-value pair on the record.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;You can use the &amp;lt;var&amp;gt;ADD&amp;lt;/var&amp;gt; statement to add any field to a record except for a sort or hash key field. You can use this statement only within a &amp;lt;var&amp;gt;FOR EACH RECORD&amp;lt;/var&amp;gt; loop.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;The &amp;lt;var&amp;gt;ADD&amp;lt;/var&amp;gt; statement is supported in remote file and scattered group contexts.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;To use the &amp;lt;var&amp;gt;ADD&amp;lt;/var&amp;gt; statement with multiply occurring fields, see the [[Operations on multiply occurring fields#ADD statement|ADD statement for multiply occurring fields]]. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;To add a field whose value you do not explicitly specify, see [[#Using VALUE IN to reference a NOTE value|Using VALUE IN to reference a NOTE value]], below. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;For Large Object data in non-[[FILEORG parameter|FILEORG X&#039;100&#039;]] files, a compiler error is issued for &amp;lt;var&amp;gt;ADD&amp;lt;/var&amp;gt; (and &amp;lt;var&amp;gt;STORE&amp;lt;/var&amp;gt;) statements if the context to the right of the equal sign (&amp;lt;tt&amp;gt;=&amp;lt;/tt&amp;gt;) is not a &amp;lt;var&amp;gt;BUFFER&amp;lt;/var&amp;gt; reference:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;M204.0037: INVALID SYNTAX&lt;br /&gt;
&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==CHANGE statement==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The &amp;lt;var&amp;gt;CHANGE&amp;lt;/var&amp;gt; statement alters a record by adding a field and value pair, or altering the value of an existing field within a record. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Syntax====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The basic format of the &amp;lt;var&amp;gt;CHANGE&amp;lt;/var&amp;gt; statement is: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;CHANGE &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;fieldname&amp;lt;/span&amp;gt; [&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;= &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;value&amp;lt;/span&amp;gt; |(&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;expression&amp;lt;/span&amp;gt;)] TO (&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;newvalue&amp;lt;/span&amp;gt; |(&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;expression&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;/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;term&amp;quot;&amp;gt;fieldname&amp;lt;/var&amp;gt; specifies the name of the field to add to the record, or identify the field where the value is changed.&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;value&amp;lt;/var&amp;gt; is required only if the field has the INVISIBLE attribute. See the discussion on the [[Field attributes#INVISIBLE attribute|INVISIBLE attribute]].     &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;newvalue&amp;lt;/var&amp;gt; specifies the value that overwrites the existing value for the field.&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;expression&amp;lt;/var&amp;gt;) is resolved by the expression compiler and overwrites the existing value for the field. (&amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;expression&amp;lt;/var&amp;gt;) can be a function call, string concatenation, arithmetic operation, User Language construct, or Boolean expression. The expression must be enclosed in parentheses to invoke the expression compiler; otherwise the value will be treated as a literal string. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&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; For Large Object data in &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; V7.5 and later, a file must be defined with the &amp;lt;var&amp;gt;[[FILEORG parameter|FILEORG]]&amp;lt;/var&amp;gt; X&#039;100&#039; bit in order to use the above syntax.  With LOB fields, the assigned value is typically held in a &amp;lt;var&amp;gt;[[Longstrings|Longstring]]&amp;lt;/var&amp;gt; variable. In non-FILEORG X&#039;100&#039; files, [[Large Object field processing for non-FILEORG X&#039;100&#039; files|a special syntax must be used to CHANGE a LOB field.]]&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Usage====&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;You can use the &amp;lt;var&amp;gt;CHANGE&amp;lt;/var&amp;gt; statement to change any field in a record except for a sort or hash key field. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;You can use this statement only within a &amp;lt;var&amp;gt;FOR EACH RECORD&amp;lt;/var&amp;gt; loop. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;The &amp;lt;var&amp;gt;CHANGE&amp;lt;/var&amp;gt; statement is supported in remote file and scattered group contexts.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;If a &amp;lt;var&amp;gt;CHANGE&amp;lt;/var&amp;gt; statement is applied to a record that does not contain the field to be changed, the specified field name and value are added to the record. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;To use the &amp;lt;var&amp;gt;CHANGE&amp;lt;/var&amp;gt; statement with multiply occurring fields, see the [[Operations on multiply occurring fields#CHANGE statement|CHANGE statement for multiply occurring fields]]. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;To change a field whose value you do not explicitly specify, see [[#Using VALUE IN to reference a NOTE value|Using VALUE IN to reference a NOTE value]], below. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==DELETE statement==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The &amp;lt;var&amp;gt;DELETE&amp;lt;/var&amp;gt; statement removes fields from a record. &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;DELETE&amp;lt;/var&amp;gt; statement is:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;DELETE &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;fieldname&amp;lt;/span&amp;gt; [&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;= &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;value&amp;lt;/span&amp;gt; | (&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;expression&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;/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;term&amp;quot;&amp;gt;fieldname&amp;lt;/var&amp;gt; specifies the name of the field to remove from the record.&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;value&amp;lt;/var&amp;gt; is required only if the field has the &amp;lt;var&amp;gt;INVISIBLE&amp;lt;/var&amp;gt; attribute. (See the discussion in [[Field attributes]].)   &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;expression&amp;lt;/var&amp;gt;) can be used in place of value to specify the resolved value at the time of evaluation. (&amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;expression&amp;lt;/var&amp;gt;) can be a function call, string concatenation, arithmetic operation, SOUL construct, or Boolean expression. The expression must be enclosed in parentheses to invoke the expression compiler; otherwise the value will be treated as a literal string.&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;
This request directs &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; to remove the field &amp;lt;code&amp;gt;BODY&amp;lt;/code&amp;gt; from the records retrieved by the &amp;lt;code&amp;gt;FIND.RECS&amp;lt;/code&amp;gt; statement:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;BEGIN&lt;br /&gt;
FIND.RECS: FIND ALL RECORDS FOR WHICH&lt;br /&gt;
              VIN = A99999998E OR X99999999Z&lt;br /&gt;
           END FIND&lt;br /&gt;
           FOR EACH RECORD IN FIND.RECS&lt;br /&gt;
              DELETE BODY&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 records then appear as:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;output&amp;quot;&amp;gt;VIN = A99999998E          VIN = X99999999Z&lt;br /&gt;
MAKE = FORD               MAKE = FORD&lt;br /&gt;
COLOR = BLUE              COLOR = BLUE&lt;br /&gt;
YEAR = 98                 YEAR = 04&lt;br /&gt;
MODEL = FOCUS             MODEL = MUSTANG&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Usage====&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;You can use the &amp;lt;var&amp;gt;DELETE &amp;lt;i&amp;gt;fieldname&amp;lt;/i&amp;gt;&amp;lt;/var&amp;gt; statement on any field in a record except for a sort or hash key field. This statement can be used only within a &amp;lt;var&amp;gt;FOR EACH RECORD&amp;lt;/var&amp;gt; loop. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;If the &amp;lt;var&amp;gt;DELETE &amp;lt;i&amp;gt;fieldname&amp;lt;/i&amp;gt;&amp;lt;/var&amp;gt; statement is applied to a record that does not contain the field to be deleted, no action is taken on that record.  &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;The &amp;lt;var&amp;gt;DELETE &amp;lt;i&amp;gt;fieldname&amp;lt;/i&amp;gt;&amp;lt;/var&amp;gt; statement is supported in remote file and scattered group contexts.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;The &amp;lt;var&amp;gt;DELETE &amp;lt;i&amp;gt;fieldname&amp;lt;/i&amp;gt;&amp;lt;/var&amp;gt; statement supports Large Object data. Processing this statement frees the Table B and Table E data.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;To use with multiply occurring fields, see [[Operations on multiply occurring fields#DELETE statement|Deleting multiply occurring fields]]. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;To use with field groups, see [[Operations on multiply occurring fields#Deleting a field group|Deleting a field group]]. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;For information about space recovered from deletions and about attempting to delete missing records, see [[#Deleting fields and records|Deleting fields and records]], below.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==DELETE RECORD statement==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The &amp;lt;var&amp;gt;DELETE RECORD&amp;lt;/var&amp;gt; statement removes a record or sets of records from 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;/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;DELETE RECORD&amp;lt;/var&amp;gt; statement is:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;DELETE RECORD&lt;br /&gt;
&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 deletes all records found by the &amp;lt;var&amp;gt;FIND&amp;lt;/var&amp;gt; statement: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;BEGIN&lt;br /&gt;
FIND.RECS: FIND ALL RECORDS FOR WHICH&lt;br /&gt;
              MAKE = FORD&lt;br /&gt;
              YEAR = 96&lt;br /&gt;
           END FIND&lt;br /&gt;
           FOR EACH RECORD IN FIND.RECS&lt;br /&gt;
              DELETE RECORD&lt;br /&gt;
           END FOR&lt;br /&gt;
END&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Usage===&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;When you delete records with the &amp;lt;var&amp;gt;DELETE RECORD&amp;lt;/var&amp;gt; statement, the space those records occupy may be reclaimed depending on the file order. For more information on reclaiming space, refer to [[#Reused space|Reused space]]. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;You can use this statement only inside a &amp;lt;var&amp;gt;FOR EACH RECORD&amp;lt;/var&amp;gt; loop.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;The &amp;lt;var&amp;gt;DELETE RECORD&amp;lt;/var&amp;gt; statement is supported in remote file and scattered group contexts. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;For information about space recovered from deletions and about attempting to delete missing records, see [[#Deleting fields and records|Deleting fields and records]], below.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Limitation of the date-time stamp feature deleting records====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The [[Adding a date-time stamp field#Overview of the date-time stamp feature|date-time stamp feature]] does not include support for &amp;lt;var&amp;gt;DELETE RECORD&amp;lt;/var&amp;gt; or &amp;lt;var&amp;gt;DELETE RECORDS&amp;lt;/var&amp;gt; processing. &amp;lt;var&amp;gt;DELETE RECORD&amp;lt;/var&amp;gt; or &amp;lt;var&amp;gt;DELETE RECORDS&amp;lt;/var&amp;gt; processing must be handled by your application software.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
As well, you can use logical delete techniques. However, in all forms of deleting records, it is your responsibility to maintain a log of record deletions, if you want one.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==DELETE ALL RECORDS statement==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The &amp;lt;var&amp;gt;DELETE ALL RECORDS&amp;lt;/var&amp;gt; statement deletes sets of records from 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;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Syntax===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The forms of this statement are:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;DELETE [ALL] RECORDS IN &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;label&amp;lt;/span&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
DELETE [ALL] RECORDS ON [LIST] &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;listname&amp;lt;/span&amp;gt;&lt;br /&gt;
&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;DELETE ALL RECORDS IN&amp;lt;/var&amp;gt; deletes a set of records located by a &amp;lt;var&amp;gt;FIND&amp;lt;/var&amp;gt; statement. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;DELETE ALL RECORDS ON LIST&amp;lt;/var&amp;gt; deletes the set of records on the named list from the file. &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;
This request deletes the set of records located by the &amp;lt;var&amp;gt;FIND&amp;lt;/var&amp;gt; statement:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;BEGIN&lt;br /&gt;
FIND.RECS: FIND ALL RECORDS FOR WHICH&lt;br /&gt;
              MAKE = FORD&lt;br /&gt;
              YEAR = 00&lt;br /&gt;
           END FIND&lt;br /&gt;
           DELETE ALL RECORDS IN FIND.RECS&lt;br /&gt;
END&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Usage===&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The &amp;lt;var&amp;gt;DELETE ALL RECORDS&amp;lt;/var&amp;gt; statement initiates fewer internal operations and therefore executes faster than the &amp;lt;var&amp;gt;DELETE RECORD&amp;lt;/var&amp;gt; statement. However, use the &amp;lt;var&amp;gt;DELETE RECORD&amp;lt;/var&amp;gt; statement rather than &amp;lt;var&amp;gt;DELETE ALL RECORDS&amp;lt;/var&amp;gt; for records with &amp;lt;var&amp;gt;ORDERED&amp;lt;/var&amp;gt; or &amp;lt;var&amp;gt;UNIQUE&amp;lt;/var&amp;gt; fields, to ensure that values in the Ordered Index accurately reflect the contents of the data stored in Table B.&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
In addition, when records are deleted with &amp;lt;var&amp;gt;DELETE ALL RECORDS IN&amp;lt;/var&amp;gt;, the space they occupy is not reclaimed. When it is desirable to reclaim space to expand existing records or to insert new records, use the &amp;lt;var&amp;gt;DELETE RECORD&amp;lt;/var&amp;gt; statement. &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;DELETE ALL RECORDS&amp;lt;/var&amp;gt; statement is supported in remote file and scattered group contexts.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;For information about space recovered from deletions and about attempting to delete missing records, see [[#Deleting fields and records|Deleting fields and records]], below.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Deleting fields and records==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
This section expands on the detail of use for the &amp;lt;var&amp;gt;DELETE&amp;lt;/var&amp;gt; statements. Some general issues related to deleting fields and records are presented.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Reused space===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Space recovered from both record and field deletions is always used to expand existing records that are near the deletions, regardless of which file option is selected.&lt;br /&gt;
&amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; inserts new records in space recovered from deleted records only on unordered or hash files, or on sort files for which the &amp;lt;var&amp;gt;Reuse Record Number&amp;lt;/var&amp;gt; option of the &amp;lt;var&amp;gt;[[FILEORG parameter|FILEORG]]&amp;lt;/var&amp;gt; parameter is set active.    &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If the &amp;lt;var&amp;gt;Reuse Record Number&amp;lt;/var&amp;gt; option is active for an unordered, hash, or sort file, you must explicitly delete any &amp;lt;var&amp;gt;INVISIBLE&amp;lt;/var&amp;gt; fields associated with a record in the file when deleting the record itself. If an &amp;lt;var&amp;gt;INVISIBLE&amp;lt;/var&amp;gt; field is not deleted, it becomes part of any new record that is put into the old record&#039;s space. &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Deleting from a record list===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Error messages might be generated when a &amp;lt;var&amp;gt;FOR EACH RECORD&amp;lt;/var&amp;gt; loop is performed on a list of records from which some of the records have been deleted from the file. For example:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;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;* FIND ALL STATE CONTROL RECORDS&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;*&lt;br /&gt;
STATES:     FIND ALL RECORDS FOR WHICH&lt;br /&gt;
               REC = STATE&lt;br /&gt;
            END FIND&lt;br /&gt;
            PLACE RECORDS IN STATES ON LIST FOUND&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;* EXCLUDE MASS. AND N.H. BECAUSE&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;* THEIR SURCHARGE RATE HAS NOT CHANGED&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;*&lt;br /&gt;
REMOVE:     FIND ALL RECORDS ON LIST FOUND FOR WHICH&lt;br /&gt;
               STATE CODE = MA OR NH&lt;br /&gt;
            END FIND&lt;br /&gt;
 &lt;br /&gt;
FOR EACH RECORD IN REMOVE&lt;br /&gt;
               DELETE RECORD&lt;br /&gt;
            END FOR&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;* CHANGE SURCHARGE RATE FOR ALL OTHER STATES&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;*&lt;br /&gt;
SURCHARGE:  FOR EACH RECORD ON LIST FOUND&lt;br /&gt;
               CHANGE SURCHARGE RATE TO .50&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;
This request would produce these messages:&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;*** M204.1266: NONEXISTENT RECORD REFERENCED - 23 IN FILE INSURE&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;*** M204.1266: NONEXISTENT RECORD REFERENCED - 24 IN FILE INSURE&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Depending upon the intent of the request, these messages may or may not indicate an error. &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==FILE RECORDS statement==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The &amp;lt;var&amp;gt;FILE RECORDS&amp;lt;/var&amp;gt; statement files a set of records that were retrieved by a &amp;lt;var&amp;gt;FIND&amp;lt;/var&amp;gt; statement or that were collected on a list. You can reference the set of records in later requests.         &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Syntax===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The forms of this statement are:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;FILE RECORDS IN &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;label&amp;lt;/span&amp;gt; UNDER &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;fieldname&amp;lt;/span&amp;gt; = &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;value&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
FILE RECORDS IN &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;label&amp;lt;/span&amp;gt; UNDER &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;fieldname&amp;lt;/span&amp;gt; = (&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;expression&amp;lt;/span&amp;gt;) &lt;br /&gt;
&lt;br /&gt;
FILE RECORDS ON [LIST] &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;listname&amp;lt;/span&amp;gt; UNDER &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;fieldname&amp;lt;/span&amp;gt; = &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;value&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Usage===&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The &amp;lt;var&amp;gt;FILE RECORDS&amp;lt;/var&amp;gt; statement adds one of these pairs to the specified records:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;i&amp;gt;fieldname&amp;lt;/i&amp;gt; = &amp;lt;i&amp;gt;value&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;i&amp;gt;fieldname&amp;lt;/i&amp;gt; = (&amp;lt;i&amp;gt;expression&amp;lt;/i&amp;gt;)&lt;br /&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;FILE RECORDS&amp;lt;/var&amp;gt; statement is supported in remote file and scattered group contexts.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;The field used in a &amp;lt;var&amp;gt;FILE RECORDS&amp;lt;/var&amp;gt; statement must have the &amp;lt;var&amp;gt;INVISIBLE KEY&amp;lt;/var&amp;gt; or &amp;lt;var&amp;gt;INVISIBLE ORDERED&amp;lt;/var&amp;gt; field attributes. Refer to [[Field attributes]] for more information. &lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
In addition, the &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;fieldname&amp;lt;/var&amp;gt; = &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;value&amp;lt;/var&amp;gt; pair should be unique in the file. If the pair has appeared previously in other records, either by explicit field creation or by a previous &amp;lt;var&amp;gt;FILE RECORDS&amp;lt;/var&amp;gt; statement, inconsistencies in the file can occur. The &amp;lt;var&amp;gt;FILE RECORDS&amp;lt;/var&amp;gt; statement creates new index entries for the&lt;br /&gt;
&amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;fieldname&amp;lt;/var&amp;gt; = &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;value&amp;lt;/var&amp;gt; pair, eliminating existing references.&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 index update generated by a &amp;lt;var&amp;gt;FILE RECORDS UNDER&amp;lt;/var&amp;gt; statement is never deferred.&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 class=&amp;quot;term&amp;quot;&amp;gt;expression&amp;lt;/var&amp;gt; in the syntax above is enclosed in parentheses and is one of following expression types: function call, string concatenation, arithmetic operation, SOUL construct, or Boolean expression.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Example of using an expression====&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;B&lt;br /&gt;
%REC IS STRING LEN 3&lt;br /&gt;
%CT IS FLOAT&lt;br /&gt;
%VAL1 IS FLOAT&lt;br /&gt;
%VAL2 IS FLOAT&lt;br /&gt;
%REC = &#039;REC&#039;&lt;br /&gt;
FOR %CT FROM 1 TO 10&lt;br /&gt;
  IN EXPRESS STORE RECORD&lt;br /&gt;
    ORD1 = (%REC WITH %CT)&lt;br /&gt;
    ORD2 = (%CT * 2)&lt;br /&gt;
    ORD4 = (%CT * 4)&lt;br /&gt;
  END STORE&lt;br /&gt;
  COMMIT&lt;br /&gt;
FD1:&lt;br /&gt;
  IN EXPRESS FD ORD1 EQ VALUE(%REC WITH %CT)&lt;br /&gt;
             END FIND&lt;br /&gt;
  FR FD1&lt;br /&gt;
    CHANGE ORD2 TO (%CT * 2.1)&lt;br /&gt;
    ADD ORD3 = (%CT * 3)&lt;br /&gt;
    CHANGE ORD4 = (%CT * 4 ) TO (%CT * 4.1)&lt;br /&gt;
    DELETE ORD3 = (%CT * 3)&lt;br /&gt;
    INSERT ORD4 = (%CT * 5)&lt;br /&gt;
  END FOR&lt;br /&gt;
  FILE RECORDS IN FD1 UNDER INVORD5 = (%REC WITH %CT)&lt;br /&gt;
END FOR&lt;br /&gt;
PRINT &#039;FRV1&#039;&lt;br /&gt;
FRV1:&lt;br /&gt;
IN EXPRESS FRV INVORD5&lt;br /&gt;
FD2:&lt;br /&gt;
  IN EXPRESS FD INVORD5 = VALUE IN FRV1&lt;br /&gt;
             END FIND&lt;br /&gt;
CT2:&lt;br /&gt;
  CT FD2&lt;br /&gt;
  PRINT VALUE IN FRV1 AND COUNT IN CT2&lt;br /&gt;
END FOR&lt;br /&gt;
END&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Locating filed record sets====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
&amp;lt;var&amp;gt;FIND&amp;lt;/var&amp;gt; statements in later requests can locate the filed set of records by using the &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;fieldname&amp;lt;/var&amp;gt; = &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;value&amp;lt;/var&amp;gt; pair as the retrieval condition. For example, if a set of records were filed with the statement:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;SAVE.RECS: FILE RECORDS IN FIND.RECS UNDER SAVE = 1&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Then to locate the records again, you use the following statement in the same request or in a later one:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;GET.RECS: FIND ALL RECORDS FOR WHICH SAVE = 1&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Using lists for filed record sets====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Two sets of records retrieved by different &amp;lt;var&amp;gt;FIND&amp;lt;/var&amp;gt; statements can be filed together under the same &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;fieldname&amp;lt;/var&amp;gt; = &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;value&amp;lt;/var&amp;gt; pair only if both sets are first placed on a list, and then the list is filed by one statement, as in the following: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;BEGIN&lt;br /&gt;
FIND.RECS:  FIND ALL RECORDS FOR WHICH&lt;br /&gt;
               STATE = VIRGINIA&lt;br /&gt;
               AGENT = DOYLE&lt;br /&gt;
            END FIND&lt;br /&gt;
SAVE.DOYLE: PLACE RECORDS IN FIND.RECS ON LIST COMPLIST&lt;br /&gt;
FIND.T3S:   FIND ALL RECORDS FOR WHICH&lt;br /&gt;
               STATE = VIRGINIA&lt;br /&gt;
               INCIDENT = T3&lt;br /&gt;
            END FIND&lt;br /&gt;
            PLACE RECORDS IN FIND.T3S ON LIST COMPLIST&lt;br /&gt;
SAVE.LIST:  FILE RECORDS ON LIST COMPLIST UNDER SAVE = T3S&lt;br /&gt;
END&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If the &amp;lt;code&amp;gt;SAVE.DOYLE&amp;lt;/code&amp;gt; statement were replaced with:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;SAVE.DOYLE: FILE RECORDS IN FIND.RECS UNDER SAVE = T3S&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
the original references to &amp;lt;code&amp;gt;SAVE = T3S&amp;lt;/code&amp;gt; would be lost as soon as the &amp;lt;code&amp;gt;SAVE.LIST&amp;lt;/code&amp;gt; was executed. Thus, a second use of the same &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;fieldname&amp;lt;/var&amp;gt; = &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;value&amp;lt;/var&amp;gt; pair replaces the previous one.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Simulating the FILE RECORDS UNDER statement====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can simulate the &amp;lt;var&amp;gt;FILE RECORDS&amp;lt;/var&amp;gt; statement by explicitly adding a &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;fieldname&amp;lt;/var&amp;gt; = &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;value&amp;lt;/var&amp;gt; pair to a set of records. For example, if the &amp;lt;code&amp;gt;SAVE.LIST&amp;lt;/code&amp;gt; statement in the previous example is replaced by:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;SAVE.LIST: FOR EACH RECORD ON LIST COMPLIST&lt;br /&gt;
              ADD SAVE = T3S&lt;br /&gt;
           END FOR&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Then the index references to existing records that contain that &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;fieldname&amp;lt;/var&amp;gt; = &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;value&amp;lt;/var&amp;gt; pair are not invalidated. You are responsible for deleting such references, if deletion is desired. &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==STORE RECORD statement==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The &amp;lt;var&amp;gt;STORE RECORD&amp;lt;/var&amp;gt; statement is used to add new records to a &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; file. The &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;fieldname&amp;lt;/var&amp;gt;=&amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;value&amp;lt;/var&amp;gt; pairs that constitute the new record must follow the &amp;lt;var&amp;gt;STORE RECORD&amp;lt;/var&amp;gt; statement, one to a line, and must not be labeled. &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;STORE RECORD&amp;lt;/var&amp;gt; statement is: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;STORE RECORD&lt;br /&gt;
   &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;fieldname&amp;lt;/span&amp;gt; =[&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;value1&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;expression1&amp;lt;/span&amp;gt;)]&lt;br /&gt;
  [&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;fieldname2&amp;lt;/span&amp;gt;=[&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;value2&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;expression2&amp;lt;/span&amp;gt;)]]&lt;br /&gt;
       ...&lt;br /&gt;
[THEN CONTINUE&lt;br /&gt;
   &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;statement&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;statement&amp;lt;/span&amp;gt;&lt;br /&gt;
       ...]&lt;br /&gt;
END STORE [&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;label&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;/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;term&amp;quot;&amp;gt;expression&amp;lt;/var&amp;gt;) can be a function call, string concatenation, arithmetic operation, SOUL construct, or Boolean expression. The expression must be enclosed in parentheses to invoke the expression compiler; otherwise the value will be treated as a literal string.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;THEN CONTINUE&amp;lt;/var&amp;gt; maintains the record context of the &amp;lt;var&amp;gt;STORE RECORD&amp;lt;/var&amp;gt; statement, while allowing additional work to happen on the record.  &amp;lt;var&amp;gt;THEN CONTINUE&amp;lt;/var&amp;gt; is useful for adding variable numbers of multiply occurring fields, and it is &amp;lt;em&amp;gt;required syntax&amp;lt;/em&amp;gt; for adding fieldgroups inside a &amp;lt;var&amp;gt;STORE&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===&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;BEGIN&lt;br /&gt;
STORE RECORD&lt;br /&gt;
   NAME = JEAN ANDERSON&lt;br /&gt;
   SALARY = 30000&lt;br /&gt;
   POSITION = CHEMIST&lt;br /&gt;
END STORE&lt;br /&gt;
END&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;b&amp;gt;Using the THEN CONTINUE statement&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;%COLOR = &#039;BLUE&#039;&lt;br /&gt;
STORE RECORD&lt;br /&gt;
   MODEL = %MODEL&lt;br /&gt;
   THEN CONTINUE&lt;br /&gt;
   FR WHERE RECTYPE = &#039;TABLE&#039; AND COLOR = %COLOR&lt;br /&gt;
      %CODE = COLOR_CODE&lt;br /&gt;
   END FOR&lt;br /&gt;
   ADD COLOR_CODE=%CODE&lt;br /&gt;
   PAI&lt;br /&gt;
END STORE&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Usage===&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Use an &amp;lt;var&amp;gt;END STORE&amp;lt;/var&amp;gt; statement or another label to end the &amp;lt;var&amp;gt;STORE RECORD&amp;lt;/var&amp;gt; statement. Do not end a &amp;lt;var&amp;gt;STORE RECORD&amp;lt;/var&amp;gt; statement with an &amp;lt;var&amp;gt;END BLOCK&amp;lt;/var&amp;gt; statement.   &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;This form of the &amp;lt;var&amp;gt;STORE RECORD&amp;lt;/var&amp;gt; statement is used to add new records to any file that does not have the sorted or hashed option.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;The &amp;lt;var&amp;gt;STORE RECORD&amp;lt;/var&amp;gt; statement is supported in remote file and scattered group contexts.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;To store a field whose value you do not explicitly specify, see [[#Using VALUE IN to reference a NOTE value|Using VALUE IN to reference a NOTE value]], below. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;The &amp;lt;var&amp;gt;THEN CONTINUE&amp;lt;/var&amp;gt; statement allows for the conditional building of a &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; record. You can use any intervening statements after &amp;lt;var&amp;gt;THEN CONTINUE&amp;lt;/var&amp;gt; and before &amp;lt;var&amp;gt;END STORE&amp;lt;/var&amp;gt;.&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The statements following the &amp;lt;var&amp;gt;THEN CONTINUE&amp;lt;/var&amp;gt; statement of the &amp;lt;var&amp;gt;STORE RECORD&amp;lt;/var&amp;gt; block operate as if they were coded within a &amp;lt;var&amp;gt;FRN $Currec&amp;lt;/var&amp;gt; block, which immediately follows the &amp;lt;var&amp;gt;END STORE&amp;lt;/var&amp;gt; statement. This is easier for coding because you do not need to repeat the file specification of the &amp;lt;var&amp;gt;STORE RECORD&amp;lt;/var&amp;gt; statement. It is also more efficient because an actual &amp;lt;var&amp;gt;FRN&amp;lt;/var&amp;gt; statement is not necessary.&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Large Object storage====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
[[Field design#BLOB, CLOB, and MINLOBE attributes|Binary Large Objects]] &amp;amp;mdash; fields defined with a &amp;lt;var&amp;gt;BLOB&amp;lt;/var&amp;gt; or &amp;lt;var&amp;gt;CLOB&amp;lt;/var&amp;gt; attribute (often referred to collectively as LOBs) &amp;amp;mdash; are stored in Table E, and they can hold content longer than the 255 limit of regular &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; fields.  They are useful for holding blocks of text, images, documents, etc.  &amp;lt;/p&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; Prior to the &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; version 7.5 introduction of the [[FILEORG parameter|FILEORG X&#039;100&#039;]] bit, LOB fields required a special &amp;lt;var&amp;gt;STORE&amp;lt;/var&amp;gt; syntax referencing the &amp;quot;universal buffer.&amp;quot;  This pre-V7.5 syntax is documented in [[Large Object field processing for non-FILEORG X&#039;100&#039; files]].&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
As of &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; V7.5, LOB fields can be stored using normal &amp;lt;var&amp;gt;STORE&amp;lt;/var&amp;gt; syntax, typically with a [[Longstrings|Longstring]] variable holding the content:&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;B&lt;br /&gt;
%REC IS STRING LEN 3&lt;br /&gt;
%CT IS FLOAT&lt;br /&gt;
%VAL1 IS FLOAT&lt;br /&gt;
%VAL2 IS FLOAT&lt;br /&gt;
%REC = &#039;REC&#039;&lt;br /&gt;
FOR %CT FROM 1 TO 10&lt;br /&gt;
   IN EXPRESS STORE RECORD&lt;br /&gt;
      ORD1 = (%REC WITH %CT)&lt;br /&gt;
      ORD2 = (%CT * 2)&lt;br /&gt;
      ORD4 = (%CT * 4)&lt;br /&gt;
   END STORE&lt;br /&gt;
   COMMIT&lt;br /&gt;
FD1:&lt;br /&gt;
   IN EXPRESS FD ORD1 EQ VALUE(%REC WITH %CT)&lt;br /&gt;
        END FIND&lt;br /&gt;
   FR FD1&lt;br /&gt;
      CHANGE ORD2 TO (%CT * 2.1)&lt;br /&gt;
      ADD ORD3 = (%CT * 3)&lt;br /&gt;
      CHANGE ORD4 = (%CT * 4 ) TO (%CT * 4.1)&lt;br /&gt;
      DELETE ORD3 = (%CT * 3)&lt;br /&gt;
      INSERT ORD4 = (%CT * 5)&lt;br /&gt;
   END FOR&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;
When you store an instance of a Large Object field, the value of the data is stored in the file&#039;s Table E. Additionally, a LOB descriptor containing a pointer to the value in Table E, as well as other items, are stored in the record data in a Table B entry. The LOB descriptor is 27 bytes in length, plus the 1-byte length and 2-byte field code that apply to all fields &amp;amp;mdash; unless the field is preallocated.&lt;br /&gt;
See [[File Load utility#Building a Large Object descriptor|Building a Large Object descriptor]]&lt;br /&gt;
for a description of how to build a Large Object data descriptor.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The following compiler error is issued when the right side of the equal sign is expected to contain a &amp;lt;var&amp;gt;BUFFER&amp;lt;/var&amp;gt; expression and it does not.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;M204.0037: INVALID SYNTAX&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Sort or hash key files====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If you are adding a record to a file that has the sort or hash option, the sort or hash key value follows the &amp;lt;var&amp;gt;STORE RECORD&amp;lt;/var&amp;gt; on the same line, as shown below: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;STORE RECORD [&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;sort-or-hash-key-value&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 sort or hash key must be provided if the &amp;lt;var&amp;gt;FILEORG&amp;lt;/var&amp;gt; parameter was set to indicate that the sort or hash key is required in every record.  &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
For example, the request to store a record in a file that requires the vehicle identification number as the sort key can be written:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;BEGIN&lt;br /&gt;
STORE RECORD A99999998E&lt;br /&gt;
   MAKE = FORD&lt;br /&gt;
   COLOR = GREEN&lt;br /&gt;
   YEAR = 98&lt;br /&gt;
   MODEL = FOCUS&lt;br /&gt;
END STORE&lt;br /&gt;
END&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When this record is stored, the field &amp;lt;code&amp;gt;VIN = A99999998E&amp;lt;/code&amp;gt; is added to it. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can also specify the sort or hash key as an expression:&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;IN TEST1 STORE RECORD (&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;expression&amp;lt;/span&amp;gt;)&lt;br /&gt;
...&lt;br /&gt;
END STORE&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;
(&amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;expression&amp;lt;/var&amp;gt;) is the sort or hash key. (&amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;expression&amp;lt;/var&amp;gt;) can be a function call, string concatenation, arithmetic operation, User Language construct, or Boolean expression. The expression must be enclosed in parentheses to invoke the expression compiler; otherwise the value will be treated as a literal string.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Files with a UNIQUE field====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If a record is added to the file that has a &amp;lt;var&amp;gt;UNIQUE&amp;lt;/var&amp;gt; field, and a uniqueness conflict is detected during the &amp;lt;var&amp;gt;STORE RECORD&amp;lt;/var&amp;gt; processing, the partially stored record is backed out. For files without the &amp;lt;var&amp;gt;Reuse Record Number&amp;lt;/var&amp;gt; (&amp;lt;var&amp;gt;RRN&amp;lt;/var&amp;gt;) option, this results in the use of a record number which cannot be reclaimed. &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;
You can use the &amp;lt;var&amp;gt;IN GROUP MEMBER&amp;lt;/var&amp;gt; clause to restrict the &amp;lt;var&amp;gt;STORE RECORD&amp;lt;/var&amp;gt; statement to one member file in a group context. See [[Files, groups, and reference context#IN GROUP MEMBER clause|IN GROUP MEMBER clause]] for more information.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====FIND ALL VALUES options====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Like other &amp;lt;var&amp;gt;FIND&amp;lt;/var&amp;gt; statements, you can specify a range of values for the &amp;lt;var&amp;gt;FIND ALL VALUES&amp;lt;/var&amp;gt; statement by using the &amp;lt;var&amp;gt;FROM&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;TO&amp;lt;/var&amp;gt; clauses. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
In addition, you can select values based upon a pattern by using the &amp;lt;var&amp;gt;LIKE&amp;lt;/var&amp;gt; clause. &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Storing field groups (FIELDGROUP)====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Introduced with &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; version 7.5, field groups add a formalized internal structure for sets of repeating fields &amp;amp;mdash; for instance, a set of children and their birthdays would automatically associate the second birthday with the second child. With regular repeating fields, the programmer must be very careful: If, for instance, an occurrence of a birthday field is deleted, the correct occurrence of the associated child must also be deleted, or else the repeating values become out-of-sync. Field groups take care of this housekeeping by associating a set of fields with an internal field group ID.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Field groups can be added, changed, and deleted on a record after the record is created, but storing them on the initial &amp;lt;var&amp;gt;STORE RECORD&amp;lt;/var&amp;gt; statement &amp;lt;em&amp;gt;requires&amp;lt;/em&amp;gt; the use of &amp;lt;var&amp;gt;THEN CONTINUE&amp;lt;/var&amp;gt;. The following example demonstrates this, both for fieldgroups and for &amp;lt;em&amp;gt;nested fieldgroups&amp;lt;/em&amp;gt; (a fieldgroup contained inside another fieldgroup). Take this set of field definitions:&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;IN FILE LIBRARY DEFINE FIELDGROUP BOOK &lt;br /&gt;
IN FILE LIBRARY DEFINE FIELDGROUP CHAPTER WITH FG BOOK&lt;br /&gt;
IN FILE LIBRARY DEFINE FIELD RECTYPE           WITH ORD CHAR &lt;br /&gt;
IN FILE LIBRARY DEFINE FIELD AUTHOR_FIRSTNAME  WITH ORD CHAR &lt;br /&gt;
IN FILE LIBRARY DEFINE FIELD AUTHOR_LASTNAME   WITH ORD CHAR&lt;br /&gt;
IN FILE LIBRARY DEFINE FIELD BOOK_TITLE            WITH ORD CHAR EXACTLY-ONE FG BOOK&lt;br /&gt;
IN FILE LIBRARY DEFINE FIELD BOOK_SUBTITLE         WITH ORD CHAR EXACTLY-ONE FG BOOK&lt;br /&gt;
IN FILE LIBRARY DEFINE FIELD BOOK_ISBN             WITH ORD CHAR EXACTLY-ONE FG BOOK &lt;br /&gt;
IN FILE LIBRARY DEFINE FIELD BOOK_PRICE                     WITH AT-MOST-ONE FG BOOK&lt;br /&gt;
IN FILE LIBRARY DEFINE FIELD BOOK_READERCOMMENT             WITH REPEATABLE  FG BOOK&lt;br /&gt;
IN FILE LIBRARY DEFINE FIELD CHAPTER_NO                     WITH REPEATABLE  FG CHAPTER&lt;br /&gt;
IN FILE LIBRARY DEFINE FIELD CHAPTER_TITLE                  WITH REPEATABLE  FG CHAPTER&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Note that the fieldgroup &amp;lt;code&amp;gt;CHAPTER&amp;lt;/code&amp;gt; is defined with an attribute of fieldgroup &amp;lt;code&amp;gt;BOOK&amp;lt;/code&amp;gt;, which causes &amp;lt;code&amp;gt;CHAPTER&amp;lt;/code&amp;gt; to be nested inside &amp;lt;code&amp;gt;BOOK&amp;lt;/code&amp;gt;. To add records to this file, a &amp;lt;var&amp;gt;STORE RECORD&amp;lt;/var&amp;gt; statement stores a base record, and then fieldgroups are added inside a &amp;lt;var&amp;gt;THEN CONTINUE&amp;lt;/var&amp;gt; clause:&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;in file library store record  &lt;br /&gt;
  rectype          = &#039;AUTHOR&#039;&lt;br /&gt;
  author_firstname = &#039;Jane&#039;&lt;br /&gt;
  author_lastname  = &#039;Austen&#039;&lt;br /&gt;
then continue &lt;br /&gt;
  add fieldgroup book &lt;br /&gt;
     book_title       = &#039;Sense and Sensibility&#039; &lt;br /&gt;
     book_subtitle    =   &lt;br /&gt;
     book_isbn        = %isbn(%x)&lt;br /&gt;
     book_price       = %price(%x) &lt;br /&gt;
     book_readercomment = &#039;Loved it.  Better than &amp;quot;Cats&amp;quot;. Mom&#039; &lt;br /&gt;
     book_readercomment = &#039;An inspired, blistering novel.  The New York Times&#039;  &lt;br /&gt;
     book_readercomment = &#039;Excellent!  GB Shaw&#039;&lt;br /&gt;
  then continue  &lt;br /&gt;
     add fieldgroup chapter &lt;br /&gt;
        chapter_no    = 1 &lt;br /&gt;
        chapter_title = &#039;The Dashwoods of Sussex&#039;  &lt;br /&gt;
     end add  &lt;br /&gt;
     add fieldgroup chapter  &lt;br /&gt;
        chapter_no    = 2&lt;br /&gt;
        chapter_title = &#039;Mrs. John Dashwood&#039;  &lt;br /&gt;
     end add   &lt;br /&gt;
     add fieldgroup chapter &lt;br /&gt;
        chapter_no    = 3 &lt;br /&gt;
        chapter_title = &#039;Freddy and Elinor&#039;   &lt;br /&gt;
     end add  &lt;br /&gt;
  end add        &lt;br /&gt;
  add fieldgroup book      &lt;br /&gt;
     book_title       = &#039;Pride and Prejudice&#039; &lt;br /&gt;
     book_subtitle    =  &lt;br /&gt;
     book_isbn        = %isbn(%y) &lt;br /&gt;
     book_price       = %price(%y)      &lt;br /&gt;
     book_readercomment = &#039;Brief.  Encountery. Mom&#039; &lt;br /&gt;
     book_readercomment = &#039;Would love to snap up the movie rights.  H. Smidkin&#039; &lt;br /&gt;
     then continue             &lt;br /&gt;
        add fieldgroup chapter &lt;br /&gt;
           chapter_no    = 1 &lt;br /&gt;
           chapter_title = &#039;A Truth Universally Acknowledged&#039;&lt;br /&gt;
        end add           &lt;br /&gt;
        add fieldgroup chapter  &lt;br /&gt;
           chapter_no    = 2&lt;br /&gt;
           chapter_title = &#039;Waiting on Mr. Bingley&#039; &lt;br /&gt;
        end add       &lt;br /&gt;
   end add         &lt;br /&gt;
end store                      &lt;br /&gt;
&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;
In the above example there is no specific &amp;quot;end&amp;quot; statement for the &amp;lt;var&amp;gt;THEN CONTINUE&amp;lt;/var&amp;gt; statements. Rather, the context for the continue ends when the containing context ends. In the case above, the context of the outermost &amp;lt;var&amp;gt;THEN CONTINUE&amp;lt;/var&amp;gt; is the &amp;lt;var&amp;gt;STORE RECORD&amp;lt;/var&amp;gt; statement, which is being continued in order to provide &amp;lt;var&amp;gt;ADD FIELDGROUP&amp;lt;/var&amp;gt; statements for field group &amp;lt;code&amp;gt;BOOK&amp;lt;/code&amp;gt;. The context for the inner &amp;lt;var&amp;gt;THEN CONTINUE&amp;lt;/var&amp;gt; statements &amp;amp;mdash; used to add &amp;lt;code&amp;gt;CHAPTER&amp;lt;/code&amp;gt; field groups &amp;amp;mdash; is the &amp;lt;var&amp;gt;ADD FIELDGROUP&amp;lt;/var&amp;gt; statement above it. After adding &amp;lt;code&amp;gt;CHAPTER&amp;lt;/code&amp;gt; information for a &amp;lt;code&amp;gt;BOOK&amp;lt;/code&amp;gt;, that block is ended with &amp;lt;var&amp;gt;END ADD&amp;lt;/var&amp;gt;, and &amp;lt;var&amp;gt;STORE RECORD&amp;lt;/var&amp;gt; context returns, where if needed, another &amp;lt;code&amp;gt;BOOK&amp;lt;/code&amp;gt; field group can be added.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Nested STORE RECORD statements====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The &amp;lt;var&amp;gt;THEN CONTINUE&amp;lt;/var&amp;gt; block allows for the coding of a nested &amp;lt;var&amp;gt;STORE..END STORE&amp;lt;/var&amp;gt; block within the body of the outer &amp;lt;var&amp;gt;STORE&amp;lt;/var&amp;gt;, so that related records may be built together. A nested &amp;lt;var&amp;gt;STORE&amp;lt;/var&amp;gt; can refer to a different file context, without compromising the file context of the outer &amp;lt;var&amp;gt;STORE&amp;lt;/var&amp;gt;. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The following example stores an order header record along with an order line record:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;IN ORDHDR STORE RECORD&lt;br /&gt;
   ORDER_NUMBER = 1000568&lt;br /&gt;
   CUSTOMER_NUMBER = 111456&lt;br /&gt;
THEN CONTINUE&lt;br /&gt;
   IN ORDLINE STORE RECORD&lt;br /&gt;
      ORDER_NUMBER = 1000568&lt;br /&gt;
      ITEM_ID = F004&lt;br /&gt;
      ITEM_QTY = 3&lt;br /&gt;
   END STORE&lt;br /&gt;
   ADD ORDER_STATUS = A&lt;br /&gt;
END STORE&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The results of this would be the following record stored in the &amp;lt;code&amp;gt;ORDHDR&amp;lt;/code&amp;gt; file:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;output&amp;quot;&amp;gt;ORDER_NUMBER = 1000568&lt;br /&gt;
CUSTOMER_NUMBER = 111456&lt;br /&gt;
ORDER_STATUS = A&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
and the following record stored in the &amp;lt;code&amp;gt;ORDLINE&amp;lt;/code&amp;gt; file:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;output&amp;quot;&amp;gt;ORDER_NUMBER = 1000568&lt;br /&gt;
ITEM_ID = F004&lt;br /&gt;
ITEM_QTY = 3&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Multiply occurring fields====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
In the following example, a &amp;lt;var&amp;gt;For Each Occurrence&amp;lt;/var&amp;gt; loop is driven, based on occurrences of the field &amp;lt;code&amp;gt;SALES_MM&amp;lt;/code&amp;gt; previously stored, to store occurrences of &amp;lt;code&amp;gt;MONTHLY_TOTAL&amp;lt;/code&amp;gt;:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;B&lt;br /&gt;
%MONTHLY_SALES IS FLOAT ARRAY (3)&lt;br /&gt;
%MONTHLY_SALES(1) = 10&lt;br /&gt;
%MONTHLY_SALES(2) = 15&lt;br /&gt;
%MONTHLY_SALES(3) = 35&lt;br /&gt;
IN SALES STORE RECORD&lt;br /&gt;
   RECTYPE = TOT_SALES&lt;br /&gt;
   SALES_MM = &#039;01&#039;&lt;br /&gt;
   SALES_MM = &#039;02&#039;&lt;br /&gt;
   SALES_MM = &#039;03&#039;&lt;br /&gt;
THEN CONTINUE&lt;br /&gt;
FEO_SALES:&lt;br /&gt;
   FEO SALES_MM&lt;br /&gt;
      ADD MONTHLY_TOTAL = %MONTHLY_SALES(OCCURRENCE IN FEO_SALES)&lt;br /&gt;
   END FOR&lt;br /&gt;
END STORE&lt;br /&gt;
END&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The resultant record in the &amp;lt;code&amp;gt;SALES&amp;lt;/code&amp;gt; file is:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;output&amp;quot;&amp;gt;RECTYPE = TOT_SALES&lt;br /&gt;
SALES_MM = 01&lt;br /&gt;
SALES_MM = 02&lt;br /&gt;
SALES_MM = 03&lt;br /&gt;
MONTHLY_TOTAL = 10&lt;br /&gt;
MONTHLY_TOTAL = 15&lt;br /&gt;
MONTHLY_TOTAL = 35&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====COMMIT and BACKOUT====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The &amp;lt;var&amp;gt;COMMIT&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;BACKOUT&amp;lt;/var&amp;gt; statements can be used following a &amp;lt;var&amp;gt;THEN CONTINUE&amp;lt;/var&amp;gt; statement to save parts of a record as it is built, and to back out all of parts of a record conditionally. Consider the following example:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;%CUSTNO = &#039;100639&#039;&lt;br /&gt;
IN ORDERS STORE RECORD&lt;br /&gt;
   RECTYPE = ORDER&lt;br /&gt;
   ORDER_NUMBER = 1000234&lt;br /&gt;
   CUSTOMER_NUMBER = %CUSTNO&lt;br /&gt;
THEN CONTINUE&lt;br /&gt;
   COMMIT /? save the order header ?/&lt;br /&gt;
FIND_CUST:&lt;br /&gt;
   IN CLIENTS FD RECTYPE = POLICYHOLDER&lt;br /&gt;
                 POLICY NO = %CUSTNO&lt;br /&gt;
              END FIND&lt;br /&gt;
   FOR 1 RECORD IN FIND_CUST&lt;br /&gt;
      %ADDRESS = ADDRESS&lt;br /&gt;
      %CITY = CITY&lt;br /&gt;
   END FOR&lt;br /&gt;
   ADD ADDRESS = %ADDRESS&lt;br /&gt;
   ADD CITY = %CITY&lt;br /&gt;
 &lt;br /&gt;
   COMMIT /? Save the customer address ?/&lt;br /&gt;
   ADD DELIV_DATE = ($datechg(&#039;YYYYMMDD&#039;,$DATE(1,&#039;&#039;),10))&lt;br /&gt;
   IF %ORDER_DELAYED = &#039;Y&#039; THEN&lt;br /&gt;
      BACKOUT /? Back out deliv date if delay detected ?/&lt;br /&gt;
   END IF&lt;br /&gt;
END STORE&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If &amp;lt;code&amp;gt;%ORDER_DELAYED&amp;lt;/code&amp;gt; is not &amp;lt;code&amp;gt;Y&amp;lt;/code&amp;gt;, the record is stored as follows:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;output&amp;quot;&amp;gt;RECTYPE = ORDER&lt;br /&gt;
ORDER_NUMBER = 1000234&lt;br /&gt;
CUSTOMER_NUMBER = 100639&lt;br /&gt;
ADDRESS = 0880 HANCOCK STREET&lt;br /&gt;
CITY = LANCASTER&lt;br /&gt;
DELIV_DATE = 20111228&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Otherwise, the &amp;lt;code&amp;gt;DELIV_DATE&amp;lt;/code&amp;gt; &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;fieldname&amp;lt;/var&amp;gt;=&amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;value&amp;lt;/var&amp;gt; pair is backed out.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Known restrictions or limitations====&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Be cautious of using the &amp;lt;var&amp;gt;JUMP TO&amp;lt;/var&amp;gt; statement following &amp;lt;var&amp;gt;THEN CONTINUE&amp;lt;/var&amp;gt; to jump to a label outside the &amp;lt;var&amp;gt;STORE..END STORE&amp;lt;/var&amp;gt; block, as this may lead to the storing of a partial record.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;It is possible to call a subroutine after the &amp;lt;var&amp;gt;THEN CONTINUE&amp;lt;/var&amp;gt; statement, as you might in a &amp;lt;var&amp;gt;FOR RECORD NUMBER&amp;lt;/var&amp;gt; loop. Additional update statements to the current record are allowed in the subroutine but only in a &amp;lt;var&amp;gt;FRN $Currec&amp;lt;/var&amp;gt; loop. Otherwise, record context is not established and any additional updating statements within the subroutine would be rejected with the following compilation error: &lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;M204.0229: INVALID STATEMENT&lt;br /&gt;
&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;A &amp;lt;var&amp;gt;DELETE RECORD&amp;lt;/var&amp;gt; statement following &amp;lt;var&amp;gt;THEN CONTINUE&amp;lt;/var&amp;gt;, but before &amp;lt;var&amp;gt;END STORE&amp;lt;/var&amp;gt;, causes the current record context to be lost. Any further update statements cause the request to be cancelled with one of the following messages: &lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;M204.1233: DFAV, BAD RECORD NUMBER &amp;lt;i&amp;gt;n&amp;lt;/i&amp;gt; FOR FILE &amp;lt;i&amp;gt;filename&amp;lt;/i&amp;gt; &lt;br /&gt;
M204.1266: NONEXISTENT RECORD REFERENCED - &amp;lt;i&amp;gt;n&amp;lt;/i&amp;gt; IN FILE DSNLIST&lt;br /&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 class=&amp;quot;note&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Note:&amp;lt;/b&amp;gt; When using &amp;lt;var&amp;gt;THEN CONTINUE&amp;lt;/var&amp;gt;, keep in mind standard considerations for coding any update unit. Be aware that creating longer update units has implications for resource sharing, checkpoints, and recovery requirements.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==UPDATE RECORD statement==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The &amp;lt;var&amp;gt;UPDATE RECORD&amp;lt;/var&amp;gt; statement improve performances in remote context by using only one network call to perform all of a group of field-level updates (&amp;lt;var&amp;gt;ADD&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;CHANGE&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;DELETE&amp;lt;/var&amp;gt;) against the current record in a record loop.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Syntax===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The syntax of the &amp;lt;var&amp;gt;UPDATE RECORD&amp;lt;/var&amp;gt; statement is as follows:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;UPDATE RECORD&lt;br /&gt;
 &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;update-statement-1&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;update-statement-2&amp;lt;/span&amp;gt;&lt;br /&gt;
   .&lt;br /&gt;
   .&lt;br /&gt;
   .&lt;br /&gt;
 &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;update-statement-N&amp;lt;/span&amp;gt;&lt;br /&gt;
END UPDATE&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
Where:&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
An &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;update-statement&amp;lt;/var&amp;gt; is one of the following:&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;ADD&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;DELETE&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;CHANGE&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;INSERT&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Usage===&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The &amp;lt;var&amp;gt;UPDATE RECORD&amp;lt;/var&amp;gt; statement, while supported in all reference contexts, is intended for use with &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Parallel Query Option/204&amp;lt;/var&amp;gt;.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;If a series of update statements is executed individually, each one requires a separate network call.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;All forms of the update statements are supported. Except, a &amp;lt;var&amp;gt;DELETE EACH&amp;lt;/var&amp;gt; statement is not allowed within an &amp;lt;var&amp;gt;UPDATE RECORD&amp;lt;/var&amp;gt; statement.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;If a field constraint violation occurs, the entire &amp;lt;var&amp;gt;UPDATE&amp;lt;/var&amp;gt; statement is backed out.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;If an &amp;lt;var&amp;gt;ON&amp;lt;/var&amp;gt; unit invoked during the processing of an &amp;lt;var&amp;gt;UPDATE RECORD&amp;lt;/var&amp;gt; statement is run with a &amp;lt;var&amp;gt;BYPASS&amp;lt;/var&amp;gt; statement, the processing of the request continues with the statement that follows the &amp;lt;var&amp;gt;END UPDATE&amp;lt;/var&amp;gt; statement.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;If no updates are found between &amp;lt;var&amp;gt;UPDATE RECORD&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;END UPDATE&amp;lt;/var&amp;gt;, the statement is ignored.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
==Using VALUE IN to reference a NOTE value==&lt;br /&gt;
 &lt;br /&gt;
===VALUE IN label clause===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The clause &amp;lt;var&amp;gt;VALUE IN &amp;lt;i&amp;gt;label&amp;lt;/i&amp;gt;&amp;lt;/var&amp;gt; can replace an explicit field value in the &amp;lt;var&amp;gt;ADD&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;CHANGE&amp;lt;/var&amp;gt;, and &amp;lt;var&amp;gt;STORE RECORD&amp;lt;/var&amp;gt; statements. This also applies to the special forms of these statements that are discussed in [[Operations on multiply occurring fields]].&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The forms of the &amp;lt;var&amp;gt;VALUE IN&amp;lt;/var&amp;gt; statement are:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;ADD &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;fieldname&amp;lt;/span&amp;gt; = VALUE IN &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;label&amp;lt;/span&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
CHANGE &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;fieldname&amp;lt;/span&amp;gt; TO VALUE IN &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;label&amp;lt;/span&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
STORE RECORD &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;fieldname&amp;lt;/span&amp;gt; = VALUE IN &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;label&amp;lt;/span&amp;gt;&lt;br /&gt;
&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 request finds all records in the &amp;lt;code&amp;gt;CLIENTS&amp;lt;/code&amp;gt; file that are registered in Alexandria and insured by agent Casola. The policy number for each record found is noted and a corresponding policy number is located on the &amp;lt;code&amp;gt;VEHICLES&amp;lt;/code&amp;gt; file. The vehicle premium for the policy on the &amp;lt;code&amp;gt;VEHICLES&amp;lt;/code&amp;gt; file is then changed to the total premium amount noted for the policy on the &amp;lt;code&amp;gt;CLIENTS&amp;lt;/code&amp;gt; file.  &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;BEGIN&lt;br /&gt;
FIND.RECS:  IN CLIENTS FIND ALL RECORDS FOR WHICH&lt;br /&gt;
               AGENT = CASOLA&lt;br /&gt;
               CITY = ALEXANDRIA&lt;br /&gt;
            END FIND&lt;br /&gt;
            FOR EACH RECORD IN FIND.RECS&lt;br /&gt;
KEEP.POL:      NOTE POLICY NO&lt;br /&gt;
KEEP.PREM:     NOTE TOTAL PREMIUM&lt;br /&gt;
FIND.MATCH:    IN VEHICLES FIND ALL RECORDS FOR WHICH&lt;br /&gt;
                  OWNER POLICY = VALUE IN KEEP.POL&lt;br /&gt;
               END FIND&lt;br /&gt;
               FOR EACH RECORD IN FIND.MATCH&lt;br /&gt;
                  CHANGE VEHICLE PREMIUM TO VALUE -&lt;br /&gt;
                     IN KEEP.PREM&lt;br /&gt;
               END FOR&lt;br /&gt;
            END FOR&lt;br /&gt;
END&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
==Storing data in fields==&lt;br /&gt;
 &lt;br /&gt;
===Storing null values===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If the new value in an &amp;lt;var&amp;gt;ADD&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;CHANGE&amp;lt;/var&amp;gt;, or &amp;lt;var&amp;gt;STORE&amp;lt;/var&amp;gt; statement is left blank, no field is added to or stored with the record. If a field containing a null value must be added, you specify the value as an explicit null string (two single quotes with no space between them). For example:   &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;ADD VEHICLE PREMIUM = &amp;amp;apos;&#039;&lt;br /&gt;
CHANGE AGENT TO &amp;amp;apos;&#039;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Note that this statement:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;CHANGE FULLNAME TO&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
is equivalent to:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;DELETE FULLNAME&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
because the old value of &amp;lt;code&amp;gt;FULLNAME&amp;lt;/code&amp;gt; is deleted, but no new value is added.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Using the FIND statement to select fields with null values===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can use the &amp;lt;var&amp;gt;FIND&amp;lt;/var&amp;gt; statement to select records that have a field whose value is the null string, as illustrated below:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;FIND.RECS: IN CLIENTS FIND ALL RECORDS FOR WHICH&lt;br /&gt;
              FULLNAME = &#039;&#039;&lt;br /&gt;
END FIND&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
However, the &amp;lt;var&amp;gt;FIND&amp;lt;/var&amp;gt; statement does not select records for a particular field that is missing altogether from the record. See [[Record retrievals#IS PRESENT condition|IS PRESENT condition]] and [[Value loops#Locating records missing a particular field|Locating records missing a particular field]] for examples of finding records without a particular field.   &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Storing values in preallocated fields===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The file manager can indicate in a field definition the length of the field (&amp;lt;var&amp;gt;LENGTH&amp;lt;/var&amp;gt; attribute) and/or the number of times that field can occur in a record (&amp;lt;var&amp;gt;OCCURS&amp;lt;/var&amp;gt; attribute). Space for fields with the &amp;lt;var&amp;gt;LENGTH&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;OCCURS&amp;lt;/var&amp;gt; attributes is preallocated in each record in a file, and this space cannot be expanded. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If you attempt to store more values (an &amp;lt;var&amp;gt;OCCURS&amp;lt;/var&amp;gt; violation) or longer values (a &amp;lt;var&amp;gt;LENGTH&amp;lt;/var&amp;gt; violation) than a field&#039;s definition permits, an error message is displayed or the request is cancelled. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====LENGTH violations====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If a field is defined as having a particular length (&amp;lt;var&amp;gt;LENGTH&amp;lt;/var&amp;gt; &amp;lt;i&amp;gt;m&amp;lt;/i&amp;gt;), that field can store only values that are between one and &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;m&amp;lt;/var&amp;gt; bytes long. Other values are rejected. If you explicitly specify a field name and value in a SOUL statement, as in this request:   &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;ADD YEAR = 90&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; checks the length of the value during the compilation phase. A length violation detected in an update statement (&amp;lt;var&amp;gt;ADD&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;CHANGE&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;FILE&amp;lt;/var&amp;gt;, or &amp;lt;var&amp;gt;STORE&amp;lt;/var&amp;gt;) results in a compilation error. A length violation also can be detected for a &amp;lt;var&amp;gt;STORE&amp;lt;/var&amp;gt; statement for a sort or hash key defined with &amp;lt;var&amp;gt;LENGTH&amp;lt;/var&amp;gt; &amp;lt;i&amp;gt;m&amp;lt;/i&amp;gt;. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If field name variables or %variables are used in an update statement, length validity checks are deferred until the request is evaluated. If an error is detected at this point, the request is cancelled. Request cancellation can be avoided by using &amp;lt;var&amp;gt;[[$FldLen#$FldLen|$FldLen]]&amp;lt;/var&amp;gt;. Specifying a field value that is too long for a &amp;lt;var&amp;gt;LENGTH&amp;lt;/var&amp;gt; field in a retrieval context always causes the retrieval to fail, because the value could not have been stored.  &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Attempts to locate invalid values are treated as references to a nonexistent value. For example, a selection criterion in a &amp;lt;code&amp;gt;FIND &amp;lt;i&amp;gt;fieldname&amp;lt;/i&amp;gt; = &amp;lt;i&amp;gt;value&amp;lt;/i&amp;gt;&amp;lt;/code&amp;gt; fails to locate any records.   &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====OCCURS violations====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If a field is defined as occurring a particular number of times (&amp;lt;var&amp;gt;OCCURS&amp;lt;/var&amp;gt; &amp;lt;i&amp;gt;n&amp;lt;/i&amp;gt;), it can be stored up to n times in any record. An attempt to add (using &amp;lt;var&amp;gt;ADD&amp;lt;/var&amp;gt; or &amp;lt;var&amp;gt;STORE RECORD&amp;lt;/var&amp;gt; statement) an additional occurrence to a record containing the maximum number causes the request to be cancelled. To protect SOUL requests from cancellations due to occurrence violations refer to:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[[Operations on multiply occurring fields#COUNT OCCURRENCES OF statement|COUNT OCCURRENCES OF statement]] &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;[[$Occurs|$Occurs]]&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;
===Storing values in FLOAT fields===&lt;br /&gt;
 &lt;br /&gt;
====Exponent notation====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If a new value is to be stored in a field defined with the FLOAT attribute, the value can be defined in exponent notation. See [[Record retrievals#Exponent notation|Exponent notation]] for information.  &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
An invalid value is stored as an unconverted string.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====String values====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When you supply a string as the value to be stored, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; attempts to convert the string to floating point representation according to the floating point conversion rules (see [[Record retrievals#Equality retrievals|Equality retrievals]]). If the value to be stored cannot be converted, one of two things happens:&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 preallocated, the request is cancelled.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;If the field is not preallocated, the unconverted value is stored. &lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Floating point values====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When you supply a floating point value as the value to be stored, the value is not altered if its length is the same as the floating point field&#039;s defined length. Values of different lengths are truncated or rounded according to the rules described in. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Storing values in BINARY fields===&lt;br /&gt;
 &lt;br /&gt;
====Compressed values====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Fields defined as having the &amp;lt;var&amp;gt;BINARY&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;OCCURS&amp;lt;/var&amp;gt;, and &amp;lt;var&amp;gt;NON-CODED&amp;lt;/var&amp;gt; attributes can store only compressible values because only a small amount of space is preallocated for such a field. A compressible value is a decimal integer of up to nine digits with no plus sign, leading zeros, embedded blanks (following a minus sign), or decimal point.&lt;br /&gt;
Refer to [[Field design#Data_typing|Data typing]] for additional information on such values. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Value checking====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Values to be stored in &amp;lt;var&amp;gt;BINARY&amp;lt;/var&amp;gt; fields are not checked until the request is evaluated. If you attempt to store an incompressible value in a &amp;lt;var&amp;gt;BINARY&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;OCCURS&amp;lt;/var&amp;gt;, and &amp;lt;var&amp;gt;NON-CODED&amp;lt;/var&amp;gt; field, the request is cancelled. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
==Updating field groups==&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;Field groups are supported as of Model 204 version 7.5.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When a field group is added, a field group ID is assigned to the field group. This field group ID is unique among all field groups in the record, whether or not they have the same field group name. The ID is a number between 1 (zero is not used as an ID) and 2**32-1. The field group ID is an unsigned 32-bit integer, though only a length byte and trailing non-zero bytes are stored.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
Field group IDs from 1-255 require two bytes for the field group ID in Table B, IDs 256-65535 require three bytes, and so on. Once assigned, a field group ID is not reused regardless of whether the field group associated with the ID is deleted. That is, if you add a field group and it is assigned ID 6, and then you delete the field group, ID 6 will not be reused.&lt;br /&gt;
 &lt;br /&gt;
The one exception when field group ID reuse is allowed is on transaction back out. If field group ID 6 is assigned to an added field group, but then the addition is backed out, field group ID 6 can be assigned to a subsequent &amp;lt;var&amp;gt;ADD&amp;lt;/var&amp;gt; or &amp;lt;var&amp;gt;INSERT FIELDGROUP&amp;lt;/var&amp;gt;.&lt;br /&gt;
 &lt;br /&gt;
===Adding a field group===&lt;br /&gt;
To add a field group, issue an ADD FIELDGROUP statement in a record context:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;FR IN LABELX&lt;br /&gt;
   ADD FIELDGROUP &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;fieldgroupname&amp;lt;/span&amp;gt;&lt;br /&gt;
       field1 = (&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;value1&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;expression&amp;lt;/span&amp;gt;)&lt;br /&gt;
       [field2 = (&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;value2&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;expression&amp;lt;/span&amp;gt;)&lt;br /&gt;
       ...]&lt;br /&gt;
   END ADD&lt;br /&gt;
END FOR&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
The syntax of the &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;fieldname=value&amp;lt;/var&amp;gt; pairs inside an &amp;lt;var&amp;gt;ADD FIELDGROUP&amp;lt;/var&amp;gt; statement is identical to that of a &amp;lt;var&amp;gt;STORE RECORD&amp;lt;/var&amp;gt; statement. See also [[#Inserting a field group|Inserting a field group]].&lt;br /&gt;
 &lt;br /&gt;
In place of a value in the &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;fieldname=value&amp;lt;/var&amp;gt; pair, you can enter an expression. See [[#Expressions as field name values|Expressions as field name values]] for details.&lt;br /&gt;
 &lt;br /&gt;
===Inserting a field group===&lt;br /&gt;
In addition to the ADD FIELDGROUP statement, you can also issue an &amp;lt;var&amp;gt;INSERT FIELDGROUP&amp;lt;/var&amp;gt; statement:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;FR WHERE ...&lt;br /&gt;
   INSERT FIELDGROUP &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;name&amp;lt;/var&amp;gt;(&amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;subscript&amp;lt;/var&amp;gt;)&lt;br /&gt;
      FIELDA = &amp;amp;#x2019;ABC&amp;amp;#x2019;&lt;br /&gt;
      FIELDB = &amp;amp;#x2019;DEF&amp;amp;#x2019;&lt;br /&gt;
      ...&lt;br /&gt;
   END INSERT&lt;br /&gt;
END FOR&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
The &amp;lt;var&amp;gt;INSERT FIELDGROUP&amp;lt;/var&amp;gt; statement has the same semantics as an &amp;lt;var&amp;gt;INSERT FIELD&amp;lt;/var&amp;gt; statement. If the indicated occurrence of the field group is found, the new occurrence is inserted immediately before that occurrence. If it is not found, the new occurrence is added at the end of the record.&lt;br /&gt;
 &lt;br /&gt;
The inside of the &amp;lt;var&amp;gt;INSERT&amp;lt;/var&amp;gt; block has the identical format to the &amp;lt;var&amp;gt;STORE RECORD&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;ADD FIELDGROUP&amp;lt;/var&amp;gt; statements.&lt;br /&gt;
 &lt;br /&gt;
===Deleting a field group===&lt;br /&gt;
You can delete a field group several ways.&lt;br /&gt;
 &lt;br /&gt;
====Delete first field group occurrence in each record====&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;BEGIN&lt;br /&gt;
A: IN TEST1 FD&lt;br /&gt;
   END FIND&lt;br /&gt;
B: FR A&lt;br /&gt;
      DELETE FIELDGROUP BIRDS&lt;br /&gt;
   END FOR&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Delete all field group occurrences, if present, in one record====&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;BEGIN&lt;br /&gt;
A: IN TEST1 FD&lt;br /&gt;
   END FIND&lt;br /&gt;
B: FR A&lt;br /&gt;
      DELETE EACH FIELDGROUP PESTS&lt;br /&gt;
   END FOR&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Delete a field group without the name or ID reference====&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;BEGIN&lt;br /&gt;
A: IN TEST1 FD&lt;br /&gt;
   END FIND&lt;br /&gt;
B: FR A&lt;br /&gt;
      FOR EACH OCCURRENCE OF FIELDGROUP TRANSLATIONS&lt;br /&gt;
         IF LANGUAGE = &amp;amp;#x2019;INDIAN&amp;amp;#x2019; THEN&lt;br /&gt;
            %X = $FIELDGROUPID&lt;br /&gt;
            DELETE FIELDGROUP&lt;br /&gt;
            PRINT &amp;amp;#x2019;DELETING ID: &amp;amp;#x2019; WITH %X&lt;br /&gt;
         END IF&lt;br /&gt;
      END FOR&lt;br /&gt;
   END FOR&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Delete a field group with a subscript====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
To delete the third occurrence of field group &amp;lt;code&amp;gt;PITCHERS&amp;lt;/code&amp;gt;, you would issue the following statement:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;FR IN LABELX&lt;br /&gt;
   DELETE FIELDGROUP PITCHERS(3)&lt;br /&gt;
END FOR&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
When you delete a field group occurrence, all fields within the field group occurrence are deleted, as well as the indices for those fields. Or, you can delete a field group with a simple &amp;lt;var&amp;gt;DELETE&amp;lt;/var&amp;gt; statement while in a field group context:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;FR IN LABELX&lt;br /&gt;
   FAO FIELDGROUP PITCHERS&lt;br /&gt;
      DELETE FIELDGROUP&lt;br /&gt;
   END FOR&lt;br /&gt;
END FOR&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Displaying field groups and their fields===&lt;br /&gt;
After you add a field group to a record, you can display the field groups and their fields by issuing a &amp;lt;var&amp;gt;PAI&amp;lt;/var&amp;gt; statement, output as follows:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;BEGIN&lt;br /&gt;
IN POLICIES FOR EACH RECORD WHERE POLICY_NUMBER = 100095&lt;br /&gt;
   PAI&lt;br /&gt;
END&lt;br /&gt;
 &lt;br /&gt;
POLICY_NUMBER = 100095&lt;br /&gt;
POLICY_RESTRICTIONS = POLICY IS INVALID IF ...&lt;br /&gt;
... OTHER POLICY FIELDS&lt;br /&gt;
\DRIVER = 1&lt;br /&gt;
 DRIVER_NAME = ALTON, BARBARA W&lt;br /&gt;
 ...OTHER DRIVER FIELDS&lt;br /&gt;
/DRIVER = 1&lt;br /&gt;
\DRIVER = 2&lt;br /&gt;
 DRIVER_NAME = ALTON, CARRIE Y&lt;br /&gt;
 ...OTHER DRIVER FIELDS&lt;br /&gt;
/DRIVER = 2&lt;br /&gt;
\VEHICLE = 6&lt;br /&gt;
 MAKE = VOLKSWAGEN&lt;br /&gt;
 MODEL = NEW BEETLE&lt;br /&gt;
 ...OTHER VEHICLE FIELDS&lt;br /&gt;
/VEHICLE = 6&lt;br /&gt;
\VEHICLE = 7&lt;br /&gt;
 MAKE = MITSUBISHI&lt;br /&gt;
 MODEL = ECLIPSE&lt;br /&gt;
 ...OTHER VEHICLE FIELDS&lt;br /&gt;
\CLAIM = 9&lt;br /&gt;
 CLAIM_NUMBER = 100059&lt;br /&gt;
 WEATHER = RAIN&lt;br /&gt;
 ...OTHER CLAIM FIELDS&lt;br /&gt;
/CLAIM = 9&lt;br /&gt;
\CLAIM = 10&lt;br /&gt;
 CLAIM_NUMBER = 100064&lt;br /&gt;
 WEATHER = FOG&lt;br /&gt;
 ...OTHER CLAIM FIELDS&lt;br /&gt;
/CLAIM = 10&lt;br /&gt;
/VEHICLE = 7&lt;br /&gt;
\VEHICLE = 8&lt;br /&gt;
 MAKE = CHEVROLET&lt;br /&gt;
 MODEL = SUBURBAN&lt;br /&gt;
 ...OTHER VEHICLE FIELDS&lt;br /&gt;
/VEHICLE = 8&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
The lines that begin with a backslash (&amp;lt;tt&amp;gt;\&amp;lt;/tt&amp;gt;) identify the start of a field group and the lines that begin with a forward slash (&amp;lt;tt&amp;gt;/&amp;lt;/tt&amp;gt;) identify the end of the field group. The field group ID of the field group occurrence is indicated after the field group name on both the field group beginning and ending lines.&lt;br /&gt;
 &lt;br /&gt;
The field group IDs are not necessarily in ascending order in a record. The previous example was created by issuing &amp;lt;var&amp;gt;INSERT&amp;lt;/var&amp;gt; statements, so the IDs are out of order.&lt;br /&gt;
 &lt;br /&gt;
The function &amp;lt;var&amp;gt;[[$FieldgroupId]]&amp;lt;/var&amp;gt; can be used to show the field group ID.&lt;br /&gt;
 &lt;br /&gt;
===Support for field group name variables===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Field group name variables are supported; for example:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;IN POLICIES FRN %RECNO&lt;br /&gt;
   %FIELD = &amp;amp;#x2019;SURCHARGE%&amp;amp;#x2019;&lt;br /&gt;
   ADD FIELDGROUP VEHICLE&lt;br /&gt;
      MAKE = &amp;amp;#x2019;FORD&amp;amp;#x2019;&lt;br /&gt;
      MODEL = &amp;amp;#x2019;MUSTANG&amp;amp;#x2019;&lt;br /&gt;
      %%FIELD = 15&lt;br /&gt;
      * and so on&lt;br /&gt;
   END ADD FIELDGROUP VEHICLE&lt;br /&gt;
END FOR&amp;lt;/nowiki&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
Field name variables that evaluate to something in an invalid field group context result in request cancellation. For example, if &amp;lt;code&amp;gt;BARD&amp;lt;/code&amp;gt; is a field in field group &amp;lt;code&amp;gt;PITCHERS&amp;lt;/code&amp;gt; and you issue the following statement:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;IN FILE REDSOCKS FRN %RECNO&lt;br /&gt;
   %FIELD = &amp;amp;#x2019;BARD&amp;amp;#x2019;&lt;br /&gt;
   ADD %%FIELD = &amp;amp;#x2019;Knuckle ball&amp;amp;#x2019;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
A request cancellation is generated, because you tried to add an occurrence of field &amp;lt;code&amp;gt;BARD&amp;lt;/code&amp;gt; outside its appropriate field group context.&lt;br /&gt;
&amp;lt;/div&amp;gt;  &amp;lt;!-- ends toclimit div --&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
[[Category:SOUL]]&lt;/div&gt;</summary>
		<author><name>Mlarocca</name></author>
	</entry>
	<entry>
		<id>https://m204wiki.rocketsoftware.com/index.php?title=Release_notes_for_Model_204_version_7.5&amp;diff=71006</id>
		<title>Release notes for Model 204 version 7.5</title>
		<link rel="alternate" type="text/html" href="https://m204wiki.rocketsoftware.com/index.php?title=Release_notes_for_Model_204_version_7.5&amp;diff=71006"/>
		<updated>2014-08-01T13:45:23Z</updated>

		<summary type="html">&lt;p&gt;Mlarocca: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;These release notes list the enhancements and other changes contained in Model 204 version 7.5.&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.5.0 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;
This section summarizes the new features and enhancements for Model 204 version 7.5.0.&lt;br /&gt;
 &lt;br /&gt;
===SOUL (User Language)===&lt;br /&gt;
The significantly enhanced, object-oriented, version of User Language is now called [[#SOUL (User Language) enhancements|SOUL]]. All existing User Language programs will continue to work under SOUL, so User Language can be considered to be a subset of SOUL, though the name &amp;quot;User Language&amp;quot; is now deprecated.&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;integration of object-oriented language extensions from the Janus SOAP User Language Interface&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[[Release notes for Model 204 version 7.5 (DRAFT)#External Call Facility .28ECF.29|ECF]] CALL statements can pass up to 60 parameters&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===System Management===&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Writing records to the SMF data set without an SVC installed&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Performance===&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;GTBL can be stored above the bar&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[[Release notes for Model 204 version 7.5 (DRAFT)#Support for physical field groups|Support for physical field groups]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
==Operating system requirements==&lt;br /&gt;
&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;Requirements for Model 204 version 7.5 are still being determined.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
Model 204 version 7.5 requires the following operating system support:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;For IBM z/OS:&amp;lt;/b&amp;gt; Version 1 Release 7. V1R7 is sufficient for all new functionality except for the following&lt;br /&gt;
features:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Large (1 MB) page support requires Version 1 Release 9.&lt;br /&gt;
&amp;lt;li&amp;gt;Extended address volumes (EAV) requires Version 1 Release 12.&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;For IBM z/VM:&amp;lt;/b&amp;gt; Version 5 Release 4.0 or later&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;For IBM z/VSE:&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Version 5 Release 1 or&lt;br /&gt;
&amp;lt;li&amp;gt;Version 4 Release 3 or&lt;br /&gt;
&amp;lt;li&amp;gt;Version 4 Release 2.1 or&lt;br /&gt;
&amp;lt;li&amp;gt;Version 4 Release 2.0, with these program temporary fixes (PTFs) installed:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;UD53436&lt;br /&gt;
&amp;lt;li&amp;gt;UD53437&lt;br /&gt;
&amp;lt;li&amp;gt;UD53438&lt;br /&gt;
&amp;lt;li&amp;gt;UD53439&lt;br /&gt;
&amp;lt;/ul&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;Note:&amp;lt;/b&amp;gt; z/VSE V5.1 is required to take advantage of any 64-bit capabilities under VSE.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
=== Hardware requirements ===&lt;br /&gt;
&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;Requirements for Model 204 version 7.5 are still being determined.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
Model 204 version 7.5 requires the IBM z/890 or above processor, except for the following feature:&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The large (1 MB) page support feature requires the IBM z10 or above processor. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Model 204 compatibility with operating systems===&lt;br /&gt;
&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;Content for version 7.5 is still being determined.&amp;lt;/p&amp;gt;&lt;br /&gt;
For information on Model 204 certification with IBM operating systems, see:&lt;br /&gt;
http://www.rocketsoftware.com/products/rocket-model-204/technical-information&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;div id=&amp;quot;Connect* compatibility with Model 204&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
===Connect* compatibility with Model 204===&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.0 is compatible with all versions of Model 204.&lt;br /&gt;
&lt;br /&gt;
==SOUL (User Language) enhancements==&lt;br /&gt;
Much of the substantial new and enhanced functionality described in the following subsections is available as a result of the acquisition of Sirius Software. The functionality that is the subject of the initial subsection, &amp;quot;Object oriented programming,&amp;quot; motivates the new name for User Language, &#039;&#039;&#039;SOUL&#039;&#039;&#039; (Simple Objective User Language).&lt;br /&gt;
 &lt;br /&gt;
===Object oriented programming===&lt;br /&gt;
As of version 7.5 of Model 204 (and backward compatible with existing User Language applications), the SOUL language is equipped with [http://en.wikipedia.org/wiki/Object-oriented Object-Oriented Programming](sometimes abbreviated OO) capabilities comparable or superior to other contemporary object oriented languages. The OO features were formerly contained in the [[Janus SOAP User Language Interface]], and you can use [[Object oriented programming in SOUL]] as an entry point to the extensive SOUL OO documentation. In particular, you might want to begin with the [[Getting started with OOP for User Language programmers|OO tutorial]].&lt;br /&gt;
 &lt;br /&gt;
===Record capacity increase===&lt;br /&gt;
In this version of Model 204, the record limit is increased from sixteen million records to forty-eight million records per file.&lt;br /&gt;
 &lt;br /&gt;
===New SOUL statements===&lt;br /&gt;
{{Template:User Language statements}}&lt;br /&gt;
 &lt;br /&gt;
===Non-OO enhancements in SOUL===&lt;br /&gt;
{{Template:User Language syntax enhancements}}&lt;br /&gt;
 &lt;br /&gt;
===SOUL support for field groups===&lt;br /&gt;
 &lt;br /&gt;
====ADD (or INSERT or DELETE) FIELDGROUP statements====&lt;br /&gt;
The &amp;lt;var&amp;gt;ADD FIELDGROUP&amp;lt;/var&amp;gt; statement and the &amp;lt;var&amp;gt;INSERT FIELDGROUP&amp;lt;/var&amp;gt; statement behavior parallels the behavior of the &amp;lt;var&amp;gt;ADD&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;INSERT&amp;lt;/var&amp;gt; statements for simple fields. The &amp;lt;var&amp;gt;DELETE FIELDGROUP&amp;lt;/var&amp;gt; statement handles more situations and is therefore more complex.&lt;br /&gt;
See [[Data maintenance#Updating field groups|Updating field groups]] for details.&lt;br /&gt;
 &lt;br /&gt;
====Statements for handling field groups====&lt;br /&gt;
SOUL now provides several statements for handling field groups:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;FOR FIELDGROUP&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;FOR ALL OCCURRENCES OF FIELDGROUP (FAO FIELDGROUP)&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 OCCURRENCE OF FIELDGROUP (FEO FIELDGROUP)&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
See [[Operations on multiply occurring fields#Special statements for multiply occurring fields and field groups|Special statements for multiply occurring fields and field groups]] for details.&lt;br /&gt;
 &lt;br /&gt;
====Output statements for field groups====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The following SOUL statements provide display output for Model 204 field groups:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;AUDIT ALL FIELDGROUP INFORMATION (AAFGI)&lt;br /&gt;
PRINT ALL FIELDGROUP INFORMATION (PAFGI)&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
See [[Basic SOUL statements and commands#Output statements for fields and field groups|Output statements for fields and field groups]] for details.&lt;br /&gt;
 &lt;br /&gt;
====Field group SORT support====&lt;br /&gt;
You can use field groups in [[Sorting#Field group SORT support|sorted sets]]. &amp;lt;var&amp;gt;SORT&amp;lt;/var&amp;gt; statement support for field groups lets you sort records with field groups as well as reference field groups in the sorted sets. For example, you can issue a &amp;lt;code&amp;gt;FAO FIELDGROUP&amp;lt;/code&amp;gt; statement or &amp;lt;code&amp;gt;FEO FIELDGROUP&amp;lt;/code&amp;gt; statement against the sorted set.&lt;br /&gt;
 &lt;br /&gt;
===EQ VALUE retrieval condition===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
SOUL now provides the &amp;lt;var&amp;gt;EQ VALUE&amp;lt;/var&amp;gt; clause to support expressions in &amp;lt;var&amp;gt;FIND&amp;lt;/var&amp;gt; statements.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
See [[Record retrievals#Using expressions in FIND statements|Using expressions in FIND statements]] for details.&lt;br /&gt;
 &lt;br /&gt;
===EQ WITH retrieval condition for concatenated fields===&lt;br /&gt;
SOUL now provides the &amp;lt;var&amp;gt;EQ WITH&amp;lt;/var&amp;gt; clause for retrieving &amp;lt;var&amp;gt;CONCATENATION-OF&amp;lt;/var&amp;gt; fields. Model 204 automatically builds the concatenated value.&lt;br /&gt;
 &lt;br /&gt;
See [[Record retrievals#Using expressions in FIND statements|Using expressions in FIND statements]]  and [[Record retrievals#EQ WITH retrieval condition for concatenated fields|EQ with retrieval condition for concatenated fields]] for details.&lt;br /&gt;
 &lt;br /&gt;
===External Call Facility (ECF)===&lt;br /&gt;
&amp;lt;var&amp;gt;EXTERNAL CALL&amp;lt;/var&amp;gt; statements can now pass more parameters.&lt;br /&gt;
The maximum number of parameters that can be passed in an &amp;lt;var&amp;gt;EXTERNAL CALL&amp;lt;/var&amp;gt; statement has been increased from 40 to 60.&lt;br /&gt;
The maximum value setting for &amp;lt;var&amp;gt;[[ECPSIZE parameter|ECPSIZE]]&amp;lt;/var&amp;gt; is increased from 1310680 to 1966020 to accommodate the extra parameters.&lt;br /&gt;
 &lt;br /&gt;
ECF is available only on z/OS systems. For more information about the External Call Facility and the &amp;lt;var&amp;gt;EXTERNAL CALL&amp;lt;/var&amp;gt; statement, see the &amp;lt;var class=&amp;quot;book&amp;quot;&amp;gt;Rocket Model 204 System Manager&#039;s Guide&amp;lt;/var&amp;gt;.&lt;br /&gt;
 &lt;br /&gt;
===REPEAT statement UNTIL option===&lt;br /&gt;
The &amp;lt;var&amp;gt;REPEAT&amp;lt;/var&amp;gt; statement now supports the &amp;lt;var&amp;gt;UNTIL&amp;lt;/var&amp;gt; option. In previous releases, only &amp;lt;var&amp;gt;REPEAT WHILE&amp;lt;/var&amp;gt; was supported.&lt;br /&gt;
 &lt;br /&gt;
A &amp;lt;var&amp;gt;[[Flow of control in User Language#REPEAT UNTIL statement|REPEAT UNTIL]]&amp;lt;/var&amp;gt; statement enters the loop body prior to checking the condition.&lt;br /&gt;
 &lt;br /&gt;
===New and changed classes and methods===&lt;br /&gt;
&lt;br /&gt;
====New InvalidBitNumber class====&lt;br /&gt;
Objects of the [[InvalidBitNumber class|InvalidBitNumber exception class]] are thrown when an invalid bit number is requested by a bit manipulation function. It is currently thrown only by the &amp;lt;var&amp;gt;[[BitClearString (String function)|BitClearString]]&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;[[BitFlipString (String function)|BitFlipString]]&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;[[BitSetString (String function)|BitSetString]]&amp;lt;/var&amp;gt;, and &amp;lt;var&amp;gt;[[BitValueString (String function)|BitValueString]]&amp;lt;/var&amp;gt; functions. &lt;br /&gt;
&lt;br /&gt;
====New InvalidTranslateTable class====&lt;br /&gt;
Objects of the [[InvalidTranslateTable class|InvalidTranslateTable exception class]] are thrown when a requested system translate table cannot be found. It is currently thrown only by the &amp;lt;var&amp;gt;[[TranslateTable (HttpRequest property)|TranslateTable]]&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;HttpRequest&amp;lt;/var&amp;gt; property.&lt;br /&gt;
 &lt;br /&gt;
====New bit manipulation String functions====&lt;br /&gt;
New bit manipulation functions &amp;lt;var&amp;gt;[[BitClearString (String function)|BitClearString]]&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;[[BitCountString (String function)|BitCountString]]&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;[[BitFlipString (String function)|BitFlipString]]&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;[[BitSetString (String function)|BitSetString]]&amp;lt;/var&amp;gt;, and &amp;lt;var&amp;gt;[[BitValueString (String function)|BitValueString]]&amp;lt;/var&amp;gt; make it easier to manipulate the bits in a string.&lt;br /&gt;
 &lt;br /&gt;
====New String processing functions====&lt;br /&gt;
New &amp;lt;var&amp;gt;String&amp;lt;/var&amp;gt; functions &amp;lt;var&amp;gt;[[Before (String function)|Before]]&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;[[After (String function)|After]]&amp;lt;/var&amp;gt; return the parts of a string before or after a user-specified delimiter string.&lt;br /&gt;
&lt;br /&gt;
====New Stringlist subroutine====&lt;br /&gt;
New &amp;lt;var&amp;gt;Stringlist&amp;lt;/var&amp;gt; subroutine &amp;lt;var&amp;gt;[[AppendPemData (Stringlist subroutine)|AppendPemData]]&amp;lt;/var&amp;gt;&lt;br /&gt;
appends a PEM encode string to a &amp;lt;var&amp;gt;Stringlist&amp;lt;/var&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
====New System methods TODClock and UUIDTime====&lt;br /&gt;
New System class methods [[TODClock (System function)|TODCLOCK]] and [[UUIDTime (System function)|UUIDTime]] have been created to facilitate generation of version 1 universal unique identifiers and to provide high precision time stamps for SOUL applications. These methods were actually added as a ZAP update to Model 204 7.5 (75Z109).&lt;br /&gt;
&lt;br /&gt;
====New HttpRequest TranslateTable property====&lt;br /&gt;
The &amp;lt;var&amp;gt;[[TranslateTable (HttpRequest property)|TranslateTable]]&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;HttpRequest&amp;lt;/var&amp;gt; property makes it possible to set the translate table to be used for EBCDIC to ASCII translation of data in an &amp;lt;var&amp;gt;HttpRequest&amp;lt;/var&amp;gt; object.&lt;br /&gt;
 &lt;br /&gt;
====Disable base64 encoding in LoadFromRecord and related methods====&lt;br /&gt;
The &amp;lt;var&amp;gt;Base64Encode&amp;lt;/var&amp;gt;=&amp;lt;var&amp;gt;False&amp;lt;/var&amp;gt; argument can be used with the &amp;lt;var&amp;gt;[[LoadFromRecord (XmlDoc/XmlNode subroutine)|LoadFromRecord]]&amp;lt;/var&amp;gt; method to disable any base64 encoding of field values.&lt;br /&gt;
 &lt;br /&gt;
Alternatively, the &amp;lt;var&amp;gt;CharacterMap&amp;lt;/var&amp;gt; argument (with a non-null value) can be used to disable any base64 encoding of field values, and to specify translations, which can avoid request translation due to X&#039;00&#039; and/or untranslatable characters in field values.&lt;br /&gt;
 &lt;br /&gt;
These arguments are also added to the &amp;lt;var&amp;gt;[[NewFromRecord (XmlDoc function)|NewFromRecord]]&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;[[ToXmlDoc (Record function)|ToXmlDoc]]&amp;lt;/var&amp;gt; methods.&lt;br /&gt;
 &lt;br /&gt;
====New parameter for AppendJournalData====&lt;br /&gt;
The &amp;lt;var&amp;gt;QT&amp;lt;/var&amp;gt; option is added to the &amp;lt;var&amp;gt;[[AppendJournalData (Stringlist function)#Options parameter|AppendJournalData]]&amp;lt;/var&amp;gt; method, to include QT type audit entries.&lt;br /&gt;
 &lt;br /&gt;
====New parameter for AddField====&lt;br /&gt;
The &amp;lt;var&amp;gt;Strip&amp;lt;/var&amp;gt; option is added to the &amp;lt;var&amp;gt;Screen&amp;lt;/var&amp;gt; class method &amp;lt;var&amp;gt;[[AddField (Screen function)|AddField]]&amp;lt;/var&amp;gt; to allow suppression of leading and trailing blank removal from input fields.&lt;br /&gt;
&lt;br /&gt;
===New and changed $functions===&lt;br /&gt;
 &lt;br /&gt;
====Former Sirius $functions====&lt;br /&gt;
The $functions referred to by the link below are added to SOUL as a result of the acquisition of Sirius Software:&lt;br /&gt;
:[[List of $functions|Sirius $functions]]&lt;br /&gt;
Among these $functions are integrated [[List_of_mathematical_$functions|math $functions]]: high-performance, high-precision versions of the IBM mathematical functions. These functions eliminate the need to use external math libraries.&lt;br /&gt;
 &lt;br /&gt;
====$SNDMAIL attachment ASCII translation====&lt;br /&gt;
The &amp;lt;var&amp;gt;[[SOUL_$functions#Sending_email_messages_via_User_Language|$SNDMAIL]]&amp;lt;/var&amp;gt; function can now translate an attachment to ASCII before sending it.&lt;br /&gt;
This translation is useful if the &amp;lt;var&amp;gt;$SNDMAIL&amp;lt;/var&amp;gt; attachment is a &amp;lt;var&amp;gt;CLOB&amp;lt;/var&amp;gt; (&amp;lt;var&amp;gt;CHARACTER-LARGE-OBJECT&amp;lt;/var&amp;gt;) such as a text document.&lt;br /&gt;
 &lt;br /&gt;
The &amp;lt;var&amp;gt;$SNDMAIL&amp;lt;/var&amp;gt; function now accepts an optional parameter after the name of the attached object. If this parameter is set to &#039;C&#039; (or to a percent variable with the value &#039;C&#039;), the object in the buffer is translated to ASCII before being attached to the email.&lt;br /&gt;
 &lt;br /&gt;
If this parameter is not specified, the object in the buffer is sent as a binary object.&lt;br /&gt;
 &lt;br /&gt;
In this example:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;%RC = $SNDMAIL(%SUBJECT,,%BODY,%FROM,%TO,,,,&#039;CLOB.TXT&#039;,&#039;C&#039;)&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
the &amp;lt;code&amp;gt;CLOB.TXT&amp;lt;/code&amp;gt; attachment will be translated to ASCII before being attached to the email.&lt;br /&gt;
&lt;br /&gt;
====New function calls for field groups====&lt;br /&gt;
When a field group is added, a [[Data maintenance#Updating field groups|field group ID]] is assigned to the field group.&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;[[$FieldgroupId]]&amp;lt;/var&amp;gt; returns the ID of the current field group.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;[[$FieldgroupOccurrence]]&amp;lt;/var&amp;gt; returns the current occurrence number of the field group.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Sirius products and product enhancements==&lt;br /&gt;
[[Sirius Software product list|The former-Sirius products]] are now available to Model 204 customers as separately purchased items as a result of the acquisition of Sirius Software.&lt;br /&gt;
 &lt;br /&gt;
===Changes to Janus SSL support===&lt;br /&gt;
Under Model 204 version 7.5, Janus products:&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Drop support for version 2 of the Secure Sockets Layer encryption protocol (SSL V2)&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can use the &amp;lt;var&amp;gt;[[SSLPROT (JANUS DEFINE parameter)|SSLPROT]]&amp;lt;/var&amp;gt; parameter on the &amp;lt;var&amp;gt;JANUS DEFINE&amp;lt;/var&amp;gt; command for a port to explicitly specify, or limit, the SSL protocols available for a connection. The &amp;lt;var&amp;gt;SSLPROT&amp;lt;/var&amp;gt; documentation describes the SSL protocols that Janus supports. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Janus support for SSL V2 also included an option to specify a larger than &amp;quot;legal&amp;quot; input buffer for connections not strictly conforming to the V2 standard. You specify that buffer size with the &amp;lt;var&amp;gt;JANUS DEFINE&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;[[SSLIBSIZE (JANUS DEFINE parameter)|SSLIBSIZE]]&amp;lt;/var&amp;gt; parameter, and the &amp;lt;var&amp;gt;SSLIBSIZE&amp;lt;/var&amp;gt; maximum value as of Model 204 V7.5 is reduced (from 32767 bytes) to the SSL maximum allowed size of 16384. &amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Add support for new ciphers and TLS levels&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can use the &amp;lt;var&amp;gt;[[SSLCIPH (JANUS DEFINE parameter)|SSLCIPH]]&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;JANUS DEFINE&amp;lt;/var&amp;gt; parameter to specify the SSL ciphers available for a connection. The &amp;lt;var&amp;gt;SSLCIPH&amp;lt;/var&amp;gt; documentation describes the SSL ciphers that Janus supports. &amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===WEBOPT parameter change===&lt;br /&gt;
The &amp;lt;var&amp;gt;[[WEBOPT parameter|WEBOPT]]&amp;lt;/var&amp;gt; parameter default value is changed to X&#039;03&#039; from 0. &amp;lt;var&amp;gt;WEBOPT&amp;lt;/var&amp;gt; affects the interaction of Model 204 and RACF security.&lt;br /&gt;
 &lt;br /&gt;
==File-related enhancements==&lt;br /&gt;
 &lt;br /&gt;
===Support for physical field groups===&lt;br /&gt;
Model 204 supports non-relational, de-normalized data structures. Many Model 204 sites have enjoyed significant cost and performance benefits from efficiently processing multiply occurring fields. This concept has been enhanced to introduce physical field groups that let you view and process groups of fields as a logical entity.&lt;br /&gt;
 &lt;br /&gt;
You can define a physical field group only for files with the [[#FILEORG (new settings)|FILEORG X&#039;100&#039; setting]]. To take advantage of field groups in files defined before Model 204 version 7.5, you must reorganize the files with a &amp;lt;var&amp;gt;FILEORG&amp;lt;/var&amp;gt; setting that includes the X&#039;100&#039; bit.&lt;br /&gt;
 &lt;br /&gt;
Files with &amp;lt;var&amp;gt;FILEORG&amp;lt;/var&amp;gt; X&#039;100&#039; can have up to 32,000 fields.&lt;br /&gt;
 &lt;br /&gt;
For more information, see [[Field group design]].&lt;br /&gt;
 &lt;br /&gt;
===Increased Table B record number capacity===&lt;br /&gt;
[[Table B (File architecture)|Table B]] can now contain up to 48M possible record numbers. (The previous limit was 16M.)&lt;br /&gt;
 &lt;br /&gt;
Set the [[#FILEORG (new settings)|FILEORG X&#039;200&#039; bit]] at file creation time to allow for the increased record numbers.&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;Notes: &amp;lt;/b&amp;gt;  &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The limit for &amp;lt;var&amp;gt;BSIZE&amp;lt;/var&amp;gt; remains at 16M.&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;BSIZE * BRECPPG&amp;lt;/code&amp;gt; must be less than or equal to 48M (actually decimal 50,331,648 to be exact).  &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
For example, if &amp;lt;var&amp;gt;BSIZE&amp;lt;/var&amp;gt; is 16M, &amp;lt;var&amp;gt;BRECPPG&amp;lt;/var&amp;gt; cannot be more than 3.  &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;FILEORG&amp;lt;/var&amp;gt; X&#039;200&#039; bit cannot be set for files with hash key or sorted file organization.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Automatic fields===&lt;br /&gt;
&amp;lt;p&amp;gt;Model 204 now lets you define a field whose value is [[Field design#Automatic fields|automatically maintained]].&amp;lt;br/&amp;gt;A field can count occurrences of another field so that every store or delete of the field occurrence changes the count in the automatic field. The following automatically maintained field attributes are available for files defined with the FILEORG x&#039;100&#039; setting:&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;COUNT-OCCURRENCES-OF&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;CREATE-TIME&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;CREATE-TIMEUTC&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;CREATE-USER&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;UPDATE-TIME&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;UPDATE-TIMEUTC&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;UPDATE-USER&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
The value of an automatic field is updated at the start of a transaction by Model 204 and you cannot set it explicitly by a program. Any valid update statement causes the appropriate time and user stamps to be updated. For example, the time and user stamps will be updated when &amp;lt;code&amp;gt;DELETE FOO(8)&amp;lt;/code&amp;gt; is processed, even if there are no occurrences of FOO in the record and an actual update does not take place.&lt;br /&gt;
 &lt;br /&gt;
Once you define an automatic value for a field, you cannot redefine the automatic value.&lt;br /&gt;
&lt;br /&gt;
===Concatenated fields===&lt;br /&gt;
Model 204 now lets you define [[Field design#Concatenated fields|concatenated fields]].&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Fields that make up concatenated field values must be &amp;lt;var&amp;gt;AT-MOST-ONE&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;EXACTLY-ONE&amp;lt;/var&amp;gt;, or &amp;lt;var&amp;gt;OCCURS&amp;lt;/var&amp;gt; 1 and must all be in the same field group context (or not in a field group). Fields that occur in all field groups (&amp;lt;var&amp;gt;FIELDGROUP *&amp;lt;/var&amp;gt;) cannot be used in a concatenation.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
If a concatenated field becomes longer than 255 bytes after adding separator and escape characters, the update request is cancelled.&lt;br /&gt;
 &lt;br /&gt;
===New field attributes===				&lt;br /&gt;
&amp;lt;p&amp;gt;Model 204 version 7.5 introduces the new &amp;lt;var&amp;gt;[[DEFINE FIELD command|DEFINE FIELD]]&amp;lt;/var&amp;gt; attributes described in this section. These attributes apply to all fields in Model 204. &amp;lt;/p&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; These attributes &amp;lt;strong&amp;gt;all&amp;lt;/strong&amp;gt; require that the &amp;lt;var&amp;gt;[[FILEORG parameter|FILEORG]]&amp;lt;/var&amp;gt; parameter X&#039;100&#039; bit be set on the file containing the fields.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Changes in the new field attributes are detected during the redefinition of an existing field. When such a change is detected, the following messages might be issued:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;M204.1260: [FIELD | FIELDGROUP] WAS PREVIOUSLY DEFINED WITH DIFFERENT ATTRIBUTES,&lt;br /&gt;
NEW [FIELD | FIELDGROUP] OPTIONS IGNORED&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
or&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;M204.2884: [FIELD WAS PREVIOUSLY DEFINED AS A FIELDGROUP | FIELDGROUP WAS PREVIOUSLY&lt;br /&gt;
DEFINED AS A FIELD], NEW DEFINITION IGNORED&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The table below lists the new field attributes. For details on each attribute, click its name. For more information on how related attributes work together, see the [[Field design]] topic.&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;Attribute&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Abbreviation&amp;lt;/th&amp;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&amp;gt;[[DEFINE_FIELD_command#Ordered_index_CHUNK_attribute|CHUNK]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;CNK&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Defines &amp;quot;OI chunks&amp;quot; of data in ORDERED NUMERIC fields to enable more efficient range searching.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;[[Field design#CONCATENATION-OF .28CAT.29 attribute|CONCATENATION-OF]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;(CAT)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Lists the fields that make up a concatenated field, and provides a concatenated value based upon the values of the constituent fields.&amp;lt;/td&amp;gt;&lt;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;[[Field design#Counting occurrences of a field|COUNT-OCCURRENCES-OF]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;(CTO)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Automatically maintains a count of the number of occurrences of the specified field.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;[[Field design#Automatic Fields|CREATE-TIME]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;(CRTM)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Captures the time when the record was created, as of the start of the transaction.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;[[Field design#Automatic Fields|CREATE-TIMEUTC]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;(CRTMU)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Captures the Coordinated Universal Time when the record was created, as of the start of the transaction.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;[[Field design)#Automatic Fields|CREATE-USER]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;(CRUS)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Captures the user ID of the user who created the record.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;[[Field design#DATETIME-GE .28DTGE.29.2C DATETIME-GT .28DTGT.29.2C DATETIME-LE .28DTLE.29.2C and DATETIME-LT .28DTLT.29 attributes|DATETIME]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;(DT)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Specifies the format of the date and time data stored in Table B. The default is YYYYMMDDHHMMSSXXXXXX, i.e. to the nearest millionth of a second.&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;[[Field design#DATETIME-GE .28DTGE.29.2C DATETIME-GT .28DTGT.29.2C DATETIME-LE .28DTLE.29.2C and DATETIME-LT .28DTLT.29 attributes|DATETIME-GE]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;(DTGE)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;With DATETIME-GT, DATETIME-LE, and DATETIME-LT, used to establish a range for date/time values. Specifies that the date/time value must be later than or the same as the date/time value that follows. &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;[[Field design#DATETIME-GE .28DTGE.29.2C DATETIME-GT .28DTGT.29.2C DATETIME-LE .28DTLE.29.2C and DATETIME-LT .28DTLT.29 attributes|DATETIME-GT]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;(DTGT)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Specifies that the date/time value must be later than the date/time value that follows.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;[[Field design#DATETIME-GE .28DTGE.29.2C DATETIME-GT .28DTGT.29.2C DATETIME-LE .28DTLE.29.2C and DATETIME-LT .28DTLT.29 attributes|DATETIME-LE]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;(DTLE)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Specifies that the date/time value must be earlier than or the same as the date/time value that follows.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;[[Field design#DATETIME-GE .28DTGE.29.2C DATETIME-GT .28DTGT.29.2C DATETIME-LE .28DTLE.29.2C and DATETIME-LT .28DTLT.29 attributes|DATETIME-LT]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;(DELT)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Specifies that the date/time value must be earlier than the date/time value that follows.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;[[Field design#DEFAULT-VALUE .28DV.29 attribute|DEFAULT-VALUE]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;(DV)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Specifies the value to use for the field when the record is created and no value has been assigned to the field.&lt;br /&gt;
 &lt;br /&gt;
(The value of the STORE-DEFAULT setting determines whether the DEFAULT-VALUE is physically stored on the record or if it is just used as the default value when the field is missing.)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;[[Field design#ESCAPE .28ESC.29 attribute|ESCAPE]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;(ESC)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Specifies an escape character to insert before separator and escape characters in a concatenated field, differentiating those characters from real data. The default value is X&#039;01&#039;.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;[[Field design#AT-MOST-ONE.2C REPEATABLE and EXACTLY-ONE attributes|EXACTLY-ONE]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;(EXONE)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Specifies that a field always has exactly one occurrence in its record or field group context.&lt;br /&gt;
&amp;lt;p&amp;gt;EXACTLY-ONE fields always appear first when output by a Print All Information (PAI) statement.&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;[[Field design#FIELDGROUP attribute|FIELDGROUP]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;(FG)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Specifies the name of the field group that the defined field is associated with (contained within).&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;[[Field design#FLOAT-GE .28FLTGE.29.2C FLOAT-GT .28FLTGT.29.2C FLOAT-LE .28FLTLE.29 and FLOAT-LT .28FLTLT.29 attributes|FLOAT-GE]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;(FLTGE)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;With FLOAT-GT, FLOAT-LE, and FLOAT-LT, used to establish a range for float values when defining a field. Specifies that the float value must be greater than or equal to the value that follows.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;[[Field design#FLOAT-GE .28FLTGE.29.2C FLOAT-GT .28FLTGT.29.2C FLOAT-LE .28FLTLE.29 and FLOAT-LT .28FLTLT.29 attributes|FLOAT-GT]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;(FLTGT)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Specifies that the float value must be greater than the value that follows.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;[[Field design#FLOAT-GE .28FLTGE.29.2C FLOAT-GT .28FLTGT.29.2C FLOAT-LE .28FLTLE.29 and FLOAT-LT .28FLTLT.29 attributes|FLOAT-LE]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;(FLTLE)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Specifies that the float value must be less than or equal to the value that follows.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;[[Field design#FLOAT-GE .28FLTGE.29.2C FLOAT-GT .28FLTGT.29.2C FLOAT-LE .28FLTLE.29 and FLOAT-LT .28FLTLT.29 attributes|FLOAT-LT]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;(FLTLT)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Specifies that the float value must be less than the value that follows.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;[[Field design#INTEGER-GE .28INTGE.29.2C INTEGER-GT .28INTGT.29.2C INTEGER-LE .28INTLE.29 and INTEGER-LT .28INTLT.29 attributes|INTEGER-GE]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;(INTGE)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;With INTEGER-GT, INTEGER-LE, and INTEGER-LT, used to establish a range for integer values when defining a field. Specifies that the integer value must be greater than or equal to the value that follows.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;[[Field design#INTEGER-GE .28INTGE.29.2C INTEGER-GT .28INTGT.29.2C INTEGER-LE .28INTLE.29 and INTEGER-LT .28INTLT.29 attributes|INTEGER-GT]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;(INTGT)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Specifies that the integer value must be greater than the value that follows.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;[[Field design#INTEGER-GE .28INTGE.29.2C INTEGER-GT .28INTGT.29.2C INTEGER-LE .28INTLE.29 and INTEGER-LT .28INTLT.29 attributes|INTEGER-LE]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;(INTLE)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Specifies that the integer value must be less than or equal to the value that follows.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;[[Field design#INTEGER-GE .28INTGE.29.2C INTEGER-GT .28INTGT.29.2C INTEGER-LE .28INTLE.29 and INTEGER-LT .28INTLT.29 attributes|INTEGER-LT]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;(INTLT)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Specifies that the integer value must be less than the value that follows.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;[[Field design#LENGTH-EQ .28LEQ.29 attribute|LENGTH-EQ]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;(LEQ)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Used to set a length constraint when defining a field. Specifies the required length of a field value.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;[[Field design#LENGTH-GE .28LGE.29 attribute|LENGTH-GE]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;(LGE)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Specifies the minimum length of a field value.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;[[Field design#LENGTH-LE .28LLE.29 attribute|LENGTH-LE]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;(LLE)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Specifies the maximum length of a field value.&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;[[Field design#Setting a pattern for a field value: the LIKE attribute|LIKE]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;(LK)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Sets a pattern that to which a field value must conform.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;[[Field design#BLOB.2C CLOB.2C and MINLOBE attributes|MINLOBE]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;(MLBE)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Defines the minimum size of a BLOB or CLOB field value that will be stored in Table E. This avoids wasting Table E pages on small values that could be stored in Table B (or Table X). The default is 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;NO-DOMAIN-CONSTRAINTS&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td/&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Specifies that the field has no [[Field design#Content constraints|content constraint]] attributes. Useful with &amp;lt;var&amp;gt;[[REDEFINE command|REDEFINE]]&amp;lt;/var&amp;gt; to remove existing constraints on a field.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;NO-DEFAULT-VALUE&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;(NDV)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Specifies that the field has no default value. Useful with &amp;lt;var&amp;gt;[[REDEFINE command|REDEFINE]]&amp;lt;/var&amp;gt; to remove an existing default value on a field.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;[[Field design#SEPARATOR .28SEP.29 attribute|SEPARATOR]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;(SEP)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Specifies a separator character used between field values in concatenated fields. The default is X&#039;00&#039;.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;[[Field design#STORE-DEFAULT .28SD.29 and STORE-NULL .28SN.29 attributes|STORE-DEFAULT]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;(SD)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Specifies whether to physically store the default value for the field in each record, if no field value has been supplied and a default is required. The default option is LITERAL (LIT), which stores a literal 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;[[Field design#STORE-DEFAULT .28SD.29 and STORE-NULL .28SN.29 attributes|STORE-NULL]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;(SN)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Specifies whether to physically store the null value for the field in each record, if no field value has been supplied, and a default is required. The default option is LITERAL (LIT), which stores a literal 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;[[Field design#Automatic Fields|UPDATE-TIME]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;(UPTM)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Captures the time when the record was updated, as of the start of the transaction.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;[[Field design#Automatic Fields|UPDATE-TIMEUTC]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;(UPTMU)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Captures the Coordinated Universal Time when the record was updated, as of the start of the transaction.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;[[Field design#Automatic Fields|UPDATE-USER]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;(UPUS)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Captures the user ID of the user who updated the record.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;[[Field design#UTF-8 and UTF-16 attributes|UTF-8]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;(UTF8)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Data is stored in UTF-8 format and is treated as unicode data inside SOUL programs. The default is EBCDIC.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;[[Field design#UTF-8 and UTF-16 attributes|UTF-16]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;(UTF16)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Data is stored in UTF-16 format and is treated as unicode data inside SOUL programs. The default is EBCDIC.&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;
==System management enhancements==&lt;br /&gt;
 &lt;br /&gt;
===Writing records to the SMF data set===&lt;br /&gt;
Having Model 204 write records to the SMF data set no longer requires the installation of an SVC.&lt;br /&gt;
 &lt;br /&gt;
Therefore, the &amp;lt;var&amp;gt;[[SMFSVC parameter|SMFSVC]]&amp;lt;/var&amp;gt; parameter is no longer required and, if present, will be ignored and flagged with the following informational message:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;M204.0204: PARAMETER SMFSVC OBSOLETE AND NOT RESET&amp;lt;/p&amp;gt;&lt;br /&gt;
However, the &amp;lt;var&amp;gt;[[SMFLORN parameter|SMFLORN]]&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;[[SMFSLRN parameter|SMFSLRN]]&amp;lt;/var&amp;gt; parameters must still be present in CCAIN to specify the types of SMF record to be written.&lt;br /&gt;
&lt;br /&gt;
==Performance enhancements==&lt;br /&gt;
 &lt;br /&gt;
===64-bit addressing and Above The Bar (ATB) storage===&lt;br /&gt;
Model 204 moves above the (2G) bar to increase scalability, performance, and growth potential. With this release of Model 204, 64-bit addressing becomes the de facto standard for all subsequent versions.&lt;br /&gt;
 &lt;br /&gt;
In addition to the ATB support for FTBL released with Model 204 version 7.4, version 7.5 adds ATB support for GTBL, NTBL, and QTBL, using the same &amp;lt;var&amp;gt;[[SERVNSA parameter|SERVNSA]]&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;[[SERVNSSZ parameter|SERVNSSZ]]&amp;lt;/var&amp;gt; parameters used for FTBL.&lt;br /&gt;
 &lt;br /&gt;
When using non-swappable ATB server space, each user will get SERVNSSZ bytes of ATB space, even if the thread is logged out or running resident requests. For greater efficiency, Model 204 version 7.5 also provides swappable ATB server areas that can supplement or replace the non-swappable areas. These swappable ATB server areas are controlled by the &amp;lt;var&amp;gt;[[SERVGA parameter|SERVGA]]&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;[[SERVGSZ parameter|SERVGSZ]]&amp;lt;/var&amp;gt; parameters.&lt;br /&gt;
 &lt;br /&gt;
====GTBL, NTBL, QTBL in above the bar storage====&lt;br /&gt;
GTBL, NTBL and QTBL can now be placed into swappable or non-swappable server storage area above the bar.&lt;br /&gt;
&amp;lt;p&amp;gt;In order to store a table in ATB storage:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Increase the &amp;lt;var&amp;gt;[[SERVNSSZ parameter|SERVNSSZ]]&amp;lt;/var&amp;gt; parameter by the corresponding table size.&lt;br /&gt;
&amp;lt;li&amp;gt;Set the proper bit in &amp;lt;var&amp;gt;[[SERVNSA parameter|SERVNSA]]&amp;lt;/var&amp;gt;:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;for GTBL set the second byte to &amp;lt;code&amp;gt;X&#039;80&#039;&amp;lt;/code&amp;gt;, so the value of &amp;lt;var&amp;gt;SERVNSA&amp;lt;/var&amp;gt; is &amp;lt;code&amp;gt;X&#039;00800000&#039;&amp;lt;/code&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;for NTBL set the third byte to &amp;lt;code&amp;gt;X&#039;40&#039;&amp;lt;/code&amp;gt;, so the value of &amp;lt;var&amp;gt;SERVNSA&amp;lt;/var&amp;gt; is &amp;lt;code&amp;gt;X&#039;00004000&#039;&amp;lt;/code&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;for QTBL set the third byte to &amp;lt;code&amp;gt;X&#039;20&#039;&amp;lt;/code&amp;gt;, so the value of &amp;lt;var&amp;gt;SERVNSA&amp;lt;/var&amp;gt; is &amp;lt;code&amp;gt;X&#039;00002000&#039;&amp;lt;/code&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;note&amp;quot;&amp;gt;&#039;&#039;&#039;Note:&#039;&#039;&#039;&lt;br /&gt;
The settings for each server table above the bar are independent of each other.&lt;br /&gt;
So if FTBL, GTBL, NTBL, and QTBL are all placed above the bar, then &amp;lt;var&amp;gt;SERVNSA&amp;lt;/var&amp;gt; should be set to &amp;lt;code&amp;gt;X&#039;02806000&#039;&amp;lt;/code&amp;gt;.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====XmlDoc pages in above the bar buffer pool====&lt;br /&gt;
With this release, the CCATEMP pages used for &amp;lt;var&amp;gt;XmlDoc&amp;lt;/var&amp;gt; objects use the above the bar buffer pool, which may allow the below the bar buffer pool to be reduced, perhaps providing more storage for server areas. It also may provide a reduction in CPU utilization, especially when the &amp;lt;var&amp;gt;[[TEMPPAGE parameter|TEMPPAGE]]&amp;lt;/var&amp;gt; parameter is used to allocate CCATEMP in memory.&lt;br /&gt;
 &lt;br /&gt;
===Improved range searching by Ordered Index (OI) chunk===&lt;br /&gt;
The new &amp;lt;var&amp;gt;[[DEFINE FIELD command#Ordered index CHUNK attribute|CHUNK]]&amp;lt;/var&amp;gt; attribute for the &amp;lt;var&amp;gt;DEFINE FIELD&amp;lt;/var&amp;gt; command enables more efficient range searching on Ordered Index numeric  (&amp;lt;var&amp;gt;ORDERED NUMERIC&amp;lt;/var&amp;gt;) fields. &amp;lt;var&amp;gt;CHUNK&amp;lt;/var&amp;gt; improves performance of  the &amp;lt;var&amp;gt;FIND&amp;lt;/var&amp;gt; statement &amp;lt;var&amp;gt;RANGE&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;BETWEEN&amp;lt;/var&amp;gt; terms. The &amp;lt;var&amp;gt;CHUNK&amp;lt;/var&amp;gt; field attribute defines a subrange (&amp;quot;OI chunk&amp;quot;) of the data range. Searching by OI chunks on a range of data requires fewer scans of the ordered index entries to find the desired data. Once OI chunk fields are defined, they are automatically used by FIND processing, so no application code needs to be changed.&lt;br /&gt;
 &lt;br /&gt;
After defining an &amp;lt;var&amp;gt;ORDERED NUMERIC&amp;lt;/var&amp;gt; field, you define one or more related OI chunk fields containing data from the original base field rounded down by a specified &amp;lt;var&amp;gt;CHUNK&amp;lt;/var&amp;gt; size.&lt;br /&gt;
 &lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;DEFINE FIELD YYYYMMDD WITH ORDERED NUMERIC&lt;br /&gt;
DEFINE FIELD YYYYMM   WITH ORDERED NUMERIC INVISIBLE CHUNK 100 FOR YYYYMMDD&lt;br /&gt;
DEFINE FIELD YYYY     WITH ORDERED NUMERIC INVISIBLE CHUNK 10000 FOR YYYYMMDD&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;var&amp;gt;CHUNK&amp;lt;/var&amp;gt; requires the &amp;lt;var&amp;gt;[[#FILEORG (new settings)|FILEORG]]&amp;lt;/var&amp;gt; X&#039;100&#039; bit setting and the &amp;lt;var&amp;gt;INVISIBLE&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;ORDERED NUMERIC&amp;lt;/var&amp;gt; field attributes.&lt;br /&gt;
 &lt;br /&gt;
==Debugging and testing enhancements==&lt;br /&gt;
The SoftSpy debugging, testing, and performance tuning product is now included as part of the Model&amp;amp;nbsp;204 core product. For more information about SoftSpy version 7.5, see the [[Release notes for SoftSpy V7.5]].&lt;br /&gt;
 &lt;br /&gt;
==Connect&amp;lt;sup&amp;gt;&amp;amp;#9733;&amp;lt;/sup&amp;gt; enhancements==&lt;br /&gt;
The 7.5 version of Connect&amp;lt;sup&amp;gt;&amp;amp;#9733;&amp;lt;/sup&amp;gt; for JDBC and Connect&amp;lt;sup&amp;gt;&amp;amp;#9733;&amp;lt;/sup&amp;gt; for .NET is now available.&lt;br /&gt;
&lt;br /&gt;
===Connect&amp;lt;sup&amp;gt;&amp;amp;#9733;&amp;lt;/sup&amp;gt; for JDBC===&lt;br /&gt;
Connect&amp;lt;sup&amp;gt;&amp;amp;#9733;&amp;lt;/sup&amp;gt; 7.5 for JDBC offers a &amp;quot;connection pooling&amp;quot; class to interface with other pooling infrastructures provided by pooling packages and web application servers. This new feature allows for a pool of connections that remain active and open during execution of an SQL and RCL (SOUL) statement.&lt;br /&gt;
Using connection pooling helps eliminate the overhead of creating initial connections from scratch or trying to&lt;br /&gt;
manage each connection via JDBC API.&lt;br /&gt;
 &lt;br /&gt;
Each Connection Pool can create a pool of active connections maintainable throughout the connection cycle of the pooling service.&lt;br /&gt;
 &lt;br /&gt;
For a sample program, see the &amp;quot;Connect&amp;lt;sup&amp;gt;&amp;amp;#9733;&amp;lt;/sup&amp;gt; for JDBC&amp;quot; chapter of the &amp;lt;var class=&amp;quot;book&amp;quot;&amp;gt;Connect&amp;lt;sup&amp;gt;&amp;amp;#9733;&amp;lt;/sup&amp;gt; Installation and Programming Guide&amp;lt;/var&amp;gt;.&lt;br /&gt;
 &lt;br /&gt;
Connect&amp;lt;sup&amp;gt;&amp;amp;#9733;&amp;lt;/sup&amp;gt; 7.5 for JDBC has been tested with the JNDI, Apache DBCP&amp;lt;sup&amp;gt;TM&amp;lt;/sup&amp;gt;, BoneCP and C3PO pooling packages.&lt;br /&gt;
&lt;br /&gt;
===Connect&amp;lt;sup&amp;gt;&amp;amp;#9733;&amp;lt;/sup&amp;gt; for .NET===&lt;br /&gt;
Connect&amp;lt;sup&amp;gt;&amp;amp;#9733;&amp;lt;/sup&amp;gt; 7.5 for .NET offers both 32-bit and 64-bit drivers that can be used with any Web or GUI-driven application.&lt;br /&gt;
&lt;br /&gt;
==MQ/204 enhancements==&lt;br /&gt;
 &lt;br /&gt;
===Freeing MQ/204 subtasks and associated storage===&lt;br /&gt;
The new &amp;lt;var&amp;gt;MQDELDTP&amp;lt;/var&amp;gt; PST (pseudo subtask)  checks for MQ/204 subtasks that are in a delayed detach state. &amp;lt;var&amp;gt;MQDELDTP&amp;lt;/var&amp;gt; detaches MQ/204 subtasks that have finished their work and releases their associated storage areas.&lt;br /&gt;
 &lt;br /&gt;
==Other features==&lt;br /&gt;
===AT-MOST-ONE and field groups===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The &amp;lt;var&amp;gt;AT-MOST-ONE&amp;lt;/var&amp;gt; attribute is now applicable to a field group definition.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Storing and updating LOBs===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
All large object data (LOBs) in a &amp;lt;var&amp;gt;FILEORG&amp;lt;/var&amp;gt; X&#039;100&#039; file are chained. There are four bytes per Table E page overhead for chained LOBs, used to maintain a queue of pages available for reuse after LOBs are deleted. The pages used by a chained LOB are not necessarily contiguous.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Handling LOBs in &amp;lt;var&amp;gt;FILEORG&amp;lt;/var&amp;gt; X&#039;100&#039; files also has the following effects:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;LOBs can be changed as needed. The &amp;lt;var&amp;gt;RESERVE&amp;lt;/var&amp;gt; clause is ignored in a LOB field &amp;lt;var&amp;gt;ADD&amp;lt;/var&amp;gt; statement processing, as well as the &amp;lt;var&amp;gt;STORE RECORD&amp;lt;/var&amp;gt; statement processing of fieldname=value pairs. Consequently, the &amp;lt;var&amp;gt;CHANGE&amp;lt;/var&amp;gt; statement does not fail because of insufficient reserved space. If the &amp;lt;var&amp;gt;CHANGE&amp;lt;/var&amp;gt; statement requires that a LOB field be extended, it is.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;The value of the &amp;lt;var&amp;gt;[[EHIGHPG parameter|EHIGHPG]]&amp;lt;/var&amp;gt; parameter is always one less than the high water mark of the number of pages used to hold LOBs. (Unless none were ever added, in which case it is zero, not -1).&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;The value of the &amp;lt;var&amp;gt;[[EPGSUSED parameter|EPGSUSED]]&amp;lt;/var&amp;gt; parameter is always the number of pages currently being used to hold LOBs.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;The &amp;lt;var&amp;gt;COMPACTE&amp;lt;/var&amp;gt; command does not process &amp;lt;var&amp;gt;FILEORG&amp;lt;/var&amp;gt; X&#039;100&#039; files, just as it does not process a file created in V6R1 or earlier. Thus, issuing a &amp;lt;var&amp;gt;COMPACTE&amp;lt;/var&amp;gt; command for a &amp;lt;var&amp;gt;FILEORG&amp;lt;/var&amp;gt; X&#039;100&#039; file produces an error message.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;The &amp;lt;var&amp;gt;TABLEE&amp;lt;/var&amp;gt; command is effectively executing a &amp;lt;code&amp;gt;VIEW ESIZE EHIGHPG EPGSUSED&amp;lt;/code&amp;gt; command for a &amp;lt;var&amp;gt;FILEORG&amp;lt;/var&amp;gt; X&#039;100&#039; file. Consequently there are no &amp;lt;var&amp;gt;TABLEE&amp;lt;/var&amp;gt; overhead pages in a &amp;lt;var&amp;gt;FILEORG&amp;lt;/var&amp;gt; X&#039;100&#039; file.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Constraint attributes===&lt;br /&gt;
You can set range constraints on fields using the constraint attributes. Each set of range attributes is comprised of four attributes (&amp;lt;var&amp;gt;GE&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;GT&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;LE&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;LT&amp;lt;/var&amp;gt;) that you can use to establish a range for integer values, float values, or date-time stamp values. The types of range attributes are mutually exclusive. For example, you cannot define a field with the &amp;lt;var&amp;gt;FLOAT-GE&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;INTEGER-LE&amp;lt;/var&amp;gt; attributes.&lt;br /&gt;
 &lt;br /&gt;
If a range constraint is redefined, it replaces the existing field constraint.&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;&lt;br /&gt;
The range constraints do not have to match the data type of the stored field. That is, you could have a date-time constraint for a &amp;lt;var&amp;gt;STRING&amp;lt;/var&amp;gt; field or an integer constraint for a &amp;lt;var&amp;gt;FLOAT&amp;lt;/var&amp;gt; field, and so on.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
You can set the following constraint attributes:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;date-time value&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;pattern for a field value&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;length&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;integer value&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;floating point value&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
See [[Field design#Content constraints|Content constraints]] for details.&lt;br /&gt;
&lt;br /&gt;
===Changes to journal record layouts===&lt;br /&gt;
Four bytes have been added to the journal record header for user statistic entries:&lt;br /&gt;
1 byte to hold the &amp;lt;var&amp;gt;IODEV&amp;lt;/var&amp;gt; number and 3 bytes for future use.&lt;br /&gt;
 &lt;br /&gt;
All user since-last statistics (LAST=) lines will now show the &amp;lt;var&amp;gt;IODEV&amp;lt;/var&amp;gt; value:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;ST $$$ USERID=&#039;&amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;userid&amp;lt;/var&amp;gt;&#039; ACCOUNT=&#039;&amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;accountname&amp;lt;/var&amp;gt;&#039; IODEV=&#039;&amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;devicetype&amp;lt;/var&amp;gt;&#039; LAST=&#039;&amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;acty&amp;lt;/var&amp;gt;&#039;&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
For more information on journal records and user statistics, see the &amp;lt;var class=&amp;quot;book&amp;quot;&amp;gt;Rocket Model 204 System Manager&#039;s Guide&amp;lt;/var&amp;gt;.&lt;br /&gt;
 &lt;br /&gt;
==Compatibility issues==&lt;br /&gt;
This section describes any compatibility issues between V7.5 and prior versions of Model 204.&lt;br /&gt;
An incompatibility arises if an operation that was previously performed without any indication of error, now operates (given the same inputs and conditions) in a different manner.&lt;br /&gt;
 &lt;br /&gt;
A normal bug fix resolving behavior that, although not indicating an error, was &amp;quot;clearly and obviously&amp;quot; incorrect, also introduces an incompatibility, but it might &amp;lt;i&amp;gt;not&amp;lt;/i&amp;gt; be included below.&lt;br /&gt;
 &lt;br /&gt;
===Change to the Ordered Index layout===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Formerly all ORDERED NUMERIC fields came after all ORDERED CHARACTER fields in the Ordered Index. Now, the fields are interspersed in field code order.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===ZFIELD Image===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The [[ZFIELD image detail as of Model 204 V7.5|ZFIELD image]] has been updated for this release. The image is used with $LSTFLD and $FDEF function calls. One change is that FDEF is now longer (to accommodate FDEF1, LOOPVAR, and FDEF2).&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===INTERCOMM is no longer supported===&lt;br /&gt;
The INTERCOMM interface supports the use of Teletype and 3270 terminals in line-at-a-time mode, using the Model 204 IODEV=29 thread type.&lt;br /&gt;
 &lt;br /&gt;
INTERCOMM is no longer supported as of Model 204 version 7.5.&lt;br /&gt;
 &lt;br /&gt;
See the &amp;lt;var class=&amp;quot;book&amp;quot;&amp;gt;Rocket Model 204 Terminal User&#039;s Guide&amp;lt;/var&amp;gt; for a discussion of terminal interfaces.&lt;br /&gt;
 &lt;br /&gt;
===User PDL overflow===&lt;br /&gt;
The new &amp;lt;var&amp;gt;[[Release notes for Model 204 version 7.5 (DRAFT)#SEQPDL parameter|SEQPDL]]&amp;lt;/var&amp;gt; parameter might require you to increase the size of the user Push Down List (using UTABLE LPDLST) by up to 3072 bytes, or more if you specify a value for SEQPDL that is larger than the 4096 default value.&lt;br /&gt;
 &lt;br /&gt;
===LPDLST parameter maximum value===&lt;br /&gt;
The maximum value for the &amp;lt;var&amp;gt;[[LPDLST parameter|LPDLST]]&amp;lt;/var&amp;gt; parameter has been increased from 32760 to 65536.&lt;br /&gt;
 &lt;br /&gt;
===SSLIBSIZE parameter maximum value===&lt;br /&gt;
The maximum value for the &amp;lt;var&amp;gt;JANUS DEFINE&amp;lt;/var&amp;gt; command &amp;lt;var&amp;gt;[[SSLIBSIZE (JANUS DEFINE parameter)|SSLIBSIZE]]&amp;lt;/var&amp;gt; parameter has been decreased from 32767 to 16384.&lt;br /&gt;
 &lt;br /&gt;
==New and changed commands==&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
     ******************************************************************&lt;br /&gt;
     Please keep the following subsections alphabetized by command name&lt;br /&gt;
     ******************************************************************&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
===DECREASE (new option: DYNAMIC)===&lt;br /&gt;
The DYNAMIC option on the &amp;lt;var&amp;gt;[[DECREASE command|DECREASE]]&amp;lt;/var&amp;gt; command lets you decrease Table B dynamically, even if the file is open by others or has requests compiled against it.&lt;br /&gt;
 &lt;br /&gt;
===DEFINE DATASET (new parameter: GDGRECNT)===&lt;br /&gt;
The GDGRECNT parameter for the &amp;lt;var&amp;gt;[[DEFINE DATASET command|DEFINE DATASET]]&amp;lt;/var&amp;gt; command causes Model 204 to check the catalog information for the latest relative GDG generation number whenever allocating a GDG data set.&lt;br /&gt;
 &lt;br /&gt;
===DEFINE FIELD (new or changed attributes)===&lt;br /&gt;
In Model 204 version 7.5, the &amp;lt;var&amp;gt;[[DEFINE FIELD command|DEFINE FIELD]]&amp;lt;/var&amp;gt; command has new attributes information:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;the new &amp;lt;var&amp;gt;[[#Improved range searching by Ordered Index .28OI.29 chunk|CHUNK]]&amp;lt;/var&amp;gt; attribute, which improves the efficiency of range finds using ordered index processing&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;many other &amp;lt;var&amp;gt;[[FILEORG parameter|FILEORG=x&#039;100&#039;]]&amp;lt;/var&amp;gt; related new or changed [[Release notes for Model 204 version 7.5 (DRAFT)#New field attributes|field attributes]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===DEFINE FIELDGROUP (new in V7.5)===&lt;br /&gt;
The &amp;lt;var&amp;gt;[[DEFINE FIELDGROUP command|DEFINE FIELDGROUP]]&amp;lt;/var&amp;gt; command establishes the contents of a field group, including the fields and field groups associated with the field group being defined.&lt;br /&gt;
 &lt;br /&gt;
===DELETE FIELD (changed to handle CAT and CTO fields)===&lt;br /&gt;
The &amp;lt;var&amp;gt;[[DELETE command: Field|DELETE FIELD]]&amp;lt;/var&amp;gt; command has been changed to take [[Field design#CONCATENATION-OF .28CAT.29 attribute|CONCATENATION-OF (CAT)]] and [[Field design#Counting occurrences of a field|COUNT-OCCURRENCES-OF (CTO)]] fields into account. DELETE FIELD does not allow deletion of fields referred to by an existing CAT or CTO field.&lt;br /&gt;
 &lt;br /&gt;
===DELETE FIELDGROUP (new in V7.5)===&lt;br /&gt;
The &amp;lt;var&amp;gt;[[DELETE FIELDGROUP command|DELETE FIELDGROUP]]&amp;lt;/var&amp;gt; command deletes a field group from a Model 204 file.&lt;br /&gt;
 &lt;br /&gt;
===DISPLAY FIELD (new option: COMMA)===&lt;br /&gt;
In Model 204 version 7.5, the &amp;lt;var&amp;gt;[[DISPLAY FIELD command|DISPLAY FIELD]]&amp;lt;/var&amp;gt; command has added&lt;br /&gt;
the &amp;lt;var&amp;gt;COMMA&amp;lt;/var&amp;gt; option, which uses commas to separate displayed field attributes.&lt;br /&gt;
 &lt;br /&gt;
===DISPLAY MODMAP (new in V7.5)===&lt;br /&gt;
&amp;lt;var&amp;gt;[[DISPLAY MODMAP command|DISPLAY MODMAP]]&amp;lt;/var&amp;gt; displays the Model 204 link map in address order. System manager privileges are required.&lt;br /&gt;
===MSGCTL (new options: UP/UPPER, NOUP/NOUPPER)===&lt;br /&gt;
The &amp;lt;var&amp;gt;UP&amp;lt;/var&amp;gt; (or &amp;lt;var&amp;gt;UPPER&amp;lt;/var&amp;gt;) option on the [[MSGCTL command]] indicates that the specified message should be converted to uppercase before display. Similarly, the &amp;lt;var&amp;gt;NOUP&amp;lt;/var&amp;gt; (or &amp;lt;var&amp;gt;NOUPPER&amp;lt;/var&amp;gt;) option on the MSGCTL command undoes the effects of &amp;lt;var&amp;gt;UP&amp;lt;/var&amp;gt; or &amp;lt;var&amp;gt;UPPER&amp;lt;/var&amp;gt;.&lt;br /&gt;
 &lt;br /&gt;
===REGENERATE and REGENERATE ONEPASS (improved TO UPDATE option)===&lt;br /&gt;
The TO UPDATE option of the &amp;lt;var&amp;gt;[[REGENERATE command|REGENERATE]]&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;[[REGENERATE ONEPASS command|REGENERATE ONEPASS]]&amp;lt;/var&amp;gt; commands can now handle multiple files.&lt;br /&gt;
&amp;lt;p&amp;gt;If TO UPDATE &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;nn&amp;lt;/var&amp;gt; OF &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;id&amp;lt;/var&amp;gt; is specified, it must appear only on the first FILE statement, and no other �TO� options are allowed on subsequent files.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;All additional files will be recovered as though they each specified the same &#039;TO UPDATE&#039; option. Once the &#039;end of transaction&#039; is reached, further processing will stop and all inflight transactions will be backed out.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===RENAME FIELDGROUP (new in V7.5)===&lt;br /&gt;
The &amp;lt;var&amp;gt;[[RENAME FIELDGROUP command|RENAME FIELDGROUP]]&amp;lt;/var&amp;gt; command changes the name of a field group.&lt;br /&gt;
 &lt;br /&gt;
===UNICODE (new codepage: 1154)===&lt;br /&gt;
The &amp;lt;var&amp;gt;[[UNICODE command|UNICODE]]&amp;lt;/var&amp;gt; command now accepts 1154 as a codepage name.  This codepage has 92 Unicode characters in the range U+0400 through U+045F, representing the Basic Russian alphabet and all of the Cyrillic extensions excepting the four which have grave accents.&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
     *************************************************************************************&lt;br /&gt;
     End of new/changed command subsections; please keep them alphabetized by command name&lt;br /&gt;
     *************************************************************************************&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
==Reliability enhancements==&lt;br /&gt;
===SEQPDL parameter===&lt;br /&gt;
The new &amp;lt;var&amp;gt;[[SEQPDL parameter|SEQPDL]]&amp;lt;/var&amp;gt; parameter controls the amount of free space that must be present in the user&#039;s Push Down List (PDL) in order for the SOUL sequencer to proceed with the next quad code. The minimum and default value is 4096 bytes. The maximum value is 8192 bytes. SEQPDL is a user resettable parameter and can be set on the user&#039;s parameter line or reset with the UTABLE command.&lt;br /&gt;
 &lt;br /&gt;
Formerly 1024 bytes of PDL free space were hardcoded internally in the Model 204 core. With 1024 bytes there were edge cases where abends would break files, resulting in ERROR 2126 USER&#039;S PUSHDOWN LIST OVERFLOWED. SEQPDL is provided to allow enough PDL space so that all of the lower level journaling routines can process error conditions without breaking files.&lt;br /&gt;
 &lt;br /&gt;
If your applications are using close to the amount of PDL space currently set by the LPDLST value, you might need to increase LPDLST to reflect SEQPDL&#039;s increase in free space.&lt;br /&gt;
 &lt;br /&gt;
==New and changed parameters==&lt;br /&gt;
In addition to the following specific parameter changes, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model 204&amp;lt;/var&amp;gt; parameter descriptions, for example as displayed by the &amp;lt;var&amp;gt;VIEW&amp;lt;/var&amp;gt; command, are now in mixed case (unless translated to uppercase due to &amp;lt;var&amp;gt;[[#UPCASMSG (new in V7.5)|UPCASMSG]]&amp;lt;/var&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; The [[Sirius Mods]] parameters are merged with the &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model 204&amp;lt;/var&amp;gt; base as of &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model 204&amp;lt;/var&amp;gt; version 7.5, and they are available to all version 7.5 customers. The combined set of parameters is displayed on the [[List of Model 204 parameters]] page. The former Sirius parameters in that listing are marked with an &amp;lt;sup&amp;gt;(S)&amp;lt;/sup&amp;gt;. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
     ********************************************************************&lt;br /&gt;
     Please keep the following subsections alphabetized by parameter name&lt;br /&gt;
     ********************************************************************&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===DEFCNTX and APDFCNTX (for $View function only, new in V7.5)===&lt;br /&gt;
The string&lt;br /&gt;
&amp;lt;code&amp;gt;DEFCNTX&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;APDFCNTX&amp;lt;/code&amp;gt; can be used as an&lt;br /&gt;
argument to the &amp;lt;var&amp;gt;[[$VIEW|$View]]&amp;lt;/var&amp;gt; function to&lt;br /&gt;
get the default file or group context. Using these strings is better than using &amp;lt;code&amp;gt;$View(&#039;CURFILE&#039;)&amp;lt;/code&amp;gt; because:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;CURFILE&amp;lt;/code&amp;gt; returns a null string if the default context is a group.&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;CURFILE&amp;lt;/code&amp;gt; is affected by the &amp;lt;var&amp;gt;IN&amp;lt;/var&amp;gt; clause prior to a &amp;lt;var&amp;gt;Begin&amp;lt;/var&amp;gt; command and&lt;br /&gt;
can be affected by the &amp;lt;var&amp;gt;In&amp;lt;/var&amp;gt; clause prior to many SOUL statements.&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
If there is no default context, &amp;lt;code&amp;gt;$View(&#039;DEFCNTX&#039;)&amp;lt;/code&amp;gt; returns a null&lt;br /&gt;
string.&lt;br /&gt;
 &lt;br /&gt;
Otherwise &amp;lt;code&amp;gt;$View(&#039;DEFCNTX&#039;)&amp;lt;/code&amp;gt; returns the type of context (&amp;lt;code&amp;gt;FILE&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;TEMP GROUP&amp;lt;/code&amp;gt;, or&lt;br /&gt;
&amp;lt;code&amp;gt;PERM GROUP&amp;lt;/code&amp;gt;) followed by the file or group name, with trailing blanks&lt;br /&gt;
removed.&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;$View(&#039;APDFCNTX&#039;)&amp;lt;/code&amp;gt; returns the same information based on the default&lt;br /&gt;
context when the APSY was entered, unless that is the same as one of the files or groups in the subsystem&#039;s definition; in that case, the null string is returned.&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; These &amp;lt;code&amp;gt;$View&amp;lt;/code&amp;gt; arguments were implemented as part of&lt;br /&gt;
maintenance to version 7.5 (via zap number 54). They are not available as ordinary parameters on the &amp;lt;var&amp;gt;VIEW&amp;lt;/var&amp;gt; command.&lt;br /&gt;
In version 7.6 of Model 204,&lt;br /&gt;
they will also be available with the &amp;lt;var&amp;gt;VIEW&amp;lt;/var&amp;gt; command.&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===DSPOPT (change to default setting)===&lt;br /&gt;
The default setting for [[DSPOPT parameter|DSPOPT]] has been changed from X&#039;00&#039; to X&#039;01&#039;. The X&#039;01&#039; setting allocates space for servers in memory in chunks of 4K pages, not as a permanent contiguous area. This allocation lets you move fewer 4K pages, keeping the virtual storage allocated for servers in memory less fragmented and possibly using fewer paging tables.&lt;br /&gt;
 &lt;br /&gt;
===ECPSIZE (change to max value)===&lt;br /&gt;
The maximum value setting for [[ECPSIZE parameter|ECPSIZE]] has been increased from 1310680 to 1966020 to accommodate more [[Release notes for Model 204 version 7.5 (DRAFT)#External Call Facility .28ECF.29|External Call Facility]] parameters.&lt;br /&gt;
 &lt;br /&gt;
===FILEORG (new settings)===&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
The &amp;lt;var&amp;gt;[[FILEORG parameter|FILEORG]] X&#039;100&#039;&amp;lt;/var&amp;gt; setting for enhanced data handling files is now available.&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;p&amp;gt;X&#039;100&#039; enables a number of enhancements to the file structure, including: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[[Release notes for Model 204 version 7.5 (DRAFT)#Support for physical field groups|Support for physical field groups]] &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;The definition of as many as 32000 fields in a file &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;System maintained [[Field design#Automatic Fields|Automatic fields]] &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;[[Field design#Field constraints|Field constraints]] providing content validation &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Improved space management of fields containing [[Field design#BLOB, CLOB, and MINLOBE attributes|Large Objects]] &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;[[#New field attributes|New DEFINE FIELD attributes]], such as &amp;lt;var&amp;gt;CHUNK&amp;lt;/var&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If X&#039;100&#039; is selected, the X&#039;80&#039; bit (optimized field extraction files) is automatically set.&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;FILEORG X&#039;200&#039;&amp;lt;/var&amp;gt; setting for large file support is now available. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;p&amp;gt;X&#039;200&#039; allows files to hold up to 48 million records.&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;
===FISTAT (change to X&#039;08&#039; setting)===&lt;br /&gt;
The &amp;lt;var&amp;gt;[[FISTAT parameter|FISTAT]] X&#039;08&#039;&amp;lt;/var&amp;gt; (file full) setting is now automatically cleared in a transaction back out file if table D is increased enough so that DSIZE is greater than or equal to DPGSRES+DPGSUSED.&lt;br /&gt;
 &lt;br /&gt;
===LRETBL (setting increase may be necessary)===&lt;br /&gt;
Because there might be a slight increase in record locking table usage in V7.5, an increase in the value of the &amp;lt;var&amp;gt;[[LRETBL parameter|LRETBL]]&amp;lt;/var&amp;gt; parameter is advised. The amount of the increase is best estimated by multiplying by 16 the &amp;lt;code&amp;gt;HWM HEADERS&amp;lt;/code&amp;gt; value (from a &amp;lt;var&amp;gt;[[MONITOR ENQ command|MONITOR ENQ]]&amp;lt;/var&amp;gt; report), then dividing by the value of the &amp;lt;var&amp;gt;NUSERS&amp;lt;/var&amp;gt; parameter. For example, if &amp;lt;code&amp;gt;HWM HEADERS = 100000&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;NUSERS=2000&amp;lt;/code&amp;gt;, the recommended &amp;lt;var&amp;gt;LRETBL&amp;lt;/var&amp;gt; increase is &amp;lt;code&amp;gt;16*100000/2000&amp;lt;/code&amp;gt;, or 800.&lt;br /&gt;
 &lt;br /&gt;
===MISCOPT (obsolete)===&lt;br /&gt;
The &amp;lt;var&amp;gt;[[MISCOPT parameter|MISCOPT]]&amp;lt;/var&amp;gt; parameter is now obsolete. In Model 204 version 7.5, MISCOPT is still viewable but is not resettable.&lt;br /&gt;
 &lt;br /&gt;
===MODTIM (new in V7.5)===&lt;br /&gt;
The &amp;lt;var&amp;gt;[[MODTIM parameter|MODTIM]]&amp;lt;/var&amp;gt; system parameter displays the most recent assembly date and time of the Model 204 load module.&lt;br /&gt;
 &lt;br /&gt;
===OUTPUT (change to allow OUTPUT=DUMMY)===&lt;br /&gt;
IODEV=3 threads definitions now allow OUTPUT=DUMMY.&lt;br /&gt;
When defining IODEV=3 threads, if output is not required, the OUTPUT parameter can be coded as OUTPUT=DUMMY.&lt;br /&gt;
&amp;lt;p&amp;gt;For example:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;IODEV=3,INPUT=IOD3IN1,OUTPUT=DUMMY&lt;br /&gt;
IODEV=3,INPUT=IOD3IN2,OUTPUT=DUMMY&lt;br /&gt;
IODEV=3,INPUT=IOD3IN3,OUTPUT=DUMMY&amp;lt;/p&amp;gt;&lt;br /&gt;
and so on.&lt;br /&gt;
 &lt;br /&gt;
This means that no DD statement is required for the output data set, and in cases where many&lt;br /&gt;
IODEV=3 threads are defined to simulate a large number of users, this enhancement will reduce the number of DD statements required by one half.&lt;br /&gt;
 &lt;br /&gt;
===RECLOCKO (X&#039;04&#039; bit now ignored)===&lt;br /&gt;
The &amp;lt;var&amp;gt;[[RECLOCKO parameter|RECLOCKO]]&amp;lt;/var&amp;gt; X&#039;04&#039; bit is now ignored, and the extra information of the conflicting user number and lock time are now always available.&lt;br /&gt;
 &lt;br /&gt;
===RESPAGE (new in V7.5)===&lt;br /&gt;
The &amp;lt;var&amp;gt;[[RESPAGE parameter|RESPAGE]]&amp;lt;/var&amp;gt; parameter activates the APSY Precompiled Procedures in storage feature using above the bar pages by specifying a number of 4K operating system pages.&lt;br /&gt;
&lt;br /&gt;
Specifying RESPAGE stores precompiled procedures as resident requests above the bar in the RESPAGE area. Using RESPAGE allows you to substantially increase the resident request area and decrease server swapping of QTBL and NTBL pages.&lt;br /&gt;
&lt;br /&gt;
Also, when RESPAGE is used, RESSIZE is reset and the storage below the bar specified by RESSIZE is no longer used. &lt;br /&gt;
&lt;br /&gt;
Storing resident requests above the bar is independent of tables above the bar. You can use a combination of  resident request and swappable servers ATB to reduce below the bar server sizes and thus increase the number of servers.&lt;br /&gt;
&lt;br /&gt;
===RETRVKEY (change to allow forward retrieve PF key)===&lt;br /&gt;
New in this release, if you specify a non-zero setting of &amp;lt;var&amp;gt;[[RETRVKEY parameter|RETRVKEY]]&amp;lt;/var&amp;gt;:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;If you have set the &amp;lt;code&amp;gt;X&#039;01&#039;&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;X&#039;10&#039;&amp;lt;/code&amp;gt; bits of the &amp;lt;var&amp;gt;[[RETRVOPT parameter|RETRVOPT]]&amp;lt;/var&amp;gt; parameter, you can use a&lt;br /&gt;
&amp;lt;i&amp;gt;forward&amp;lt;/i&amp;gt; retrieve PF key, in addition to the &amp;lt;i&amp;gt;backward&amp;lt;/i&amp;gt; retrieve PF key specified by &amp;lt;var&amp;gt;RETRVKEY&amp;lt;/var&amp;gt;.&lt;br /&gt;
&amp;lt;p class=&amp;quot;note&amp;quot;&amp;gt;&#039;&#039;&#039;Note:&#039;&#039;&#039;&lt;br /&gt;
If either of these bits is set, the &amp;lt;code&amp;gt;X&#039;02&#039;&amp;lt;/code&amp;gt; bit is strongly recommended as well.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The size of the allocated storage area, and hence the number and length of input lines available for retrieval, is specified&lt;br /&gt;
by the value of the &amp;lt;var&amp;gt;[[RETRVBUF parameter|RETRVBUF]]&amp;lt;/var&amp;gt; parameter.&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===SEQPDL (new in V7.5)===&lt;br /&gt;
The &amp;lt;var&amp;gt;[[Release notes for Model 204 version 7.5 (DRAFT)#SEQPDL parameter|SEQPDL]]&amp;lt;/var&amp;gt; parameter controls the amount of free space that must be present in the user&#039;s Push Down List in order for the SOUL sequencer to proceed with the next quad code. SEQPDL allows enough PDL space for the lower level journaling routines to handle error conditions properly without breaking files and causing ERROR 2126 USER&#039;S PUSHDOWN LIST OVERFLOWED.&lt;br /&gt;
 &lt;br /&gt;
===SESMAXTO (new in V7.5)===&lt;br /&gt;
The &amp;lt;var&amp;gt;[[SESMAXTO parameter|SESMAXTO]]&amp;lt;/var&amp;gt; parameter can be used limit the maximum [[Sessions|session]] timeout value or to cause all current closed sessions to be immediately discarded.&lt;br /&gt;
 &lt;br /&gt;
===SMFSVC (obsolete)===&lt;br /&gt;
The &amp;lt;var&amp;gt;[[SMFSVC parameter|SMFSVC]]&amp;lt;/var&amp;gt; parameter is [[Release notes for Model 204 version 7.5 (DRAFT)#Writing records to the SMF data set|obsolete]] as of Model 204 version 7.5.&lt;br /&gt;
===SNAPCTL (change to default setting)===&lt;br /&gt;
The default setting for [[SNAPCTL parameter|SNAPCTL]] has been changed from X&#039;41&#039; (X&#039;44&#039; under CMS) to X&#039;28&#039;. The X&#039;28&#039; setting results in smart snaps &amp;amp;ndash; relatively small snaps with all the information that is likely to be required to diagnose the cause of the snap. This setting allows snaps to be taken quickly, and for those snaps being easily sent to Rocket support with little or no adverse effect on the possibility of diagnosing the cause of the snap.&lt;br /&gt;
&lt;br /&gt;
===UPCASMSG (new in V7.5)===&lt;br /&gt;
The &amp;lt;var&amp;gt;[[UPCASMSG parameter|UPCASMSG]]&amp;lt;/var&amp;gt; parameter can be used to translate messages issued by &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model 204&amp;lt;/var&amp;gt; to uppercase; otherwise (depending on the message being issued) they are displayed in mixed (upper and lower) case.&lt;br /&gt;
&amp;lt;!-- ***************************************************************************************** --&amp;gt;&lt;br /&gt;
&amp;lt;!-- End of new/changed parameter subsections; please keep them alphabetized by parameter name --&amp;gt;&lt;br /&gt;
&amp;lt;!-- ***************************************************************************************** --&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
==Documentation conversion to wiki format==&lt;br /&gt;
Rocket Model 204 documentation is being converted from individual manuals in PDF format to a set of cross-linked HTML articles in this integrated wiki, M204wiki.&lt;br /&gt;
 &lt;br /&gt;
As of Model 204 release 7.5, several manuals are now in wiki format and the rest remain in PDF format, available in the M204 folder of the [http://docs.rocketsoftware.com/nxt/gateway.dll?f=templates$fn=default.htm  Rocket Software Documentation Library].&lt;br /&gt;
 &lt;br /&gt;
For details, see [[Model 204 documentation]].&lt;br /&gt;
 &lt;br /&gt;
==New and updated messages==&lt;br /&gt;
 &lt;br /&gt;
Many messages have been updated and added in this release. See [[New and updated messages in Model 204 version 7.5]] for details.&lt;br /&gt;
 &lt;br /&gt;
[[Category: Release notes]]&lt;/div&gt;</summary>
		<author><name>Mlarocca</name></author>
	</entry>
	<entry>
		<id>https://m204wiki.rocketsoftware.com/index.php?title=Processing_multiply_occurring_fields_and_field_groups&amp;diff=71005</id>
		<title>Processing multiply occurring fields and field groups</title>
		<link rel="alternate" type="text/html" href="https://m204wiki.rocketsoftware.com/index.php?title=Processing_multiply_occurring_fields_and_field_groups&amp;diff=71005"/>
		<updated>2014-08-01T13:44:53Z</updated>

		<summary type="html">&lt;p&gt;Mlarocca: &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;
A single field name that has different values can be stored repeatedly in a record. For example, the field &amp;lt;code&amp;gt;CHILD&amp;lt;/code&amp;gt; in the record shown below is an example of a &amp;lt;b&amp;gt;multiply occurring field&amp;lt;/b&amp;gt;:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;FATHER = JOHN DOE&lt;br /&gt;
CHILD = ELIZABETH&lt;br /&gt;
CHILD = ROBERT&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Any field name except for the following types of fields can be present more than once in a record: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;A NUMERIC RANGE field &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;A sort key &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;A hash key &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;FIELDGROUP overview&amp;quot;&amp;gt;&amp;lt;/div&amp;gt; &amp;lt;!-- This id referenced off the page, e.g., #REDIRECT on FIELDGROUP operations page--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
JOHN DOE might also have a medical record that recorded multiple surgeries, each of which is associated with a surgeon and a date. His record contains repeated instances of these three related fields:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;SURGERY_TYPE&lt;br /&gt;
SURGEON&lt;br /&gt;
SURGERY_DATE &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As of version 7.5 of &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt;, SOUL lets you define these fields as part of a &amp;quot;physical&amp;quot; &amp;lt;b&amp;gt;field group&amp;lt;/b&amp;gt;, which means they are stored, retrieved, and updated as a single instance of, say, the &amp;lt;code&amp;gt;SURGERY&amp;lt;/code&amp;gt; field group. You could define these fields as individual multiply occurring fields and group them logically in your SOUL code, but the physical field group structure has significant processing efficiencies.&lt;br /&gt;
&lt;br /&gt;
Field groups may only be defined for records in files that have the &amp;lt;var&amp;gt;[[FILEORG parameter|FILEORG]]&amp;lt;/var&amp;gt; parameter set to include &amp;lt;code&amp;gt;X&#039;100&#039;&amp;lt;/code&amp;gt;. Information about how to define a field group is found in [[Field group design#Defining a field group|Defining a field group]].&lt;br /&gt;
&lt;br /&gt;
===Special processing for multiply occurring fields and field groups===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Certain SOUL statements operate differently on multiply occurring fields and field groups than on singly occurring fields. SOUL provides special statements and forms of statements that can be used with multiply occurring fields and field groups, notably including the &amp;lt;var&amp;gt;EACH&amp;lt;/var&amp;gt; modifier and subscripts. SOUL also provides for the use of subscripted field references for accessing a particular occurrence of a multiply occurring field or field group.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==FIND statement==&lt;br /&gt;
 &lt;br /&gt;
===Retrieval by an exact occurrence value===&lt;br /&gt;
 &lt;br /&gt;
====Example 1====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Assume this sample record: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;FATHER = JOHN DOE&lt;br /&gt;
CHILD = ELIZABETH&lt;br /&gt;
CHILD = ROBERT&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can use either of these two statements to retrieve the record:    &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;FIND.RECS: FIND ALL RECORDS FOR WHICH&lt;br /&gt;
              CHILD = ELIZABETH&lt;br /&gt;
           END FIND&lt;br /&gt;
 &lt;br /&gt;
FIND.RECS: FIND ALL RECORDS FOR WHICH&lt;br /&gt;
              CHILD = ROBERT&lt;br /&gt;
           END FIND&lt;br /&gt;
&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 record is not retrieved by either of these statements:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;FIND.RECS: FIND ALL RECORDS FOR WHICH&lt;br /&gt;
              CHILD = NOT ELIZABETH&lt;br /&gt;
           END FIND&lt;br /&gt;
 &lt;br /&gt;
FIND.RECS: FIND ALL RECORDS FOR WHICH&lt;br /&gt;
              CHILD = NOT ROBERT&lt;br /&gt;
           END FIND&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Multi-condition range retrievals===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You should pay special attention to the effect of multiply occurring fields on multi-condition range retrievals. Undesirable results can occur if a range search is specified for a multiply occurring field. For example:    &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;FIND.RECS: FIND ALL RECORDS FOR WHICH&lt;br /&gt;
              CHILD IS AFTER KEN AND BEFORE PAUL&lt;br /&gt;
           END FIND&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
retrieves the sample record even though neither child&#039;s name in the sample is between KEN and PAUL. &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; evaluates each condition of the FIND separately, then combines the results of each evaluation to build the set of records satisfying all conditions. The BETWEEN operator behaves exactly like any other multi-condition range retrieval when used on a multiply occurring field.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If a range search must be performed on a multiply occurring field, use the IN RANGE clause of the FIND statement. Refer to [[Record retrievals#NUMERIC RANGE and ORDERED NUMERIC attributes|NUMERIC RANGE and ORDERED NUMERIC attributes]] for more information about the IN RANGE clause. Better code for the previous example is: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;FIND.RECS: FIND ALL RECORDS FOR WHICH&lt;br /&gt;
              CHILD IS ALPHA IN RANGE&lt;br /&gt;
              AFTER KEN AND BEFORE PAUL&lt;br /&gt;
           END FIND&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Use of subscripts===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You cannot use subscripted references with the FIND statement. Refer to [[#Subscripts|Subscripts]] for more information about using subscripts with multiply occurring fields.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
==NOTE statement==&lt;br /&gt;
 &lt;br /&gt;
===Only first occurrence is noted===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The NOTE statement notes only the first occurrence of a multiply occurring field. For example, only the first occurrence of the field (CHILD = ELIZABETH) are noted by:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;KEEP.CHILD: NOTE CHILD&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Use of subscripts===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
In order to note a particular occurrence of a multiply occurring field, the field name must be subscripted. Refer to the discussion of subscripts on [[#Subscripts|Subscripts]] for detailed information on subscripted field names and usage.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
==PRINT and PRINT n statements==&lt;br /&gt;
 &lt;br /&gt;
===PRINT statement output format===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The  PRINT statement prints only the first occurrence of a field in a record. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If there is more than one value of a field in a record, the special modifier, EACH, can be used in a PRINT statement to print out all the values on a single line, with a single space between values.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Example 1====&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;PRINT EACH INCIDENT&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
yields:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;output&amp;quot;&amp;gt;T1 T2 T1 T3 T2 T1&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Example 2====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If the field is given a column position, as in:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;PRINT FULLNAME WITH EACH INCIDENT AT COLUMN 18&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
values are printed one to a line and positioned at the column specified. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;output&amp;quot;&amp;gt;ABBOTT, GAIL H   T1                       -&lt;br /&gt;
                 T3                       -&lt;br /&gt;
                 T1                       -&lt;br /&gt;
                 T3                       -&lt;br /&gt;
                 T2                       -&lt;br /&gt;
                 T1 &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Example 3====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
A field cited in a PRINT statement after a multiply occurring field is printed on the same line as the last value of the multiply occurring field. If you change the PRINT statement in the sample request as here:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;PRINT FULLNAME WITH EACH INCIDENT AT COLUMN 18    -&lt;br /&gt;
      WITH POLICY NO AT COLUMN 23                 -&lt;br /&gt;
       WITH STATE AT COLUMN 32&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
This output results:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;output&amp;quot;&amp;gt;ABBOTT, GAIL H   T1                               -&lt;br /&gt;
                 T3                               -&lt;br /&gt;
                 T1                               -&lt;br /&gt;
                 T3                               -&lt;br /&gt;
                 T2                               -&lt;br /&gt;
                 T1   100340   CALIFORNIA&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Use of subscripts===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
See [[#PRINT statement|PRINT statement]] for a description of using PRINT with subscripts.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===PRINT n statement===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Long fields, such as abstracts, evaluations, or statements of purpose, can be stored as a multiply occurring field. Each occurrence can contain as many as 255 characters.  &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Syntax====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can use this PRINT statement to print such a field as a paragraph:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;PRINT &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;n fieldname&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;n&amp;lt;/var&amp;gt; must be a number less than 32,768.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Output format====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The &amp;lt;var&amp;gt;PRINT n&amp;lt;/var&amp;gt; statement prints up to n lines of text, composed of all of the occurrences of the field concatenated in order. Nothing is inserted. At most, n lines are printed; any extra lines are ignored.    &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Ordinarily, a PRINT statement that produces more than one line inserts a hyphen in the continuation column of the output device. Instead of using the continuation column, this form of PRINT attempts to end each line with a complete word delimited by spaces. If there is insufficient space to fit the last word on a line, the word is hyphenated arbitrarily and continued on the next line. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The AT COLUMN and TO COLUMN clauses can be used to adjust the output to a narrower column. When used together with PRINT n, text is broken at word boundaries to fit within the column. The AT clause does not affect the first line, and the TO clause does not affect the last line (unless the line limit n is exceeded). This allows indenting.      &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The AT or TO column options cannot accept negative numbers or numbers greater than 32767 for the column. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Procedures containing PRINT statements with negative numbers or numbers greater than 32767 fail at compile time with the following counting error message:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;M204.0263: AT/TO MUST BE BETWEEN 1 AND 32767&lt;br /&gt;
&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 the use of the &amp;lt;var&amp;gt;PRINT n&amp;lt;/var&amp;gt; statement.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;BEGIN&lt;br /&gt;
            PRINT &#039;1234567890123456&#039;&lt;br /&gt;
            STORE RECORD&lt;br /&gt;
               TEXT = &#039;NOW IS THE T&#039;&lt;br /&gt;
               TEXT = &#039;IME FOR&#039;&lt;br /&gt;
               TEXT = &#039; ALL GOOD MEN TO&#039;&lt;br /&gt;
               ITEM = 1&lt;br /&gt;
            END STORE&lt;br /&gt;
FD.REC:     FIND ALL RECORDS FOR WHICH&lt;br /&gt;
               ITEM = 1&lt;br /&gt;
            END FIND&lt;br /&gt;
            FOR 1 RECORD IN FD.REC&lt;br /&gt;
 &lt;br /&gt;
PRINT.TEXT:    PRINT &amp;lt;nowiki&amp;gt;&#039;&#039;&amp;lt;/nowiki&amp;gt; AT COLUMN 5 WITH 3 TEXT -&lt;br /&gt;
                  AT COLUMN 3 TO 16&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 output produced is:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;output&amp;quot;&amp;gt;1234567890123456&lt;br /&gt;
    NOW IS THE&lt;br /&gt;
  TIME FOR ALL&lt;br /&gt;
  GOOD MEN TO&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;PRINT.TEXT&amp;lt;/code&amp;gt; statement concatenates a null value (two single quotes with no space between them) with the &amp;lt;var&amp;gt;PRINT n&amp;lt;/var&amp;gt; form to indent the first line of text by using the location of the null value (column 5).&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Note that the printing stops short of column 16 to avoid truncating TIME and GOOD.  &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Use with subscripts====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You cannot use subscripted references with the PRINT n statement. Refer to [[#Subscripts|Subscripts]] for more information about using subscripts with multiply occurring fields.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
==ADD, CHANGE, and DELETE statements==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The ADD and CHANGE statements, and both forms of the DELETE statement, are supported in remote file and scattered group contexts.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===ADD statement===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The ADD statement places new occurrences of a field after existing occurrences. For example, if new children are added to the sample record, the additions are placed last. Thus:    &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;ADD CHILD = SARAH&lt;br /&gt;
ADD CHILD = PATRICK&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
results in the record:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;output&amp;quot;&amp;gt;FATHER = JOHN DOE&lt;br /&gt;
CHILD = ELIZABETH&lt;br /&gt;
CHILD = ROBERT&lt;br /&gt;
CHILD = SARAH&lt;br /&gt;
CHILD = PATRICK&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====The INSERT statement====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If the order of occurrence is important, the INSERT statement can be used to add new occurrences. See the discussion on [[#INSERT statement|INSERT statement]]. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===CHANGE statement===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The CHANGE statement alters only the first occurrence of a field in a record. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Syntax====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can use this form of the CHANGE statement if there is more than one occurrence:    &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;CHANGE &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;fieldname&amp;lt;/span&amp;gt; = &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;value1&amp;lt;/span&amp;gt; TO &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;value2&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
This form, like the &amp;lt;var&amp;gt;CHANGE fieldname&amp;lt;/var&amp;gt; statement, can be used only inside a FOR EACH RECORD loop. It deletes the first occurrence of the pair fieldname = value1 from a record, and adds the pair fieldname = value2 to the record. The new value is added either in the position occupied by the original value or at the end of the record, depending upon the update attribute specified for the field by the file manager. See the discussion in [[#UPDATE field attribute|UPDATE field attribute]].    &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If the specified field, &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;fieldname&amp;lt;/var&amp;gt; = &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;value1&amp;lt;/var&amp;gt;, does not appear in the record, &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;fieldname&amp;lt;/var&amp;gt; = &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;value2&amp;lt;/var&amp;gt; is simply added to the record. If the specified &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;fieldname&amp;lt;/var&amp;gt; = &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;value1&amp;lt;/var&amp;gt; pair appears more than once in the record, only the first occurrence of it is deleted. The pair, &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;fieldname&amp;lt;/var&amp;gt; = &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;value2&amp;lt;/var&amp;gt;, is added just once. Occurrences of the field name that have other values are not altered by the statement.    &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===DELETE statement===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The DELETE statement deletes only the first occurrence of the field in the record by default. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Two forms of DELETE statement====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
For multiply occurring fields, two forms of the DELETE statement are provided; however only for use inside a FOR EACH RECORD loop:    &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;To delete... &amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Syntax &amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Usage&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;A particular occurrence &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td nowrap&amp;gt;DELETE &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;td&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
To delete the first occurrence of the pair, &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;fieldname&amp;lt;/var&amp;gt; = &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;value&amp;lt;/var&amp;gt;, from a record. Occurrences of the field that have other values are not removed. If the field with the specified value:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Occurs more than once in the record, only the first occurrence is deleted. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Cannot be found, no deletion occurs.&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;Every occurrence of the field in the record &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;DELETE EACH &amp;lt;i&amp;gt;fieldname&amp;lt;/i&amp;gt;   &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;To delete all occurrences of the specified field name. The field to be deleted cannot have the INVISIBLE attribute.  &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;
====Use with the FOR EACH OCCURRENCE statement====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
See [[#Deleting occurrences of fields and field groups|Deleting occurrences]] for a discussion of deleting occurrences using the FOR EACH OCCURRENCE OF (FEO) statement.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Use with subscripts====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
See [[#DELETE statement|DELETE statement]] for a discussion of using the DELETE statement with subscripts.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
==SORT RECORDS statement==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When a multiply occurring field is chosen as a sort key, each record in the set being sorted is processed once using the first occurrence of the field as the key. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===EACH modifier with one sort field===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If the EACH modifier is present in the SORT statement and if there are n occurrences of the field in the record, similar records are created in the sorted copy of the original set. &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 request:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;SORT RECORDS IN FIND.RECS BY EACH KEY&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
generates three temporary records for the single permanent record in which the field named &amp;lt;code&amp;gt;KEY&amp;lt;/code&amp;gt; occurs three times:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;KEY = COMPUTER&lt;br /&gt;
KEY = CORPORATION&lt;br /&gt;
KEY = AMERICA&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The records generated are:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;output&amp;quot;&amp;gt;1 KEY = COMPUTER          2 KEY = CORPORATION&lt;br /&gt;
  KEY = CORPORATION         KEY = AMERICA&lt;br /&gt;
  KEY = AMERICA             KEY = COMPUTER&lt;br /&gt;
 &lt;br /&gt;
3 KEY = AMERICA&lt;br /&gt;
  KEY = COMPUTER&lt;br /&gt;
  KEY = CORPORATION&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
These correspond to the &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;n&amp;lt;/var&amp;gt; cyclic permutations of the set of field occurrences and, in this example, are sorted into the order 3, 1, 2 (if no other option is selected). Statements that refer to the sorted set, such as PRINT, PRINT EACH, NOTE, and PRINT ALL INFORMATION (PAI), reflects the permutation. No record is generated if &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;n&amp;lt;/var&amp;gt; = 0.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===EACH modifier with several key fields===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When the EACH option is selected for several keys, &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;n&amp;lt;/var&amp;gt; occurrences of one key and &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;m&amp;lt;/var&amp;gt; of another produce differently permuted records. If either &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;n&amp;lt;/var&amp;gt; or &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;m&amp;lt;/var&amp;gt; equal 0, no records are generated. &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:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;BEGIN&lt;br /&gt;
FIND.RECS: IN CLIENTS FIND ALL RECORDS FOR WHICH&lt;br /&gt;
              INCIDENT = T1&lt;br /&gt;
           END FIND&lt;br /&gt;
SORT.RECS: SORT RECORDS IN FIND.RECS BY FULLNAME -&lt;br /&gt;
              AND EACH INCIDENT DATE&lt;br /&gt;
           FOR EACH RECORD IN SORT.RECS&lt;br /&gt;
              PRINT FULLNAME WITH INCIDENT DATE  -&lt;br /&gt;
                AT COLUMN 25&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;
produces printed output of:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;output&amp;quot;&amp;gt;ABBOTT, FRANKLIN G     860323&lt;br /&gt;
ABBOTT, GAIL H         861022&lt;br /&gt;
ABRAMS, RUTH Z         861115&lt;br /&gt;
ABRAMS, RUSSELL Y      870218&lt;br /&gt;
ABBOTT, FRANKLIN G     870424&lt;br /&gt;
ABBOTT, GAIL H         871123&lt;br /&gt;
      .                   .&lt;br /&gt;
      .                   .&lt;br /&gt;
      .                   .&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===If no occurrences are present===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
A record that does not contain at least one occurrence of the INCIDENT DATE field produces no printed output. Similarly:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;SORT RECORDS IN FIND.RECS BY EACH A AND EACH B&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
would produce nothing for those records that do not have at least one occurrence of both A and B.  &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 FOR EACH RECORD IN ORDER BY statement retrieves and loops on only the first occurrence of a field in a record. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===EACH modifier===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If there is more than one value of a field in a record, the special modifier, EACH, can be used to retrieve and loop on all values of the field.        &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The EACH modifier only can be used on a FOR EACH RECORD statement that specifies index order processing (the IN ORDER BY fieldname clause must be used and the field must have the ORDERED attribute). The VALUE IN phrase must be used to retrieve the current value of the ORDERED field driving the loop.      &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 of the FOR EACH RECORD IN ORDER BY statement:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;BEGIN&lt;br /&gt;
FR1:  FOR EACH RECORD IN ORDER BY EACH INCIDENT DATE&lt;br /&gt;
         PRINT VALUE IN FR1 WITH FULLNAME AT COLUMN 25&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;
returns each record in order by each value of the ORDERED field, as follows:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;output&amp;quot;&amp;gt;760323          ABBOTT, FRANKLIN G&lt;br /&gt;
761022          ABBOTT, GAIL H&lt;br /&gt;
761115          ABRAMS, RUTH Z&lt;br /&gt;
770218          ABRAMS, RUSSELL Y&lt;br /&gt;
   .&lt;br /&gt;
   .&lt;br /&gt;
   .&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
==Special statements for multiply occurring fields and field groups==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
SOUL provides several statements for handling multiply occurring fields and [[Field group design|field groups]]. Field groups are supported as of Model 204 version 7.5.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;COUNT OCCURRENCES (used with singly occurring fields, too)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;FOR ALL OCCURRENCES OF FIELDGROUP &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;FOR EACH OCCURRENCE (used with singly occurring fields, too)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;FOR FIELDGROUP&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;DELETE EACH OCCURRENCE&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;Note:&amp;lt;/b&amp;gt; See also the [[#INSERT statement|INSERT statement]], which you can use to add new occurrences of a field.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===COUNT OCCURRENCES OF statement===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The COUNT OCCURRENCES OF (CTO) statement counts the number of occurrences of the named field in the current record. &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 COUNT OCCURRENCES statement is:&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;label&amp;lt;/span&amp;gt;: COUNT OCCURRENCES OF &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;fieldname&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
or&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;label&amp;lt;/span&amp;gt;: CTO &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;fieldname&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 field name cannot be subscripted. The COUNT OCCURRENCES OF statement can appear only within a FOR EACH RECORD loop.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The COUNT OCCURRENCES statement is supported in remote file and scattered group contexts.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====COUNT IN clause====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The COUNT IN clause refers to the count obtained by the COUNT OCCURRENCES OF statement. This request:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;BEGIN&lt;br /&gt;
FIND.RECS:  IN VEHICLES FIND ALL RECORDS&lt;br /&gt;
            END FIND&lt;br /&gt;
            FOR 5 RECORDS IN FIND.RECS&lt;br /&gt;
NO.OF.VINS:    COUNT OCCURRENCES OF VIN&lt;br /&gt;
               PRINT OWNER POLICY WITH &#039; INSURES &#039; WITH -&lt;br /&gt;
                  COUNT IN NO.OF.VINS WITH &#039; VEHICLE(S)&#039;&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;
generates the following output:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;output&amp;quot;&amp;gt;100025 INSURES 1 VEHICLE(S)&lt;br /&gt;
100030 INSURES 1 VEHICLE(S)&lt;br /&gt;
100032 INSURES 1 VEHICLE(S)&lt;br /&gt;
100051 INSURES 1 VEHICLE(S)&lt;br /&gt;
100058 INSURES 1 VEHICLE(S)&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===FOR ALL OCCURRENCES OF FIELDGROUP (FAO FIELDGROUP) statement===&lt;br /&gt;
The FAO statement collects the field group IDs for all occurrences, then processes against that list.  FAO is &amp;lt;em&amp;gt;not valid&amp;lt;/em&amp;gt; for use against multiply-occurring fields, only against field groups (introduced in Model 204 V7.5).&lt;br /&gt;
 &lt;br /&gt;
====Syntax====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The format of the statement is:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;FOR ALL OCCURRENCES OF FIELDGROUP (&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;fgname&amp;lt;/span&amp;gt; | %%&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;varGrp&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;fgname&amp;lt;/var&amp;gt; specifies a field group name.&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;varGrp&amp;lt;/var&amp;gt; specifies a field group name variable.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
The difference between an FAO statement and an FEO statement is that the FAO statement is less affected by insertions or deletions of FIELDGROUP &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;fgname&amp;lt;/var&amp;gt; within the loop, due to the semantics of field group IDs. This means that deleting the current occurrence within the loop will not affect occurrences referenced in subsequent iterations.&lt;br /&gt;
&lt;br /&gt;
===FOR EACH OCCURRENCE OF loops===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
On each loop of FOR EACH OCCURRENCE OF (FEO), the VALUE IN and OCCURRENCE IN labels refer to value and position, respectively, of the next field occurrence, starting with occurrence 1 and increasing by 1 for each pass through the loop. When the next field occurrence number is greater than the number of field occurrences in the record, the loop terminates. &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 FOR EACH OCCURRENCE loop is:&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;label&amp;lt;/span&amp;gt;: FOR EACH OCCURRENCE OF &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;fieldname&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Alternatively,&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;label&amp;lt;/span&amp;gt;: FEO &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;fieldname&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 FOR EACH OCCURRENCE OF statement is supported in remote file and scattered group contexts.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To work with specific field values inside an FEO loop, two styles of reference are supported: OCCURRENCE IN {label}, which is used as a field subscript, and VALUE IN {label} with is a direct reference to a field occurrence.&lt;br /&gt;
 &lt;br /&gt;
====Example====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Consider this record:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;FIRST NAME = RICHARD&lt;br /&gt;
LAST NAME = SMITH&lt;br /&gt;
CHILD = HENRY&lt;br /&gt;
CHILD = SALLY&lt;br /&gt;
CHILD = JANE&lt;br /&gt;
ADDRESS = AVON DRIVE&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
This request creates a separate record for each child.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;BEGIN&lt;br /&gt;
FD.REC:     FIND ALL RECORDS FOR WHICH&lt;br /&gt;
               FIRST NAME = RICHARD&lt;br /&gt;
               LAST NAME = SMITH&lt;br /&gt;
            END FIND&lt;br /&gt;
            FOR EACH RECORD IN FD.REC&lt;br /&gt;
NOTE.ADD:      NOTE ADDRESS&lt;br /&gt;
CHILD.LOOP:    FOR EACH OCCURRENCE OF CHILD&lt;br /&gt;
                  PRINT VALUE IN CHILD.LOOP&lt;br /&gt;
                  STORE RECORD&lt;br /&gt;
                     FIRST NAME = VALUE IN CHILD.LOOP&lt;br /&gt;
                     LAST NAME = SMITH&lt;br /&gt;
                     ADDRESS = VALUE IN NOTE.ADD&lt;br /&gt;
                  END STORE&lt;br /&gt;
               END FOR&lt;br /&gt;
            END FOR&lt;br /&gt;
END&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Simulating a FOR EACH VALUE loop====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The FOR EACH OCCURRENCE OF statement can be used to simulate a FOR EACH VALUE loop if the field contains a static collection of known values. Consider the values of states. The user sets up a single record that has a multiply occurring field in sorted sequence as follows:   &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;TYPE = STATE&lt;br /&gt;
CODE = ALABAMA&lt;br /&gt;
CODE = ARKANSAS&lt;br /&gt;
     .&lt;br /&gt;
     .&lt;br /&gt;
CODE = WYOMING&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
These statements begin a request to generate a report in order by state:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;BEGIN&lt;br /&gt;
FIND.TYPE: FIND ALL RECORDS FOR WHICH&lt;br /&gt;
              TYPE = STATE&lt;br /&gt;
           END FIND&lt;br /&gt;
           FOR EACH RECORD IN FIND.TYPE&lt;br /&gt;
EACH.CODE:    FOR EACH OCCURRENCE OF CODE&lt;br /&gt;
FIND.STATE:      FIND ALL RECORDS FOR WHICH&lt;br /&gt;
                    STATE = VALUE IN EACH.CODE&lt;br /&gt;
                 END FIND&lt;br /&gt;
                 FOR EACH RECORD IN FIND.STATE&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;
This method has the advantage of eliminating the internal sort required by FOR EACH VALUE IN ORDER and provides an easy way to simulate a FOR EACH VALUE loop for a field that does not have the FRV or ORDERED attribute. However, a change in the list of values can require a recreation of the TYPE record to keep the values in order. Recreation is not required if the UPDATE IN PLACE field attribute has been specified for the CODE field and if the new and old values occupy the same place in order. Recreation also is not required if the [[#INSERT statement|INSERT statement]] is used correctly. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====VALUE IN with FOR EACH OCCURRENCE loops====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
VALUE IN references to FOR EACH OCCURRENCE (FEO) statements from outside the FEO loop does not compile. Such references receive the following error message:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;M204.0311 UNACCEPTABLE STATEMENT REFERENCE&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
At runtime, the space occupied in STBL by the FEO value is reclaimed after each iteration of the FEO loop (including the last). This results in a reduction in the runtime STBL space requirements of some programs that use FEO.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
To avoid getting that error, move the value into a %variable inside the FEO loop, and then reference the %variable outside the FEO loop.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====FOR EACH OCCURRENCE against INVISIBLE fields====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Using FOR EACH OCCURRENCE (FEO) syntax against INVISIBLE fields is a waste of processing time. An FEO causes a scan of the current Table B record, but INVISIBLE fields are not stored in Table B, so an FEO against an INVISIBLE field can never find any occurrences. Prior to V4R2.0 this programming flaw was masked because using FEO syntax against an INVISIBLE field compiled and evaluated successfully, although it never found occurrences. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Beginning in V4R2.0, FEO syntax against an INVISIBLE field results in compilation error:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;M204.0320 Field is invisible. Field = &amp;lt;i&amp;gt;fieldname&amp;lt;/i&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Deleting occurrences of fields and field groups===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The DELETE EACH statement can be used to delete all occurrences.   &amp;lt;/p&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; You must take care when deleting occurrences of a field or fieldgroup using the FOR EACH OCCURRENCE loop.  When used to delete occurrences, and without a numbered occurrence reference on the field name, the first 50% of occurrences of a multiply occurring field are deleted. If there are an odd number of occurrences of the field on the record, the first half, up to and including the middle occurrence, are deleted.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Example====&lt;br /&gt;
Suppose the following statement is specified for the &amp;lt;code&amp;gt;RICHARD SMITH&amp;lt;/code&amp;gt; record described previously:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;       for each occurrence in fd.rec&lt;br /&gt;
del.child: for each occurrence of child&lt;br /&gt;
              delete child&lt;br /&gt;
           end for&lt;br /&gt;
       end for&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The record originally contained these &amp;lt;code&amp;gt;CHILD&amp;lt;/code&amp;gt; entries:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;CHILD=HENRY&lt;br /&gt;
CHILD=SALLY&lt;br /&gt;
CHILD=JANE&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
On the first pass through the loop, the first value, &amp;lt;code&amp;gt;HENRY&amp;lt;/code&amp;gt;, is selected and deleted. At the end of the first pass, the record contains these &amp;lt;code&amp;gt;CHILD&amp;lt;/code&amp;gt; entries:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;CHILD=SALLY&lt;br /&gt;
CHILD=JANE&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
On the second pass through the loop, the &amp;lt;code&amp;gt;DELETE CHILD&amp;lt;/code&amp;gt; statement again deletes the first occurrence of the field as described in [[#DELETE statement|DELETE statement]]. Since &amp;lt;code&amp;gt;HENRY&amp;lt;/code&amp;gt; has already been deleted, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; deletes the first entry, &amp;lt;code&amp;gt;SALLY&amp;lt;/code&amp;gt;.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
After the second pass, the &amp;lt;var&amp;gt;FOR EACH OCCURRENCE&amp;lt;/var&amp;gt; loop terminates. This is because the value in &amp;lt;code&amp;gt;DEL.CHILD&amp;lt;/code&amp;gt; should be the next (third) occurrence, but after two passes, only one occurrence remains on the record. Therefore, at the end of the &amp;lt;var&amp;gt;FOR EACH OCCURRENCE&amp;lt;/var&amp;gt; loop, the remaining value in the &amp;lt;code&amp;gt;CHILD&amp;lt;/code&amp;gt; field is:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;CHILD=JANE&lt;br /&gt;
&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; In general, it is a mistake to reference a multiply occurring field in an &amp;lt;var&amp;gt;FEO&amp;lt;/var&amp;gt; loop without using an occurrence subscript. An unsubscripted reference always refers to the first occurrence of a field.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Example 2====&lt;br /&gt;
Now suppose an occurrence reference is added to the field in the &amp;lt;var&amp;gt;FEO&amp;lt;/var&amp;gt; loop:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;       for each record in fd.rec&lt;br /&gt;
del.child: for each occurrence of child&lt;br /&gt;
              delete child(occurrence in del.child)&lt;br /&gt;
           end for&lt;br /&gt;
       end for&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The above will result in &amp;lt;em&amp;gt;every other&amp;lt;/em&amp;gt; occurrence being deleted, because the occurrence reference continues to increment upward while the list of occurrences is also shifted, so the second time through the loop, the occurrence pointer is pointing to the item that was formerly the third item, then the fifth item, then the seventh item.  Again, this is generally not what the programmer intends.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;The solution is either:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Use the &amp;lt;var&amp;gt;DELETE EACH&amp;lt;/var&amp;gt; syntax.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Loop over the occurrences in reverse order. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
There is no specific syntax for reversing the order of an &amp;lt;var&amp;gt;FEO&amp;lt;/var&amp;gt; loop, so you must count the occurrences and step backward through them in an index loop, like this:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;childCount: -&lt;br /&gt;
   count occurrences of child&lt;br /&gt;
   for each record in %myRecordSet&lt;br /&gt;
      for %x from count in childCount to 1 by -1&lt;br /&gt;
         delete child(%x)&lt;br /&gt;
      end for&lt;br /&gt;
   end for&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;Stepping backward through a set is also the standard practice in &amp;lt;var&amp;gt;StringList&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;NamedArrayList&amp;lt;/var&amp;gt; objects, when deletions may occur. This technique is especially worth keeping in mind in situations where only some occurrences may be deleted.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;When using field groups, the &amp;lt;var&amp;gt;FOR ALL OCCURRENCES&amp;lt;/var&amp;gt; syntax, introduced with Model 204 V7.5, performs as expected.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Deleting with an FEO FIELDGROUP versus FAO FIELDGROUP loop====&lt;br /&gt;
An &amp;lt;var&amp;gt;FEO FIELDGROUP&amp;lt;/var&amp;gt; statement on field groups has the same semantics as an &amp;lt;var&amp;gt;FEO&amp;lt;/var&amp;gt; statement on a single field. When you iterate in an &amp;lt;var&amp;gt;FEO FIELDGROUP&amp;lt;/var&amp;gt; or &amp;lt;var&amp;gt;FEO&amp;lt;/var&amp;gt; loop, the next occurrence processed is the occurrence number one greater than the one processed before, whether or not it is one you have already processed (because of insertions) or whether or not you skip one or more (because of deletions). For example:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Following the standard behavior for moving &amp;lt;em&amp;gt;forward&amp;lt;/em&amp;gt; through a set of occurrences in an &amp;lt;var&amp;gt;FEO&amp;lt;/var&amp;gt; loop, &amp;lt;var&amp;gt;FEO FIELDGROUP&amp;lt;/var&amp;gt; deletes &amp;lt;i&amp;gt;every other&amp;lt;/i&amp;gt; occurrence of the field group:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;xon: -&lt;br /&gt;
   feo fieldgroup vehicle&lt;br /&gt;
      delete fieldgroup(occurrence in xon)&lt;br /&gt;
   end for&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
This behavior is a historical anomaly, but it is maintained for backward compatibility purposes. &amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;To delete &amp;lt;i&amp;gt;all&amp;lt;/i&amp;gt; occurrences of a field group, use an &amp;lt;var&amp;gt;FAO FIELDGROUP&amp;lt;/var&amp;gt; statement:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;fao fieldgroup vehicle&lt;br /&gt;
      delete fieldgroup&lt;br /&gt;
end for&lt;br /&gt;
&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===FOR FIELDGROUP statement===&lt;br /&gt;
The FOR FIELDGROUP statement operates on a specific occurrence of a field group. The occurrence is indicated by either an occurrence number or a field group ID number. &lt;br /&gt;
 &lt;br /&gt;
====Syntax====&lt;br /&gt;
The format of the statement is:&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;FOR FIELDGROUP (&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;fgname&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;varFgname&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;literal&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;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;occurrence-number&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;literal&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;term&amp;quot;&amp;gt;fieldgroupID&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;
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;fgname&amp;lt;/var&amp;gt; specifies a field group name. &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;varGrp&amp;lt;/var&amp;gt; specifies a field group name variable. &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;occurrence-number&amp;lt;/var&amp;gt; specifies an occurrence within that field group. The occurrence number must be enclosed in parentheses. &lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The &amp;lt;var&amp;gt;[[$FieldgroupOccurrence]]&amp;lt;/var&amp;gt; function returns the field group occurrence value. &amp;lt;/p&amp;gt;&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;fieldgroupID&amp;lt;/var&amp;gt; specifies a field group ID, which is unique for a record. A field group ID is assigned when a field group is added to the record, is equal to one more than the highest field group ID that has been assigned in the record, and is not reused if its field group is deleted.&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
&amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;fieldgroupID&amp;lt;/var&amp;gt; must be preceded by an equal sign. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The &amp;lt;var&amp;gt;[[$FieldgroupId]]&amp;lt;/var&amp;gt; function returns the field group ID. &amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Examples====&lt;br /&gt;
This &amp;lt;var&amp;gt;FOR FIELDGROUP&amp;lt;/var&amp;gt; statement sets the third occurrence of the &amp;lt;code&amp;gt;DRIVER&amp;lt;/code&amp;gt; field group as the context for the &amp;lt;var&amp;gt;Print&amp;lt;/var&amp;gt; statement:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;FR Where ...&lt;br /&gt;
   For Fieldgroup DRIVER (3)&lt;br /&gt;
      Print DRIVER_ID&lt;br /&gt;
   End For&lt;br /&gt;
End For &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
This &amp;lt;var&amp;gt;FOR FIELDGROUP&amp;lt;/var&amp;gt; statement uses a [[Using variables and values in computation#Field name variables|field name variable]] to set the &amp;lt;code&amp;gt;DRIVER&amp;lt;/code&amp;gt; field group that has ID &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;%fgid&amp;lt;/var&amp;gt; as the context for the &amp;lt;var&amp;gt;Print&amp;lt;/var&amp;gt; statement: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;FR Where ...&lt;br /&gt;
   %driver = &#039;DRIVER&#039;&lt;br /&gt;
   For Fieldgroup %%driver = %fgid&lt;br /&gt;
      Print DRIVER_ID And DRIVER_NAME&lt;br /&gt;
   End For&lt;br /&gt;
End For&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Setting field group context==&lt;br /&gt;
To access data in a field group, first establish the record context using the&lt;br /&gt;
&amp;lt;var&amp;gt;FOR EACH RECORD&amp;lt;/var&amp;gt; (&amp;lt;var&amp;gt;FR&amp;lt;/var&amp;gt;) or &amp;lt;var&amp;gt;FOR RECORD NUMBER&amp;lt;/var&amp;gt; (&amp;lt;var&amp;gt;FRN&amp;lt;/var&amp;gt;) statement. Then to access the occurrences of the field group, you typically use an &amp;lt;var&amp;gt;FAO FIELDGROUP&amp;lt;/var&amp;gt; or &amp;lt;var&amp;gt;FEO FIELDGROUP&amp;lt;/var&amp;gt; loop.&lt;br /&gt;
 &lt;br /&gt;
===Using a FOR ALL OCCURRENCES OF loop===&lt;br /&gt;
You can set field group context with an &amp;lt;var&amp;gt;FAO&amp;lt;/var&amp;gt; loop. For example:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;BEGIN&lt;br /&gt;
IN POLICIES FOR EACH RECORD&lt;br /&gt;
FAO:  FAO FIELDGROUP VEHICLE&lt;br /&gt;
        IF COLOR IS LIKE &#039;*RED*&#039; THEN&lt;br /&gt;
           PRINT &#039;POLICY:&#039; AT 5 AND POLICY_NUMBER AND -&lt;br /&gt;
               &#039;COLOR=&#039; WITH COLOR&lt;br /&gt;
           %RED = %RED + 1&lt;br /&gt;
        END IF&lt;br /&gt;
      END FOR&lt;br /&gt;
END FOR&lt;br /&gt;
PRINT &#039;NUMBER OF RED CARS:&#039; AND %RED&lt;br /&gt;
END&lt;br /&gt;
&amp;lt;/p&amp;gt; &lt;br /&gt;
The result is:&lt;br /&gt;
&amp;lt;p class=&amp;quot;output&amp;quot;&amp;gt;      POLICY: 100001 COLOR=VICTORY RED&lt;br /&gt;
      POLICY: 100007 COLOR=RED&lt;br /&gt;
      POLICY: 100011 COLOR=VICTORY RED&lt;br /&gt;
...&lt;br /&gt;
NUMBER OF RED CARS: 214&lt;br /&gt;
 &lt;br /&gt;
...and so on...&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Using a FOR EACH OCCURRENCE loop===&lt;br /&gt;
An &amp;lt;var&amp;gt;FEO&amp;lt;/var&amp;gt; loop on a field group establishes a field group context. Inside the loop, references to field group fields are to their occurrences in their field group. For example:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;BEGIN&lt;br /&gt;
IN POLICIES FOR EACH RECORD WHERE POLICY_NUMBER = 100013&lt;br /&gt;
FEO:  FEO FIELDGROUP VEHICLE&lt;br /&gt;
      %DRIVER_ID = OTHER_DRIVER&lt;br /&gt;
      PRINT OCCURRENCE IN FEO AND MAKE AND MODEL AND -&lt;br /&gt;
            &#039;OTHER DRIVER(S):&#039; AT 30 AND EACH OTHER_DRIVER            &lt;br /&gt;
      PRINT &#039;FIRST:&#039; AT 30 AND %DRIVER_ID AND -&lt;br /&gt;
            &#039;THIRD:&#039; AND OTHER_DRIVER(3)&lt;br /&gt;
      END FOR&lt;br /&gt;
END FOR&lt;br /&gt;
END &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The result is:&lt;br /&gt;
&amp;lt;p class=&amp;quot;output&amp;quot;&amp;gt;1 AUDI A4 QUATTRO OTHER DRIVER(S): 100035 100037 100036&lt;br /&gt;
                            FIRST: 100035 THIRD: 100036&lt;br /&gt;
2 CADILLAC SEVILLE OTHER DRIVER(S):&lt;br /&gt;
                            FIRST: THIRD:&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
An important difference between an &amp;lt;var&amp;gt;FAO FIELDGROUP&amp;lt;/var&amp;gt; statement and an &amp;lt;var&amp;gt;FEO&lt;br /&gt;
FIELDGROUP&amp;lt;/var&amp;gt; statement is that the &amp;lt;var&amp;gt;FAO FIELDGROUP&amp;lt;/var&amp;gt; statement collects the&lt;br /&gt;
field group IDs for all occurrences, then processes against that list. Because of&lt;br /&gt;
this, it is less affected by insertions or deletions of occurrences of field groups&lt;br /&gt;
within the loop. Deleting the current occurrence within the&lt;br /&gt;
loop, for example, will not affect occurrences referenced in subsequent iterations.&lt;br /&gt;
For further discussion of this, see [[#FEO loops and field group context|FEO loops and field group context]], below. &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Using a FOR FIELDGROUP block===&lt;br /&gt;
You can use a field group occurrence established by a [[#FOR FIELDGROUP statement|FOR FIELDGROUP block]] as the context for references to its members. &lt;br /&gt;
&lt;br /&gt;
For example, the following &amp;lt;var&amp;gt;PAFGI&amp;lt;/var&amp;gt; (&amp;lt;var&amp;gt;PRINT ALL FIELD GROUP INFORMATION&amp;lt;/var&amp;gt;) statement outputs the contents of only the third occurrence of field group &amp;lt;code&amp;gt;GRP&amp;lt;/code&amp;gt;:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;IN FILE WHATEVER FRN %RECNO&lt;br /&gt;
   FOR FIELDGROUP GRP(3)&lt;br /&gt;
      PRINT ’*** Third occurrence of field group GRP’&lt;br /&gt;
      PAFGI&lt;br /&gt;
   END FOR&lt;br /&gt;
END FOR  &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Accessing field group members while not in field group context===&lt;br /&gt;
You can access field group occurrences by using the occurrence number&lt;br /&gt;
directly in the FR loop, if the field is [[Field design#AT-MOST-ONE, REPEATABLE, and EXACTLY-ONE attributes|EXACTLY-ONE or AT-MOST-ONE]]. So, instead of using this &amp;lt;var&amp;gt;FEO FIELDGROUP&amp;lt;/var&amp;gt; loop to print the &amp;lt;code&amp;gt;MAKE&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;MODEL&amp;lt;/code&amp;gt; for the three vehicles in the &amp;lt;code&amp;gt;VEHICLE&amp;lt;/code&amp;gt; field group:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;BEGIN&lt;br /&gt;
FR WHERE POLICY_NUMBER = 100095&lt;br /&gt;
   FEO FIELDGROUP VEHICLE&lt;br /&gt;
      PRINT MAKE AND MODEL&lt;br /&gt;
   END FOR&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;
Output: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;output&amp;quot;&amp;gt;VOLKSWAGEN NEW BEETLE&lt;br /&gt;
MITSUBISHI ECLIPSE&lt;br /&gt;
CHEVROLET SUBURBAN  &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can also access the &amp;lt;code&amp;gt;MAKE&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;MODEL&amp;lt;/code&amp;gt; (&amp;lt;var&amp;gt;EXACTLY-ONE&amp;lt;/var&amp;gt;) fields directly within the &amp;lt;var&amp;gt;FR&amp;lt;/var&amp;gt; loop by using occurrence numbers:  &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;BEGIN&lt;br /&gt;
   FR WHERE POLICY_NUMBER = 100095&lt;br /&gt;
      PRINT MAKE AND MODEL&lt;br /&gt;
      PRINT MAKE(2) AND MODEL(2)&lt;br /&gt;
      PRINT MAKE(3) AND MODEL(3)&lt;br /&gt;
   END FOR&lt;br /&gt;
END  &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Output: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;output&amp;quot;&amp;gt;VOLKSWAGEN NEW BEETLE&lt;br /&gt;
MITSUBISHI SUBURBAN&lt;br /&gt;
CHEVROLET SUBURBAN  &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;
If &amp;lt;code&amp;gt;MAKE&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;MODEL&amp;lt;/code&amp;gt; are &amp;lt;var&amp;gt;REPEATABLE&amp;lt;/var&amp;gt; fields or defined to all field groups (&amp;lt;code&amp;gt;FIELDGROUP *&amp;lt;/code&amp;gt;), attempting to access them with just an &amp;lt;var&amp;gt;FR&amp;lt;/var&amp;gt; loop will fail. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Missing data in field groups===&lt;br /&gt;
As with non-field group field references for missing occurrences, the field values are returned as null (see the reference to &amp;lt;code&amp;gt;OTHER_DRIVER(3)&amp;lt;/code&amp;gt; in the preceding example). The exception is &amp;lt;var&amp;gt;EXACTLY-ONE&amp;lt;/var&amp;gt; fields in field groups, where the field&#039;s default value is returned for missing occurrences.&lt;br /&gt;
&lt;br /&gt;
===Handling nested field group context===&lt;br /&gt;
If field groups are nested, you can always retrieve an &amp;lt;var&amp;gt;EXACTLY-ONE&amp;lt;/var&amp;gt; field in a field group inside the current context without establishing that nested field group&#039;s context. &lt;br /&gt;
&amp;lt;var&amp;gt;EXACTLY-ONE&amp;lt;/var&amp;gt; fields in specific field groups (as opposed to fields defined with &amp;lt;code&amp;gt;FIELDGROUP *&amp;lt;/code&amp;gt; that belong to all field groups) can be retrieved outside the field group context. &lt;br /&gt;
In the following example, &amp;lt;code&amp;gt;CLAIM-NUMBER&amp;lt;/code&amp;gt; is an &amp;lt;var&amp;gt;EXACTLY-ONE&amp;lt;/var&amp;gt; field in field group &amp;lt;code&amp;gt;CLAIM&amp;lt;/code&amp;gt; which is nested within field group &amp;lt;code&amp;gt;VEHICLE&amp;lt;/code&amp;gt;:&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;BEGIN&lt;br /&gt;
IN POLICIES FOR EACH RECORD WHERE POLICY_NUMBER = 100095&lt;br /&gt;
   PRINT POLICY_NUMBER&lt;br /&gt;
   FEO FIELDGROUP VEHICLE&lt;br /&gt;
      PRINT MAKE AT 5 AND MODEL&lt;br /&gt;
      PRINT &#039;1)&#039; AND CLAIM_NUMBER&lt;br /&gt;
      PRINT &#039;2)&#039; AND CLAIM_NUMBER(2)&lt;br /&gt;
      PRINT &#039;3)&#039; AND CLAIM_NUMBER(3)&lt;br /&gt;
   END FOR&lt;br /&gt;
END FOR&lt;br /&gt;
END  &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The result is: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;output&amp;quot;&amp;gt;100095&lt;br /&gt;
    VOLKSWAGEN NEW BEETLE&lt;br /&gt;
1)&lt;br /&gt;
2)&lt;br /&gt;
3)&lt;br /&gt;
    MITSUBISHI ECLIPSE&lt;br /&gt;
1) 100059&lt;br /&gt;
2) 100064&lt;br /&gt;
3)&lt;br /&gt;
    CHEVROLET SUBURBAN&lt;br /&gt;
1)&lt;br /&gt;
2)&lt;br /&gt;
3)&lt;br /&gt;
&amp;lt;/p&amp;gt; &lt;br /&gt;
&lt;br /&gt;
===Updating fields in a field group===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
&amp;lt;var&amp;gt;EXACTLY-ONE&amp;lt;/var&amp;gt; fields cannot be &amp;lt;var&amp;gt;ADD&amp;lt;/var&amp;gt;ed, &amp;lt;var&amp;gt;INSERT&amp;lt;/var&amp;gt;ed or &amp;lt;var&amp;gt;DELETE&amp;lt;/var&amp;gt;d. You can only &amp;lt;var&amp;gt;CHANGE&amp;lt;/var&amp;gt; them. &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;BEGIN&lt;br /&gt;
IN POLICIES FOR EACH RECORD WHERE POLICY_NUMBER = 100013&lt;br /&gt;
   FEO FIELDGROUP VEHICLE&lt;br /&gt;
      ADD MAKE = &#039;XXX&#039;&lt;br /&gt;
      INSERT MAKE(1) = %NOTHING&lt;br /&gt;
      DELETE MAKE&lt;br /&gt;
      CHANGE COLOR(4) TO &#039;YYYY&#039;&lt;br /&gt;
   END FOR&lt;br /&gt;
END &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The result is: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;output&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;*** 1 M204.2853: ADD NOT ALLOWED FOR EXACTLY-ONE FIELD&lt;br /&gt;
== &#039;XXX&#039;&lt;br /&gt;
*** 2 M204.0228: PART OF STATEMENT IGNORED&lt;br /&gt;
*** 3 M204.2853: INSERT NOT ALLOWED FOR EXACTLY-ONE&lt;br /&gt;
FIELD&lt;br /&gt;
== %NOTHING&lt;br /&gt;
*** 4 M204.0228: PART OF STATEMENT IGNORED&lt;br /&gt;
*** 5 M204.2853: DELETE NOT ALLOWED FOR EXACTLY-ONE&lt;br /&gt;
FIELD&lt;br /&gt;
*** M204.1042: COMPILATION ERRORS&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Handling invalid occurrence numbers===&lt;br /&gt;
The following &amp;lt;code&amp;gt;PRINT MAKE(3)&amp;lt;/code&amp;gt; statement prints a null and without error, even if &amp;lt;code&amp;gt;MAKE&amp;lt;/code&amp;gt; was defined as &amp;lt;var&amp;gt;EXACTLY-ONE&amp;lt;/var&amp;gt;. This is consistent with Model&amp;amp;nbsp;204 behavior for non-field group &amp;lt;var&amp;gt;EXACTLY-ONE&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;OCCURS&amp;lt;/var&amp;gt; fields. That is, you can request occurrence 4 of an &amp;lt;var&amp;gt;EXACTLY-ONE&amp;lt;/var&amp;gt; or &amp;lt;var&amp;gt;OCCURS 1&amp;lt;/var&amp;gt; field in the record, and Model 204 returns a null. Model 204 ignores invalid occurrence numbers such as negative numbers or 0. 0 is treated the same as 1.&lt;br /&gt;
&lt;br /&gt;
In the following example, &amp;lt;code&amp;gt;MAKE&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;MODEL&amp;lt;/code&amp;gt; are &amp;lt;var&amp;gt;EXACTLY-ONE&amp;lt;/var&amp;gt; fields:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;BEGIN&lt;br /&gt;
IN POLICIES FOR EACH RECORD WHERE POLICY_NUMBER = 100013&lt;br /&gt;
   PRINT &#039;1&#039; AND MAKE AND MODEL&lt;br /&gt;
   PRINT &#039;2&#039; AND MAKE(2) AND MODEL(2)&lt;br /&gt;
   PRINT &#039;3&#039; AND MAKE(3) AND MODEL(3)&lt;br /&gt;
END FOR&lt;br /&gt;
END &amp;lt;/p&amp;gt;&lt;br /&gt;
The result is: &lt;br /&gt;
&amp;lt;p class=&amp;quot;output&amp;quot;&amp;gt;1 AUDI A4 QUATTRO&lt;br /&gt;
2 CADILLAC SEVILLE&lt;br /&gt;
3 &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
In addition to retrieving field values inside an &amp;lt;var&amp;gt;FEO FIELDGROUP&amp;lt;/var&amp;gt; loop, fields in that field group can be updated, that is, added, inserted, changed, and deleted: &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;
%GLASSES IS STRING LEN 50&lt;br /&gt;
%GLASSES = &#039;CORRECTIVE LENSES REQUIRED&#039;&lt;br /&gt;
 &lt;br /&gt;
IN POLICIES FOR EACH RECORD WHERE POLICY_NUMBER = 100013&lt;br /&gt;
   FEO FIELDGROUP DRIVER&lt;br /&gt;
      PRINT &#039;BEFORE ..&#039;&lt;br /&gt;
      PAFGI&lt;br /&gt;
      ADD DRIVER_RESTRICTIONS = &#039;MEDICAL RESTRICTIONS PRESENT&#039;&lt;br /&gt;
      INSERT DRIVER_RESTRICTIONS(3) = %GLASSES&lt;br /&gt;
      DELETE DRIVER_RESTRICTIONS(4)&lt;br /&gt;
      CHANGE DRIVER_MARITAL_STATUS TO &#039;WIDOWED&#039;&lt;br /&gt;
      PRINT &#039;AFTER ...&#039;&lt;br /&gt;
      PAFGI&lt;br /&gt;
   END FOR&lt;br /&gt;
END  &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
The result is: &lt;br /&gt;
&amp;lt;p class=&amp;quot;output&amp;quot;&amp;gt;BEFORE ..&lt;br /&gt;
\DRIVER = 1&lt;br /&gt;
 DRIVER_ID = 100034&lt;br /&gt;
 DRIVER_NAME = CUMMINGS, BETTY S&lt;br /&gt;
 DRIVER_MARITAL_STATUS = SINGLE&lt;br /&gt;
 DRIVER_GENDER = F&lt;br /&gt;
 DRIVER_DATE_OF_BIRTH = 19791225&lt;br /&gt;
/DRIVER = 1&lt;br /&gt;
AFTER ...&lt;br /&gt;
\DRIVER = 1&lt;br /&gt;
 DRIVER_ID = 100034&lt;br /&gt;
 DRIVER_NAME = CUMMINGS, BETTY S&lt;br /&gt;
 DRIVER_MARITAL_STATUS = WIDOWED&lt;br /&gt;
 DRIVER_GENDER = F&lt;br /&gt;
 DRIVER_DATE_OF_BIRTH = 19791225&lt;br /&gt;
 DRIVER_RESTRICTIONS = MEDICAL RESTRICTIONS PRESENT&lt;br /&gt;
 DRIVER_RESTRICTIONS = CORRECTIVE LENSES REQUIRED&lt;br /&gt;
/DRIVER = 1&lt;br /&gt;
BEFORE ..&lt;br /&gt;
\DRIVER = 2&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Constraint violations for field groups==&lt;br /&gt;
For &amp;lt;var&amp;gt;ADD&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;INSERT&amp;lt;/var&amp;gt;, and &amp;lt;var&amp;gt;DELETE&amp;lt;/var&amp;gt; statements, you can get an &amp;lt;var&amp;gt;EXACTLY-ONE&amp;lt;/var&amp;gt; constraint violation, as well as other field constraint violations. In the previous example, had you attempted to add, insert, or delete the field &amp;lt;code&amp;gt;DRIVER_ID&amp;lt;/code&amp;gt;, you would have received the following error message:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;M204.2853: (ADD/DELETE/INSERT) NOT ALLOWED FOR EXACTLY-ONE FIELD&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
In general, the behavior of updating statements mimics the Model 204 handling of exception cases. For example, a &amp;lt;var&amp;gt;DELETE&amp;lt;/var&amp;gt; of an occurrence that is not there is ignored. A &amp;lt;var&amp;gt;CHANGE&amp;lt;/var&amp;gt; statement for an absent occurrence becomes an &amp;lt;var&amp;gt;ADD&amp;lt;/var&amp;gt; statement.&lt;br /&gt;
&lt;br /&gt;
==Referencing fields in nested field groups==&lt;br /&gt;
You can reference a field from the containing context even inside a field group context. For example:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;BEGIN&lt;br /&gt;
IN POLICIES FOR EACH RECORD WHERE POLICY_NUMBER = 100013&lt;br /&gt;
   FEO FIELDGROUP DRIVER&lt;br /&gt;
      PRINT POLICY_NUMBER AND DRIVER_NAME&lt;br /&gt;
   END FOR&lt;br /&gt;
END&lt;br /&gt;
 &lt;br /&gt;
100013 CUMMINGS, BETTY S&lt;br /&gt;
100013 CUMMINGS, EDDIE R&lt;br /&gt;
100013 CUMMINGS, LEE V&lt;br /&gt;
100013 CUMMINGS, MARY U&lt;br /&gt;
100013 CUMMINGS, ROBERT T&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
See the discussion in the next section regarding the oddities of &amp;lt;var&amp;gt;DELETE&amp;lt;/var&amp;gt; processing with &amp;lt;var&amp;gt;FEO&amp;lt;/var&amp;gt; loops.&lt;br /&gt;
 &lt;br /&gt;
==FEO loops and field group context==&lt;br /&gt;
On each iteration of a field group &amp;lt;var&amp;gt;FEO&amp;lt;/var&amp;gt; loop, the current field group is set as the field group context. If that field group is deleted and a field in that field group is referenced you get a request canceling error.&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;var&amp;gt;FEO&amp;lt;/var&amp;gt; on field groups has the same semantics as those on a single field. When you iterate in an &amp;lt;var&amp;gt;FEO FIELDGROUP&amp;lt;/var&amp;gt;, the next occurrence processed is the occurrence number one greater than the one processed before, whether or not it is one you have already processed (because of insertions) or whether or not you skip one or more (because of deletions).&lt;br /&gt;
 &lt;br /&gt;
The problem with deleting repeating fields, or field groups, in order in an FEO loop is that the internal pointer is updated after each deletion, resulting in a default behavior of deleting every other occurrence of the repeating field or field group, which can also cause an error when the final deletion is attempted and the pointer is now set to a value larger than the final occurrence:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;BEGIN&lt;br /&gt;
IN POLICIES FOR EACH RECORD WHERE POLICY_NUMBER = 100013&lt;br /&gt;
   FEO FIELDGROUP DRIVER&lt;br /&gt;
      PRINT POLICY_NUMBER AND DRIVER_NAME&lt;br /&gt;
   END FOR&lt;br /&gt;
END&lt;br /&gt;
 &lt;br /&gt;
100013 CUMMINGS, BETTY S&lt;br /&gt;
100013 CUMMINGS, EDDIE R&lt;br /&gt;
100013 CUMMINGS, LEE V&lt;br /&gt;
100013 CUMMINGS, MARY U&lt;br /&gt;
100013 CUMMINGS, ROBERT T&lt;br /&gt;
 &lt;br /&gt;
BEGIN&lt;br /&gt;
IN POLICIES FOR EACH RECORD WHERE POLICY_NUMBER = 100013&lt;br /&gt;
   PRINT POLICY_NUMBER&lt;br /&gt;
   PRINT &#039;BEFORE...&#039;&lt;br /&gt;
   FEO FIELDGROUP DRIVER&lt;br /&gt;
      PRINT DRIVER_NAME AT 5&lt;br /&gt;
   END FOR&lt;br /&gt;
   FEO FIELDGROUP DRIVER&lt;br /&gt;
      DELETE FIELDGROUP&lt;br /&gt;
   END FOR&lt;br /&gt;
   PRINT &#039;AFTER....&#039;&lt;br /&gt;
   FEO FIELDGROUP DRIVER&lt;br /&gt;
      PRINT DRIVER_NAME AT 5&lt;br /&gt;
   END FOR&lt;br /&gt;
END&lt;br /&gt;
 &lt;br /&gt;
100013&lt;br /&gt;
BEFORE...&lt;br /&gt;
    CUMMINGS, BETTY S&lt;br /&gt;
    CUMMINGS, EDDIE R&lt;br /&gt;
    CUMMINGS, LEE V&lt;br /&gt;
    CUMMINGS, MARY U&lt;br /&gt;
    CUMMINGS, ROBERT T&lt;br /&gt;
AFTER....&lt;br /&gt;
    CUMMINGS, EDDIE R&lt;br /&gt;
    CUMMINGS, MARY U&lt;br /&gt;
&amp;lt;/p&amp;gt; &lt;br /&gt;
&lt;br /&gt;
The intent of the above code is clearly to delete &amp;lt;em&amp;gt;every&amp;lt;/em&amp;gt; occurrence of the field group, not every &amp;lt;em&amp;gt;other&amp;lt;/em&amp;gt; occurrence, but this anomalous result is maintained as part of SOUL for backward compatibility reasons.  The three approaches to deleting &amp;lt;em&amp;gt;all&amp;lt;/em&amp;gt; occurrences are: &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Use the &amp;lt;var&amp;gt;DELETE EACH&amp;lt;/var&amp;gt; syntax.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Loop backward through the set of occurrences in an index loop.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Use &amp;lt;var&amp;gt;FOR ALL OCCURRENCES&amp;lt;/var&amp;gt; (&amp;lt;var&amp;gt;FAO&amp;lt;/var&amp;gt;), introduced in Model&amp;amp;nbsp;204 version 7.5. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;BEGIN&lt;br /&gt;
IN POLICIES FOR EACH RECORD WHERE POLICY_NUMBER = 100013&lt;br /&gt;
   PRINT POLICY_NUMBER&lt;br /&gt;
   PRINT &#039;BEFORE...&#039;&lt;br /&gt;
   FAO FIELDGROUP DRIVER&lt;br /&gt;
      PRINT DRIVER_NAME AT 5&lt;br /&gt;
   END FOR&lt;br /&gt;
   FAO FIELDGROUP DRIVER&lt;br /&gt;
      DELETE FIELDGROUP&lt;br /&gt;
   END FOR&lt;br /&gt;
   PRINT &#039;AFTER....&#039;&lt;br /&gt;
   FAO FIELDGROUP DRIVER&lt;br /&gt;
      PRINT DRIVER_NAME AT 5&lt;br /&gt;
   END FOR&lt;br /&gt;
END&lt;br /&gt;
 &lt;br /&gt;
100013&lt;br /&gt;
BEFORE...&lt;br /&gt;
    CUMMINGS, BETTY S&lt;br /&gt;
    CUMMINGS, EDDIE R&lt;br /&gt;
    CUMMINGS, LEE V&lt;br /&gt;
    CUMMINGS, MARY U&lt;br /&gt;
    CUMMINGS, ROBERT T&lt;br /&gt;
AFTER....&lt;br /&gt;
 &lt;br /&gt;
BEGIN&lt;br /&gt;
IN POLICIES FOR EACH RECORD WHERE POLICY_NUMBER = 100095&lt;br /&gt;
   PRINT &#039;...BEFORE...&#039;&lt;br /&gt;
   FAO FIELDGROUP VEHICLE&lt;br /&gt;
      PRINT MAKE AND MODEL&lt;br /&gt;
   END FOR&lt;br /&gt;
   PRINT &#039;ADD A HONDA PILOT ...&#039;&lt;br /&gt;
   ADD FIELDGROUP VEHICLE&lt;br /&gt;
      MAKE = HONDA&lt;br /&gt;
      MODEL = PILOT&lt;br /&gt;
      * ... OTHER VEHICLE FIELDS&lt;br /&gt;
   END ADD&lt;br /&gt;
   PRINT &#039;...AFTER....&#039;&lt;br /&gt;
   FAO FIELDGROUP VEHICLE&lt;br /&gt;
      PRINT MAKE AND MODEL&lt;br /&gt;
   END FOR&lt;br /&gt;
END&lt;br /&gt;
 &lt;br /&gt;
...BEFORE...&lt;br /&gt;
VOLKSWAGEN NEW BEETLE&lt;br /&gt;
MITSUBISHI ECLIPSE&lt;br /&gt;
CHEVROLET SUBURBAN&lt;br /&gt;
 &lt;br /&gt;
ADD A HONDA PILOT ...&lt;br /&gt;
...AFTER....&lt;br /&gt;
VOLKSWAGEN NEW BEETLE&lt;br /&gt;
MITSUBISHI ECLIPSE&lt;br /&gt;
CHEVROLET SUBURBAN&lt;br /&gt;
HONDA PILOT&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
==UPDATE field attribute==&lt;br /&gt;
 &lt;br /&gt;
===Impact of changing a value===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When the user changes the value of a field, how &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; changes the occurrence depends upon whether the field was defined with the &amp;lt;var&amp;gt;UPDATE IN PLACE&amp;lt;/var&amp;gt; or &amp;lt;var&amp;gt;UPDATE AT END&amp;lt;/var&amp;gt; attribute, 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;Attribute &amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;How the update works...&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;UPDATE IN PLACE&amp;lt;/var&amp;gt; (the default) &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;The value of the field occurrence is changed but its position in the record is preserved. To change the order of values, the user must delete the old value and add the new one in separate statements.   &amp;lt;/td&amp;gt;&lt;br /&gt;
&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;UPDATE AT END&amp;lt;/var&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;The existing occurrence is deleted and the new one is automatically added at the end. &amp;lt;var&amp;gt;UPDATE AT END&amp;lt;/var&amp;gt; is normally specified for applications that depend on value rotation to accomplish aging. &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&amp;gt;&lt;br /&gt;
This example includes both approaches to updating. Suppose a record has the following fields:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;NAME = RICHARD SMITH&lt;br /&gt;
CHILD = HENRY&lt;br /&gt;
CHILD = SALLY&lt;br /&gt;
CHILD = JANE&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You could use the technique illustrated below to add a last name to each child. (This technique involves the use of %variables, which are discussed in [[Using variables and values in computation]].)&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;BEGIN&lt;br /&gt;
FIND.RECS:  FIND ALL RECORDS FOR WHICH&lt;br /&gt;
               NAME = RICHARD SMITH&lt;br /&gt;
            END FIND&lt;br /&gt;
            FOR EACH RECORD IN FIND.RECS&lt;br /&gt;
EACH.CHILD     FOR EACH OCCURRENCE OF CHILD&lt;br /&gt;
                  %A = VALUE IN EACH.CHILD WITH &#039; SMITH&#039;&lt;br /&gt;
                  CHANGE CHILD = VALUE IN EACH.CHILD TO %A&lt;br /&gt;
               END FOR&lt;br /&gt;
            END FOR&lt;br /&gt;
END&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===If the UPDATE IN PLACE option is specified===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If the &amp;lt;var&amp;gt;UPDATE IN PLACE&amp;lt;/var&amp;gt; option has been specified for the &amp;lt;code&amp;gt;CHILD&amp;lt;/code&amp;gt; field, then the &amp;lt;var&amp;gt;FOR EACH OCCURRENCE&amp;lt;/var&amp;gt; loop change each occurrence of &amp;lt;code&amp;gt;CHILD&amp;lt;/code&amp;gt; in turn. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
On the first pass through the loop, the first value, &amp;lt;code&amp;gt;HENRY&amp;lt;/code&amp;gt;, is selected and changed to &amp;lt;code&amp;gt;HENRY SMITH&amp;lt;/code&amp;gt;. After the first pass, the record looks like this:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;NAME = RICHARD SMITH&lt;br /&gt;
CHILD = HENRY SMITH&lt;br /&gt;
CHILD = SALLY&lt;br /&gt;
CHILD = JANE&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
At the end of the second pass, SALLY is changed:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;NAME = RICHARD SMITH&lt;br /&gt;
CHILD = HENRY SMITH&lt;br /&gt;
CHILD = SALLY SMITH&lt;br /&gt;
CHILD = JANE&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
At the end of the third pass, JANE is changed:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;NAME = RICHARD SMITH&lt;br /&gt;
CHILD = HENRY SMITH&lt;br /&gt;
CHILD = SALLY SMITH&lt;br /&gt;
CHILD = JANE SMITH&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===If the UPDATE AT END option is specified===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If the &amp;lt;var&amp;gt;UPDATE AT END&amp;lt;/var&amp;gt; option has been specified for the &amp;lt;code&amp;gt;CHILD&amp;lt;/code&amp;gt; field, the &amp;lt;var&amp;gt;FOR EACH OCCURRENCE&amp;lt;/var&amp;gt; loop proceeds as described here.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
On the first pass through the &amp;lt;var&amp;gt;FOR EACH OCCURRENCE&amp;lt;/var&amp;gt; loop the first value, &amp;lt;code&amp;gt;HENRY&amp;lt;/code&amp;gt;, is selected and changed to &amp;lt;code&amp;gt;HENRY SMITH&amp;lt;/code&amp;gt;. The act of changing, however, causes the value &amp;lt;code&amp;gt;HENRY&amp;lt;/code&amp;gt; to be deleted and the value &amp;lt;code&amp;gt;HENRY SMITH&amp;lt;/code&amp;gt; to be added as the last child. Thus after the first pass, the record looks like this:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;NAME = RICHARD SMITH&lt;br /&gt;
CHILD = SALLY&lt;br /&gt;
CHILD = JANE&lt;br /&gt;
CHILD = HENRY SMITH&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
On the second pass through the loop, &amp;lt;code&amp;gt;JANE&amp;lt;/code&amp;gt;, which is now the second occurrence of &amp;lt;code&amp;gt;CHILD&amp;lt;/code&amp;gt;, is deleted and &amp;lt;code&amp;gt;JANE SMITH&amp;lt;/code&amp;gt; is added to the end of the record:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;NAME = RICHARD SMITH&lt;br /&gt;
CHILD = SALLY&lt;br /&gt;
CHILD = HENRY SMITH&lt;br /&gt;
CHILD = JANE SMITH&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
On the third pass, the third occurrence is &amp;lt;code&amp;gt;JANE SMITH&amp;lt;/code&amp;gt;, and the record ends with:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;NAME = RICHARD SMITH&lt;br /&gt;
CHILD = SALLY&lt;br /&gt;
CHILD = HENRY SMITH&lt;br /&gt;
CHILD = JANE SMITH&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
==Subscripts==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Subscripts can be included in &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; field references to facilitate the selection of particular occurrences of multiply occurring fields. Any field name can be followed by a parenthesized expression. The value of this expression is used as an ordinal number which specifies the desired occurrence of the named field. For example:  &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;INCIDENT(3)&lt;br /&gt;
COURSE.NUMBER(2)&lt;br /&gt;
TRANSACTION(A+B)&lt;br /&gt;
&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 a class schedule where subscripts are used to change the room number for a course:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;BEGIN&lt;br /&gt;
COURSE:  FIND ALL RECORDS FOR WHICH&lt;br /&gt;
            REC = ROOM ASSIGNMENT&lt;br /&gt;
         END FIND&lt;br /&gt;
CHANGE:  FOR EACH RECORD IN COURSE&lt;br /&gt;
            IF ROOM(1) EQ &#039;214A&#039; THEN&lt;br /&gt;
               CHANGE ROOM(1) TO &#039;566A&#039;&lt;br /&gt;
            END IF&lt;br /&gt;
            IF ROOM(2) EQ &#039;214A&#039; THEN&lt;br /&gt;
               CHANGE ROOM(2) TO &#039;566A&#039;&lt;br /&gt;
            END IF&lt;br /&gt;
         END FOR&lt;br /&gt;
END&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Subscripted field extraction===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Subscripted field references attempt to maintain their position inside a record much as an FEO loop attempts to maintain its position inside a record. This means that subscripted field references tend to be as efficient as FEO loops. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The following is an example of using subscripted field extraction for a field that is a member of a field group. An &amp;lt;var&amp;gt;FEO&amp;lt;/var&amp;gt; loop populates two arrays with the corresponding values of group members &amp;lt;code&amp;gt;INCIDENT&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;INCIDENT_DATE&amp;lt;/code&amp;gt;:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;%inc is string array (12) no fs&lt;br /&gt;
%idate is string array (12) no fs&lt;br /&gt;
FeoIdata: &lt;br /&gt;
  feo INCIDENT&lt;br /&gt;
    %inc(occurence in FeoIdata) = value in FeoIdata&lt;br /&gt;
    %idate(occurence in FeoIdata) = INCIDENT_DATE(occurence in FeoIdata)&lt;br /&gt;
  end for&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If you use multiple &amp;lt;var&amp;gt;FEO&amp;lt;/var&amp;gt; loops for field group processing, it is possible that using this technique will require additional VTBL resources for procedures with an extremely large number of sorts or subscripted field references.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Evaluation of subscript expressions===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The evaluation of subscript expressions is subject to the rules for determining an integer result for an arithmetic expression as described in [[Using variables and values in computation#Arithmetic operations|Arithmetic operations]].      &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Statements and phrases with which you cannot use subscripts===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Subscripted field references can appear anywhere that unsubscripted references can, except in the following statements and phrases:&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;Statements you cannot use with subscripts &amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;&lt;br /&gt;
Because...&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;ADD&amp;lt;/var&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Adds a new occurrence of a field.    &amp;lt;/td&amp;gt;&lt;br /&gt;
&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;BY EACH phrase&amp;lt;/var&amp;gt; in the &amp;lt;var&amp;gt;SORT RECORDS&amp;lt;/var&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Loops through all occurrences of a field.    &amp;lt;/td&amp;gt;&lt;br /&gt;
&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 EACH statement&amp;lt;/var&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Loops through all occurrences of a field.    &amp;lt;/td&amp;gt;&lt;br /&gt;
&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;EACH phrase&amp;lt;/var&amp;gt; in a &amp;lt;var&amp;gt;PRINT&amp;lt;/var&amp;gt; specification&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Loops through all occurrences of a field.    &amp;lt;/td&amp;gt;&lt;br /&gt;
&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;FILE&amp;lt;/var&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Deals with fields having the INVISIBLE attribute, which cannot be the object of subscripted references.     &amp;lt;/td&amp;gt;&lt;br /&gt;
&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;FIND&amp;lt;/var&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Locates records without regard to which occurrence of a field contains the desired value.    &amp;lt;/td&amp;gt;&lt;br /&gt;
&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;FOR EACH OCCURRENCE&amp;lt;/var&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Loops through all occurrences of a field. Field references within FOR EACH OCCURRENCE loops can be subscripted, depending upon the individual statements in which the references appear.     &amp;lt;/td&amp;gt;&lt;br /&gt;
&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;FOR EACH VALUE&amp;lt;/var&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Loops through all values of all occurrences of the specified field. Field references within FOR EACH VALUE loops are not allowed at all, unless the field reference is embedded in a nested FOR EACH RECORD loop. See [[Value loops#Setting up a value loop on one field and printing a value of another|Setting up a value loop on one field and printing a value of another]] for more information.&amp;lt;/td&amp;gt;&lt;br /&gt;
&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;IN ORDER BY EACH phrase&amp;lt;/var&amp;gt; in the &amp;lt;var&amp;gt;FOR EACH RECORD &amp;lt;/var&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Loops through all occurrences of a field.    &amp;lt;/td&amp;gt;&lt;br /&gt;
&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;PRINT n &amp;lt;/var&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Loops through all occurrences of a field.    &amp;lt;/td&amp;gt;&lt;br /&gt;
&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;STORE RECORD&amp;lt;/var&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Adds fields in the order of appearance in the statement.    &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;
===Unsubscripted field references===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
An unsubscripted field reference in a context in which subscripted references are allowed is always equivalent to a subscripted reference with a value of one.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Do not use subscripts with INVISIBLE fields===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You cannot make subscripted references to fields that have the &amp;lt;var&amp;gt;INVISIBLE&amp;lt;/var&amp;gt; attribute (see the discussion on field attributes in [[Field attributes]]). These fields are not truly multiply occurring, although they can have several different values in a single record. A subscript specified for a field with the &amp;lt;var&amp;gt;INVISIBLE&amp;lt;/var&amp;gt; attribute is ignored.   &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
==Subscript validity rules==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The rules presented below indicate whether or not a subscript value is valid and what action to take if the value is not valid. These rules take into account: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The value of the subscript&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The context in which the subscript appears&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The description of the subscripted field &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Explanation of the rules===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
In these rules, two quantities are used:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;N is the maximum number of occurrences that can be stored in a record for a given field. For a preallocated field, N equals the value of &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;n&amp;lt;/var&amp;gt; in the &amp;lt;var&amp;gt;OCCURS&amp;lt;/var&amp;gt; clause of the field&#039;s description. For other fields, N has no limit.       &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;P is the number of nonempty occurrences of the referenced field found in the specified record when the reference is evaluated. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
For a summary of rules for preallocated fields, refer to the discussion on preallocated fields in [[Data maintenance#Storing values in preallocated fields|Storing values in preallocated fields]].     &amp;lt;/p&amp;gt; &lt;br /&gt;
 &lt;br /&gt;
===INSERT statement===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The &amp;lt;var&amp;gt;INSERT&amp;lt;/var&amp;gt; statement, like the &amp;lt;var&amp;gt;ADD&amp;lt;/var&amp;gt; statement, is used for adding new occurrences of a field. &amp;lt;var&amp;gt;INSERT&amp;lt;/var&amp;gt; is used to add occurrences when the order of the values is important and the values are added out of order.   &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The &amp;lt;var&amp;gt;INSERT&amp;lt;/var&amp;gt; statement is supported in remote file and scattered group contexts. The &amp;lt;var&amp;gt;INSERT&amp;lt;/var&amp;gt; statement is not supported for Large Object fields.&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;INSERT&amp;lt;/var&amp;gt; statement is:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;INSERT &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;fieldname&amp;lt;/span&amp;gt; [(&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;subscript&amp;lt;/span&amp;gt;)] = &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;value&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Example====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Assume a record with these fields:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;DEPT = PERSONNEL&lt;br /&gt;
DEPT = FINANCE&lt;br /&gt;
DEPT = MARKETING&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The following statement:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;INSERT DEPT(3) = ACCOUNTING&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
results in this record:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;output&amp;quot;&amp;gt;DEPT = PERSONNEL&lt;br /&gt;
DEPT = FINANCE&lt;br /&gt;
DEPT = ACCOUNTING&lt;br /&gt;
DEPT = MARKETING&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Subscript validity rules====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
[[#INSERT statement|INSERT statement]] lists validity rules for subscripts. In this table:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;P is the number of occurrences of the field in the record when the &amp;lt;var&amp;gt;INSERT&amp;lt;/var&amp;gt; statement is issued. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;S is the subscript specified in the &amp;lt;var&amp;gt;INSERT&amp;lt;/var&amp;gt; statement.  &lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;caption&amp;gt;Subscript validation rules&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;If P and S values are: &amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;&lt;br /&gt;
Then &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; takes this 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;P &amp;gt; S&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Inserts the new occurrence in front of the former Sth occurrence; the new occurrence becomes the current Sth occurrence of the field.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;P &amp;lt; S&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Inserts the new occurrence of the field after the Pth occurrence; the new occurrence becomes the (P+1) occurrence.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;P = 0&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Adds the new value at the end of the record, as in the &amp;lt;var&amp;gt;ADD&amp;lt;/var&amp;gt; statement.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;S = 0, or no subscript&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Treats the new value as if S = 1 and inserts the new value as the first occurrence, in front of any former occurrence of the field.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;S &amp;lt; 0&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Does not add a new occurrence.&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;
For fields with the &amp;lt;var&amp;gt;INVISIBLE&amp;lt;/var&amp;gt; attribute, only the index is affected.   &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===PRINT statement===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
In retrieval statements such as &amp;lt;var&amp;gt;PRINT&amp;lt;/var&amp;gt;, subscript values less than zero or greater than P are invalid. Invalid references of this kind cause the null value to be returned. A subscript of zero returns the value of the first occurrence.  &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===DELETE statement===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
In the &amp;lt;var&amp;gt;DELETE&amp;lt;/var&amp;gt; statement, subscript values less than one or greater than P are invalid. If an invalid reference of this kind is made, no action is taken. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If several occurrences of a field are being deleted, you should be careful not to use DELETE in the following way: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;FOR EACH RECORD IN FIND.RECS&lt;br /&gt;
   DELETE CLIENT(1)&lt;br /&gt;
   DELETE CLIENT(2)&lt;br /&gt;
   DELETE CLIENT(3)&lt;br /&gt;
END FOR&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
As the statements are executed, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; deletes the first occurrence, &amp;lt;code&amp;gt;CLIENT(1)&amp;lt;/code&amp;gt;, then locates the current second occurrence, which is the original &amp;lt;code&amp;gt;CLIENT(3)&amp;lt;/code&amp;gt;, and deletes it. Then, because a third occurrence cannot be found, the operation stops, and the original &amp;lt;code&amp;gt;CLIENT(2)&amp;lt;/code&amp;gt; is never deleted.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
In such a situation, deleting the occurrences in the reverse order achieves the desired result:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;FOR EACH RECORD IN FIND.RECS&lt;br /&gt;
   DELETE CLIENT(3)&lt;br /&gt;
   DELETE CLIENT(2)&lt;br /&gt;
   DELETE CLIENT(1)&lt;br /&gt;
END FOR&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The desired result also can be achieved by completely omitting the subscripts, as follows:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;FOR EACH RECORD IN FIND.RECS&lt;br /&gt;
   DELETE CLIENT&lt;br /&gt;
   DELETE CLIENT&lt;br /&gt;
   DELETE CLIENT&lt;br /&gt;
END FOR&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===CHANGE statement===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
In the &amp;lt;var&amp;gt;CHANGE&amp;lt;/var&amp;gt; statement, subscript values less than one or greater than P are treated as attempts to add a new occurrence (P+1). If (P+1) does not exceed N (the maximum number of occurrences that can be stored), the new occurrence is added to the record. If (P+1) does exceed N, the request is cancelled.  &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===SORT RECORDS statement===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The use of subscripts in references to the recordset yielded by a&lt;br /&gt;
&amp;lt;var&amp;gt;SORT RECORDS&amp;lt;/var&amp;gt; statement sometimes can produce unexpected results.&lt;br /&gt;
If the &amp;lt;var&amp;gt;BY EACH&amp;lt;/var&amp;gt; option appears in a &amp;lt;var&amp;gt;SORT&amp;lt;/var&amp;gt; statement, records in which the &amp;lt;var&amp;gt;BY EACH&amp;lt;/var&amp;gt; field is multiply occurring are copied several times (once for each field occurrence) to the system scratch file CCATEMP.&lt;br /&gt;
In each copy, the occurrences of the &amp;lt;var&amp;gt;BY EACH&amp;lt;/var&amp;gt; field are rotated, so that the occurrence used as the sort key appears first. Therefore, a subscripted reference to this field can yield different values for different copies of the record. &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>Mlarocca</name></author>
	</entry>
	<entry>
		<id>https://m204wiki.rocketsoftware.com/index.php?title=Release_notes_for_Model_204_version_7.5&amp;diff=71004</id>
		<title>Release notes for Model 204 version 7.5</title>
		<link rel="alternate" type="text/html" href="https://m204wiki.rocketsoftware.com/index.php?title=Release_notes_for_Model_204_version_7.5&amp;diff=71004"/>
		<updated>2014-08-01T13:43:37Z</updated>

		<summary type="html">&lt;p&gt;Mlarocca: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;These release notes list the enhancements and other changes contained in Model 204 version 7.5.&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.5.0 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;
This section summarizes the new features and enhancements for Model 204 version 7.5.0.&lt;br /&gt;
 &lt;br /&gt;
===SOUL (User Language)===&lt;br /&gt;
The significantly enhanced, object-oriented, version of User Language is now called [[#SOUL (User Language) enhancements|SOUL]]. All existing User Language programs will continue to work under SOUL, so User Language can be considered to be a subset of SOUL, though the name &amp;quot;User Language&amp;quot; is now deprecated.&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;integration of object-oriented language extensions from the Janus SOAP User Language Interface&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[[Release notes for Model 204 version 7.5 (DRAFT)#External Call Facility .28ECF.29|ECF]] CALL statements can pass up to 60 parameters&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===System Management===&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Writing records to the SMF data set without an SVC installed&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Performance===&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;GTBL can be stored above the bar&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[[Release notes for Model 204 version 7.5 (DRAFT)#Support for physical field groups|Support for physical field groups]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
==Operating system requirements==&lt;br /&gt;
&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;Requirements for Model 204 version 7.5 are still being determined.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
Model 204 version 7.5 requires the following operating system support:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;For IBM z/OS:&amp;lt;/b&amp;gt; Version 1 Release 7. V1R7 is sufficient for all new functionality except for the following&lt;br /&gt;
features:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Large (1 MB) page support requires Version 1 Release 9.&lt;br /&gt;
&amp;lt;li&amp;gt;Extended address volumes (EAV) requires Version 1 Release 12.&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;For IBM z/VM:&amp;lt;/b&amp;gt; Version 5 Release 4.0 or later&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;For IBM z/VSE:&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Version 5 Release 1 or&lt;br /&gt;
&amp;lt;li&amp;gt;Version 4 Release 3 or&lt;br /&gt;
&amp;lt;li&amp;gt;Version 4 Release 2.1 or&lt;br /&gt;
&amp;lt;li&amp;gt;Version 4 Release 2.0, with these program temporary fixes (PTFs) installed:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;UD53436&lt;br /&gt;
&amp;lt;li&amp;gt;UD53437&lt;br /&gt;
&amp;lt;li&amp;gt;UD53438&lt;br /&gt;
&amp;lt;li&amp;gt;UD53439&lt;br /&gt;
&amp;lt;/ul&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;Note:&amp;lt;/b&amp;gt; z/VSE V5.1 is required to take advantage of any 64-bit capabilities under VSE.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
=== Hardware requirements ===&lt;br /&gt;
&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;Requirements for Model 204 version 7.5 are still being determined.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
Model 204 version 7.5 requires the IBM z/890 or above processor, except for the following feature:&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The large (1 MB) page support feature requires the IBM z10 or above processor. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Model 204 compatibility with operating systems===&lt;br /&gt;
&amp;lt;p style=&amp;quot;color:red&amp;quot;&amp;gt;Content for version 7.5 is still being determined.&amp;lt;/p&amp;gt;&lt;br /&gt;
For information on Model 204 certification with IBM operating systems, see:&lt;br /&gt;
http://www.rocketsoftware.com/products/rocket-model-204/technical-information&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;div id=&amp;quot;Connect* compatibility with Model 204&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
===Connect* compatibility with Model 204===&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.0 is compatible with all versions of Model 204.&lt;br /&gt;
&lt;br /&gt;
==SOUL (User Language) enhancements==&lt;br /&gt;
Much of the substantial new and enhanced functionality described in the following subsections is available as a result of the acquisition of Sirius Software. The functionality that is the subject of the initial subsection, &amp;quot;Object oriented programming,&amp;quot; motivates the new name for User Language, &#039;&#039;&#039;SOUL&#039;&#039;&#039; (Simple Objective User Language).&lt;br /&gt;
 &lt;br /&gt;
===Object oriented programming===&lt;br /&gt;
As of version 7.5 of Model 204 (and backward compatible with existing User Language applications), the SOUL language is equipped with [http://en.wikipedia.org/wiki/Object-oriented Object-Oriented Programming](sometimes abbreviated OO) capabilities comparable or superior to other contemporary object oriented languages. The OO features were formerly contained in the [[Janus SOAP User Language Interface]], and you can use [[Object oriented programming in SOUL]] as an entry point to the extensive SOUL OO documentation. In particular, you might want to begin with the [[Getting started with OOP for User Language programmers|OO tutorial]].&lt;br /&gt;
 &lt;br /&gt;
===Record capacity increase===&lt;br /&gt;
In this version of Model 204, the record limit is increased from sixteen million records to forty-eight million records per file.&lt;br /&gt;
 &lt;br /&gt;
===New SOUL statements===&lt;br /&gt;
{{Template:User Language statements}}&lt;br /&gt;
 &lt;br /&gt;
===Non-OO enhancements in SOUL===&lt;br /&gt;
{{Template:User Language syntax enhancements}}&lt;br /&gt;
 &lt;br /&gt;
===SOUL support for field groups===&lt;br /&gt;
 &lt;br /&gt;
====ADD (or INSERT or DELETE) FIELDGROUP statements====&lt;br /&gt;
The &amp;lt;var&amp;gt;ADD FIELDGROUP&amp;lt;/var&amp;gt; statement and the &amp;lt;var&amp;gt;INSERT FIELDGROUP&amp;lt;/var&amp;gt; statement behavior parallels the behavior of the &amp;lt;var&amp;gt;ADD&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;INSERT&amp;lt;/var&amp;gt; statements for simple fields. The &amp;lt;var&amp;gt;DELETE FIELDGROUP&amp;lt;/var&amp;gt; statement handles more situations and is therefore more complex.&lt;br /&gt;
See [[Data maintenance#Updating field groups|Updating field groups]] for details.&lt;br /&gt;
 &lt;br /&gt;
====Statements for handling field groups====&lt;br /&gt;
SOUL now provides several statements for handling field groups:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;FOR FIELDGROUP&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;FOR ALL OCCURRENCES OF FIELDGROUP (FAO FIELDGROUP)&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 OCCURRENCE OF FIELDGROUP (FEO FIELDGROUP)&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
See [[Operations on multiply occurring fields#Special statements for multiply occurring fields and field groups|Special statements for multiply occurring fields and field groups]] for details.&lt;br /&gt;
 &lt;br /&gt;
====Output statements for field groups====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The following SOUL statements provide display output for Model 204 field groups:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;AUDIT ALL FIELDGROUP INFORMATION (AAFGI)&lt;br /&gt;
PRINT ALL FIELDGROUP INFORMATION (PAFGI)&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
See [[Basic SOUL statements and commands#Output statements for fields and field groups|Output statements for fields and field groups]] for details.&lt;br /&gt;
 &lt;br /&gt;
====Field group SORT support====&lt;br /&gt;
You can use field groups in [[Sorting#Field group SORT support|sorted sets]]. &amp;lt;var&amp;gt;SORT&amp;lt;/var&amp;gt; statement support for field groups lets you sort records with field groups as well as reference field groups in the sorted sets. For example, you can issue a &amp;lt;code&amp;gt;FAO FIELDGROUP&amp;lt;/code&amp;gt; statement or &amp;lt;code&amp;gt;FEO FIELDGROUP&amp;lt;/code&amp;gt; statement against the sorted set.&lt;br /&gt;
 &lt;br /&gt;
===EQ VALUE retrieval condition===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
SOUL now provides the &amp;lt;var&amp;gt;EQ VALUE&amp;lt;/var&amp;gt; clause to support expressions in &amp;lt;var&amp;gt;FIND&amp;lt;/var&amp;gt; statements.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
See [[Record retrievals#Using expressions in FIND statements|Using expressions in FIND statements]] for details.&lt;br /&gt;
 &lt;br /&gt;
===EQ WITH retrieval condition for concatenated fields===&lt;br /&gt;
SOUL now provides the &amp;lt;var&amp;gt;EQ WITH&amp;lt;/var&amp;gt; clause for retrieving &amp;lt;var&amp;gt;CONCATENATION-OF&amp;lt;/var&amp;gt; fields. Model 204 automatically builds the concatenated value.&lt;br /&gt;
 &lt;br /&gt;
See [[Record retrievals#Using expressions in FIND statements|Using expressions in FIND statements]]  and [[Record retrievals#EQ WITH retrieval condition for concatenated fields|EQ with retrieval condition for concatenated fields]] for details.&lt;br /&gt;
 &lt;br /&gt;
===External Call Facility (ECF)===&lt;br /&gt;
&amp;lt;var&amp;gt;EXTERNAL CALL&amp;lt;/var&amp;gt; statements can now pass more parameters.&lt;br /&gt;
The maximum number of parameters that can be passed in an &amp;lt;var&amp;gt;EXTERNAL CALL&amp;lt;/var&amp;gt; statement has been increased from 40 to 60.&lt;br /&gt;
The maximum value setting for &amp;lt;var&amp;gt;[[ECPSIZE parameter|ECPSIZE]]&amp;lt;/var&amp;gt; is increased from 1310680 to 1966020 to accommodate the extra parameters.&lt;br /&gt;
 &lt;br /&gt;
ECF is available only on z/OS systems. For more information about the External Call Facility and the &amp;lt;var&amp;gt;EXTERNAL CALL&amp;lt;/var&amp;gt; statement, see the &amp;lt;var class=&amp;quot;book&amp;quot;&amp;gt;Rocket Model 204 System Manager&#039;s Guide&amp;lt;/var&amp;gt;.&lt;br /&gt;
 &lt;br /&gt;
===REPEAT statement UNTIL option===&lt;br /&gt;
The &amp;lt;var&amp;gt;REPEAT&amp;lt;/var&amp;gt; statement now supports the &amp;lt;var&amp;gt;UNTIL&amp;lt;/var&amp;gt; option. In previous releases, only &amp;lt;var&amp;gt;REPEAT WHILE&amp;lt;/var&amp;gt; was supported.&lt;br /&gt;
 &lt;br /&gt;
A &amp;lt;var&amp;gt;[[Flow of control in User Language#REPEAT UNTIL statement|REPEAT UNTIL]]&amp;lt;/var&amp;gt; statement enters the loop body prior to checking the condition.&lt;br /&gt;
 &lt;br /&gt;
===New and changed classes and methods===&lt;br /&gt;
&lt;br /&gt;
====New InvalidBitNumber class====&lt;br /&gt;
Objects of the [[InvalidBitNumber class|InvalidBitNumber exception class]] are thrown when an invalid bit number is requested by a bit manipulation function. It is currently thrown only by the &amp;lt;var&amp;gt;[[BitClearString (String function)|BitClearString]]&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;[[BitFlipString (String function)|BitFlipString]]&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;[[BitSetString (String function)|BitSetString]]&amp;lt;/var&amp;gt;, and &amp;lt;var&amp;gt;[[BitValueString (String function)|BitValueString]]&amp;lt;/var&amp;gt; functions. &lt;br /&gt;
&lt;br /&gt;
====New InvalidTranslateTable class====&lt;br /&gt;
Objects of the [[InvalidTranslateTable class|InvalidTranslateTable exception class]] are thrown when a requested system translate table cannot be found. It is currently thrown only by the &amp;lt;var&amp;gt;[[TranslateTable (HttpRequest property)|TranslateTable]]&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;HttpRequest&amp;lt;/var&amp;gt; property.&lt;br /&gt;
 &lt;br /&gt;
====New bit manipulation String functions====&lt;br /&gt;
New bit manipulation functions &amp;lt;var&amp;gt;[[BitClearString (String function)|BitClearString]]&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;[[BitCountString (String function)|BitCountString]]&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;[[BitFlipString (String function)|BitFlipString]]&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;[[BitSetString (String function)|BitSetString]]&amp;lt;/var&amp;gt;, and &amp;lt;var&amp;gt;[[BitValueString (String function)|BitValueString]]&amp;lt;/var&amp;gt; make it easier to manipulate the bits in a string.&lt;br /&gt;
 &lt;br /&gt;
====New String processing functions====&lt;br /&gt;
New &amp;lt;var&amp;gt;String&amp;lt;/var&amp;gt; functions &amp;lt;var&amp;gt;[[Before (String function)|Before]]&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;[[After (String function)|After]]&amp;lt;/var&amp;gt; return the parts of a string before or after a user-specified delimiter string.&lt;br /&gt;
&lt;br /&gt;
====New Stringlist subroutine====&lt;br /&gt;
New &amp;lt;var&amp;gt;Stringlist&amp;lt;/var&amp;gt; subroutine &amp;lt;var&amp;gt;[[AppendPemData (Stringlist subroutine)|AppendPemData]]&amp;lt;/var&amp;gt;&lt;br /&gt;
appends a PEM encode string to a &amp;lt;var&amp;gt;Stringlist&amp;lt;/var&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
====New System methods TODClock and UUIDTime====&lt;br /&gt;
New System class methods [[TODClock (System function)|TODCLOCK]] and [[UUIDTime (System function)|UUIDTime]] have been created to facilitate generation of version 1 universal unique identifiers and to provide high precision time stamps for SOUL applications. These methods were actually added as a ZAP update to Model 204 7.5 (75Z109).&lt;br /&gt;
&lt;br /&gt;
====New HttpRequest TranslateTable property====&lt;br /&gt;
The &amp;lt;var&amp;gt;[[TranslateTable (HttpRequest property)|TranslateTable]]&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;HttpRequest&amp;lt;/var&amp;gt; property makes it possible to set the translate table to be used for EBCDIC to ASCII translation of data in an &amp;lt;var&amp;gt;HttpRequest&amp;lt;/var&amp;gt; object.&lt;br /&gt;
 &lt;br /&gt;
====Disable base64 encoding in LoadFromRecord and related methods====&lt;br /&gt;
The &amp;lt;var&amp;gt;Base64Encode&amp;lt;/var&amp;gt;=&amp;lt;var&amp;gt;False&amp;lt;/var&amp;gt; argument can be used with the &amp;lt;var&amp;gt;[[LoadFromRecord (XmlDoc/XmlNode subroutine)|LoadFromRecord]]&amp;lt;/var&amp;gt; method to disable any base64 encoding of field values.&lt;br /&gt;
 &lt;br /&gt;
Alternatively, the &amp;lt;var&amp;gt;CharacterMap&amp;lt;/var&amp;gt; argument (with a non-null value) can be used to disable any base64 encoding of field values, and to specify translations, which can avoid request translation due to X&#039;00&#039; and/or untranslatable characters in field values.&lt;br /&gt;
 &lt;br /&gt;
These arguments are also added to the &amp;lt;var&amp;gt;[[NewFromRecord (XmlDoc function)|NewFromRecord]]&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;[[ToXmlDoc (Record function)|ToXmlDoc]]&amp;lt;/var&amp;gt; methods.&lt;br /&gt;
 &lt;br /&gt;
====New parameter for AppendJournalData====&lt;br /&gt;
The &amp;lt;var&amp;gt;QT&amp;lt;/var&amp;gt; option is added to the &amp;lt;var&amp;gt;[[AppendJournalData (Stringlist function)#Options parameter|AppendJournalData]]&amp;lt;/var&amp;gt; method, to include QT type audit entries.&lt;br /&gt;
 &lt;br /&gt;
====New parameter for AddField====&lt;br /&gt;
The &amp;lt;var&amp;gt;Strip&amp;lt;/var&amp;gt; option is added to the &amp;lt;var&amp;gt;Screen&amp;lt;/var&amp;gt; class method &amp;lt;var&amp;gt;[[AddField (Screen function)|AddField]]&amp;lt;/var&amp;gt; to allow suppression of leading and trailing blank removal from input fields.&lt;br /&gt;
&lt;br /&gt;
===New and changed $functions===&lt;br /&gt;
 &lt;br /&gt;
====Former Sirius $functions====&lt;br /&gt;
The $functions referred to by the link below are added to SOUL as a result of the acquisition of Sirius Software:&lt;br /&gt;
:[[List of $functions|Sirius $functions]]&lt;br /&gt;
Among these $functions are integrated [[List_of_mathematical_$functions|math $functions]]: high-performance, high-precision versions of the IBM mathematical functions. These functions eliminate the need to use external math libraries.&lt;br /&gt;
 &lt;br /&gt;
====$SNDMAIL attachment ASCII translation====&lt;br /&gt;
The &amp;lt;var&amp;gt;[[SOUL_$functions#Sending_email_messages_via_User_Language|$SNDMAIL]]&amp;lt;/var&amp;gt; function can now translate an attachment to ASCII before sending it.&lt;br /&gt;
This translation is useful if the &amp;lt;var&amp;gt;$SNDMAIL&amp;lt;/var&amp;gt; attachment is a &amp;lt;var&amp;gt;CLOB&amp;lt;/var&amp;gt; (&amp;lt;var&amp;gt;CHARACTER-LARGE-OBJECT&amp;lt;/var&amp;gt;) such as a text document.&lt;br /&gt;
 &lt;br /&gt;
The &amp;lt;var&amp;gt;$SNDMAIL&amp;lt;/var&amp;gt; function now accepts an optional parameter after the name of the attached object. If this parameter is set to &#039;C&#039; (or to a percent variable with the value &#039;C&#039;), the object in the buffer is translated to ASCII before being attached to the email.&lt;br /&gt;
 &lt;br /&gt;
If this parameter is not specified, the object in the buffer is sent as a binary object.&lt;br /&gt;
 &lt;br /&gt;
In this example:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;%RC = $SNDMAIL(%SUBJECT,,%BODY,%FROM,%TO,,,,&#039;CLOB.TXT&#039;,&#039;C&#039;)&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
the &amp;lt;code&amp;gt;CLOB.TXT&amp;lt;/code&amp;gt; attachment will be translated to ASCII before being attached to the email.&lt;br /&gt;
&lt;br /&gt;
====New function calls for field groups====&lt;br /&gt;
When a field group is added, a [[Data maintenance#Updating field groups|field group ID]] is assigned to the field group.&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;[[$FieldgroupId]]&amp;lt;/var&amp;gt; returns the ID of the current field group.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;[[$FIELDGROUPOCCURRENCE]]&amp;lt;/var&amp;gt; returns the current occurrence number of the field group.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Sirius products and product enhancements==&lt;br /&gt;
[[Sirius Software product list|The former-Sirius products]] are now available to Model 204 customers as separately purchased items as a result of the acquisition of Sirius Software.&lt;br /&gt;
 &lt;br /&gt;
===Changes to Janus SSL support===&lt;br /&gt;
Under Model 204 version 7.5, Janus products:&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Drop support for version 2 of the Secure Sockets Layer encryption protocol (SSL V2)&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can use the &amp;lt;var&amp;gt;[[SSLPROT (JANUS DEFINE parameter)|SSLPROT]]&amp;lt;/var&amp;gt; parameter on the &amp;lt;var&amp;gt;JANUS DEFINE&amp;lt;/var&amp;gt; command for a port to explicitly specify, or limit, the SSL protocols available for a connection. The &amp;lt;var&amp;gt;SSLPROT&amp;lt;/var&amp;gt; documentation describes the SSL protocols that Janus supports. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Janus support for SSL V2 also included an option to specify a larger than &amp;quot;legal&amp;quot; input buffer for connections not strictly conforming to the V2 standard. You specify that buffer size with the &amp;lt;var&amp;gt;JANUS DEFINE&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;[[SSLIBSIZE (JANUS DEFINE parameter)|SSLIBSIZE]]&amp;lt;/var&amp;gt; parameter, and the &amp;lt;var&amp;gt;SSLIBSIZE&amp;lt;/var&amp;gt; maximum value as of Model 204 V7.5 is reduced (from 32767 bytes) to the SSL maximum allowed size of 16384. &amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Add support for new ciphers and TLS levels&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can use the &amp;lt;var&amp;gt;[[SSLCIPH (JANUS DEFINE parameter)|SSLCIPH]]&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;JANUS DEFINE&amp;lt;/var&amp;gt; parameter to specify the SSL ciphers available for a connection. The &amp;lt;var&amp;gt;SSLCIPH&amp;lt;/var&amp;gt; documentation describes the SSL ciphers that Janus supports. &amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===WEBOPT parameter change===&lt;br /&gt;
The &amp;lt;var&amp;gt;[[WEBOPT parameter|WEBOPT]]&amp;lt;/var&amp;gt; parameter default value is changed to X&#039;03&#039; from 0. &amp;lt;var&amp;gt;WEBOPT&amp;lt;/var&amp;gt; affects the interaction of Model 204 and RACF security.&lt;br /&gt;
 &lt;br /&gt;
==File-related enhancements==&lt;br /&gt;
 &lt;br /&gt;
===Support for physical field groups===&lt;br /&gt;
Model 204 supports non-relational, de-normalized data structures. Many Model 204 sites have enjoyed significant cost and performance benefits from efficiently processing multiply occurring fields. This concept has been enhanced to introduce physical field groups that let you view and process groups of fields as a logical entity.&lt;br /&gt;
 &lt;br /&gt;
You can define a physical field group only for files with the [[#FILEORG (new settings)|FILEORG X&#039;100&#039; setting]]. To take advantage of field groups in files defined before Model 204 version 7.5, you must reorganize the files with a &amp;lt;var&amp;gt;FILEORG&amp;lt;/var&amp;gt; setting that includes the X&#039;100&#039; bit.&lt;br /&gt;
 &lt;br /&gt;
Files with &amp;lt;var&amp;gt;FILEORG&amp;lt;/var&amp;gt; X&#039;100&#039; can have up to 32,000 fields.&lt;br /&gt;
 &lt;br /&gt;
For more information, see [[Field group design]].&lt;br /&gt;
 &lt;br /&gt;
===Increased Table B record number capacity===&lt;br /&gt;
[[Table B (File architecture)|Table B]] can now contain up to 48M possible record numbers. (The previous limit was 16M.)&lt;br /&gt;
 &lt;br /&gt;
Set the [[#FILEORG (new settings)|FILEORG X&#039;200&#039; bit]] at file creation time to allow for the increased record numbers.&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;Notes: &amp;lt;/b&amp;gt;  &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The limit for &amp;lt;var&amp;gt;BSIZE&amp;lt;/var&amp;gt; remains at 16M.&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;BSIZE * BRECPPG&amp;lt;/code&amp;gt; must be less than or equal to 48M (actually decimal 50,331,648 to be exact).  &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
For example, if &amp;lt;var&amp;gt;BSIZE&amp;lt;/var&amp;gt; is 16M, &amp;lt;var&amp;gt;BRECPPG&amp;lt;/var&amp;gt; cannot be more than 3.  &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;FILEORG&amp;lt;/var&amp;gt; X&#039;200&#039; bit cannot be set for files with hash key or sorted file organization.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Automatic fields===&lt;br /&gt;
&amp;lt;p&amp;gt;Model 204 now lets you define a field whose value is [[Field design#Automatic fields|automatically maintained]].&amp;lt;br/&amp;gt;A field can count occurrences of another field so that every store or delete of the field occurrence changes the count in the automatic field. The following automatically maintained field attributes are available for files defined with the FILEORG x&#039;100&#039; setting:&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;COUNT-OCCURRENCES-OF&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;CREATE-TIME&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;CREATE-TIMEUTC&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;CREATE-USER&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;UPDATE-TIME&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;UPDATE-TIMEUTC&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;UPDATE-USER&amp;lt;/var&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
The value of an automatic field is updated at the start of a transaction by Model 204 and you cannot set it explicitly by a program. Any valid update statement causes the appropriate time and user stamps to be updated. For example, the time and user stamps will be updated when &amp;lt;code&amp;gt;DELETE FOO(8)&amp;lt;/code&amp;gt; is processed, even if there are no occurrences of FOO in the record and an actual update does not take place.&lt;br /&gt;
 &lt;br /&gt;
Once you define an automatic value for a field, you cannot redefine the automatic value.&lt;br /&gt;
&lt;br /&gt;
===Concatenated fields===&lt;br /&gt;
Model 204 now lets you define [[Field design#Concatenated fields|concatenated fields]].&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Fields that make up concatenated field values must be &amp;lt;var&amp;gt;AT-MOST-ONE&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;EXACTLY-ONE&amp;lt;/var&amp;gt;, or &amp;lt;var&amp;gt;OCCURS&amp;lt;/var&amp;gt; 1 and must all be in the same field group context (or not in a field group). Fields that occur in all field groups (&amp;lt;var&amp;gt;FIELDGROUP *&amp;lt;/var&amp;gt;) cannot be used in a concatenation.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
If a concatenated field becomes longer than 255 bytes after adding separator and escape characters, the update request is cancelled.&lt;br /&gt;
 &lt;br /&gt;
===New field attributes===				&lt;br /&gt;
&amp;lt;p&amp;gt;Model 204 version 7.5 introduces the new &amp;lt;var&amp;gt;[[DEFINE FIELD command|DEFINE FIELD]]&amp;lt;/var&amp;gt; attributes described in this section. These attributes apply to all fields in Model 204. &amp;lt;/p&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; These attributes &amp;lt;strong&amp;gt;all&amp;lt;/strong&amp;gt; require that the &amp;lt;var&amp;gt;[[FILEORG parameter|FILEORG]]&amp;lt;/var&amp;gt; parameter X&#039;100&#039; bit be set on the file containing the fields.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Changes in the new field attributes are detected during the redefinition of an existing field. When such a change is detected, the following messages might be issued:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;M204.1260: [FIELD | FIELDGROUP] WAS PREVIOUSLY DEFINED WITH DIFFERENT ATTRIBUTES,&lt;br /&gt;
NEW [FIELD | FIELDGROUP] OPTIONS IGNORED&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
or&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;M204.2884: [FIELD WAS PREVIOUSLY DEFINED AS A FIELDGROUP | FIELDGROUP WAS PREVIOUSLY&lt;br /&gt;
DEFINED AS A FIELD], NEW DEFINITION IGNORED&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The table below lists the new field attributes. For details on each attribute, click its name. For more information on how related attributes work together, see the [[Field design]] topic.&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;Attribute&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Abbreviation&amp;lt;/th&amp;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&amp;gt;[[DEFINE_FIELD_command#Ordered_index_CHUNK_attribute|CHUNK]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;CNK&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Defines &amp;quot;OI chunks&amp;quot; of data in ORDERED NUMERIC fields to enable more efficient range searching.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;[[Field design#CONCATENATION-OF .28CAT.29 attribute|CONCATENATION-OF]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;(CAT)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Lists the fields that make up a concatenated field, and provides a concatenated value based upon the values of the constituent fields.&amp;lt;/td&amp;gt;&lt;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;[[Field design#Counting occurrences of a field|COUNT-OCCURRENCES-OF]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;(CTO)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Automatically maintains a count of the number of occurrences of the specified field.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;[[Field design#Automatic Fields|CREATE-TIME]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;(CRTM)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Captures the time when the record was created, as of the start of the transaction.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;[[Field design#Automatic Fields|CREATE-TIMEUTC]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;(CRTMU)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Captures the Coordinated Universal Time when the record was created, as of the start of the transaction.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;[[Field design)#Automatic Fields|CREATE-USER]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;(CRUS)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Captures the user ID of the user who created the record.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;[[Field design#DATETIME-GE .28DTGE.29.2C DATETIME-GT .28DTGT.29.2C DATETIME-LE .28DTLE.29.2C and DATETIME-LT .28DTLT.29 attributes|DATETIME]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;(DT)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Specifies the format of the date and time data stored in Table B. The default is YYYYMMDDHHMMSSXXXXXX, i.e. to the nearest millionth of a second.&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;[[Field design#DATETIME-GE .28DTGE.29.2C DATETIME-GT .28DTGT.29.2C DATETIME-LE .28DTLE.29.2C and DATETIME-LT .28DTLT.29 attributes|DATETIME-GE]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;(DTGE)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;With DATETIME-GT, DATETIME-LE, and DATETIME-LT, used to establish a range for date/time values. Specifies that the date/time value must be later than or the same as the date/time value that follows. &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;[[Field design#DATETIME-GE .28DTGE.29.2C DATETIME-GT .28DTGT.29.2C DATETIME-LE .28DTLE.29.2C and DATETIME-LT .28DTLT.29 attributes|DATETIME-GT]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;(DTGT)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Specifies that the date/time value must be later than the date/time value that follows.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;[[Field design#DATETIME-GE .28DTGE.29.2C DATETIME-GT .28DTGT.29.2C DATETIME-LE .28DTLE.29.2C and DATETIME-LT .28DTLT.29 attributes|DATETIME-LE]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;(DTLE)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Specifies that the date/time value must be earlier than or the same as the date/time value that follows.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;[[Field design#DATETIME-GE .28DTGE.29.2C DATETIME-GT .28DTGT.29.2C DATETIME-LE .28DTLE.29.2C and DATETIME-LT .28DTLT.29 attributes|DATETIME-LT]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;(DELT)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Specifies that the date/time value must be earlier than the date/time value that follows.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;[[Field design#DEFAULT-VALUE .28DV.29 attribute|DEFAULT-VALUE]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;(DV)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Specifies the value to use for the field when the record is created and no value has been assigned to the field.&lt;br /&gt;
 &lt;br /&gt;
(The value of the STORE-DEFAULT setting determines whether the DEFAULT-VALUE is physically stored on the record or if it is just used as the default value when the field is missing.)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;[[Field design#ESCAPE .28ESC.29 attribute|ESCAPE]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;(ESC)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Specifies an escape character to insert before separator and escape characters in a concatenated field, differentiating those characters from real data. The default value is X&#039;01&#039;.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;[[Field design#AT-MOST-ONE.2C REPEATABLE and EXACTLY-ONE attributes|EXACTLY-ONE]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;(EXONE)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Specifies that a field always has exactly one occurrence in its record or field group context.&lt;br /&gt;
&amp;lt;p&amp;gt;EXACTLY-ONE fields always appear first when output by a Print All Information (PAI) statement.&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;[[Field design#FIELDGROUP attribute|FIELDGROUP]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;(FG)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Specifies the name of the field group that the defined field is associated with (contained within).&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;[[Field design#FLOAT-GE .28FLTGE.29.2C FLOAT-GT .28FLTGT.29.2C FLOAT-LE .28FLTLE.29 and FLOAT-LT .28FLTLT.29 attributes|FLOAT-GE]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;(FLTGE)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;With FLOAT-GT, FLOAT-LE, and FLOAT-LT, used to establish a range for float values when defining a field. Specifies that the float value must be greater than or equal to the value that follows.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;[[Field design#FLOAT-GE .28FLTGE.29.2C FLOAT-GT .28FLTGT.29.2C FLOAT-LE .28FLTLE.29 and FLOAT-LT .28FLTLT.29 attributes|FLOAT-GT]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;(FLTGT)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Specifies that the float value must be greater than the value that follows.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;[[Field design#FLOAT-GE .28FLTGE.29.2C FLOAT-GT .28FLTGT.29.2C FLOAT-LE .28FLTLE.29 and FLOAT-LT .28FLTLT.29 attributes|FLOAT-LE]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;(FLTLE)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Specifies that the float value must be less than or equal to the value that follows.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;[[Field design#FLOAT-GE .28FLTGE.29.2C FLOAT-GT .28FLTGT.29.2C FLOAT-LE .28FLTLE.29 and FLOAT-LT .28FLTLT.29 attributes|FLOAT-LT]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;(FLTLT)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Specifies that the float value must be less than the value that follows.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;[[Field design#INTEGER-GE .28INTGE.29.2C INTEGER-GT .28INTGT.29.2C INTEGER-LE .28INTLE.29 and INTEGER-LT .28INTLT.29 attributes|INTEGER-GE]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;(INTGE)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;With INTEGER-GT, INTEGER-LE, and INTEGER-LT, used to establish a range for integer values when defining a field. Specifies that the integer value must be greater than or equal to the value that follows.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;[[Field design#INTEGER-GE .28INTGE.29.2C INTEGER-GT .28INTGT.29.2C INTEGER-LE .28INTLE.29 and INTEGER-LT .28INTLT.29 attributes|INTEGER-GT]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;(INTGT)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Specifies that the integer value must be greater than the value that follows.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;[[Field design#INTEGER-GE .28INTGE.29.2C INTEGER-GT .28INTGT.29.2C INTEGER-LE .28INTLE.29 and INTEGER-LT .28INTLT.29 attributes|INTEGER-LE]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;(INTLE)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Specifies that the integer value must be less than or equal to the value that follows.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;[[Field design#INTEGER-GE .28INTGE.29.2C INTEGER-GT .28INTGT.29.2C INTEGER-LE .28INTLE.29 and INTEGER-LT .28INTLT.29 attributes|INTEGER-LT]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;(INTLT)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Specifies that the integer value must be less than the value that follows.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;[[Field design#LENGTH-EQ .28LEQ.29 attribute|LENGTH-EQ]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;(LEQ)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Used to set a length constraint when defining a field. Specifies the required length of a field value.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;[[Field design#LENGTH-GE .28LGE.29 attribute|LENGTH-GE]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;(LGE)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Specifies the minimum length of a field value.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;[[Field design#LENGTH-LE .28LLE.29 attribute|LENGTH-LE]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;(LLE)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Specifies the maximum length of a field value.&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;[[Field design#Setting a pattern for a field value: the LIKE attribute|LIKE]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;(LK)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Sets a pattern that to which a field value must conform.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;[[Field design#BLOB.2C CLOB.2C and MINLOBE attributes|MINLOBE]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;(MLBE)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Defines the minimum size of a BLOB or CLOB field value that will be stored in Table E. This avoids wasting Table E pages on small values that could be stored in Table B (or Table X). The default is 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;NO-DOMAIN-CONSTRAINTS&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td/&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Specifies that the field has no [[Field design#Content constraints|content constraint]] attributes. Useful with &amp;lt;var&amp;gt;[[REDEFINE command|REDEFINE]]&amp;lt;/var&amp;gt; to remove existing constraints on a field.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;NO-DEFAULT-VALUE&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;(NDV)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Specifies that the field has no default value. Useful with &amp;lt;var&amp;gt;[[REDEFINE command|REDEFINE]]&amp;lt;/var&amp;gt; to remove an existing default value on a field.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;[[Field design#SEPARATOR .28SEP.29 attribute|SEPARATOR]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;(SEP)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Specifies a separator character used between field values in concatenated fields. The default is X&#039;00&#039;.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;[[Field design#STORE-DEFAULT .28SD.29 and STORE-NULL .28SN.29 attributes|STORE-DEFAULT]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;(SD)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Specifies whether to physically store the default value for the field in each record, if no field value has been supplied and a default is required. The default option is LITERAL (LIT), which stores a literal 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;[[Field design#STORE-DEFAULT .28SD.29 and STORE-NULL .28SN.29 attributes|STORE-NULL]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;(SN)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Specifies whether to physically store the null value for the field in each record, if no field value has been supplied, and a default is required. The default option is LITERAL (LIT), which stores a literal 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;[[Field design#Automatic Fields|UPDATE-TIME]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;(UPTM)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Captures the time when the record was updated, as of the start of the transaction.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;[[Field design#Automatic Fields|UPDATE-TIMEUTC]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;(UPTMU)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Captures the Coordinated Universal Time when the record was updated, as of the start of the transaction.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;[[Field design#Automatic Fields|UPDATE-USER]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;(UPUS)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Captures the user ID of the user who updated the record.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;[[Field design#UTF-8 and UTF-16 attributes|UTF-8]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;(UTF8)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Data is stored in UTF-8 format and is treated as unicode data inside SOUL programs. The default is EBCDIC.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;[[Field design#UTF-8 and UTF-16 attributes|UTF-16]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;(UTF16)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Data is stored in UTF-16 format and is treated as unicode data inside SOUL programs. The default is EBCDIC.&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;
==System management enhancements==&lt;br /&gt;
 &lt;br /&gt;
===Writing records to the SMF data set===&lt;br /&gt;
Having Model 204 write records to the SMF data set no longer requires the installation of an SVC.&lt;br /&gt;
 &lt;br /&gt;
Therefore, the &amp;lt;var&amp;gt;[[SMFSVC parameter|SMFSVC]]&amp;lt;/var&amp;gt; parameter is no longer required and, if present, will be ignored and flagged with the following informational message:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;M204.0204: PARAMETER SMFSVC OBSOLETE AND NOT RESET&amp;lt;/p&amp;gt;&lt;br /&gt;
However, the &amp;lt;var&amp;gt;[[SMFLORN parameter|SMFLORN]]&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;[[SMFSLRN parameter|SMFSLRN]]&amp;lt;/var&amp;gt; parameters must still be present in CCAIN to specify the types of SMF record to be written.&lt;br /&gt;
&lt;br /&gt;
==Performance enhancements==&lt;br /&gt;
 &lt;br /&gt;
===64-bit addressing and Above The Bar (ATB) storage===&lt;br /&gt;
Model 204 moves above the (2G) bar to increase scalability, performance, and growth potential. With this release of Model 204, 64-bit addressing becomes the de facto standard for all subsequent versions.&lt;br /&gt;
 &lt;br /&gt;
In addition to the ATB support for FTBL released with Model 204 version 7.4, version 7.5 adds ATB support for GTBL, NTBL, and QTBL, using the same &amp;lt;var&amp;gt;[[SERVNSA parameter|SERVNSA]]&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;[[SERVNSSZ parameter|SERVNSSZ]]&amp;lt;/var&amp;gt; parameters used for FTBL.&lt;br /&gt;
 &lt;br /&gt;
When using non-swappable ATB server space, each user will get SERVNSSZ bytes of ATB space, even if the thread is logged out or running resident requests. For greater efficiency, Model 204 version 7.5 also provides swappable ATB server areas that can supplement or replace the non-swappable areas. These swappable ATB server areas are controlled by the &amp;lt;var&amp;gt;[[SERVGA parameter|SERVGA]]&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;[[SERVGSZ parameter|SERVGSZ]]&amp;lt;/var&amp;gt; parameters.&lt;br /&gt;
 &lt;br /&gt;
====GTBL, NTBL, QTBL in above the bar storage====&lt;br /&gt;
GTBL, NTBL and QTBL can now be placed into swappable or non-swappable server storage area above the bar.&lt;br /&gt;
&amp;lt;p&amp;gt;In order to store a table in ATB storage:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Increase the &amp;lt;var&amp;gt;[[SERVNSSZ parameter|SERVNSSZ]]&amp;lt;/var&amp;gt; parameter by the corresponding table size.&lt;br /&gt;
&amp;lt;li&amp;gt;Set the proper bit in &amp;lt;var&amp;gt;[[SERVNSA parameter|SERVNSA]]&amp;lt;/var&amp;gt;:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;for GTBL set the second byte to &amp;lt;code&amp;gt;X&#039;80&#039;&amp;lt;/code&amp;gt;, so the value of &amp;lt;var&amp;gt;SERVNSA&amp;lt;/var&amp;gt; is &amp;lt;code&amp;gt;X&#039;00800000&#039;&amp;lt;/code&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;for NTBL set the third byte to &amp;lt;code&amp;gt;X&#039;40&#039;&amp;lt;/code&amp;gt;, so the value of &amp;lt;var&amp;gt;SERVNSA&amp;lt;/var&amp;gt; is &amp;lt;code&amp;gt;X&#039;00004000&#039;&amp;lt;/code&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;for QTBL set the third byte to &amp;lt;code&amp;gt;X&#039;20&#039;&amp;lt;/code&amp;gt;, so the value of &amp;lt;var&amp;gt;SERVNSA&amp;lt;/var&amp;gt; is &amp;lt;code&amp;gt;X&#039;00002000&#039;&amp;lt;/code&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;note&amp;quot;&amp;gt;&#039;&#039;&#039;Note:&#039;&#039;&#039;&lt;br /&gt;
The settings for each server table above the bar are independent of each other.&lt;br /&gt;
So if FTBL, GTBL, NTBL, and QTBL are all placed above the bar, then &amp;lt;var&amp;gt;SERVNSA&amp;lt;/var&amp;gt; should be set to &amp;lt;code&amp;gt;X&#039;02806000&#039;&amp;lt;/code&amp;gt;.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====XmlDoc pages in above the bar buffer pool====&lt;br /&gt;
With this release, the CCATEMP pages used for &amp;lt;var&amp;gt;XmlDoc&amp;lt;/var&amp;gt; objects use the above the bar buffer pool, which may allow the below the bar buffer pool to be reduced, perhaps providing more storage for server areas. It also may provide a reduction in CPU utilization, especially when the &amp;lt;var&amp;gt;[[TEMPPAGE parameter|TEMPPAGE]]&amp;lt;/var&amp;gt; parameter is used to allocate CCATEMP in memory.&lt;br /&gt;
 &lt;br /&gt;
===Improved range searching by Ordered Index (OI) chunk===&lt;br /&gt;
The new &amp;lt;var&amp;gt;[[DEFINE FIELD command#Ordered index CHUNK attribute|CHUNK]]&amp;lt;/var&amp;gt; attribute for the &amp;lt;var&amp;gt;DEFINE FIELD&amp;lt;/var&amp;gt; command enables more efficient range searching on Ordered Index numeric  (&amp;lt;var&amp;gt;ORDERED NUMERIC&amp;lt;/var&amp;gt;) fields. &amp;lt;var&amp;gt;CHUNK&amp;lt;/var&amp;gt; improves performance of  the &amp;lt;var&amp;gt;FIND&amp;lt;/var&amp;gt; statement &amp;lt;var&amp;gt;RANGE&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;BETWEEN&amp;lt;/var&amp;gt; terms. The &amp;lt;var&amp;gt;CHUNK&amp;lt;/var&amp;gt; field attribute defines a subrange (&amp;quot;OI chunk&amp;quot;) of the data range. Searching by OI chunks on a range of data requires fewer scans of the ordered index entries to find the desired data. Once OI chunk fields are defined, they are automatically used by FIND processing, so no application code needs to be changed.&lt;br /&gt;
 &lt;br /&gt;
After defining an &amp;lt;var&amp;gt;ORDERED NUMERIC&amp;lt;/var&amp;gt; field, you define one or more related OI chunk fields containing data from the original base field rounded down by a specified &amp;lt;var&amp;gt;CHUNK&amp;lt;/var&amp;gt; size.&lt;br /&gt;
 &lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;DEFINE FIELD YYYYMMDD WITH ORDERED NUMERIC&lt;br /&gt;
DEFINE FIELD YYYYMM   WITH ORDERED NUMERIC INVISIBLE CHUNK 100 FOR YYYYMMDD&lt;br /&gt;
DEFINE FIELD YYYY     WITH ORDERED NUMERIC INVISIBLE CHUNK 10000 FOR YYYYMMDD&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;var&amp;gt;CHUNK&amp;lt;/var&amp;gt; requires the &amp;lt;var&amp;gt;[[#FILEORG (new settings)|FILEORG]]&amp;lt;/var&amp;gt; X&#039;100&#039; bit setting and the &amp;lt;var&amp;gt;INVISIBLE&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;ORDERED NUMERIC&amp;lt;/var&amp;gt; field attributes.&lt;br /&gt;
 &lt;br /&gt;
==Debugging and testing enhancements==&lt;br /&gt;
The SoftSpy debugging, testing, and performance tuning product is now included as part of the Model&amp;amp;nbsp;204 core product. For more information about SoftSpy version 7.5, see the [[Release notes for SoftSpy V7.5]].&lt;br /&gt;
 &lt;br /&gt;
==Connect&amp;lt;sup&amp;gt;&amp;amp;#9733;&amp;lt;/sup&amp;gt; enhancements==&lt;br /&gt;
The 7.5 version of Connect&amp;lt;sup&amp;gt;&amp;amp;#9733;&amp;lt;/sup&amp;gt; for JDBC and Connect&amp;lt;sup&amp;gt;&amp;amp;#9733;&amp;lt;/sup&amp;gt; for .NET is now available.&lt;br /&gt;
&lt;br /&gt;
===Connect&amp;lt;sup&amp;gt;&amp;amp;#9733;&amp;lt;/sup&amp;gt; for JDBC===&lt;br /&gt;
Connect&amp;lt;sup&amp;gt;&amp;amp;#9733;&amp;lt;/sup&amp;gt; 7.5 for JDBC offers a &amp;quot;connection pooling&amp;quot; class to interface with other pooling infrastructures provided by pooling packages and web application servers. This new feature allows for a pool of connections that remain active and open during execution of an SQL and RCL (SOUL) statement.&lt;br /&gt;
Using connection pooling helps eliminate the overhead of creating initial connections from scratch or trying to&lt;br /&gt;
manage each connection via JDBC API.&lt;br /&gt;
 &lt;br /&gt;
Each Connection Pool can create a pool of active connections maintainable throughout the connection cycle of the pooling service.&lt;br /&gt;
 &lt;br /&gt;
For a sample program, see the &amp;quot;Connect&amp;lt;sup&amp;gt;&amp;amp;#9733;&amp;lt;/sup&amp;gt; for JDBC&amp;quot; chapter of the &amp;lt;var class=&amp;quot;book&amp;quot;&amp;gt;Connect&amp;lt;sup&amp;gt;&amp;amp;#9733;&amp;lt;/sup&amp;gt; Installation and Programming Guide&amp;lt;/var&amp;gt;.&lt;br /&gt;
 &lt;br /&gt;
Connect&amp;lt;sup&amp;gt;&amp;amp;#9733;&amp;lt;/sup&amp;gt; 7.5 for JDBC has been tested with the JNDI, Apache DBCP&amp;lt;sup&amp;gt;TM&amp;lt;/sup&amp;gt;, BoneCP and C3PO pooling packages.&lt;br /&gt;
&lt;br /&gt;
===Connect&amp;lt;sup&amp;gt;&amp;amp;#9733;&amp;lt;/sup&amp;gt; for .NET===&lt;br /&gt;
Connect&amp;lt;sup&amp;gt;&amp;amp;#9733;&amp;lt;/sup&amp;gt; 7.5 for .NET offers both 32-bit and 64-bit drivers that can be used with any Web or GUI-driven application.&lt;br /&gt;
&lt;br /&gt;
==MQ/204 enhancements==&lt;br /&gt;
 &lt;br /&gt;
===Freeing MQ/204 subtasks and associated storage===&lt;br /&gt;
The new &amp;lt;var&amp;gt;MQDELDTP&amp;lt;/var&amp;gt; PST (pseudo subtask)  checks for MQ/204 subtasks that are in a delayed detach state. &amp;lt;var&amp;gt;MQDELDTP&amp;lt;/var&amp;gt; detaches MQ/204 subtasks that have finished their work and releases their associated storage areas.&lt;br /&gt;
 &lt;br /&gt;
==Other features==&lt;br /&gt;
===AT-MOST-ONE and field groups===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The &amp;lt;var&amp;gt;AT-MOST-ONE&amp;lt;/var&amp;gt; attribute is now applicable to a field group definition.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Storing and updating LOBs===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
All large object data (LOBs) in a &amp;lt;var&amp;gt;FILEORG&amp;lt;/var&amp;gt; X&#039;100&#039; file are chained. There are four bytes per Table E page overhead for chained LOBs, used to maintain a queue of pages available for reuse after LOBs are deleted. The pages used by a chained LOB are not necessarily contiguous.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Handling LOBs in &amp;lt;var&amp;gt;FILEORG&amp;lt;/var&amp;gt; X&#039;100&#039; files also has the following effects:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;LOBs can be changed as needed. The &amp;lt;var&amp;gt;RESERVE&amp;lt;/var&amp;gt; clause is ignored in a LOB field &amp;lt;var&amp;gt;ADD&amp;lt;/var&amp;gt; statement processing, as well as the &amp;lt;var&amp;gt;STORE RECORD&amp;lt;/var&amp;gt; statement processing of fieldname=value pairs. Consequently, the &amp;lt;var&amp;gt;CHANGE&amp;lt;/var&amp;gt; statement does not fail because of insufficient reserved space. If the &amp;lt;var&amp;gt;CHANGE&amp;lt;/var&amp;gt; statement requires that a LOB field be extended, it is.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;The value of the &amp;lt;var&amp;gt;[[EHIGHPG parameter|EHIGHPG]]&amp;lt;/var&amp;gt; parameter is always one less than the high water mark of the number of pages used to hold LOBs. (Unless none were ever added, in which case it is zero, not -1).&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;The value of the &amp;lt;var&amp;gt;[[EPGSUSED parameter|EPGSUSED]]&amp;lt;/var&amp;gt; parameter is always the number of pages currently being used to hold LOBs.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;The &amp;lt;var&amp;gt;COMPACTE&amp;lt;/var&amp;gt; command does not process &amp;lt;var&amp;gt;FILEORG&amp;lt;/var&amp;gt; X&#039;100&#039; files, just as it does not process a file created in V6R1 or earlier. Thus, issuing a &amp;lt;var&amp;gt;COMPACTE&amp;lt;/var&amp;gt; command for a &amp;lt;var&amp;gt;FILEORG&amp;lt;/var&amp;gt; X&#039;100&#039; file produces an error message.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;The &amp;lt;var&amp;gt;TABLEE&amp;lt;/var&amp;gt; command is effectively executing a &amp;lt;code&amp;gt;VIEW ESIZE EHIGHPG EPGSUSED&amp;lt;/code&amp;gt; command for a &amp;lt;var&amp;gt;FILEORG&amp;lt;/var&amp;gt; X&#039;100&#039; file. Consequently there are no &amp;lt;var&amp;gt;TABLEE&amp;lt;/var&amp;gt; overhead pages in a &amp;lt;var&amp;gt;FILEORG&amp;lt;/var&amp;gt; X&#039;100&#039; file.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Constraint attributes===&lt;br /&gt;
You can set range constraints on fields using the constraint attributes. Each set of range attributes is comprised of four attributes (&amp;lt;var&amp;gt;GE&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;GT&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;LE&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;LT&amp;lt;/var&amp;gt;) that you can use to establish a range for integer values, float values, or date-time stamp values. The types of range attributes are mutually exclusive. For example, you cannot define a field with the &amp;lt;var&amp;gt;FLOAT-GE&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;INTEGER-LE&amp;lt;/var&amp;gt; attributes.&lt;br /&gt;
 &lt;br /&gt;
If a range constraint is redefined, it replaces the existing field constraint.&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;&lt;br /&gt;
The range constraints do not have to match the data type of the stored field. That is, you could have a date-time constraint for a &amp;lt;var&amp;gt;STRING&amp;lt;/var&amp;gt; field or an integer constraint for a &amp;lt;var&amp;gt;FLOAT&amp;lt;/var&amp;gt; field, and so on.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
You can set the following constraint attributes:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;date-time value&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;pattern for a field value&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;length&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;integer value&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;floating point value&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
See [[Field design#Content constraints|Content constraints]] for details.&lt;br /&gt;
&lt;br /&gt;
===Changes to journal record layouts===&lt;br /&gt;
Four bytes have been added to the journal record header for user statistic entries:&lt;br /&gt;
1 byte to hold the &amp;lt;var&amp;gt;IODEV&amp;lt;/var&amp;gt; number and 3 bytes for future use.&lt;br /&gt;
 &lt;br /&gt;
All user since-last statistics (LAST=) lines will now show the &amp;lt;var&amp;gt;IODEV&amp;lt;/var&amp;gt; value:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;ST $$$ USERID=&#039;&amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;userid&amp;lt;/var&amp;gt;&#039; ACCOUNT=&#039;&amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;accountname&amp;lt;/var&amp;gt;&#039; IODEV=&#039;&amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;devicetype&amp;lt;/var&amp;gt;&#039; LAST=&#039;&amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;acty&amp;lt;/var&amp;gt;&#039;&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
For more information on journal records and user statistics, see the &amp;lt;var class=&amp;quot;book&amp;quot;&amp;gt;Rocket Model 204 System Manager&#039;s Guide&amp;lt;/var&amp;gt;.&lt;br /&gt;
 &lt;br /&gt;
==Compatibility issues==&lt;br /&gt;
This section describes any compatibility issues between V7.5 and prior versions of Model 204.&lt;br /&gt;
An incompatibility arises if an operation that was previously performed without any indication of error, now operates (given the same inputs and conditions) in a different manner.&lt;br /&gt;
 &lt;br /&gt;
A normal bug fix resolving behavior that, although not indicating an error, was &amp;quot;clearly and obviously&amp;quot; incorrect, also introduces an incompatibility, but it might &amp;lt;i&amp;gt;not&amp;lt;/i&amp;gt; be included below.&lt;br /&gt;
 &lt;br /&gt;
===Change to the Ordered Index layout===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Formerly all ORDERED NUMERIC fields came after all ORDERED CHARACTER fields in the Ordered Index. Now, the fields are interspersed in field code order.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===ZFIELD Image===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The [[ZFIELD image detail as of Model 204 V7.5|ZFIELD image]] has been updated for this release. The image is used with $LSTFLD and $FDEF function calls. One change is that FDEF is now longer (to accommodate FDEF1, LOOPVAR, and FDEF2).&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===INTERCOMM is no longer supported===&lt;br /&gt;
The INTERCOMM interface supports the use of Teletype and 3270 terminals in line-at-a-time mode, using the Model 204 IODEV=29 thread type.&lt;br /&gt;
 &lt;br /&gt;
INTERCOMM is no longer supported as of Model 204 version 7.5.&lt;br /&gt;
 &lt;br /&gt;
See the &amp;lt;var class=&amp;quot;book&amp;quot;&amp;gt;Rocket Model 204 Terminal User&#039;s Guide&amp;lt;/var&amp;gt; for a discussion of terminal interfaces.&lt;br /&gt;
 &lt;br /&gt;
===User PDL overflow===&lt;br /&gt;
The new &amp;lt;var&amp;gt;[[Release notes for Model 204 version 7.5 (DRAFT)#SEQPDL parameter|SEQPDL]]&amp;lt;/var&amp;gt; parameter might require you to increase the size of the user Push Down List (using UTABLE LPDLST) by up to 3072 bytes, or more if you specify a value for SEQPDL that is larger than the 4096 default value.&lt;br /&gt;
 &lt;br /&gt;
===LPDLST parameter maximum value===&lt;br /&gt;
The maximum value for the &amp;lt;var&amp;gt;[[LPDLST parameter|LPDLST]]&amp;lt;/var&amp;gt; parameter has been increased from 32760 to 65536.&lt;br /&gt;
 &lt;br /&gt;
===SSLIBSIZE parameter maximum value===&lt;br /&gt;
The maximum value for the &amp;lt;var&amp;gt;JANUS DEFINE&amp;lt;/var&amp;gt; command &amp;lt;var&amp;gt;[[SSLIBSIZE (JANUS DEFINE parameter)|SSLIBSIZE]]&amp;lt;/var&amp;gt; parameter has been decreased from 32767 to 16384.&lt;br /&gt;
 &lt;br /&gt;
==New and changed commands==&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
     ******************************************************************&lt;br /&gt;
     Please keep the following subsections alphabetized by command name&lt;br /&gt;
     ******************************************************************&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
===DECREASE (new option: DYNAMIC)===&lt;br /&gt;
The DYNAMIC option on the &amp;lt;var&amp;gt;[[DECREASE command|DECREASE]]&amp;lt;/var&amp;gt; command lets you decrease Table B dynamically, even if the file is open by others or has requests compiled against it.&lt;br /&gt;
 &lt;br /&gt;
===DEFINE DATASET (new parameter: GDGRECNT)===&lt;br /&gt;
The GDGRECNT parameter for the &amp;lt;var&amp;gt;[[DEFINE DATASET command|DEFINE DATASET]]&amp;lt;/var&amp;gt; command causes Model 204 to check the catalog information for the latest relative GDG generation number whenever allocating a GDG data set.&lt;br /&gt;
 &lt;br /&gt;
===DEFINE FIELD (new or changed attributes)===&lt;br /&gt;
In Model 204 version 7.5, the &amp;lt;var&amp;gt;[[DEFINE FIELD command|DEFINE FIELD]]&amp;lt;/var&amp;gt; command has new attributes information:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;the new &amp;lt;var&amp;gt;[[#Improved range searching by Ordered Index .28OI.29 chunk|CHUNK]]&amp;lt;/var&amp;gt; attribute, which improves the efficiency of range finds using ordered index processing&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;many other &amp;lt;var&amp;gt;[[FILEORG parameter|FILEORG=x&#039;100&#039;]]&amp;lt;/var&amp;gt; related new or changed [[Release notes for Model 204 version 7.5 (DRAFT)#New field attributes|field attributes]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===DEFINE FIELDGROUP (new in V7.5)===&lt;br /&gt;
The &amp;lt;var&amp;gt;[[DEFINE FIELDGROUP command|DEFINE FIELDGROUP]]&amp;lt;/var&amp;gt; command establishes the contents of a field group, including the fields and field groups associated with the field group being defined.&lt;br /&gt;
 &lt;br /&gt;
===DELETE FIELD (changed to handle CAT and CTO fields)===&lt;br /&gt;
The &amp;lt;var&amp;gt;[[DELETE command: Field|DELETE FIELD]]&amp;lt;/var&amp;gt; command has been changed to take [[Field design#CONCATENATION-OF .28CAT.29 attribute|CONCATENATION-OF (CAT)]] and [[Field design#Counting occurrences of a field|COUNT-OCCURRENCES-OF (CTO)]] fields into account. DELETE FIELD does not allow deletion of fields referred to by an existing CAT or CTO field.&lt;br /&gt;
 &lt;br /&gt;
===DELETE FIELDGROUP (new in V7.5)===&lt;br /&gt;
The &amp;lt;var&amp;gt;[[DELETE FIELDGROUP command|DELETE FIELDGROUP]]&amp;lt;/var&amp;gt; command deletes a field group from a Model 204 file.&lt;br /&gt;
 &lt;br /&gt;
===DISPLAY FIELD (new option: COMMA)===&lt;br /&gt;
In Model 204 version 7.5, the &amp;lt;var&amp;gt;[[DISPLAY FIELD command|DISPLAY FIELD]]&amp;lt;/var&amp;gt; command has added&lt;br /&gt;
the &amp;lt;var&amp;gt;COMMA&amp;lt;/var&amp;gt; option, which uses commas to separate displayed field attributes.&lt;br /&gt;
 &lt;br /&gt;
===DISPLAY MODMAP (new in V7.5)===&lt;br /&gt;
&amp;lt;var&amp;gt;[[DISPLAY MODMAP command|DISPLAY MODMAP]]&amp;lt;/var&amp;gt; displays the Model 204 link map in address order. System manager privileges are required.&lt;br /&gt;
===MSGCTL (new options: UP/UPPER, NOUP/NOUPPER)===&lt;br /&gt;
The &amp;lt;var&amp;gt;UP&amp;lt;/var&amp;gt; (or &amp;lt;var&amp;gt;UPPER&amp;lt;/var&amp;gt;) option on the [[MSGCTL command]] indicates that the specified message should be converted to uppercase before display. Similarly, the &amp;lt;var&amp;gt;NOUP&amp;lt;/var&amp;gt; (or &amp;lt;var&amp;gt;NOUPPER&amp;lt;/var&amp;gt;) option on the MSGCTL command undoes the effects of &amp;lt;var&amp;gt;UP&amp;lt;/var&amp;gt; or &amp;lt;var&amp;gt;UPPER&amp;lt;/var&amp;gt;.&lt;br /&gt;
 &lt;br /&gt;
===REGENERATE and REGENERATE ONEPASS (improved TO UPDATE option)===&lt;br /&gt;
The TO UPDATE option of the &amp;lt;var&amp;gt;[[REGENERATE command|REGENERATE]]&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;[[REGENERATE ONEPASS command|REGENERATE ONEPASS]]&amp;lt;/var&amp;gt; commands can now handle multiple files.&lt;br /&gt;
&amp;lt;p&amp;gt;If TO UPDATE &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;nn&amp;lt;/var&amp;gt; OF &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;id&amp;lt;/var&amp;gt; is specified, it must appear only on the first FILE statement, and no other �TO� options are allowed on subsequent files.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;All additional files will be recovered as though they each specified the same &#039;TO UPDATE&#039; option. Once the &#039;end of transaction&#039; is reached, further processing will stop and all inflight transactions will be backed out.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===RENAME FIELDGROUP (new in V7.5)===&lt;br /&gt;
The &amp;lt;var&amp;gt;[[RENAME FIELDGROUP command|RENAME FIELDGROUP]]&amp;lt;/var&amp;gt; command changes the name of a field group.&lt;br /&gt;
 &lt;br /&gt;
===UNICODE (new codepage: 1154)===&lt;br /&gt;
The &amp;lt;var&amp;gt;[[UNICODE command|UNICODE]]&amp;lt;/var&amp;gt; command now accepts 1154 as a codepage name.  This codepage has 92 Unicode characters in the range U+0400 through U+045F, representing the Basic Russian alphabet and all of the Cyrillic extensions excepting the four which have grave accents.&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
     *************************************************************************************&lt;br /&gt;
     End of new/changed command subsections; please keep them alphabetized by command name&lt;br /&gt;
     *************************************************************************************&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
==Reliability enhancements==&lt;br /&gt;
===SEQPDL parameter===&lt;br /&gt;
The new &amp;lt;var&amp;gt;[[SEQPDL parameter|SEQPDL]]&amp;lt;/var&amp;gt; parameter controls the amount of free space that must be present in the user&#039;s Push Down List (PDL) in order for the SOUL sequencer to proceed with the next quad code. The minimum and default value is 4096 bytes. The maximum value is 8192 bytes. SEQPDL is a user resettable parameter and can be set on the user&#039;s parameter line or reset with the UTABLE command.&lt;br /&gt;
 &lt;br /&gt;
Formerly 1024 bytes of PDL free space were hardcoded internally in the Model 204 core. With 1024 bytes there were edge cases where abends would break files, resulting in ERROR 2126 USER&#039;S PUSHDOWN LIST OVERFLOWED. SEQPDL is provided to allow enough PDL space so that all of the lower level journaling routines can process error conditions without breaking files.&lt;br /&gt;
 &lt;br /&gt;
If your applications are using close to the amount of PDL space currently set by the LPDLST value, you might need to increase LPDLST to reflect SEQPDL&#039;s increase in free space.&lt;br /&gt;
 &lt;br /&gt;
==New and changed parameters==&lt;br /&gt;
In addition to the following specific parameter changes, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model 204&amp;lt;/var&amp;gt; parameter descriptions, for example as displayed by the &amp;lt;var&amp;gt;VIEW&amp;lt;/var&amp;gt; command, are now in mixed case (unless translated to uppercase due to &amp;lt;var&amp;gt;[[#UPCASMSG (new in V7.5)|UPCASMSG]]&amp;lt;/var&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; The [[Sirius Mods]] parameters are merged with the &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model 204&amp;lt;/var&amp;gt; base as of &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model 204&amp;lt;/var&amp;gt; version 7.5, and they are available to all version 7.5 customers. The combined set of parameters is displayed on the [[List of Model 204 parameters]] page. The former Sirius parameters in that listing are marked with an &amp;lt;sup&amp;gt;(S)&amp;lt;/sup&amp;gt;. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
     ********************************************************************&lt;br /&gt;
     Please keep the following subsections alphabetized by parameter name&lt;br /&gt;
     ********************************************************************&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===DEFCNTX and APDFCNTX (for $View function only, new in V7.5)===&lt;br /&gt;
The string&lt;br /&gt;
&amp;lt;code&amp;gt;DEFCNTX&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;APDFCNTX&amp;lt;/code&amp;gt; can be used as an&lt;br /&gt;
argument to the &amp;lt;var&amp;gt;[[$VIEW|$View]]&amp;lt;/var&amp;gt; function to&lt;br /&gt;
get the default file or group context. Using these strings is better than using &amp;lt;code&amp;gt;$View(&#039;CURFILE&#039;)&amp;lt;/code&amp;gt; because:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;CURFILE&amp;lt;/code&amp;gt; returns a null string if the default context is a group.&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;CURFILE&amp;lt;/code&amp;gt; is affected by the &amp;lt;var&amp;gt;IN&amp;lt;/var&amp;gt; clause prior to a &amp;lt;var&amp;gt;Begin&amp;lt;/var&amp;gt; command and&lt;br /&gt;
can be affected by the &amp;lt;var&amp;gt;In&amp;lt;/var&amp;gt; clause prior to many SOUL statements.&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
If there is no default context, &amp;lt;code&amp;gt;$View(&#039;DEFCNTX&#039;)&amp;lt;/code&amp;gt; returns a null&lt;br /&gt;
string.&lt;br /&gt;
 &lt;br /&gt;
Otherwise &amp;lt;code&amp;gt;$View(&#039;DEFCNTX&#039;)&amp;lt;/code&amp;gt; returns the type of context (&amp;lt;code&amp;gt;FILE&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;TEMP GROUP&amp;lt;/code&amp;gt;, or&lt;br /&gt;
&amp;lt;code&amp;gt;PERM GROUP&amp;lt;/code&amp;gt;) followed by the file or group name, with trailing blanks&lt;br /&gt;
removed.&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;code&amp;gt;$View(&#039;APDFCNTX&#039;)&amp;lt;/code&amp;gt; returns the same information based on the default&lt;br /&gt;
context when the APSY was entered, unless that is the same as one of the files or groups in the subsystem&#039;s definition; in that case, the null string is returned.&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; These &amp;lt;code&amp;gt;$View&amp;lt;/code&amp;gt; arguments were implemented as part of&lt;br /&gt;
maintenance to version 7.5 (via zap number 54). They are not available as ordinary parameters on the &amp;lt;var&amp;gt;VIEW&amp;lt;/var&amp;gt; command.&lt;br /&gt;
In version 7.6 of Model 204,&lt;br /&gt;
they will also be available with the &amp;lt;var&amp;gt;VIEW&amp;lt;/var&amp;gt; command.&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===DSPOPT (change to default setting)===&lt;br /&gt;
The default setting for [[DSPOPT parameter|DSPOPT]] has been changed from X&#039;00&#039; to X&#039;01&#039;. The X&#039;01&#039; setting allocates space for servers in memory in chunks of 4K pages, not as a permanent contiguous area. This allocation lets you move fewer 4K pages, keeping the virtual storage allocated for servers in memory less fragmented and possibly using fewer paging tables.&lt;br /&gt;
 &lt;br /&gt;
===ECPSIZE (change to max value)===&lt;br /&gt;
The maximum value setting for [[ECPSIZE parameter|ECPSIZE]] has been increased from 1310680 to 1966020 to accommodate more [[Release notes for Model 204 version 7.5 (DRAFT)#External Call Facility .28ECF.29|External Call Facility]] parameters.&lt;br /&gt;
 &lt;br /&gt;
===FILEORG (new settings)===&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
The &amp;lt;var&amp;gt;[[FILEORG parameter|FILEORG]] X&#039;100&#039;&amp;lt;/var&amp;gt; setting for enhanced data handling files is now available.&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;p&amp;gt;X&#039;100&#039; enables a number of enhancements to the file structure, including: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[[Release notes for Model 204 version 7.5 (DRAFT)#Support for physical field groups|Support for physical field groups]] &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;The definition of as many as 32000 fields in a file &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;System maintained [[Field design#Automatic Fields|Automatic fields]] &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;[[Field design#Field constraints|Field constraints]] providing content validation &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Improved space management of fields containing [[Field design#BLOB, CLOB, and MINLOBE attributes|Large Objects]] &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;[[#New field attributes|New DEFINE FIELD attributes]], such as &amp;lt;var&amp;gt;CHUNK&amp;lt;/var&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If X&#039;100&#039; is selected, the X&#039;80&#039; bit (optimized field extraction files) is automatically set.&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;FILEORG X&#039;200&#039;&amp;lt;/var&amp;gt; setting for large file support is now available. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;p&amp;gt;X&#039;200&#039; allows files to hold up to 48 million records.&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;
===FISTAT (change to X&#039;08&#039; setting)===&lt;br /&gt;
The &amp;lt;var&amp;gt;[[FISTAT parameter|FISTAT]] X&#039;08&#039;&amp;lt;/var&amp;gt; (file full) setting is now automatically cleared in a transaction back out file if table D is increased enough so that DSIZE is greater than or equal to DPGSRES+DPGSUSED.&lt;br /&gt;
 &lt;br /&gt;
===LRETBL (setting increase may be necessary)===&lt;br /&gt;
Because there might be a slight increase in record locking table usage in V7.5, an increase in the value of the &amp;lt;var&amp;gt;[[LRETBL parameter|LRETBL]]&amp;lt;/var&amp;gt; parameter is advised. The amount of the increase is best estimated by multiplying by 16 the &amp;lt;code&amp;gt;HWM HEADERS&amp;lt;/code&amp;gt; value (from a &amp;lt;var&amp;gt;[[MONITOR ENQ command|MONITOR ENQ]]&amp;lt;/var&amp;gt; report), then dividing by the value of the &amp;lt;var&amp;gt;NUSERS&amp;lt;/var&amp;gt; parameter. For example, if &amp;lt;code&amp;gt;HWM HEADERS = 100000&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;NUSERS=2000&amp;lt;/code&amp;gt;, the recommended &amp;lt;var&amp;gt;LRETBL&amp;lt;/var&amp;gt; increase is &amp;lt;code&amp;gt;16*100000/2000&amp;lt;/code&amp;gt;, or 800.&lt;br /&gt;
 &lt;br /&gt;
===MISCOPT (obsolete)===&lt;br /&gt;
The &amp;lt;var&amp;gt;[[MISCOPT parameter|MISCOPT]]&amp;lt;/var&amp;gt; parameter is now obsolete. In Model 204 version 7.5, MISCOPT is still viewable but is not resettable.&lt;br /&gt;
 &lt;br /&gt;
===MODTIM (new in V7.5)===&lt;br /&gt;
The &amp;lt;var&amp;gt;[[MODTIM parameter|MODTIM]]&amp;lt;/var&amp;gt; system parameter displays the most recent assembly date and time of the Model 204 load module.&lt;br /&gt;
 &lt;br /&gt;
===OUTPUT (change to allow OUTPUT=DUMMY)===&lt;br /&gt;
IODEV=3 threads definitions now allow OUTPUT=DUMMY.&lt;br /&gt;
When defining IODEV=3 threads, if output is not required, the OUTPUT parameter can be coded as OUTPUT=DUMMY.&lt;br /&gt;
&amp;lt;p&amp;gt;For example:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;IODEV=3,INPUT=IOD3IN1,OUTPUT=DUMMY&lt;br /&gt;
IODEV=3,INPUT=IOD3IN2,OUTPUT=DUMMY&lt;br /&gt;
IODEV=3,INPUT=IOD3IN3,OUTPUT=DUMMY&amp;lt;/p&amp;gt;&lt;br /&gt;
and so on.&lt;br /&gt;
 &lt;br /&gt;
This means that no DD statement is required for the output data set, and in cases where many&lt;br /&gt;
IODEV=3 threads are defined to simulate a large number of users, this enhancement will reduce the number of DD statements required by one half.&lt;br /&gt;
 &lt;br /&gt;
===RECLOCKO (X&#039;04&#039; bit now ignored)===&lt;br /&gt;
The &amp;lt;var&amp;gt;[[RECLOCKO parameter|RECLOCKO]]&amp;lt;/var&amp;gt; X&#039;04&#039; bit is now ignored, and the extra information of the conflicting user number and lock time are now always available.&lt;br /&gt;
 &lt;br /&gt;
===RESPAGE (new in V7.5)===&lt;br /&gt;
The &amp;lt;var&amp;gt;[[RESPAGE parameter|RESPAGE]]&amp;lt;/var&amp;gt; parameter activates the APSY Precompiled Procedures in storage feature using above the bar pages by specifying a number of 4K operating system pages.&lt;br /&gt;
&lt;br /&gt;
Specifying RESPAGE stores precompiled procedures as resident requests above the bar in the RESPAGE area. Using RESPAGE allows you to substantially increase the resident request area and decrease server swapping of QTBL and NTBL pages.&lt;br /&gt;
&lt;br /&gt;
Also, when RESPAGE is used, RESSIZE is reset and the storage below the bar specified by RESSIZE is no longer used. &lt;br /&gt;
&lt;br /&gt;
Storing resident requests above the bar is independent of tables above the bar. You can use a combination of  resident request and swappable servers ATB to reduce below the bar server sizes and thus increase the number of servers.&lt;br /&gt;
&lt;br /&gt;
===RETRVKEY (change to allow forward retrieve PF key)===&lt;br /&gt;
New in this release, if you specify a non-zero setting of &amp;lt;var&amp;gt;[[RETRVKEY parameter|RETRVKEY]]&amp;lt;/var&amp;gt;:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;If you have set the &amp;lt;code&amp;gt;X&#039;01&#039;&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;X&#039;10&#039;&amp;lt;/code&amp;gt; bits of the &amp;lt;var&amp;gt;[[RETRVOPT parameter|RETRVOPT]]&amp;lt;/var&amp;gt; parameter, you can use a&lt;br /&gt;
&amp;lt;i&amp;gt;forward&amp;lt;/i&amp;gt; retrieve PF key, in addition to the &amp;lt;i&amp;gt;backward&amp;lt;/i&amp;gt; retrieve PF key specified by &amp;lt;var&amp;gt;RETRVKEY&amp;lt;/var&amp;gt;.&lt;br /&gt;
&amp;lt;p class=&amp;quot;note&amp;quot;&amp;gt;&#039;&#039;&#039;Note:&#039;&#039;&#039;&lt;br /&gt;
If either of these bits is set, the &amp;lt;code&amp;gt;X&#039;02&#039;&amp;lt;/code&amp;gt; bit is strongly recommended as well.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The size of the allocated storage area, and hence the number and length of input lines available for retrieval, is specified&lt;br /&gt;
by the value of the &amp;lt;var&amp;gt;[[RETRVBUF parameter|RETRVBUF]]&amp;lt;/var&amp;gt; parameter.&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===SEQPDL (new in V7.5)===&lt;br /&gt;
The &amp;lt;var&amp;gt;[[Release notes for Model 204 version 7.5 (DRAFT)#SEQPDL parameter|SEQPDL]]&amp;lt;/var&amp;gt; parameter controls the amount of free space that must be present in the user&#039;s Push Down List in order for the SOUL sequencer to proceed with the next quad code. SEQPDL allows enough PDL space for the lower level journaling routines to handle error conditions properly without breaking files and causing ERROR 2126 USER&#039;S PUSHDOWN LIST OVERFLOWED.&lt;br /&gt;
 &lt;br /&gt;
===SESMAXTO (new in V7.5)===&lt;br /&gt;
The &amp;lt;var&amp;gt;[[SESMAXTO parameter|SESMAXTO]]&amp;lt;/var&amp;gt; parameter can be used limit the maximum [[Sessions|session]] timeout value or to cause all current closed sessions to be immediately discarded.&lt;br /&gt;
 &lt;br /&gt;
===SMFSVC (obsolete)===&lt;br /&gt;
The &amp;lt;var&amp;gt;[[SMFSVC parameter|SMFSVC]]&amp;lt;/var&amp;gt; parameter is [[Release notes for Model 204 version 7.5 (DRAFT)#Writing records to the SMF data set|obsolete]] as of Model 204 version 7.5.&lt;br /&gt;
===SNAPCTL (change to default setting)===&lt;br /&gt;
The default setting for [[SNAPCTL parameter|SNAPCTL]] has been changed from X&#039;41&#039; (X&#039;44&#039; under CMS) to X&#039;28&#039;. The X&#039;28&#039; setting results in smart snaps &amp;amp;ndash; relatively small snaps with all the information that is likely to be required to diagnose the cause of the snap. This setting allows snaps to be taken quickly, and for those snaps being easily sent to Rocket support with little or no adverse effect on the possibility of diagnosing the cause of the snap.&lt;br /&gt;
&lt;br /&gt;
===UPCASMSG (new in V7.5)===&lt;br /&gt;
The &amp;lt;var&amp;gt;[[UPCASMSG parameter|UPCASMSG]]&amp;lt;/var&amp;gt; parameter can be used to translate messages issued by &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model 204&amp;lt;/var&amp;gt; to uppercase; otherwise (depending on the message being issued) they are displayed in mixed (upper and lower) case.&lt;br /&gt;
&amp;lt;!-- ***************************************************************************************** --&amp;gt;&lt;br /&gt;
&amp;lt;!-- End of new/changed parameter subsections; please keep them alphabetized by parameter name --&amp;gt;&lt;br /&gt;
&amp;lt;!-- ***************************************************************************************** --&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
==Documentation conversion to wiki format==&lt;br /&gt;
Rocket Model 204 documentation is being converted from individual manuals in PDF format to a set of cross-linked HTML articles in this integrated wiki, M204wiki.&lt;br /&gt;
 &lt;br /&gt;
As of Model 204 release 7.5, several manuals are now in wiki format and the rest remain in PDF format, available in the M204 folder of the [http://docs.rocketsoftware.com/nxt/gateway.dll?f=templates$fn=default.htm  Rocket Software Documentation Library].&lt;br /&gt;
 &lt;br /&gt;
For details, see [[Model 204 documentation]].&lt;br /&gt;
 &lt;br /&gt;
==New and updated messages==&lt;br /&gt;
 &lt;br /&gt;
Many messages have been updated and added in this release. See [[New and updated messages in Model 204 version 7.5]] for details.&lt;br /&gt;
 &lt;br /&gt;
[[Category: Release notes]]&lt;/div&gt;</summary>
		<author><name>Mlarocca</name></author>
	</entry>
	<entry>
		<id>https://m204wiki.rocketsoftware.com/index.php?title=Field_group_(File_architecture)&amp;diff=71003</id>
		<title>Field group (File architecture)</title>
		<link rel="alternate" type="text/html" href="https://m204wiki.rocketsoftware.com/index.php?title=Field_group_(File_architecture)&amp;diff=71003"/>
		<updated>2014-08-01T13:43:01Z</updated>

		<summary type="html">&lt;p&gt;Mlarocca: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Overview==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Data items do not normally exist on their own. In the case of addresses, for example, a series of fields exist for each address (house number, city, state, zip code) which clearly operate interdependently. &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;The idea of a &amp;lt;b&amp;gt;physical field group&amp;lt;/b&amp;gt; is to take these related fields and package them as a single entity so they can be read and updated with a single operation. (See [[Field group design]] for details.)&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;Such packaging not only improves the readability and maintainability of SOUL programs (see [[Operations on multiply occurring fields]] for the details of the SOUL statements involved), but it also makes the Model 204 processing far more efficient.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Performance==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Code that accesses field groups performs better in three main areas:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Improved record scanning&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Performing adds/inserts or deletes as a single operation&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Retrieval of all field groups on a record (requires only one I/O if the entire record is stored on a single page)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Improved record scanning===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
In general, much of the time spent in Model 204 processing is used to scan across a record, and this scan reads a field at a time. If a field is not the field that is needed, scanning moves to the next field, and so forth. As records grow in length, such a scan obviously takes longer.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;With field groups, the scan skips a group rather than a field at a time, so it can find a specified data item faster.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;In reality, however, the improvement is better than this. If you are looking for a number of related (but non-field-group) fields, a separate scan is required to find each field (insert rules mean that the data cannot be presumed to be contiguous). So if you are looking for six individual fields, the record must be scanned once for each.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;If the related fields are packaged as a field group, a single scan of the record finds all the fields. In addition, all of the related data items are in a single location.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Adds/inserts and deletes are performed as single operations===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Consider the following blocks of code:&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;INSERT   ADDRESS_TYPE(%LOC)     = %ADDR:TYPE &lt;br /&gt;
INSERT   HOUSE_NUMBER(%LOC)     = %ADDR:NUM&lt;br /&gt;
INSERT   STREET(%LOC)           = %ADDR:STREET &lt;br /&gt;
INSERT   CITY(%LOC)             = %ADDR:CITY&lt;br /&gt;
INSERT   STATE(%LOC)            = %ADDR:STATE&lt;br /&gt;
INSERT   ZIP(%LOC)              = %ADDR:ZIP&lt;br /&gt;
&amp;lt;/p&amp;gt; &lt;br /&gt;
&amp;lt;p&amp;gt;Each of these statements is a separate operation. For each one, the correct position in the record must be found, then the field is inserted. This sequence is repeated six times. &amp;lt;/p&amp;gt; &lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Instead, with a field group, the following syntax does the entire insert as a single operation. Only one insert position needs to be found, and then the entire set of fields is inserted:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;INSERT FIELDGROUP ADDRESS(%LOC)&lt;br /&gt;
    ADDRESS_TYPE          = %ADDR:TYPE &lt;br /&gt;
    HOUSE_NUMBER          = %ADDR:NUM &lt;br /&gt;
    STREET                = %ADDR:STREET &lt;br /&gt;
    CITY                  = %ADDR:CITY&lt;br /&gt;
    STATE                 = %ADDR:STATE&lt;br /&gt;
    ZIP                   = %ADDR:ZIP&lt;br /&gt;
END INSERT&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Field groups and Table B storage considerations==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
At first glance, the performance improvement of field groups comes at a cost of space (but this can usually be offset).&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;The costs:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Every record in a FILEORG=X&#039;100&#039; file contains the 4-byte highest allocated field group ID. Every occurrence of a field group has a unique binary ID that occupies from two to five bytes, thus supporting up to four gigabytes of field group IDs.&amp;lt;/li&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;As is true of all FILEORG=X&#039;100&#039; files, the field name representations (as held in [[Table A (File architecture)|Table A]] and thus in the record), are three bytes in length. Depending on the definitions of the fields within the group, this might be offset by the physical absence of fields defined as part of the group.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Space saving and default and null values===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Depending on the characteristics of the data you are storing, using field groups might actually save space.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Take as an example a financial application where you are tracking a number of types of income over time. You have a field group containing a date and a number of income types: salary, interest, dividends, and so forth. It is likely that the majority of people whose data you are keeping have only a few of the many types of interest, so your record might have mostly zeros.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If so, by adding a [[Field design#DEFAULT-VALUE (DV) attribute|default value]] of 0 and a [[Field design#STORE-DEFAULT (SD) and STORE-NULL (SN) attributes|store default]] of NONE (the default for [[Field design#AT-MOST-ONE, REPEATABLE and EXACTLY-ONE attributes|exactly one]] fields in field groups), none of the 0s would be physically stored (but would be treated as if they were).&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;For many files, implementing field groups will improve both performance and space utilization.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Field group identifiers==&lt;br /&gt;
&amp;lt;p&amp;gt;As mentioned above, every field group has a unique ID.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;This ID can be read with the &amp;lt;var&amp;gt;[[$FieldgroupId]]&amp;lt;/var&amp;gt; function, and it is also displayed by the &amp;lt;var&amp;gt;[[Basic SOUL statements and commands#PRINT ALL INFORMATION (or PAI) statement|Print All Information]]&amp;lt;/var&amp;gt; statement.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;By itself, the ID is just for uniqueness, but it has an interesting use that is invaluable in debugging: you can determine the order in which things happened to a file.&amp;lt;/p&amp;gt;   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:File architecture]]&lt;/div&gt;</summary>
		<author><name>Mlarocca</name></author>
	</entry>
	<entry>
		<id>https://m204wiki.rocketsoftware.com/index.php?title=Processing_multiply_occurring_fields_and_field_groups&amp;diff=71002</id>
		<title>Processing multiply occurring fields and field groups</title>
		<link rel="alternate" type="text/html" href="https://m204wiki.rocketsoftware.com/index.php?title=Processing_multiply_occurring_fields_and_field_groups&amp;diff=71002"/>
		<updated>2014-08-01T13:42:11Z</updated>

		<summary type="html">&lt;p&gt;Mlarocca: &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;
A single field name that has different values can be stored repeatedly in a record. For example, the field &amp;lt;code&amp;gt;CHILD&amp;lt;/code&amp;gt; in the record shown below is an example of a &amp;lt;b&amp;gt;multiply occurring field&amp;lt;/b&amp;gt;:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;FATHER = JOHN DOE&lt;br /&gt;
CHILD = ELIZABETH&lt;br /&gt;
CHILD = ROBERT&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Any field name except for the following types of fields can be present more than once in a record: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;A NUMERIC RANGE field &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;A sort key &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;A hash key &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;FIELDGROUP overview&amp;quot;&amp;gt;&amp;lt;/div&amp;gt; &amp;lt;!-- This id referenced off the page, e.g., #REDIRECT on FIELDGROUP operations page--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
JOHN DOE might also have a medical record that recorded multiple surgeries, each of which is associated with a surgeon and a date. His record contains repeated instances of these three related fields:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;SURGERY_TYPE&lt;br /&gt;
SURGEON&lt;br /&gt;
SURGERY_DATE &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As of version 7.5 of &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt;, SOUL lets you define these fields as part of a &amp;quot;physical&amp;quot; &amp;lt;b&amp;gt;field group&amp;lt;/b&amp;gt;, which means they are stored, retrieved, and updated as a single instance of, say, the &amp;lt;code&amp;gt;SURGERY&amp;lt;/code&amp;gt; field group. You could define these fields as individual multiply occurring fields and group them logically in your SOUL code, but the physical field group structure has significant processing efficiencies.&lt;br /&gt;
&lt;br /&gt;
Field groups may only be defined for records in files that have the &amp;lt;var&amp;gt;[[FILEORG parameter|FILEORG]]&amp;lt;/var&amp;gt; parameter set to include &amp;lt;code&amp;gt;X&#039;100&#039;&amp;lt;/code&amp;gt;. Information about how to define a field group is found in [[Field group design#Defining a field group|Defining a field group]].&lt;br /&gt;
&lt;br /&gt;
===Special processing for multiply occurring fields and field groups===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Certain SOUL statements operate differently on multiply occurring fields and field groups than on singly occurring fields. SOUL provides special statements and forms of statements that can be used with multiply occurring fields and field groups, notably including the &amp;lt;var&amp;gt;EACH&amp;lt;/var&amp;gt; modifier and subscripts. SOUL also provides for the use of subscripted field references for accessing a particular occurrence of a multiply occurring field or field group.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==FIND statement==&lt;br /&gt;
 &lt;br /&gt;
===Retrieval by an exact occurrence value===&lt;br /&gt;
 &lt;br /&gt;
====Example 1====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Assume this sample record: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;FATHER = JOHN DOE&lt;br /&gt;
CHILD = ELIZABETH&lt;br /&gt;
CHILD = ROBERT&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can use either of these two statements to retrieve the record:    &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;FIND.RECS: FIND ALL RECORDS FOR WHICH&lt;br /&gt;
              CHILD = ELIZABETH&lt;br /&gt;
           END FIND&lt;br /&gt;
 &lt;br /&gt;
FIND.RECS: FIND ALL RECORDS FOR WHICH&lt;br /&gt;
              CHILD = ROBERT&lt;br /&gt;
           END FIND&lt;br /&gt;
&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 record is not retrieved by either of these statements:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;FIND.RECS: FIND ALL RECORDS FOR WHICH&lt;br /&gt;
              CHILD = NOT ELIZABETH&lt;br /&gt;
           END FIND&lt;br /&gt;
 &lt;br /&gt;
FIND.RECS: FIND ALL RECORDS FOR WHICH&lt;br /&gt;
              CHILD = NOT ROBERT&lt;br /&gt;
           END FIND&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Multi-condition range retrievals===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You should pay special attention to the effect of multiply occurring fields on multi-condition range retrievals. Undesirable results can occur if a range search is specified for a multiply occurring field. For example:    &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;FIND.RECS: FIND ALL RECORDS FOR WHICH&lt;br /&gt;
              CHILD IS AFTER KEN AND BEFORE PAUL&lt;br /&gt;
           END FIND&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
retrieves the sample record even though neither child&#039;s name in the sample is between KEN and PAUL. &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; evaluates each condition of the FIND separately, then combines the results of each evaluation to build the set of records satisfying all conditions. The BETWEEN operator behaves exactly like any other multi-condition range retrieval when used on a multiply occurring field.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If a range search must be performed on a multiply occurring field, use the IN RANGE clause of the FIND statement. Refer to [[Record retrievals#NUMERIC RANGE and ORDERED NUMERIC attributes|NUMERIC RANGE and ORDERED NUMERIC attributes]] for more information about the IN RANGE clause. Better code for the previous example is: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;FIND.RECS: FIND ALL RECORDS FOR WHICH&lt;br /&gt;
              CHILD IS ALPHA IN RANGE&lt;br /&gt;
              AFTER KEN AND BEFORE PAUL&lt;br /&gt;
           END FIND&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Use of subscripts===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You cannot use subscripted references with the FIND statement. Refer to [[#Subscripts|Subscripts]] for more information about using subscripts with multiply occurring fields.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
==NOTE statement==&lt;br /&gt;
 &lt;br /&gt;
===Only first occurrence is noted===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The NOTE statement notes only the first occurrence of a multiply occurring field. For example, only the first occurrence of the field (CHILD = ELIZABETH) are noted by:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;KEEP.CHILD: NOTE CHILD&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Use of subscripts===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
In order to note a particular occurrence of a multiply occurring field, the field name must be subscripted. Refer to the discussion of subscripts on [[#Subscripts|Subscripts]] for detailed information on subscripted field names and usage.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
==PRINT and PRINT n statements==&lt;br /&gt;
 &lt;br /&gt;
===PRINT statement output format===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The  PRINT statement prints only the first occurrence of a field in a record. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If there is more than one value of a field in a record, the special modifier, EACH, can be used in a PRINT statement to print out all the values on a single line, with a single space between values.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Example 1====&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;PRINT EACH INCIDENT&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
yields:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;output&amp;quot;&amp;gt;T1 T2 T1 T3 T2 T1&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Example 2====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If the field is given a column position, as in:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;PRINT FULLNAME WITH EACH INCIDENT AT COLUMN 18&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
values are printed one to a line and positioned at the column specified. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;output&amp;quot;&amp;gt;ABBOTT, GAIL H   T1                       -&lt;br /&gt;
                 T3                       -&lt;br /&gt;
                 T1                       -&lt;br /&gt;
                 T3                       -&lt;br /&gt;
                 T2                       -&lt;br /&gt;
                 T1 &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Example 3====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
A field cited in a PRINT statement after a multiply occurring field is printed on the same line as the last value of the multiply occurring field. If you change the PRINT statement in the sample request as here:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;PRINT FULLNAME WITH EACH INCIDENT AT COLUMN 18    -&lt;br /&gt;
      WITH POLICY NO AT COLUMN 23                 -&lt;br /&gt;
       WITH STATE AT COLUMN 32&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
This output results:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;output&amp;quot;&amp;gt;ABBOTT, GAIL H   T1                               -&lt;br /&gt;
                 T3                               -&lt;br /&gt;
                 T1                               -&lt;br /&gt;
                 T3                               -&lt;br /&gt;
                 T2                               -&lt;br /&gt;
                 T1   100340   CALIFORNIA&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Use of subscripts===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
See [[#PRINT statement|PRINT statement]] for a description of using PRINT with subscripts.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===PRINT n statement===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Long fields, such as abstracts, evaluations, or statements of purpose, can be stored as a multiply occurring field. Each occurrence can contain as many as 255 characters.  &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Syntax====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can use this PRINT statement to print such a field as a paragraph:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;PRINT &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;n fieldname&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;n&amp;lt;/var&amp;gt; must be a number less than 32,768.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Output format====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The &amp;lt;var&amp;gt;PRINT n&amp;lt;/var&amp;gt; statement prints up to n lines of text, composed of all of the occurrences of the field concatenated in order. Nothing is inserted. At most, n lines are printed; any extra lines are ignored.    &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Ordinarily, a PRINT statement that produces more than one line inserts a hyphen in the continuation column of the output device. Instead of using the continuation column, this form of PRINT attempts to end each line with a complete word delimited by spaces. If there is insufficient space to fit the last word on a line, the word is hyphenated arbitrarily and continued on the next line. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The AT COLUMN and TO COLUMN clauses can be used to adjust the output to a narrower column. When used together with PRINT n, text is broken at word boundaries to fit within the column. The AT clause does not affect the first line, and the TO clause does not affect the last line (unless the line limit n is exceeded). This allows indenting.      &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The AT or TO column options cannot accept negative numbers or numbers greater than 32767 for the column. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Procedures containing PRINT statements with negative numbers or numbers greater than 32767 fail at compile time with the following counting error message:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;M204.0263: AT/TO MUST BE BETWEEN 1 AND 32767&lt;br /&gt;
&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 the use of the &amp;lt;var&amp;gt;PRINT n&amp;lt;/var&amp;gt; statement.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;BEGIN&lt;br /&gt;
            PRINT &#039;1234567890123456&#039;&lt;br /&gt;
            STORE RECORD&lt;br /&gt;
               TEXT = &#039;NOW IS THE T&#039;&lt;br /&gt;
               TEXT = &#039;IME FOR&#039;&lt;br /&gt;
               TEXT = &#039; ALL GOOD MEN TO&#039;&lt;br /&gt;
               ITEM = 1&lt;br /&gt;
            END STORE&lt;br /&gt;
FD.REC:     FIND ALL RECORDS FOR WHICH&lt;br /&gt;
               ITEM = 1&lt;br /&gt;
            END FIND&lt;br /&gt;
            FOR 1 RECORD IN FD.REC&lt;br /&gt;
 &lt;br /&gt;
PRINT.TEXT:    PRINT &amp;lt;nowiki&amp;gt;&#039;&#039;&amp;lt;/nowiki&amp;gt; AT COLUMN 5 WITH 3 TEXT -&lt;br /&gt;
                  AT COLUMN 3 TO 16&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 output produced is:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;output&amp;quot;&amp;gt;1234567890123456&lt;br /&gt;
    NOW IS THE&lt;br /&gt;
  TIME FOR ALL&lt;br /&gt;
  GOOD MEN TO&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;PRINT.TEXT&amp;lt;/code&amp;gt; statement concatenates a null value (two single quotes with no space between them) with the &amp;lt;var&amp;gt;PRINT n&amp;lt;/var&amp;gt; form to indent the first line of text by using the location of the null value (column 5).&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Note that the printing stops short of column 16 to avoid truncating TIME and GOOD.  &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Use with subscripts====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You cannot use subscripted references with the PRINT n statement. Refer to [[#Subscripts|Subscripts]] for more information about using subscripts with multiply occurring fields.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
==ADD, CHANGE, and DELETE statements==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The ADD and CHANGE statements, and both forms of the DELETE statement, are supported in remote file and scattered group contexts.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===ADD statement===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The ADD statement places new occurrences of a field after existing occurrences. For example, if new children are added to the sample record, the additions are placed last. Thus:    &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;ADD CHILD = SARAH&lt;br /&gt;
ADD CHILD = PATRICK&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
results in the record:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;output&amp;quot;&amp;gt;FATHER = JOHN DOE&lt;br /&gt;
CHILD = ELIZABETH&lt;br /&gt;
CHILD = ROBERT&lt;br /&gt;
CHILD = SARAH&lt;br /&gt;
CHILD = PATRICK&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====The INSERT statement====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If the order of occurrence is important, the INSERT statement can be used to add new occurrences. See the discussion on [[#INSERT statement|INSERT statement]]. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===CHANGE statement===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The CHANGE statement alters only the first occurrence of a field in a record. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Syntax====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can use this form of the CHANGE statement if there is more than one occurrence:    &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;CHANGE &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;fieldname&amp;lt;/span&amp;gt; = &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;value1&amp;lt;/span&amp;gt; TO &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;value2&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
This form, like the &amp;lt;var&amp;gt;CHANGE fieldname&amp;lt;/var&amp;gt; statement, can be used only inside a FOR EACH RECORD loop. It deletes the first occurrence of the pair fieldname = value1 from a record, and adds the pair fieldname = value2 to the record. The new value is added either in the position occupied by the original value or at the end of the record, depending upon the update attribute specified for the field by the file manager. See the discussion in [[#UPDATE field attribute|UPDATE field attribute]].    &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If the specified field, &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;fieldname&amp;lt;/var&amp;gt; = &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;value1&amp;lt;/var&amp;gt;, does not appear in the record, &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;fieldname&amp;lt;/var&amp;gt; = &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;value2&amp;lt;/var&amp;gt; is simply added to the record. If the specified &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;fieldname&amp;lt;/var&amp;gt; = &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;value1&amp;lt;/var&amp;gt; pair appears more than once in the record, only the first occurrence of it is deleted. The pair, &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;fieldname&amp;lt;/var&amp;gt; = &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;value2&amp;lt;/var&amp;gt;, is added just once. Occurrences of the field name that have other values are not altered by the statement.    &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===DELETE statement===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The DELETE statement deletes only the first occurrence of the field in the record by default. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Two forms of DELETE statement====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
For multiply occurring fields, two forms of the DELETE statement are provided; however only for use inside a FOR EACH RECORD loop:    &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;To delete... &amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Syntax &amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Usage&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;A particular occurrence &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td nowrap&amp;gt;DELETE &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;td&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
To delete the first occurrence of the pair, &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;fieldname&amp;lt;/var&amp;gt; = &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;value&amp;lt;/var&amp;gt;, from a record. Occurrences of the field that have other values are not removed. If the field with the specified value:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Occurs more than once in the record, only the first occurrence is deleted. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Cannot be found, no deletion occurs.&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;Every occurrence of the field in the record &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;DELETE EACH &amp;lt;i&amp;gt;fieldname&amp;lt;/i&amp;gt;   &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;To delete all occurrences of the specified field name. The field to be deleted cannot have the INVISIBLE attribute.  &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;
====Use with the FOR EACH OCCURRENCE statement====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
See [[#Deleting occurrences of fields and field groups|Deleting occurrences]] for a discussion of deleting occurrences using the FOR EACH OCCURRENCE OF (FEO) statement.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Use with subscripts====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
See [[#DELETE statement|DELETE statement]] for a discussion of using the DELETE statement with subscripts.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
==SORT RECORDS statement==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When a multiply occurring field is chosen as a sort key, each record in the set being sorted is processed once using the first occurrence of the field as the key. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===EACH modifier with one sort field===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If the EACH modifier is present in the SORT statement and if there are n occurrences of the field in the record, similar records are created in the sorted copy of the original set. &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 request:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;SORT RECORDS IN FIND.RECS BY EACH KEY&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
generates three temporary records for the single permanent record in which the field named &amp;lt;code&amp;gt;KEY&amp;lt;/code&amp;gt; occurs three times:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;KEY = COMPUTER&lt;br /&gt;
KEY = CORPORATION&lt;br /&gt;
KEY = AMERICA&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The records generated are:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;output&amp;quot;&amp;gt;1 KEY = COMPUTER          2 KEY = CORPORATION&lt;br /&gt;
  KEY = CORPORATION         KEY = AMERICA&lt;br /&gt;
  KEY = AMERICA             KEY = COMPUTER&lt;br /&gt;
 &lt;br /&gt;
3 KEY = AMERICA&lt;br /&gt;
  KEY = COMPUTER&lt;br /&gt;
  KEY = CORPORATION&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
These correspond to the &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;n&amp;lt;/var&amp;gt; cyclic permutations of the set of field occurrences and, in this example, are sorted into the order 3, 1, 2 (if no other option is selected). Statements that refer to the sorted set, such as PRINT, PRINT EACH, NOTE, and PRINT ALL INFORMATION (PAI), reflects the permutation. No record is generated if &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;n&amp;lt;/var&amp;gt; = 0.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===EACH modifier with several key fields===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When the EACH option is selected for several keys, &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;n&amp;lt;/var&amp;gt; occurrences of one key and &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;m&amp;lt;/var&amp;gt; of another produce differently permuted records. If either &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;n&amp;lt;/var&amp;gt; or &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;m&amp;lt;/var&amp;gt; equal 0, no records are generated. &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:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;BEGIN&lt;br /&gt;
FIND.RECS: IN CLIENTS FIND ALL RECORDS FOR WHICH&lt;br /&gt;
              INCIDENT = T1&lt;br /&gt;
           END FIND&lt;br /&gt;
SORT.RECS: SORT RECORDS IN FIND.RECS BY FULLNAME -&lt;br /&gt;
              AND EACH INCIDENT DATE&lt;br /&gt;
           FOR EACH RECORD IN SORT.RECS&lt;br /&gt;
              PRINT FULLNAME WITH INCIDENT DATE  -&lt;br /&gt;
                AT COLUMN 25&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;
produces printed output of:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;output&amp;quot;&amp;gt;ABBOTT, FRANKLIN G     860323&lt;br /&gt;
ABBOTT, GAIL H         861022&lt;br /&gt;
ABRAMS, RUTH Z         861115&lt;br /&gt;
ABRAMS, RUSSELL Y      870218&lt;br /&gt;
ABBOTT, FRANKLIN G     870424&lt;br /&gt;
ABBOTT, GAIL H         871123&lt;br /&gt;
      .                   .&lt;br /&gt;
      .                   .&lt;br /&gt;
      .                   .&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===If no occurrences are present===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
A record that does not contain at least one occurrence of the INCIDENT DATE field produces no printed output. Similarly:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;SORT RECORDS IN FIND.RECS BY EACH A AND EACH B&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
would produce nothing for those records that do not have at least one occurrence of both A and B.  &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 FOR EACH RECORD IN ORDER BY statement retrieves and loops on only the first occurrence of a field in a record. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===EACH modifier===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If there is more than one value of a field in a record, the special modifier, EACH, can be used to retrieve and loop on all values of the field.        &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The EACH modifier only can be used on a FOR EACH RECORD statement that specifies index order processing (the IN ORDER BY fieldname clause must be used and the field must have the ORDERED attribute). The VALUE IN phrase must be used to retrieve the current value of the ORDERED field driving the loop.      &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 of the FOR EACH RECORD IN ORDER BY statement:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;BEGIN&lt;br /&gt;
FR1:  FOR EACH RECORD IN ORDER BY EACH INCIDENT DATE&lt;br /&gt;
         PRINT VALUE IN FR1 WITH FULLNAME AT COLUMN 25&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;
returns each record in order by each value of the ORDERED field, as follows:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;output&amp;quot;&amp;gt;760323          ABBOTT, FRANKLIN G&lt;br /&gt;
761022          ABBOTT, GAIL H&lt;br /&gt;
761115          ABRAMS, RUTH Z&lt;br /&gt;
770218          ABRAMS, RUSSELL Y&lt;br /&gt;
   .&lt;br /&gt;
   .&lt;br /&gt;
   .&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
==Special statements for multiply occurring fields and field groups==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
SOUL provides several statements for handling multiply occurring fields and [[Field group design|field groups]]. Field groups are supported as of Model 204 version 7.5.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;COUNT OCCURRENCES (used with singly occurring fields, too)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;FOR ALL OCCURRENCES OF FIELDGROUP &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;FOR EACH OCCURRENCE (used with singly occurring fields, too)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;FOR FIELDGROUP&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;DELETE EACH OCCURRENCE&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;Note:&amp;lt;/b&amp;gt; See also the [[#INSERT statement|INSERT statement]], which you can use to add new occurrences of a field.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===COUNT OCCURRENCES OF statement===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The COUNT OCCURRENCES OF (CTO) statement counts the number of occurrences of the named field in the current record. &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 COUNT OCCURRENCES statement is:&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;label&amp;lt;/span&amp;gt;: COUNT OCCURRENCES OF &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;fieldname&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
or&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;label&amp;lt;/span&amp;gt;: CTO &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;fieldname&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 field name cannot be subscripted. The COUNT OCCURRENCES OF statement can appear only within a FOR EACH RECORD loop.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The COUNT OCCURRENCES statement is supported in remote file and scattered group contexts.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====COUNT IN clause====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The COUNT IN clause refers to the count obtained by the COUNT OCCURRENCES OF statement. This request:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;BEGIN&lt;br /&gt;
FIND.RECS:  IN VEHICLES FIND ALL RECORDS&lt;br /&gt;
            END FIND&lt;br /&gt;
            FOR 5 RECORDS IN FIND.RECS&lt;br /&gt;
NO.OF.VINS:    COUNT OCCURRENCES OF VIN&lt;br /&gt;
               PRINT OWNER POLICY WITH &#039; INSURES &#039; WITH -&lt;br /&gt;
                  COUNT IN NO.OF.VINS WITH &#039; VEHICLE(S)&#039;&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;
generates the following output:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;output&amp;quot;&amp;gt;100025 INSURES 1 VEHICLE(S)&lt;br /&gt;
100030 INSURES 1 VEHICLE(S)&lt;br /&gt;
100032 INSURES 1 VEHICLE(S)&lt;br /&gt;
100051 INSURES 1 VEHICLE(S)&lt;br /&gt;
100058 INSURES 1 VEHICLE(S)&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===FOR ALL OCCURRENCES OF FIELDGROUP (FAO FIELDGROUP) statement===&lt;br /&gt;
The FAO statement collects the field group IDs for all occurrences, then processes against that list.  FAO is &amp;lt;em&amp;gt;not valid&amp;lt;/em&amp;gt; for use against multiply-occurring fields, only against field groups (introduced in Model 204 V7.5).&lt;br /&gt;
 &lt;br /&gt;
====Syntax====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The format of the statement is:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;FOR ALL OCCURRENCES OF FIELDGROUP (&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;fgname&amp;lt;/span&amp;gt; | %%&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;varGrp&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;fgname&amp;lt;/var&amp;gt; specifies a field group name.&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;varGrp&amp;lt;/var&amp;gt; specifies a field group name variable.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
The difference between an FAO statement and an FEO statement is that the FAO statement is less affected by insertions or deletions of FIELDGROUP &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;fgname&amp;lt;/var&amp;gt; within the loop, due to the semantics of field group IDs. This means that deleting the current occurrence within the loop will not affect occurrences referenced in subsequent iterations.&lt;br /&gt;
&lt;br /&gt;
===FOR EACH OCCURRENCE OF loops===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
On each loop of FOR EACH OCCURRENCE OF (FEO), the VALUE IN and OCCURRENCE IN labels refer to value and position, respectively, of the next field occurrence, starting with occurrence 1 and increasing by 1 for each pass through the loop. When the next field occurrence number is greater than the number of field occurrences in the record, the loop terminates. &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 FOR EACH OCCURRENCE loop is:&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;label&amp;lt;/span&amp;gt;: FOR EACH OCCURRENCE OF &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;fieldname&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Alternatively,&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;label&amp;lt;/span&amp;gt;: FEO &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;fieldname&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 FOR EACH OCCURRENCE OF statement is supported in remote file and scattered group contexts.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To work with specific field values inside an FEO loop, two styles of reference are supported: OCCURRENCE IN {label}, which is used as a field subscript, and VALUE IN {label} with is a direct reference to a field occurrence.&lt;br /&gt;
 &lt;br /&gt;
====Example====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Consider this record:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;FIRST NAME = RICHARD&lt;br /&gt;
LAST NAME = SMITH&lt;br /&gt;
CHILD = HENRY&lt;br /&gt;
CHILD = SALLY&lt;br /&gt;
CHILD = JANE&lt;br /&gt;
ADDRESS = AVON DRIVE&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
This request creates a separate record for each child.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;BEGIN&lt;br /&gt;
FD.REC:     FIND ALL RECORDS FOR WHICH&lt;br /&gt;
               FIRST NAME = RICHARD&lt;br /&gt;
               LAST NAME = SMITH&lt;br /&gt;
            END FIND&lt;br /&gt;
            FOR EACH RECORD IN FD.REC&lt;br /&gt;
NOTE.ADD:      NOTE ADDRESS&lt;br /&gt;
CHILD.LOOP:    FOR EACH OCCURRENCE OF CHILD&lt;br /&gt;
                  PRINT VALUE IN CHILD.LOOP&lt;br /&gt;
                  STORE RECORD&lt;br /&gt;
                     FIRST NAME = VALUE IN CHILD.LOOP&lt;br /&gt;
                     LAST NAME = SMITH&lt;br /&gt;
                     ADDRESS = VALUE IN NOTE.ADD&lt;br /&gt;
                  END STORE&lt;br /&gt;
               END FOR&lt;br /&gt;
            END FOR&lt;br /&gt;
END&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Simulating a FOR EACH VALUE loop====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The FOR EACH OCCURRENCE OF statement can be used to simulate a FOR EACH VALUE loop if the field contains a static collection of known values. Consider the values of states. The user sets up a single record that has a multiply occurring field in sorted sequence as follows:   &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;TYPE = STATE&lt;br /&gt;
CODE = ALABAMA&lt;br /&gt;
CODE = ARKANSAS&lt;br /&gt;
     .&lt;br /&gt;
     .&lt;br /&gt;
CODE = WYOMING&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
These statements begin a request to generate a report in order by state:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;BEGIN&lt;br /&gt;
FIND.TYPE: FIND ALL RECORDS FOR WHICH&lt;br /&gt;
              TYPE = STATE&lt;br /&gt;
           END FIND&lt;br /&gt;
           FOR EACH RECORD IN FIND.TYPE&lt;br /&gt;
EACH.CODE:    FOR EACH OCCURRENCE OF CODE&lt;br /&gt;
FIND.STATE:      FIND ALL RECORDS FOR WHICH&lt;br /&gt;
                    STATE = VALUE IN EACH.CODE&lt;br /&gt;
                 END FIND&lt;br /&gt;
                 FOR EACH RECORD IN FIND.STATE&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;
This method has the advantage of eliminating the internal sort required by FOR EACH VALUE IN ORDER and provides an easy way to simulate a FOR EACH VALUE loop for a field that does not have the FRV or ORDERED attribute. However, a change in the list of values can require a recreation of the TYPE record to keep the values in order. Recreation is not required if the UPDATE IN PLACE field attribute has been specified for the CODE field and if the new and old values occupy the same place in order. Recreation also is not required if the [[#INSERT statement|INSERT statement]] is used correctly. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====VALUE IN with FOR EACH OCCURRENCE loops====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
VALUE IN references to FOR EACH OCCURRENCE (FEO) statements from outside the FEO loop does not compile. Such references receive the following error message:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;M204.0311 UNACCEPTABLE STATEMENT REFERENCE&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
At runtime, the space occupied in STBL by the FEO value is reclaimed after each iteration of the FEO loop (including the last). This results in a reduction in the runtime STBL space requirements of some programs that use FEO.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
To avoid getting that error, move the value into a %variable inside the FEO loop, and then reference the %variable outside the FEO loop.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====FOR EACH OCCURRENCE against INVISIBLE fields====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Using FOR EACH OCCURRENCE (FEO) syntax against INVISIBLE fields is a waste of processing time. An FEO causes a scan of the current Table B record, but INVISIBLE fields are not stored in Table B, so an FEO against an INVISIBLE field can never find any occurrences. Prior to V4R2.0 this programming flaw was masked because using FEO syntax against an INVISIBLE field compiled and evaluated successfully, although it never found occurrences. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Beginning in V4R2.0, FEO syntax against an INVISIBLE field results in compilation error:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;M204.0320 Field is invisible. Field = &amp;lt;i&amp;gt;fieldname&amp;lt;/i&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Deleting occurrences of fields and field groups===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The DELETE EACH statement can be used to delete all occurrences.   &amp;lt;/p&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; You must take care when deleting occurrences of a field or fieldgroup using the FOR EACH OCCURRENCE loop.  When used to delete occurrences, and without a numbered occurrence reference on the field name, the first 50% of occurrences of a multiply occurring field are deleted. If there are an odd number of occurrences of the field on the record, the first half, up to and including the middle occurrence, are deleted.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Example====&lt;br /&gt;
Suppose the following statement is specified for the &amp;lt;code&amp;gt;RICHARD SMITH&amp;lt;/code&amp;gt; record described previously:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;       for each occurrence in fd.rec&lt;br /&gt;
del.child: for each occurrence of child&lt;br /&gt;
              delete child&lt;br /&gt;
           end for&lt;br /&gt;
       end for&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The record originally contained these &amp;lt;code&amp;gt;CHILD&amp;lt;/code&amp;gt; entries:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;CHILD=HENRY&lt;br /&gt;
CHILD=SALLY&lt;br /&gt;
CHILD=JANE&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
On the first pass through the loop, the first value, &amp;lt;code&amp;gt;HENRY&amp;lt;/code&amp;gt;, is selected and deleted. At the end of the first pass, the record contains these &amp;lt;code&amp;gt;CHILD&amp;lt;/code&amp;gt; entries:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;CHILD=SALLY&lt;br /&gt;
CHILD=JANE&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
On the second pass through the loop, the &amp;lt;code&amp;gt;DELETE CHILD&amp;lt;/code&amp;gt; statement again deletes the first occurrence of the field as described in [[#DELETE statement|DELETE statement]]. Since &amp;lt;code&amp;gt;HENRY&amp;lt;/code&amp;gt; has already been deleted, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; deletes the first entry, &amp;lt;code&amp;gt;SALLY&amp;lt;/code&amp;gt;.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
After the second pass, the &amp;lt;var&amp;gt;FOR EACH OCCURRENCE&amp;lt;/var&amp;gt; loop terminates. This is because the value in &amp;lt;code&amp;gt;DEL.CHILD&amp;lt;/code&amp;gt; should be the next (third) occurrence, but after two passes, only one occurrence remains on the record. Therefore, at the end of the &amp;lt;var&amp;gt;FOR EACH OCCURRENCE&amp;lt;/var&amp;gt; loop, the remaining value in the &amp;lt;code&amp;gt;CHILD&amp;lt;/code&amp;gt; field is:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;CHILD=JANE&lt;br /&gt;
&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; In general, it is a mistake to reference a multiply occurring field in an &amp;lt;var&amp;gt;FEO&amp;lt;/var&amp;gt; loop without using an occurrence subscript. An unsubscripted reference always refers to the first occurrence of a field.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Example 2====&lt;br /&gt;
Now suppose an occurrence reference is added to the field in the &amp;lt;var&amp;gt;FEO&amp;lt;/var&amp;gt; loop:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;       for each record in fd.rec&lt;br /&gt;
del.child: for each occurrence of child&lt;br /&gt;
              delete child(occurrence in del.child)&lt;br /&gt;
           end for&lt;br /&gt;
       end for&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The above will result in &amp;lt;em&amp;gt;every other&amp;lt;/em&amp;gt; occurrence being deleted, because the occurrence reference continues to increment upward while the list of occurrences is also shifted, so the second time through the loop, the occurrence pointer is pointing to the item that was formerly the third item, then the fifth item, then the seventh item.  Again, this is generally not what the programmer intends.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;The solution is either:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Use the &amp;lt;var&amp;gt;DELETE EACH&amp;lt;/var&amp;gt; syntax.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Loop over the occurrences in reverse order. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
There is no specific syntax for reversing the order of an &amp;lt;var&amp;gt;FEO&amp;lt;/var&amp;gt; loop, so you must count the occurrences and step backward through them in an index loop, like this:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;childCount: -&lt;br /&gt;
   count occurrences of child&lt;br /&gt;
   for each record in %myRecordSet&lt;br /&gt;
      for %x from count in childCount to 1 by -1&lt;br /&gt;
         delete child(%x)&lt;br /&gt;
      end for&lt;br /&gt;
   end for&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;Stepping backward through a set is also the standard practice in &amp;lt;var&amp;gt;StringList&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;NamedArrayList&amp;lt;/var&amp;gt; objects, when deletions may occur. This technique is especially worth keeping in mind in situations where only some occurrences may be deleted.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;When using field groups, the &amp;lt;var&amp;gt;FOR ALL OCCURRENCES&amp;lt;/var&amp;gt; syntax, introduced with Model 204 V7.5, performs as expected.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Deleting with an FEO FIELDGROUP versus FAO FIELDGROUP loop====&lt;br /&gt;
An &amp;lt;var&amp;gt;FEO FIELDGROUP&amp;lt;/var&amp;gt; statement on field groups has the same semantics as an &amp;lt;var&amp;gt;FEO&amp;lt;/var&amp;gt; statement on a single field. When you iterate in an &amp;lt;var&amp;gt;FEO FIELDGROUP&amp;lt;/var&amp;gt; or &amp;lt;var&amp;gt;FEO&amp;lt;/var&amp;gt; loop, the next occurrence processed is the occurrence number one greater than the one processed before, whether or not it is one you have already processed (because of insertions) or whether or not you skip one or more (because of deletions). For example:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Following the standard behavior for moving &amp;lt;em&amp;gt;forward&amp;lt;/em&amp;gt; through a set of occurrences in an &amp;lt;var&amp;gt;FEO&amp;lt;/var&amp;gt; loop, &amp;lt;var&amp;gt;FEO FIELDGROUP&amp;lt;/var&amp;gt; deletes &amp;lt;i&amp;gt;every other&amp;lt;/i&amp;gt; occurrence of the field group:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;xon: -&lt;br /&gt;
   feo fieldgroup vehicle&lt;br /&gt;
      delete fieldgroup(occurrence in xon)&lt;br /&gt;
   end for&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
This behavior is a historical anomaly, but it is maintained for backward compatibility purposes. &amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;To delete &amp;lt;i&amp;gt;all&amp;lt;/i&amp;gt; occurrences of a field group, use an &amp;lt;var&amp;gt;FAO FIELDGROUP&amp;lt;/var&amp;gt; statement:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;fao fieldgroup vehicle&lt;br /&gt;
      delete fieldgroup&lt;br /&gt;
end for&lt;br /&gt;
&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===FOR FIELDGROUP statement===&lt;br /&gt;
The FOR FIELDGROUP statement operates on a specific occurrence of a field group. The occurrence is indicated by either an occurrence number or a field group ID number. &lt;br /&gt;
 &lt;br /&gt;
====Syntax====&lt;br /&gt;
The format of the statement is:&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;FOR FIELDGROUP (&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;fgname&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;varFgname&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;literal&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;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;occurrence-number&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;literal&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;term&amp;quot;&amp;gt;fieldgroupID&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;
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;fgname&amp;lt;/var&amp;gt; specifies a field group name. &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;varGrp&amp;lt;/var&amp;gt; specifies a field group name variable. &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;occurrence-number&amp;lt;/var&amp;gt; specifies an occurrence within that field group. The occurrence number must be enclosed in parentheses. &lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The &amp;lt;var&amp;gt;[[$FIELDGROUPOCCURRENCE]]&amp;lt;/var&amp;gt; function returns the field group occurrence value. &amp;lt;/p&amp;gt;&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;fieldgroupID&amp;lt;/var&amp;gt; specifies a field group ID, which is unique for a record. A field group ID is assigned when a field group is added to the record, is equal to one more than the highest field group ID that has been assigned in the record, and is not reused if its field group is deleted.&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
&amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;fieldgroupID&amp;lt;/var&amp;gt; must be preceded by an equal sign. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The &amp;lt;var&amp;gt;[[$FieldgroupId]]&amp;lt;/var&amp;gt; function returns the field group ID. &amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Examples====&lt;br /&gt;
This &amp;lt;var&amp;gt;FOR FIELDGROUP&amp;lt;/var&amp;gt; statement sets the third occurrence of the &amp;lt;code&amp;gt;DRIVER&amp;lt;/code&amp;gt; field group as the context for the &amp;lt;var&amp;gt;Print&amp;lt;/var&amp;gt; statement:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;FR Where ...&lt;br /&gt;
   For Fieldgroup DRIVER (3)&lt;br /&gt;
      Print DRIVER_ID&lt;br /&gt;
   End For&lt;br /&gt;
End For &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
This &amp;lt;var&amp;gt;FOR FIELDGROUP&amp;lt;/var&amp;gt; statement uses a [[Using variables and values in computation#Field name variables|field name variable]] to set the &amp;lt;code&amp;gt;DRIVER&amp;lt;/code&amp;gt; field group that has ID &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;%fgid&amp;lt;/var&amp;gt; as the context for the &amp;lt;var&amp;gt;Print&amp;lt;/var&amp;gt; statement: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;FR Where ...&lt;br /&gt;
   %driver = &#039;DRIVER&#039;&lt;br /&gt;
   For Fieldgroup %%driver = %fgid&lt;br /&gt;
      Print DRIVER_ID And DRIVER_NAME&lt;br /&gt;
   End For&lt;br /&gt;
End For&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Setting field group context==&lt;br /&gt;
To access data in a field group, first establish the record context using the&lt;br /&gt;
&amp;lt;var&amp;gt;FOR EACH RECORD&amp;lt;/var&amp;gt; (&amp;lt;var&amp;gt;FR&amp;lt;/var&amp;gt;) or &amp;lt;var&amp;gt;FOR RECORD NUMBER&amp;lt;/var&amp;gt; (&amp;lt;var&amp;gt;FRN&amp;lt;/var&amp;gt;) statement. Then to access the occurrences of the field group, you typically use an &amp;lt;var&amp;gt;FAO FIELDGROUP&amp;lt;/var&amp;gt; or &amp;lt;var&amp;gt;FEO FIELDGROUP&amp;lt;/var&amp;gt; loop.&lt;br /&gt;
 &lt;br /&gt;
===Using a FOR ALL OCCURRENCES OF loop===&lt;br /&gt;
You can set field group context with an &amp;lt;var&amp;gt;FAO&amp;lt;/var&amp;gt; loop. For example:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;BEGIN&lt;br /&gt;
IN POLICIES FOR EACH RECORD&lt;br /&gt;
FAO:  FAO FIELDGROUP VEHICLE&lt;br /&gt;
        IF COLOR IS LIKE &#039;*RED*&#039; THEN&lt;br /&gt;
           PRINT &#039;POLICY:&#039; AT 5 AND POLICY_NUMBER AND -&lt;br /&gt;
               &#039;COLOR=&#039; WITH COLOR&lt;br /&gt;
           %RED = %RED + 1&lt;br /&gt;
        END IF&lt;br /&gt;
      END FOR&lt;br /&gt;
END FOR&lt;br /&gt;
PRINT &#039;NUMBER OF RED CARS:&#039; AND %RED&lt;br /&gt;
END&lt;br /&gt;
&amp;lt;/p&amp;gt; &lt;br /&gt;
The result is:&lt;br /&gt;
&amp;lt;p class=&amp;quot;output&amp;quot;&amp;gt;      POLICY: 100001 COLOR=VICTORY RED&lt;br /&gt;
      POLICY: 100007 COLOR=RED&lt;br /&gt;
      POLICY: 100011 COLOR=VICTORY RED&lt;br /&gt;
...&lt;br /&gt;
NUMBER OF RED CARS: 214&lt;br /&gt;
 &lt;br /&gt;
...and so on...&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Using a FOR EACH OCCURRENCE loop===&lt;br /&gt;
An &amp;lt;var&amp;gt;FEO&amp;lt;/var&amp;gt; loop on a field group establishes a field group context. Inside the loop, references to field group fields are to their occurrences in their field group. For example:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;BEGIN&lt;br /&gt;
IN POLICIES FOR EACH RECORD WHERE POLICY_NUMBER = 100013&lt;br /&gt;
FEO:  FEO FIELDGROUP VEHICLE&lt;br /&gt;
      %DRIVER_ID = OTHER_DRIVER&lt;br /&gt;
      PRINT OCCURRENCE IN FEO AND MAKE AND MODEL AND -&lt;br /&gt;
            &#039;OTHER DRIVER(S):&#039; AT 30 AND EACH OTHER_DRIVER            &lt;br /&gt;
      PRINT &#039;FIRST:&#039; AT 30 AND %DRIVER_ID AND -&lt;br /&gt;
            &#039;THIRD:&#039; AND OTHER_DRIVER(3)&lt;br /&gt;
      END FOR&lt;br /&gt;
END FOR&lt;br /&gt;
END &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The result is:&lt;br /&gt;
&amp;lt;p class=&amp;quot;output&amp;quot;&amp;gt;1 AUDI A4 QUATTRO OTHER DRIVER(S): 100035 100037 100036&lt;br /&gt;
                            FIRST: 100035 THIRD: 100036&lt;br /&gt;
2 CADILLAC SEVILLE OTHER DRIVER(S):&lt;br /&gt;
                            FIRST: THIRD:&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
An important difference between an &amp;lt;var&amp;gt;FAO FIELDGROUP&amp;lt;/var&amp;gt; statement and an &amp;lt;var&amp;gt;FEO&lt;br /&gt;
FIELDGROUP&amp;lt;/var&amp;gt; statement is that the &amp;lt;var&amp;gt;FAO FIELDGROUP&amp;lt;/var&amp;gt; statement collects the&lt;br /&gt;
field group IDs for all occurrences, then processes against that list. Because of&lt;br /&gt;
this, it is less affected by insertions or deletions of occurrences of field groups&lt;br /&gt;
within the loop. Deleting the current occurrence within the&lt;br /&gt;
loop, for example, will not affect occurrences referenced in subsequent iterations.&lt;br /&gt;
For further discussion of this, see [[#FEO loops and field group context|FEO loops and field group context]], below. &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Using a FOR FIELDGROUP block===&lt;br /&gt;
You can use a field group occurrence established by a [[#FOR FIELDGROUP statement|FOR FIELDGROUP block]] as the context for references to its members. &lt;br /&gt;
&lt;br /&gt;
For example, the following &amp;lt;var&amp;gt;PAFGI&amp;lt;/var&amp;gt; (&amp;lt;var&amp;gt;PRINT ALL FIELD GROUP INFORMATION&amp;lt;/var&amp;gt;) statement outputs the contents of only the third occurrence of field group &amp;lt;code&amp;gt;GRP&amp;lt;/code&amp;gt;:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;IN FILE WHATEVER FRN %RECNO&lt;br /&gt;
   FOR FIELDGROUP GRP(3)&lt;br /&gt;
      PRINT ’*** Third occurrence of field group GRP’&lt;br /&gt;
      PAFGI&lt;br /&gt;
   END FOR&lt;br /&gt;
END FOR  &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Accessing field group members while not in field group context===&lt;br /&gt;
You can access field group occurrences by using the occurrence number&lt;br /&gt;
directly in the FR loop, if the field is [[Field design#AT-MOST-ONE, REPEATABLE, and EXACTLY-ONE attributes|EXACTLY-ONE or AT-MOST-ONE]]. So, instead of using this &amp;lt;var&amp;gt;FEO FIELDGROUP&amp;lt;/var&amp;gt; loop to print the &amp;lt;code&amp;gt;MAKE&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;MODEL&amp;lt;/code&amp;gt; for the three vehicles in the &amp;lt;code&amp;gt;VEHICLE&amp;lt;/code&amp;gt; field group:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;BEGIN&lt;br /&gt;
FR WHERE POLICY_NUMBER = 100095&lt;br /&gt;
   FEO FIELDGROUP VEHICLE&lt;br /&gt;
      PRINT MAKE AND MODEL&lt;br /&gt;
   END FOR&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;
Output: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;output&amp;quot;&amp;gt;VOLKSWAGEN NEW BEETLE&lt;br /&gt;
MITSUBISHI ECLIPSE&lt;br /&gt;
CHEVROLET SUBURBAN  &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can also access the &amp;lt;code&amp;gt;MAKE&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;MODEL&amp;lt;/code&amp;gt; (&amp;lt;var&amp;gt;EXACTLY-ONE&amp;lt;/var&amp;gt;) fields directly within the &amp;lt;var&amp;gt;FR&amp;lt;/var&amp;gt; loop by using occurrence numbers:  &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;BEGIN&lt;br /&gt;
   FR WHERE POLICY_NUMBER = 100095&lt;br /&gt;
      PRINT MAKE AND MODEL&lt;br /&gt;
      PRINT MAKE(2) AND MODEL(2)&lt;br /&gt;
      PRINT MAKE(3) AND MODEL(3)&lt;br /&gt;
   END FOR&lt;br /&gt;
END  &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Output: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;output&amp;quot;&amp;gt;VOLKSWAGEN NEW BEETLE&lt;br /&gt;
MITSUBISHI SUBURBAN&lt;br /&gt;
CHEVROLET SUBURBAN  &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;
If &amp;lt;code&amp;gt;MAKE&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;MODEL&amp;lt;/code&amp;gt; are &amp;lt;var&amp;gt;REPEATABLE&amp;lt;/var&amp;gt; fields or defined to all field groups (&amp;lt;code&amp;gt;FIELDGROUP *&amp;lt;/code&amp;gt;), attempting to access them with just an &amp;lt;var&amp;gt;FR&amp;lt;/var&amp;gt; loop will fail. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Missing data in field groups===&lt;br /&gt;
As with non-field group field references for missing occurrences, the field values are returned as null (see the reference to &amp;lt;code&amp;gt;OTHER_DRIVER(3)&amp;lt;/code&amp;gt; in the preceding example). The exception is &amp;lt;var&amp;gt;EXACTLY-ONE&amp;lt;/var&amp;gt; fields in field groups, where the field&#039;s default value is returned for missing occurrences.&lt;br /&gt;
&lt;br /&gt;
===Handling nested field group context===&lt;br /&gt;
If field groups are nested, you can always retrieve an &amp;lt;var&amp;gt;EXACTLY-ONE&amp;lt;/var&amp;gt; field in a field group inside the current context without establishing that nested field group&#039;s context. &lt;br /&gt;
&amp;lt;var&amp;gt;EXACTLY-ONE&amp;lt;/var&amp;gt; fields in specific field groups (as opposed to fields defined with &amp;lt;code&amp;gt;FIELDGROUP *&amp;lt;/code&amp;gt; that belong to all field groups) can be retrieved outside the field group context. &lt;br /&gt;
In the following example, &amp;lt;code&amp;gt;CLAIM-NUMBER&amp;lt;/code&amp;gt; is an &amp;lt;var&amp;gt;EXACTLY-ONE&amp;lt;/var&amp;gt; field in field group &amp;lt;code&amp;gt;CLAIM&amp;lt;/code&amp;gt; which is nested within field group &amp;lt;code&amp;gt;VEHICLE&amp;lt;/code&amp;gt;:&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;BEGIN&lt;br /&gt;
IN POLICIES FOR EACH RECORD WHERE POLICY_NUMBER = 100095&lt;br /&gt;
   PRINT POLICY_NUMBER&lt;br /&gt;
   FEO FIELDGROUP VEHICLE&lt;br /&gt;
      PRINT MAKE AT 5 AND MODEL&lt;br /&gt;
      PRINT &#039;1)&#039; AND CLAIM_NUMBER&lt;br /&gt;
      PRINT &#039;2)&#039; AND CLAIM_NUMBER(2)&lt;br /&gt;
      PRINT &#039;3)&#039; AND CLAIM_NUMBER(3)&lt;br /&gt;
   END FOR&lt;br /&gt;
END FOR&lt;br /&gt;
END  &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The result is: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;output&amp;quot;&amp;gt;100095&lt;br /&gt;
    VOLKSWAGEN NEW BEETLE&lt;br /&gt;
1)&lt;br /&gt;
2)&lt;br /&gt;
3)&lt;br /&gt;
    MITSUBISHI ECLIPSE&lt;br /&gt;
1) 100059&lt;br /&gt;
2) 100064&lt;br /&gt;
3)&lt;br /&gt;
    CHEVROLET SUBURBAN&lt;br /&gt;
1)&lt;br /&gt;
2)&lt;br /&gt;
3)&lt;br /&gt;
&amp;lt;/p&amp;gt; &lt;br /&gt;
&lt;br /&gt;
===Updating fields in a field group===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
&amp;lt;var&amp;gt;EXACTLY-ONE&amp;lt;/var&amp;gt; fields cannot be &amp;lt;var&amp;gt;ADD&amp;lt;/var&amp;gt;ed, &amp;lt;var&amp;gt;INSERT&amp;lt;/var&amp;gt;ed or &amp;lt;var&amp;gt;DELETE&amp;lt;/var&amp;gt;d. You can only &amp;lt;var&amp;gt;CHANGE&amp;lt;/var&amp;gt; them. &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;BEGIN&lt;br /&gt;
IN POLICIES FOR EACH RECORD WHERE POLICY_NUMBER = 100013&lt;br /&gt;
   FEO FIELDGROUP VEHICLE&lt;br /&gt;
      ADD MAKE = &#039;XXX&#039;&lt;br /&gt;
      INSERT MAKE(1) = %NOTHING&lt;br /&gt;
      DELETE MAKE&lt;br /&gt;
      CHANGE COLOR(4) TO &#039;YYYY&#039;&lt;br /&gt;
   END FOR&lt;br /&gt;
END &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The result is: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;output&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;*** 1 M204.2853: ADD NOT ALLOWED FOR EXACTLY-ONE FIELD&lt;br /&gt;
== &#039;XXX&#039;&lt;br /&gt;
*** 2 M204.0228: PART OF STATEMENT IGNORED&lt;br /&gt;
*** 3 M204.2853: INSERT NOT ALLOWED FOR EXACTLY-ONE&lt;br /&gt;
FIELD&lt;br /&gt;
== %NOTHING&lt;br /&gt;
*** 4 M204.0228: PART OF STATEMENT IGNORED&lt;br /&gt;
*** 5 M204.2853: DELETE NOT ALLOWED FOR EXACTLY-ONE&lt;br /&gt;
FIELD&lt;br /&gt;
*** M204.1042: COMPILATION ERRORS&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Handling invalid occurrence numbers===&lt;br /&gt;
The following &amp;lt;code&amp;gt;PRINT MAKE(3)&amp;lt;/code&amp;gt; statement prints a null and without error, even if &amp;lt;code&amp;gt;MAKE&amp;lt;/code&amp;gt; was defined as &amp;lt;var&amp;gt;EXACTLY-ONE&amp;lt;/var&amp;gt;. This is consistent with Model&amp;amp;nbsp;204 behavior for non-field group &amp;lt;var&amp;gt;EXACTLY-ONE&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;OCCURS&amp;lt;/var&amp;gt; fields. That is, you can request occurrence 4 of an &amp;lt;var&amp;gt;EXACTLY-ONE&amp;lt;/var&amp;gt; or &amp;lt;var&amp;gt;OCCURS 1&amp;lt;/var&amp;gt; field in the record, and Model 204 returns a null. Model 204 ignores invalid occurrence numbers such as negative numbers or 0. 0 is treated the same as 1.&lt;br /&gt;
&lt;br /&gt;
In the following example, &amp;lt;code&amp;gt;MAKE&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;MODEL&amp;lt;/code&amp;gt; are &amp;lt;var&amp;gt;EXACTLY-ONE&amp;lt;/var&amp;gt; fields:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;BEGIN&lt;br /&gt;
IN POLICIES FOR EACH RECORD WHERE POLICY_NUMBER = 100013&lt;br /&gt;
   PRINT &#039;1&#039; AND MAKE AND MODEL&lt;br /&gt;
   PRINT &#039;2&#039; AND MAKE(2) AND MODEL(2)&lt;br /&gt;
   PRINT &#039;3&#039; AND MAKE(3) AND MODEL(3)&lt;br /&gt;
END FOR&lt;br /&gt;
END &amp;lt;/p&amp;gt;&lt;br /&gt;
The result is: &lt;br /&gt;
&amp;lt;p class=&amp;quot;output&amp;quot;&amp;gt;1 AUDI A4 QUATTRO&lt;br /&gt;
2 CADILLAC SEVILLE&lt;br /&gt;
3 &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
In addition to retrieving field values inside an &amp;lt;var&amp;gt;FEO FIELDGROUP&amp;lt;/var&amp;gt; loop, fields in that field group can be updated, that is, added, inserted, changed, and deleted: &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;
%GLASSES IS STRING LEN 50&lt;br /&gt;
%GLASSES = &#039;CORRECTIVE LENSES REQUIRED&#039;&lt;br /&gt;
 &lt;br /&gt;
IN POLICIES FOR EACH RECORD WHERE POLICY_NUMBER = 100013&lt;br /&gt;
   FEO FIELDGROUP DRIVER&lt;br /&gt;
      PRINT &#039;BEFORE ..&#039;&lt;br /&gt;
      PAFGI&lt;br /&gt;
      ADD DRIVER_RESTRICTIONS = &#039;MEDICAL RESTRICTIONS PRESENT&#039;&lt;br /&gt;
      INSERT DRIVER_RESTRICTIONS(3) = %GLASSES&lt;br /&gt;
      DELETE DRIVER_RESTRICTIONS(4)&lt;br /&gt;
      CHANGE DRIVER_MARITAL_STATUS TO &#039;WIDOWED&#039;&lt;br /&gt;
      PRINT &#039;AFTER ...&#039;&lt;br /&gt;
      PAFGI&lt;br /&gt;
   END FOR&lt;br /&gt;
END  &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
The result is: &lt;br /&gt;
&amp;lt;p class=&amp;quot;output&amp;quot;&amp;gt;BEFORE ..&lt;br /&gt;
\DRIVER = 1&lt;br /&gt;
 DRIVER_ID = 100034&lt;br /&gt;
 DRIVER_NAME = CUMMINGS, BETTY S&lt;br /&gt;
 DRIVER_MARITAL_STATUS = SINGLE&lt;br /&gt;
 DRIVER_GENDER = F&lt;br /&gt;
 DRIVER_DATE_OF_BIRTH = 19791225&lt;br /&gt;
/DRIVER = 1&lt;br /&gt;
AFTER ...&lt;br /&gt;
\DRIVER = 1&lt;br /&gt;
 DRIVER_ID = 100034&lt;br /&gt;
 DRIVER_NAME = CUMMINGS, BETTY S&lt;br /&gt;
 DRIVER_MARITAL_STATUS = WIDOWED&lt;br /&gt;
 DRIVER_GENDER = F&lt;br /&gt;
 DRIVER_DATE_OF_BIRTH = 19791225&lt;br /&gt;
 DRIVER_RESTRICTIONS = MEDICAL RESTRICTIONS PRESENT&lt;br /&gt;
 DRIVER_RESTRICTIONS = CORRECTIVE LENSES REQUIRED&lt;br /&gt;
/DRIVER = 1&lt;br /&gt;
BEFORE ..&lt;br /&gt;
\DRIVER = 2&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Constraint violations for field groups==&lt;br /&gt;
For &amp;lt;var&amp;gt;ADD&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;INSERT&amp;lt;/var&amp;gt;, and &amp;lt;var&amp;gt;DELETE&amp;lt;/var&amp;gt; statements, you can get an &amp;lt;var&amp;gt;EXACTLY-ONE&amp;lt;/var&amp;gt; constraint violation, as well as other field constraint violations. In the previous example, had you attempted to add, insert, or delete the field &amp;lt;code&amp;gt;DRIVER_ID&amp;lt;/code&amp;gt;, you would have received the following error message:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;M204.2853: (ADD/DELETE/INSERT) NOT ALLOWED FOR EXACTLY-ONE FIELD&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
In general, the behavior of updating statements mimics the Model 204 handling of exception cases. For example, a &amp;lt;var&amp;gt;DELETE&amp;lt;/var&amp;gt; of an occurrence that is not there is ignored. A &amp;lt;var&amp;gt;CHANGE&amp;lt;/var&amp;gt; statement for an absent occurrence becomes an &amp;lt;var&amp;gt;ADD&amp;lt;/var&amp;gt; statement.&lt;br /&gt;
&lt;br /&gt;
==Referencing fields in nested field groups==&lt;br /&gt;
You can reference a field from the containing context even inside a field group context. For example:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;BEGIN&lt;br /&gt;
IN POLICIES FOR EACH RECORD WHERE POLICY_NUMBER = 100013&lt;br /&gt;
   FEO FIELDGROUP DRIVER&lt;br /&gt;
      PRINT POLICY_NUMBER AND DRIVER_NAME&lt;br /&gt;
   END FOR&lt;br /&gt;
END&lt;br /&gt;
 &lt;br /&gt;
100013 CUMMINGS, BETTY S&lt;br /&gt;
100013 CUMMINGS, EDDIE R&lt;br /&gt;
100013 CUMMINGS, LEE V&lt;br /&gt;
100013 CUMMINGS, MARY U&lt;br /&gt;
100013 CUMMINGS, ROBERT T&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
See the discussion in the next section regarding the oddities of &amp;lt;var&amp;gt;DELETE&amp;lt;/var&amp;gt; processing with &amp;lt;var&amp;gt;FEO&amp;lt;/var&amp;gt; loops.&lt;br /&gt;
 &lt;br /&gt;
==FEO loops and field group context==&lt;br /&gt;
On each iteration of a field group &amp;lt;var&amp;gt;FEO&amp;lt;/var&amp;gt; loop, the current field group is set as the field group context. If that field group is deleted and a field in that field group is referenced you get a request canceling error.&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;var&amp;gt;FEO&amp;lt;/var&amp;gt; on field groups has the same semantics as those on a single field. When you iterate in an &amp;lt;var&amp;gt;FEO FIELDGROUP&amp;lt;/var&amp;gt;, the next occurrence processed is the occurrence number one greater than the one processed before, whether or not it is one you have already processed (because of insertions) or whether or not you skip one or more (because of deletions).&lt;br /&gt;
 &lt;br /&gt;
The problem with deleting repeating fields, or field groups, in order in an FEO loop is that the internal pointer is updated after each deletion, resulting in a default behavior of deleting every other occurrence of the repeating field or field group, which can also cause an error when the final deletion is attempted and the pointer is now set to a value larger than the final occurrence:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;BEGIN&lt;br /&gt;
IN POLICIES FOR EACH RECORD WHERE POLICY_NUMBER = 100013&lt;br /&gt;
   FEO FIELDGROUP DRIVER&lt;br /&gt;
      PRINT POLICY_NUMBER AND DRIVER_NAME&lt;br /&gt;
   END FOR&lt;br /&gt;
END&lt;br /&gt;
 &lt;br /&gt;
100013 CUMMINGS, BETTY S&lt;br /&gt;
100013 CUMMINGS, EDDIE R&lt;br /&gt;
100013 CUMMINGS, LEE V&lt;br /&gt;
100013 CUMMINGS, MARY U&lt;br /&gt;
100013 CUMMINGS, ROBERT T&lt;br /&gt;
 &lt;br /&gt;
BEGIN&lt;br /&gt;
IN POLICIES FOR EACH RECORD WHERE POLICY_NUMBER = 100013&lt;br /&gt;
   PRINT POLICY_NUMBER&lt;br /&gt;
   PRINT &#039;BEFORE...&#039;&lt;br /&gt;
   FEO FIELDGROUP DRIVER&lt;br /&gt;
      PRINT DRIVER_NAME AT 5&lt;br /&gt;
   END FOR&lt;br /&gt;
   FEO FIELDGROUP DRIVER&lt;br /&gt;
      DELETE FIELDGROUP&lt;br /&gt;
   END FOR&lt;br /&gt;
   PRINT &#039;AFTER....&#039;&lt;br /&gt;
   FEO FIELDGROUP DRIVER&lt;br /&gt;
      PRINT DRIVER_NAME AT 5&lt;br /&gt;
   END FOR&lt;br /&gt;
END&lt;br /&gt;
 &lt;br /&gt;
100013&lt;br /&gt;
BEFORE...&lt;br /&gt;
    CUMMINGS, BETTY S&lt;br /&gt;
    CUMMINGS, EDDIE R&lt;br /&gt;
    CUMMINGS, LEE V&lt;br /&gt;
    CUMMINGS, MARY U&lt;br /&gt;
    CUMMINGS, ROBERT T&lt;br /&gt;
AFTER....&lt;br /&gt;
    CUMMINGS, EDDIE R&lt;br /&gt;
    CUMMINGS, MARY U&lt;br /&gt;
&amp;lt;/p&amp;gt; &lt;br /&gt;
&lt;br /&gt;
The intent of the above code is clearly to delete &amp;lt;em&amp;gt;every&amp;lt;/em&amp;gt; occurrence of the field group, not every &amp;lt;em&amp;gt;other&amp;lt;/em&amp;gt; occurrence, but this anomalous result is maintained as part of SOUL for backward compatibility reasons.  The three approaches to deleting &amp;lt;em&amp;gt;all&amp;lt;/em&amp;gt; occurrences are: &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Use the &amp;lt;var&amp;gt;DELETE EACH&amp;lt;/var&amp;gt; syntax.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Loop backward through the set of occurrences in an index loop.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Use &amp;lt;var&amp;gt;FOR ALL OCCURRENCES&amp;lt;/var&amp;gt; (&amp;lt;var&amp;gt;FAO&amp;lt;/var&amp;gt;), introduced in Model&amp;amp;nbsp;204 version 7.5. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;BEGIN&lt;br /&gt;
IN POLICIES FOR EACH RECORD WHERE POLICY_NUMBER = 100013&lt;br /&gt;
   PRINT POLICY_NUMBER&lt;br /&gt;
   PRINT &#039;BEFORE...&#039;&lt;br /&gt;
   FAO FIELDGROUP DRIVER&lt;br /&gt;
      PRINT DRIVER_NAME AT 5&lt;br /&gt;
   END FOR&lt;br /&gt;
   FAO FIELDGROUP DRIVER&lt;br /&gt;
      DELETE FIELDGROUP&lt;br /&gt;
   END FOR&lt;br /&gt;
   PRINT &#039;AFTER....&#039;&lt;br /&gt;
   FAO FIELDGROUP DRIVER&lt;br /&gt;
      PRINT DRIVER_NAME AT 5&lt;br /&gt;
   END FOR&lt;br /&gt;
END&lt;br /&gt;
 &lt;br /&gt;
100013&lt;br /&gt;
BEFORE...&lt;br /&gt;
    CUMMINGS, BETTY S&lt;br /&gt;
    CUMMINGS, EDDIE R&lt;br /&gt;
    CUMMINGS, LEE V&lt;br /&gt;
    CUMMINGS, MARY U&lt;br /&gt;
    CUMMINGS, ROBERT T&lt;br /&gt;
AFTER....&lt;br /&gt;
 &lt;br /&gt;
BEGIN&lt;br /&gt;
IN POLICIES FOR EACH RECORD WHERE POLICY_NUMBER = 100095&lt;br /&gt;
   PRINT &#039;...BEFORE...&#039;&lt;br /&gt;
   FAO FIELDGROUP VEHICLE&lt;br /&gt;
      PRINT MAKE AND MODEL&lt;br /&gt;
   END FOR&lt;br /&gt;
   PRINT &#039;ADD A HONDA PILOT ...&#039;&lt;br /&gt;
   ADD FIELDGROUP VEHICLE&lt;br /&gt;
      MAKE = HONDA&lt;br /&gt;
      MODEL = PILOT&lt;br /&gt;
      * ... OTHER VEHICLE FIELDS&lt;br /&gt;
   END ADD&lt;br /&gt;
   PRINT &#039;...AFTER....&#039;&lt;br /&gt;
   FAO FIELDGROUP VEHICLE&lt;br /&gt;
      PRINT MAKE AND MODEL&lt;br /&gt;
   END FOR&lt;br /&gt;
END&lt;br /&gt;
 &lt;br /&gt;
...BEFORE...&lt;br /&gt;
VOLKSWAGEN NEW BEETLE&lt;br /&gt;
MITSUBISHI ECLIPSE&lt;br /&gt;
CHEVROLET SUBURBAN&lt;br /&gt;
 &lt;br /&gt;
ADD A HONDA PILOT ...&lt;br /&gt;
...AFTER....&lt;br /&gt;
VOLKSWAGEN NEW BEETLE&lt;br /&gt;
MITSUBISHI ECLIPSE&lt;br /&gt;
CHEVROLET SUBURBAN&lt;br /&gt;
HONDA PILOT&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
==UPDATE field attribute==&lt;br /&gt;
 &lt;br /&gt;
===Impact of changing a value===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When the user changes the value of a field, how &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; changes the occurrence depends upon whether the field was defined with the &amp;lt;var&amp;gt;UPDATE IN PLACE&amp;lt;/var&amp;gt; or &amp;lt;var&amp;gt;UPDATE AT END&amp;lt;/var&amp;gt; attribute, 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;Attribute &amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;How the update works...&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;UPDATE IN PLACE&amp;lt;/var&amp;gt; (the default) &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;The value of the field occurrence is changed but its position in the record is preserved. To change the order of values, the user must delete the old value and add the new one in separate statements.   &amp;lt;/td&amp;gt;&lt;br /&gt;
&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;UPDATE AT END&amp;lt;/var&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;The existing occurrence is deleted and the new one is automatically added at the end. &amp;lt;var&amp;gt;UPDATE AT END&amp;lt;/var&amp;gt; is normally specified for applications that depend on value rotation to accomplish aging. &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&amp;gt;&lt;br /&gt;
This example includes both approaches to updating. Suppose a record has the following fields:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;NAME = RICHARD SMITH&lt;br /&gt;
CHILD = HENRY&lt;br /&gt;
CHILD = SALLY&lt;br /&gt;
CHILD = JANE&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You could use the technique illustrated below to add a last name to each child. (This technique involves the use of %variables, which are discussed in [[Using variables and values in computation]].)&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;BEGIN&lt;br /&gt;
FIND.RECS:  FIND ALL RECORDS FOR WHICH&lt;br /&gt;
               NAME = RICHARD SMITH&lt;br /&gt;
            END FIND&lt;br /&gt;
            FOR EACH RECORD IN FIND.RECS&lt;br /&gt;
EACH.CHILD     FOR EACH OCCURRENCE OF CHILD&lt;br /&gt;
                  %A = VALUE IN EACH.CHILD WITH &#039; SMITH&#039;&lt;br /&gt;
                  CHANGE CHILD = VALUE IN EACH.CHILD TO %A&lt;br /&gt;
               END FOR&lt;br /&gt;
            END FOR&lt;br /&gt;
END&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===If the UPDATE IN PLACE option is specified===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If the &amp;lt;var&amp;gt;UPDATE IN PLACE&amp;lt;/var&amp;gt; option has been specified for the &amp;lt;code&amp;gt;CHILD&amp;lt;/code&amp;gt; field, then the &amp;lt;var&amp;gt;FOR EACH OCCURRENCE&amp;lt;/var&amp;gt; loop change each occurrence of &amp;lt;code&amp;gt;CHILD&amp;lt;/code&amp;gt; in turn. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
On the first pass through the loop, the first value, &amp;lt;code&amp;gt;HENRY&amp;lt;/code&amp;gt;, is selected and changed to &amp;lt;code&amp;gt;HENRY SMITH&amp;lt;/code&amp;gt;. After the first pass, the record looks like this:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;NAME = RICHARD SMITH&lt;br /&gt;
CHILD = HENRY SMITH&lt;br /&gt;
CHILD = SALLY&lt;br /&gt;
CHILD = JANE&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
At the end of the second pass, SALLY is changed:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;NAME = RICHARD SMITH&lt;br /&gt;
CHILD = HENRY SMITH&lt;br /&gt;
CHILD = SALLY SMITH&lt;br /&gt;
CHILD = JANE&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
At the end of the third pass, JANE is changed:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;NAME = RICHARD SMITH&lt;br /&gt;
CHILD = HENRY SMITH&lt;br /&gt;
CHILD = SALLY SMITH&lt;br /&gt;
CHILD = JANE SMITH&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===If the UPDATE AT END option is specified===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If the &amp;lt;var&amp;gt;UPDATE AT END&amp;lt;/var&amp;gt; option has been specified for the &amp;lt;code&amp;gt;CHILD&amp;lt;/code&amp;gt; field, the &amp;lt;var&amp;gt;FOR EACH OCCURRENCE&amp;lt;/var&amp;gt; loop proceeds as described here.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
On the first pass through the &amp;lt;var&amp;gt;FOR EACH OCCURRENCE&amp;lt;/var&amp;gt; loop the first value, &amp;lt;code&amp;gt;HENRY&amp;lt;/code&amp;gt;, is selected and changed to &amp;lt;code&amp;gt;HENRY SMITH&amp;lt;/code&amp;gt;. The act of changing, however, causes the value &amp;lt;code&amp;gt;HENRY&amp;lt;/code&amp;gt; to be deleted and the value &amp;lt;code&amp;gt;HENRY SMITH&amp;lt;/code&amp;gt; to be added as the last child. Thus after the first pass, the record looks like this:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;NAME = RICHARD SMITH&lt;br /&gt;
CHILD = SALLY&lt;br /&gt;
CHILD = JANE&lt;br /&gt;
CHILD = HENRY SMITH&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
On the second pass through the loop, &amp;lt;code&amp;gt;JANE&amp;lt;/code&amp;gt;, which is now the second occurrence of &amp;lt;code&amp;gt;CHILD&amp;lt;/code&amp;gt;, is deleted and &amp;lt;code&amp;gt;JANE SMITH&amp;lt;/code&amp;gt; is added to the end of the record:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;NAME = RICHARD SMITH&lt;br /&gt;
CHILD = SALLY&lt;br /&gt;
CHILD = HENRY SMITH&lt;br /&gt;
CHILD = JANE SMITH&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
On the third pass, the third occurrence is &amp;lt;code&amp;gt;JANE SMITH&amp;lt;/code&amp;gt;, and the record ends with:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;NAME = RICHARD SMITH&lt;br /&gt;
CHILD = SALLY&lt;br /&gt;
CHILD = HENRY SMITH&lt;br /&gt;
CHILD = JANE SMITH&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
==Subscripts==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Subscripts can be included in &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; field references to facilitate the selection of particular occurrences of multiply occurring fields. Any field name can be followed by a parenthesized expression. The value of this expression is used as an ordinal number which specifies the desired occurrence of the named field. For example:  &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;INCIDENT(3)&lt;br /&gt;
COURSE.NUMBER(2)&lt;br /&gt;
TRANSACTION(A+B)&lt;br /&gt;
&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 a class schedule where subscripts are used to change the room number for a course:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;BEGIN&lt;br /&gt;
COURSE:  FIND ALL RECORDS FOR WHICH&lt;br /&gt;
            REC = ROOM ASSIGNMENT&lt;br /&gt;
         END FIND&lt;br /&gt;
CHANGE:  FOR EACH RECORD IN COURSE&lt;br /&gt;
            IF ROOM(1) EQ &#039;214A&#039; THEN&lt;br /&gt;
               CHANGE ROOM(1) TO &#039;566A&#039;&lt;br /&gt;
            END IF&lt;br /&gt;
            IF ROOM(2) EQ &#039;214A&#039; THEN&lt;br /&gt;
               CHANGE ROOM(2) TO &#039;566A&#039;&lt;br /&gt;
            END IF&lt;br /&gt;
         END FOR&lt;br /&gt;
END&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Subscripted field extraction===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Subscripted field references attempt to maintain their position inside a record much as an FEO loop attempts to maintain its position inside a record. This means that subscripted field references tend to be as efficient as FEO loops. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The following is an example of using subscripted field extraction for a field that is a member of a field group. An &amp;lt;var&amp;gt;FEO&amp;lt;/var&amp;gt; loop populates two arrays with the corresponding values of group members &amp;lt;code&amp;gt;INCIDENT&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;INCIDENT_DATE&amp;lt;/code&amp;gt;:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;%inc is string array (12) no fs&lt;br /&gt;
%idate is string array (12) no fs&lt;br /&gt;
FeoIdata: &lt;br /&gt;
  feo INCIDENT&lt;br /&gt;
    %inc(occurence in FeoIdata) = value in FeoIdata&lt;br /&gt;
    %idate(occurence in FeoIdata) = INCIDENT_DATE(occurence in FeoIdata)&lt;br /&gt;
  end for&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If you use multiple &amp;lt;var&amp;gt;FEO&amp;lt;/var&amp;gt; loops for field group processing, it is possible that using this technique will require additional VTBL resources for procedures with an extremely large number of sorts or subscripted field references.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Evaluation of subscript expressions===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The evaluation of subscript expressions is subject to the rules for determining an integer result for an arithmetic expression as described in [[Using variables and values in computation#Arithmetic operations|Arithmetic operations]].      &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Statements and phrases with which you cannot use subscripts===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Subscripted field references can appear anywhere that unsubscripted references can, except in the following statements and phrases:&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;Statements you cannot use with subscripts &amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;&lt;br /&gt;
Because...&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;ADD&amp;lt;/var&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Adds a new occurrence of a field.    &amp;lt;/td&amp;gt;&lt;br /&gt;
&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;BY EACH phrase&amp;lt;/var&amp;gt; in the &amp;lt;var&amp;gt;SORT RECORDS&amp;lt;/var&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Loops through all occurrences of a field.    &amp;lt;/td&amp;gt;&lt;br /&gt;
&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 EACH statement&amp;lt;/var&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Loops through all occurrences of a field.    &amp;lt;/td&amp;gt;&lt;br /&gt;
&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;EACH phrase&amp;lt;/var&amp;gt; in a &amp;lt;var&amp;gt;PRINT&amp;lt;/var&amp;gt; specification&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Loops through all occurrences of a field.    &amp;lt;/td&amp;gt;&lt;br /&gt;
&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;FILE&amp;lt;/var&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Deals with fields having the INVISIBLE attribute, which cannot be the object of subscripted references.     &amp;lt;/td&amp;gt;&lt;br /&gt;
&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;FIND&amp;lt;/var&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Locates records without regard to which occurrence of a field contains the desired value.    &amp;lt;/td&amp;gt;&lt;br /&gt;
&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;FOR EACH OCCURRENCE&amp;lt;/var&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Loops through all occurrences of a field. Field references within FOR EACH OCCURRENCE loops can be subscripted, depending upon the individual statements in which the references appear.     &amp;lt;/td&amp;gt;&lt;br /&gt;
&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;FOR EACH VALUE&amp;lt;/var&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Loops through all values of all occurrences of the specified field. Field references within FOR EACH VALUE loops are not allowed at all, unless the field reference is embedded in a nested FOR EACH RECORD loop. See [[Value loops#Setting up a value loop on one field and printing a value of another|Setting up a value loop on one field and printing a value of another]] for more information.&amp;lt;/td&amp;gt;&lt;br /&gt;
&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;IN ORDER BY EACH phrase&amp;lt;/var&amp;gt; in the &amp;lt;var&amp;gt;FOR EACH RECORD &amp;lt;/var&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Loops through all occurrences of a field.    &amp;lt;/td&amp;gt;&lt;br /&gt;
&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;PRINT n &amp;lt;/var&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Loops through all occurrences of a field.    &amp;lt;/td&amp;gt;&lt;br /&gt;
&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;STORE RECORD&amp;lt;/var&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Adds fields in the order of appearance in the statement.    &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;
===Unsubscripted field references===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
An unsubscripted field reference in a context in which subscripted references are allowed is always equivalent to a subscripted reference with a value of one.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Do not use subscripts with INVISIBLE fields===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You cannot make subscripted references to fields that have the &amp;lt;var&amp;gt;INVISIBLE&amp;lt;/var&amp;gt; attribute (see the discussion on field attributes in [[Field attributes]]). These fields are not truly multiply occurring, although they can have several different values in a single record. A subscript specified for a field with the &amp;lt;var&amp;gt;INVISIBLE&amp;lt;/var&amp;gt; attribute is ignored.   &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
==Subscript validity rules==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The rules presented below indicate whether or not a subscript value is valid and what action to take if the value is not valid. These rules take into account: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The value of the subscript&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The context in which the subscript appears&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The description of the subscripted field &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Explanation of the rules===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
In these rules, two quantities are used:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;N is the maximum number of occurrences that can be stored in a record for a given field. For a preallocated field, N equals the value of &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;n&amp;lt;/var&amp;gt; in the &amp;lt;var&amp;gt;OCCURS&amp;lt;/var&amp;gt; clause of the field&#039;s description. For other fields, N has no limit.       &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;P is the number of nonempty occurrences of the referenced field found in the specified record when the reference is evaluated. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
For a summary of rules for preallocated fields, refer to the discussion on preallocated fields in [[Data maintenance#Storing values in preallocated fields|Storing values in preallocated fields]].     &amp;lt;/p&amp;gt; &lt;br /&gt;
 &lt;br /&gt;
===INSERT statement===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The &amp;lt;var&amp;gt;INSERT&amp;lt;/var&amp;gt; statement, like the &amp;lt;var&amp;gt;ADD&amp;lt;/var&amp;gt; statement, is used for adding new occurrences of a field. &amp;lt;var&amp;gt;INSERT&amp;lt;/var&amp;gt; is used to add occurrences when the order of the values is important and the values are added out of order.   &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The &amp;lt;var&amp;gt;INSERT&amp;lt;/var&amp;gt; statement is supported in remote file and scattered group contexts. The &amp;lt;var&amp;gt;INSERT&amp;lt;/var&amp;gt; statement is not supported for Large Object fields.&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;INSERT&amp;lt;/var&amp;gt; statement is:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;INSERT &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;fieldname&amp;lt;/span&amp;gt; [(&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;subscript&amp;lt;/span&amp;gt;)] = &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;value&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Example====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Assume a record with these fields:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;DEPT = PERSONNEL&lt;br /&gt;
DEPT = FINANCE&lt;br /&gt;
DEPT = MARKETING&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The following statement:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;INSERT DEPT(3) = ACCOUNTING&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
results in this record:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;output&amp;quot;&amp;gt;DEPT = PERSONNEL&lt;br /&gt;
DEPT = FINANCE&lt;br /&gt;
DEPT = ACCOUNTING&lt;br /&gt;
DEPT = MARKETING&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Subscript validity rules====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
[[#INSERT statement|INSERT statement]] lists validity rules for subscripts. In this table:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;P is the number of occurrences of the field in the record when the &amp;lt;var&amp;gt;INSERT&amp;lt;/var&amp;gt; statement is issued. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;S is the subscript specified in the &amp;lt;var&amp;gt;INSERT&amp;lt;/var&amp;gt; statement.  &lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;caption&amp;gt;Subscript validation rules&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;If P and S values are: &amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;&lt;br /&gt;
Then &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; takes this 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;P &amp;gt; S&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Inserts the new occurrence in front of the former Sth occurrence; the new occurrence becomes the current Sth occurrence of the field.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;P &amp;lt; S&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Inserts the new occurrence of the field after the Pth occurrence; the new occurrence becomes the (P+1) occurrence.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;P = 0&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Adds the new value at the end of the record, as in the &amp;lt;var&amp;gt;ADD&amp;lt;/var&amp;gt; statement.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;S = 0, or no subscript&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Treats the new value as if S = 1 and inserts the new value as the first occurrence, in front of any former occurrence of the field.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;S &amp;lt; 0&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Does not add a new occurrence.&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;
For fields with the &amp;lt;var&amp;gt;INVISIBLE&amp;lt;/var&amp;gt; attribute, only the index is affected.   &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===PRINT statement===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
In retrieval statements such as &amp;lt;var&amp;gt;PRINT&amp;lt;/var&amp;gt;, subscript values less than zero or greater than P are invalid. Invalid references of this kind cause the null value to be returned. A subscript of zero returns the value of the first occurrence.  &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===DELETE statement===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
In the &amp;lt;var&amp;gt;DELETE&amp;lt;/var&amp;gt; statement, subscript values less than one or greater than P are invalid. If an invalid reference of this kind is made, no action is taken. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If several occurrences of a field are being deleted, you should be careful not to use DELETE in the following way: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;FOR EACH RECORD IN FIND.RECS&lt;br /&gt;
   DELETE CLIENT(1)&lt;br /&gt;
   DELETE CLIENT(2)&lt;br /&gt;
   DELETE CLIENT(3)&lt;br /&gt;
END FOR&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
As the statements are executed, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; deletes the first occurrence, &amp;lt;code&amp;gt;CLIENT(1)&amp;lt;/code&amp;gt;, then locates the current second occurrence, which is the original &amp;lt;code&amp;gt;CLIENT(3)&amp;lt;/code&amp;gt;, and deletes it. Then, because a third occurrence cannot be found, the operation stops, and the original &amp;lt;code&amp;gt;CLIENT(2)&amp;lt;/code&amp;gt; is never deleted.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
In such a situation, deleting the occurrences in the reverse order achieves the desired result:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;FOR EACH RECORD IN FIND.RECS&lt;br /&gt;
   DELETE CLIENT(3)&lt;br /&gt;
   DELETE CLIENT(2)&lt;br /&gt;
   DELETE CLIENT(1)&lt;br /&gt;
END FOR&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The desired result also can be achieved by completely omitting the subscripts, as follows:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;FOR EACH RECORD IN FIND.RECS&lt;br /&gt;
   DELETE CLIENT&lt;br /&gt;
   DELETE CLIENT&lt;br /&gt;
   DELETE CLIENT&lt;br /&gt;
END FOR&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===CHANGE statement===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
In the &amp;lt;var&amp;gt;CHANGE&amp;lt;/var&amp;gt; statement, subscript values less than one or greater than P are treated as attempts to add a new occurrence (P+1). If (P+1) does not exceed N (the maximum number of occurrences that can be stored), the new occurrence is added to the record. If (P+1) does exceed N, the request is cancelled.  &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===SORT RECORDS statement===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The use of subscripts in references to the recordset yielded by a&lt;br /&gt;
&amp;lt;var&amp;gt;SORT RECORDS&amp;lt;/var&amp;gt; statement sometimes can produce unexpected results.&lt;br /&gt;
If the &amp;lt;var&amp;gt;BY EACH&amp;lt;/var&amp;gt; option appears in a &amp;lt;var&amp;gt;SORT&amp;lt;/var&amp;gt; statement, records in which the &amp;lt;var&amp;gt;BY EACH&amp;lt;/var&amp;gt; field is multiply occurring are copied several times (once for each field occurrence) to the system scratch file CCATEMP.&lt;br /&gt;
In each copy, the occurrences of the &amp;lt;var&amp;gt;BY EACH&amp;lt;/var&amp;gt; field are rotated, so that the occurrence used as the sort key appears first. Therefore, a subscripted reference to this field can yield different values for different copies of the record. &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>Mlarocca</name></author>
	</entry>
	<entry>
		<id>https://m204wiki.rocketsoftware.com/index.php?title=Obsolete_features&amp;diff=71001</id>
		<title>Obsolete features</title>
		<link rel="alternate" type="text/html" href="https://m204wiki.rocketsoftware.com/index.php?title=Obsolete_features&amp;diff=71001"/>
		<updated>2014-08-01T13:40:23Z</updated>

		<summary type="html">&lt;p&gt;Mlarocca: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;===Statement numbers===&lt;br /&gt;
&amp;lt;p&amp;gt;This appendix describes certain features of User Language which, while still supported, are generally considered obsolete. They have been superseded by other, more efficient features or techniques. Rocket Software does not recommend using these features in newly written requests and procedures.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Rocket Software strongly recommends that you use statement labels (see [[Request composition rules#Statement labels|Statement labels]]) rather than statement numbers. Although statement numbers are still supported, this section is included primarily as documentation for applications developed using earlier releases 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;
====FOPT parameter====&lt;br /&gt;
&amp;lt;p&amp;gt;The setting of the FOPT (File Options) parameter determines whether procedures within a file must be labeled or numbered. For more information on the FOPT parameter, refer to the Rocket &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; Parameter and Command Reference Manual.      &amp;lt;/p&amp;gt;&lt;br /&gt;
====Rules for using statement numbers====&lt;br /&gt;
&amp;lt;p&amp;gt;The rules for specifying statement numbers in User Language statements are summarized below.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;A statement number is made up of the digits 0-9 and an optional period (.). The number must begin with a digit and cannot contain blanks, although blanks preceding or following it are optional.   &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;A statement number can start in any column up to but not including column INCCC.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Any statement can be numbered, but some statements must be numbered. In particular, a statement must be numbered if:&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;It immediately follows a STORE RECORD or a FIND statement, in which case the statement number indicates the end of the preceding statement.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;It is referred to by later statements. In most requests, COUNT RECORDS IN n, COUNT RECORD ON LIST m, NOTE, FIND, FOR EACH VALUE, and FOR EACH OCCURRENCE are referred to later and should therefore be numbered.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;It is the first statement after a loop, in which case a number is needed to indicate the end of the loop. An END statement following a loop does not require a number.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;It is the statement following a THEN or ELSE clause which is to be executed if the condition is false.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The retrieval conditions of a FIND statement, the subexpressions of an IF statement, and the fields of a STORE RECORD statement must not be numbered, even if they start new lines. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;A statement number can have any number of parts, which are delimited by periods. Thus, 2.3 and 0.1 are two part numbers, and 0.05.4 is a three part number. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;A period (.) following a statement number is optional, but the periods separating the parts are required. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;For example:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;1.1 &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;and&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;1.1. &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;are both legal and are interpreted as the same number. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;This rule also applies when referring to statements by number. Thus:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;FOR EACH RECORD IN 1. &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;and&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;FOR EACH RECORD IN 1 &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;refer to the same statement.   &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Any part of a statement number can be arbitrarily large. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The number of parts in a statement number must be the same as the level on which the statement is nested. For example, the following sequence is illegal because 2.1.1 has three parts but is nested at the second level:&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;2. FOR EACH RECORD IN 1&lt;br /&gt;
   2.1.1 PRINT ALL INFORMATION&lt;br /&gt;
&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;If a statement is not numbered, it is assigned a default level of nesting. The default level is the same as the level of the previous statement. If there is no previous statement, the default is the first level. If the previous statement starts a loop or a THEN, ELSE, or ELSEIF clause, or is a SUBROUTINE statement, the default level is one greater than the level of the previous statement.      &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Any part of a statement number can have leading zeros. However, a number with leading zeros is not equivalent to one without. Thus 01 and 1 are both legal but not equivalent; the same is true of 1.1 and 1.01.   &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Statements need not be numbered in sequential order. The statement number is just a label for the statement; its numerical value has no significance. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;The following, for instance, is a legal request:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;BEGIN&lt;br /&gt;
3.    FIND ALL RECORDS FOR WHICH&lt;br /&gt;
      COMPANY = ROCKET&lt;br /&gt;
1.    FOR EACH RECORD IN 3.&lt;br /&gt;
      3.1 PRINT ALL INFORMATION&lt;br /&gt;
2.6. SKIP 1 LINE&lt;br /&gt;
END&lt;br /&gt;
&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Within a request, statement numbers should be unique. If not, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; prints the message:&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;M204.0223: STATEMENT LABEL MULTIPLY DEFINED &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;This is a warning message; the request can still be run. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;A statement number followed by a label is allowed with or without a space between the number and the label. If a statement number is followed by a label and there is no space between them, User Language separates them into statement number and label. Although a statement number can be followed by a label, it is strongly recommended that you avoid placing statement numbers and labels on the same line. &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;b&amp;gt;Examples&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;The following request addresses an automated library card catalogue. Each record in the file contains information that would normally appear on a single card in the catalogue, such as AUTHOR, TITLE, SUBJECT, and CATALOGUE NUMBER.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;BEGIN&lt;br /&gt;
 1. FIND ALL RECORDS FOR WHICH&lt;br /&gt;
       AUTHOR = PAULING&lt;br /&gt;
 2. FOR EACH RECORD IN 1&lt;br /&gt;
    2.1 NOTE SUBJECT&lt;br /&gt;
    2.2 FIND ALL RECORDS FOR WHICH&lt;br /&gt;
        SUBJECT = VALUE IN 2.1&lt;br /&gt;
    2.3 FOR EACH RECORD IN 2.2&lt;br /&gt;
        2.3.1 PRINT TITLE&lt;br /&gt;
 3. COUNT RECORDS IN 1&lt;br /&gt;
    PRINT COUNT IN 3&lt;br /&gt;
END &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;The following request uses a subroutine to validate full-screen input entries. A screen named DATA is defined with input areas named ITEM6, ITEM7, etc. Values entered during the READ SCREEN statement are validated one at a time by subroutine 900. Each screen item is assigned to the argument variable %A before the subroutine is called. If the item fails the validation, the subroutine sets %TAG to a nonzero value before returning. The request sets a tag on the screen for each incorrect item. The REREAD statement is issued if a screen item fails the validity tests.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;BEGIN&lt;br /&gt;
SCREEN DATA&lt;br /&gt;
         .&lt;br /&gt;
         .&lt;br /&gt;
         .&lt;br /&gt;
END SCREEN&lt;br /&gt;
READ SCREEN DATA NO REREAD&lt;br /&gt;
      *VALIDATE DATA ITEMS&lt;br /&gt;
1.    %A = %DATA:ITEM6&lt;br /&gt;
      CALL 900&lt;br /&gt;
      IF %TAG THEN TAG %DATA:ITEM6&lt;br /&gt;
2.    %A = DATA:ITEM7&lt;br /&gt;
      CALL 900&lt;br /&gt;
         .&lt;br /&gt;
         .&lt;br /&gt;
         .&lt;br /&gt;
50.   IF $chktag(&#039;DATA&#039;) THEN&lt;br /&gt;
      REREAD SCREEN DATA&lt;br /&gt;
      JUMP TO 1&lt;br /&gt;
51.   *PROCESS DATA&lt;br /&gt;
         .&lt;br /&gt;
         .&lt;br /&gt;
         .&lt;br /&gt;
      *SUBROUTINE TO PERFORM VALIDATION BY TABLE LOOKUP&lt;br /&gt;
      * IN:       %A       VALUE&lt;br /&gt;
      * OUT:      %TAG     NONZERO IF INVALID&lt;br /&gt;
900.  SUBROUTINE&lt;br /&gt;
         .&lt;br /&gt;
         .&lt;br /&gt;
         .&lt;br /&gt;
END    &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===$DSCR function===&lt;br /&gt;
&amp;lt;p&amp;gt;The $DSCR function interprets its character string argument as a field name. It returns a variable-length character string describing the specified field. New application development should incorporate [[$FDef#$FDef|$FDef]] that supplanted the $DSCR function.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;The following discussion is provided to maintain existing code. Each letter in the returned string represents a particular field attribute. Attributes are listed in [[#$DSCR function|$DSCR function]].    &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;caption&amp;gt;$DSCR field attribute codes (file context)&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;Character&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Attribute&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;A&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;ORDERED CHARACTER&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;C&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;CODED&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;D&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;DEFERRABLE&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;F&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;FRV&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;I&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;INVISIBLE&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;K&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;KEY&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;L&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;LEVEL&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;M&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;MANY-VALUED&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;N&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;ORDERED NUMERIC&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;O&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;OCCURS&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;P&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;UPDATE IN PLACE&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;Q&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;UNIQUE&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;R&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;NUMERIC RANGE&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;S&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;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&amp;gt;T&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;FLOAT&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;&amp;lt;var&amp;gt;U&amp;lt;/var&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;var&amp;gt;Undefined&amp;lt;/var&amp;gt;&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;W&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;AT-MOST-ONE&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;How $DSCR works&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;When $DSCR is invoked in file context, the returned string represents the description of the specified field in the current file. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Each letter that appears in the return value corresponds to an attribute in the field description. For example, if K is one of the letters in the returned string, then the field is KEY. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;If a particular letter does not appear in the result of a $DSCR call, then either the corresponding attribute does not apply or the attribute&#039;s opposite is in effect. For example, if M (many-valued) does not appear, the field is NON-CODED and NON-FRV, in which case M does not apply, or it is FEW-VALUED. You can resolve this by looking for C and F in the returned string.     &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;When $DSCR is invoked in group context, the returned string represents a composite description of the field in all of the files of the current group. Some of the letters imply that the corresponding field attribute is present in all of the files in the group; others imply that the attribute is present in some (at least one) file in the group. If the field specified as the $DSCR argument is not defined in the current file or group, $DSCR returns the character string &amp;quot;U&amp;quot; (undefined). [[#$DSCR function|$DSCR function]] lists the individual letters and their meanings in group context. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;caption&amp;gt;$DSCR field attribute codes (group context)&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;Character&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Attribute&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;A&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;ORDERED CHARACTER in some&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;C&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;CODED in all&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;D&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;DEFERRABLE in some&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;F&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;FRV in some&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;I&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;INVISIBLE in all&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;K&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;KEY in all&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;L&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;LEVEL in some&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;M&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;MANY-VALUED in all&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;N&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;ORDERED NUMERIC in some&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;O&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;OCCURS in some&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;P&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;UPDATE IN PLACE in some&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;Q&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;UNIQUE in some&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;R&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;NUMERIC RANGE in all&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;S&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;STRING in all&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;T&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;FLOAT in some&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;W&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;AT-MOST-ONE in all&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;U&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Undefined&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;Example&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;This request determines the attributes of a field and performs one of three types of searches, depending on the results of $DSCR.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;BEGIN&lt;br /&gt;
             %A = $READ (&#039;FIELD NAME&#039;)&lt;br /&gt;
             %B = $READ (&#039;FIELD VALUE&#039;)&lt;br /&gt;
             %C = $DSCR (%A)&lt;br /&gt;
             IF %C EQ &#039;U&#039; THEN&lt;br /&gt;
                PRINT &#039;ILLEGAL FIELD&#039;&lt;br /&gt;
                JUMP TO STOP&lt;br /&gt;
             END IF&lt;br /&gt;
             *CHECK FOR NON-KEY&lt;br /&gt;
             IF $INDEX (%C, &#039;K&#039;) EQ 0 THEN&lt;br /&gt;
                JUMP TO NUM.RNG.CHK&lt;br /&gt;
             END IF&lt;br /&gt;
             FIND AND PRINT COUNT&lt;br /&gt;
                %%A = %B&lt;br /&gt;
             END FIND&lt;br /&gt;
             JUMP TO STOP&lt;br /&gt;
&lt;br /&gt;
             *CHECK FOR NUMERIC RANGE&lt;br /&gt;
NUM.RNG.CHK: IF $INDEX (%C, &#039;R&#039;) EQ 0 THEN&lt;br /&gt;
                JUMP TO ALL.RECS&lt;br /&gt;
             END IF&lt;br /&gt;
             FIND AND PRINT COUNT&lt;br /&gt;
                %%A IS %B&lt;br /&gt;
             END FIND&lt;br /&gt;
             JUMP TO STOP&lt;br /&gt;
             *NEITHER KEY FOR NUMERIC RANGE&lt;br /&gt;
ALL.RECS:    FIND ALL RECORDS&lt;br /&gt;
             END FIND&lt;br /&gt;
             FOR EACH RECORD IN ALL.RECS&lt;br /&gt;
                IF %%A = %B THEN&lt;br /&gt;
                   PLACE RECORD ON LIST OK&lt;br /&gt;
                END IF&lt;br /&gt;
             END FOR&lt;br /&gt;
OKS:         COUNT RECORDS ON LIST OK&lt;br /&gt;
             PRINT COUNT IN OKS&lt;br /&gt;
STOP:        END&lt;br /&gt;
END   &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:SOUL]]&lt;/div&gt;</summary>
		<author><name>Mlarocca</name></author>
	</entry>
	<entry>
		<id>https://m204wiki.rocketsoftware.com/index.php?title=$LstFld&amp;diff=71000</id>
		<title>$LstFld</title>
		<link rel="alternate" type="text/html" href="https://m204wiki.rocketsoftware.com/index.php?title=$LstFld&amp;diff=71000"/>
		<updated>2014-08-01T13:39:36Z</updated>

		<summary type="html">&lt;p&gt;Mlarocca: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;p&amp;gt;The $LSTFLD function returns field names in alphabetical order and the field description for each field in a file into an image. $LSTFLD requires that you have an image prepared with which &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; can create the field description. $LSTFLD works only for files (not groups).&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;The format for the $LSTFLD function is:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;%variable = $LSTFLD(&amp;lt;var&amp;gt;[&amp;lt;/var&amp;gt;FILE&amp;lt;var&amp;gt;]&amp;lt;/var&amp;gt; filename&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;var&amp;gt;[&amp;lt;/var&amp;gt;AT location&amp;lt;var&amp;gt;]&amp;lt;/var&amp;gt;,imagename,loopvar)&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;where:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;%variable is the %variable in which the return codes are stored. The return codes are:&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;Setting&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;Success&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;1&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;End of field list reached&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;Requested file not available, or is not open, or is not initialized&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;3&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;VTBL full or sort not available&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;4&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Error occurred during function 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;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;filename (required) is the name of the file that contains the fields. A file synonym name can also be used. If you do not enter a location, specifying a null argument, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; uses the reference context (at compile time) of the statement which calls the function. When filename=groupname the $LSTFLD function assumes that the name passed is a file name, not a group name.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;imagename (required) is the name of the image where the information is to return.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;loopvar (required) is the loop variable of the image. You must initialize the loop variable (as in the sample image shown with the $FDef function) before invoking $LSTFLD. The value returned in loopvar is used the next time $LSTFLD is invoked to retrieve subsequent field names. &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;b&amp;gt;Note&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Like $LSTPROC, changing any of the loop control information in the $LSTFLD loop variable after the image is initialized is not allowed and might cause the run to snap.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Locating the ZFIELD image&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;An image is required by the $FDef and $LSTFLD functions. The ZFIELD image is provided with the &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; installation. It can give you complete field attribute information; see the discussion on [[$FDef#$FDef|$FDef]]. The size of the name field for the ZFIELD image is 255 bytes. The location of ZFIELD for your site is listed in this 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;Operating system&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Storage location of the ZFIELD image&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;z/OS&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;The JCL library&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;z/VM&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;On the 193 MAINT204 disk as an EXEC&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;z/VSE&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;The JCL library&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;Example&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;In this example, the procedure DFIELDS displays the name and definition of each field in the file specified by %FILE.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;PROCEDURE DFIELDS&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;* include ZFIELD IMAGE as defined for $FDef      *&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;*&lt;br /&gt;
PRINT &#039;DFIELDS STARTS&#039;&lt;br /&gt;
%FILE = &#039;??FILE&#039;&lt;br /&gt;
NP&lt;br /&gt;
PREPARE ZFIELD&lt;br /&gt;
%ZFIELD:BIN1 = 0&lt;br /&gt;
%ZFIELD:BIN2 = 0&lt;br /&gt;
%ZFIELD:BIN3 = 0&lt;br /&gt;
%ZFIELD:BIN4 = 0&lt;br /&gt;
%X = 0&lt;br /&gt;
REPEAT WHILE %X = 0&lt;br /&gt;
   %X = $LSTFLD(%FILE,&#039;ZFIELD&#039;,%ZFIELD:LOOPVAR)&lt;br /&gt;
   IF %X = 0 THEN&lt;br /&gt;
     PRINT %ZFIELD:NAME&lt;br /&gt;
     PRINT %ZFIELD:FDEF&lt;br /&gt;
   END IF&lt;br /&gt;
END REPEAT&lt;br /&gt;
PRINT &#039;-- END OF FIELDS RC=&#039; %X&lt;br /&gt;
END&lt;br /&gt;
END PROCEDURE&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
[[Category:SOUL $functions]]&lt;/div&gt;</summary>
		<author><name>Mlarocca</name></author>
	</entry>
	<entry>
		<id>https://m204wiki.rocketsoftware.com/index.php?title=$LstFld&amp;diff=70999</id>
		<title>$LstFld</title>
		<link rel="alternate" type="text/html" href="https://m204wiki.rocketsoftware.com/index.php?title=$LstFld&amp;diff=70999"/>
		<updated>2014-08-01T13:37:35Z</updated>

		<summary type="html">&lt;p&gt;Mlarocca: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;p&amp;gt;The $LSTFLD function returns field names in alphabetical order and the field description for each field in a file into an image. $LSTFLD requires that you have an image prepared with which &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; can create the field description. $LSTFLD works only for files (not groups).&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;The format for the $LSTFLD function is:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;%variable = $LSTFLD(&amp;lt;var&amp;gt;[&amp;lt;/var&amp;gt;FILE&amp;lt;var&amp;gt;]&amp;lt;/var&amp;gt; filename&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;var&amp;gt;[&amp;lt;/var&amp;gt;AT location&amp;lt;var&amp;gt;]&amp;lt;/var&amp;gt;,imagename,loopvar)&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;where:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;%variable is the %variable in which the return codes are stored. The return codes are:&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;Setting&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;Success&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;1&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;End of field list reached&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;Requested file not available, or is not open, or is not initialized&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;3&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;VTBL full or sort not available&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;4&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Error occurred during function 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;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;filename (required) is the name of the file that contains the fields. A file synonym name can also be used. If you do not enter a location, specifying a null argument, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; uses the reference context (at compile time) of the statement which calls the function. When filename=groupname the $LSTFLD function assumes that the name passed is a file name, not a group name.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;imagename (required) is the name of the image where the information is to return.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;loopvar (required) is the loop variable of the image. You must initialize the loop variable (as in the sample image shown with the $Fdef function) before invoking $LSTFLD. The value returned in loopvar is used the next time $LSTFLD is invoked to retrieve subsequent field names. &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;b&amp;gt;Note&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Like $LSTPROC, changing any of the loop control information in the $LSTFLD loop variable after the image is initialized is not allowed and might cause the run to snap.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Locating the ZFIELD image&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;An image is required by the $Fdef and $LSTFLD functions. The ZFIELD image is provided with the &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; installation. It can give you complete field attribute information; see the discussion on [[$Fdef#$Fdef|$Fdef]]. The size of the name field for the ZFIELD image is 255 bytes. The location of ZFIELD for your site is listed in this 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;Operating system&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Storage location of the ZFIELD image&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;z/OS&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;The JCL library&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;z/VM&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;On the 193 MAINT204 disk as an EXEC&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;z/VSE&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;The JCL library&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;Example&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;In this example, the procedure DFIELDS displays the name and definition of each field in the file specified by %FILE.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;PROCEDURE DFIELDS&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;* include ZFIELD IMAGE as defined for $Fdef      *&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;*&lt;br /&gt;
PRINT &#039;DFIELDS STARTS&#039;&lt;br /&gt;
%FILE = &#039;??FILE&#039;&lt;br /&gt;
NP&lt;br /&gt;
PREPARE ZFIELD&lt;br /&gt;
%ZFIELD:BIN1 = 0&lt;br /&gt;
%ZFIELD:BIN2 = 0&lt;br /&gt;
%ZFIELD:BIN3 = 0&lt;br /&gt;
%ZFIELD:BIN4 = 0&lt;br /&gt;
%X = 0&lt;br /&gt;
REPEAT WHILE %X = 0&lt;br /&gt;
   %X = $LSTFLD(%FILE,&#039;ZFIELD&#039;,%ZFIELD:LOOPVAR)&lt;br /&gt;
   IF %X = 0 THEN&lt;br /&gt;
     PRINT %ZFIELD:NAME&lt;br /&gt;
     PRINT %ZFIELD:FDEF&lt;br /&gt;
   END IF&lt;br /&gt;
END REPEAT&lt;br /&gt;
PRINT &#039;-- END OF FIELDS RC=&#039; %X&lt;br /&gt;
END&lt;br /&gt;
END PROCEDURE&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
[[Category:SOUL $functions]]&lt;/div&gt;</summary>
		<author><name>Mlarocca</name></author>
	</entry>
	<entry>
		<id>https://m204wiki.rocketsoftware.com/index.php?title=Obsolete_features&amp;diff=70998</id>
		<title>Obsolete features</title>
		<link rel="alternate" type="text/html" href="https://m204wiki.rocketsoftware.com/index.php?title=Obsolete_features&amp;diff=70998"/>
		<updated>2014-08-01T13:36:05Z</updated>

		<summary type="html">&lt;p&gt;Mlarocca: /* $DSCR function */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;===Statement numbers===&lt;br /&gt;
&amp;lt;p&amp;gt;This appendix describes certain features of User Language which, while still supported, are generally considered obsolete. They have been superseded by other, more efficient features or techniques. Rocket Software does not recommend using these features in newly written requests and procedures.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Rocket Software strongly recommends that you use statement labels (see [[Request composition rules#Statement labels|Statement labels]]) rather than statement numbers. Although statement numbers are still supported, this section is included primarily as documentation for applications developed using earlier releases 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;
====FOPT parameter====&lt;br /&gt;
&amp;lt;p&amp;gt;The setting of the FOPT (File Options) parameter determines whether procedures within a file must be labeled or numbered. For more information on the FOPT parameter, refer to the Rocket &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; Parameter and Command Reference Manual.      &amp;lt;/p&amp;gt;&lt;br /&gt;
====Rules for using statement numbers====&lt;br /&gt;
&amp;lt;p&amp;gt;The rules for specifying statement numbers in User Language statements are summarized below.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;A statement number is made up of the digits 0-9 and an optional period (.). The number must begin with a digit and cannot contain blanks, although blanks preceding or following it are optional.   &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;A statement number can start in any column up to but not including column INCCC.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Any statement can be numbered, but some statements must be numbered. In particular, a statement must be numbered if:&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;It immediately follows a STORE RECORD or a FIND statement, in which case the statement number indicates the end of the preceding statement.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;It is referred to by later statements. In most requests, COUNT RECORDS IN n, COUNT RECORD ON LIST m, NOTE, FIND, FOR EACH VALUE, and FOR EACH OCCURRENCE are referred to later and should therefore be numbered.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;It is the first statement after a loop, in which case a number is needed to indicate the end of the loop. An END statement following a loop does not require a number.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;It is the statement following a THEN or ELSE clause which is to be executed if the condition is false.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The retrieval conditions of a FIND statement, the subexpressions of an IF statement, and the fields of a STORE RECORD statement must not be numbered, even if they start new lines. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;A statement number can have any number of parts, which are delimited by periods. Thus, 2.3 and 0.1 are two part numbers, and 0.05.4 is a three part number. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;A period (.) following a statement number is optional, but the periods separating the parts are required. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;For example:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;1.1 &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;and&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;1.1. &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;are both legal and are interpreted as the same number. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;This rule also applies when referring to statements by number. Thus:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;FOR EACH RECORD IN 1. &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;and&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;FOR EACH RECORD IN 1 &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;refer to the same statement.   &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Any part of a statement number can be arbitrarily large. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The number of parts in a statement number must be the same as the level on which the statement is nested. For example, the following sequence is illegal because 2.1.1 has three parts but is nested at the second level:&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;2. FOR EACH RECORD IN 1&lt;br /&gt;
   2.1.1 PRINT ALL INFORMATION&lt;br /&gt;
&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;If a statement is not numbered, it is assigned a default level of nesting. The default level is the same as the level of the previous statement. If there is no previous statement, the default is the first level. If the previous statement starts a loop or a THEN, ELSE, or ELSEIF clause, or is a SUBROUTINE statement, the default level is one greater than the level of the previous statement.      &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Any part of a statement number can have leading zeros. However, a number with leading zeros is not equivalent to one without. Thus 01 and 1 are both legal but not equivalent; the same is true of 1.1 and 1.01.   &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Statements need not be numbered in sequential order. The statement number is just a label for the statement; its numerical value has no significance. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;The following, for instance, is a legal request:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;BEGIN&lt;br /&gt;
3.    FIND ALL RECORDS FOR WHICH&lt;br /&gt;
      COMPANY = ROCKET&lt;br /&gt;
1.    FOR EACH RECORD IN 3.&lt;br /&gt;
      3.1 PRINT ALL INFORMATION&lt;br /&gt;
2.6. SKIP 1 LINE&lt;br /&gt;
END&lt;br /&gt;
&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Within a request, statement numbers should be unique. If not, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; prints the message:&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;M204.0223: STATEMENT LABEL MULTIPLY DEFINED &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;This is a warning message; the request can still be run. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;A statement number followed by a label is allowed with or without a space between the number and the label. If a statement number is followed by a label and there is no space between them, User Language separates them into statement number and label. Although a statement number can be followed by a label, it is strongly recommended that you avoid placing statement numbers and labels on the same line. &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;b&amp;gt;Examples&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;The following request addresses an automated library card catalogue. Each record in the file contains information that would normally appear on a single card in the catalogue, such as AUTHOR, TITLE, SUBJECT, and CATALOGUE NUMBER.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;BEGIN&lt;br /&gt;
 1. FIND ALL RECORDS FOR WHICH&lt;br /&gt;
       AUTHOR = PAULING&lt;br /&gt;
 2. FOR EACH RECORD IN 1&lt;br /&gt;
    2.1 NOTE SUBJECT&lt;br /&gt;
    2.2 FIND ALL RECORDS FOR WHICH&lt;br /&gt;
        SUBJECT = VALUE IN 2.1&lt;br /&gt;
    2.3 FOR EACH RECORD IN 2.2&lt;br /&gt;
        2.3.1 PRINT TITLE&lt;br /&gt;
 3. COUNT RECORDS IN 1&lt;br /&gt;
    PRINT COUNT IN 3&lt;br /&gt;
END &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;The following request uses a subroutine to validate full-screen input entries. A screen named DATA is defined with input areas named ITEM6, ITEM7, etc. Values entered during the READ SCREEN statement are validated one at a time by subroutine 900. Each screen item is assigned to the argument variable %A before the subroutine is called. If the item fails the validation, the subroutine sets %TAG to a nonzero value before returning. The request sets a tag on the screen for each incorrect item. The REREAD statement is issued if a screen item fails the validity tests.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;BEGIN&lt;br /&gt;
SCREEN DATA&lt;br /&gt;
         .&lt;br /&gt;
         .&lt;br /&gt;
         .&lt;br /&gt;
END SCREEN&lt;br /&gt;
READ SCREEN DATA NO REREAD&lt;br /&gt;
      *VALIDATE DATA ITEMS&lt;br /&gt;
1.    %A = %DATA:ITEM6&lt;br /&gt;
      CALL 900&lt;br /&gt;
      IF %TAG THEN TAG %DATA:ITEM6&lt;br /&gt;
2.    %A = DATA:ITEM7&lt;br /&gt;
      CALL 900&lt;br /&gt;
         .&lt;br /&gt;
         .&lt;br /&gt;
         .&lt;br /&gt;
50.   IF $chktag(&#039;DATA&#039;) THEN&lt;br /&gt;
      REREAD SCREEN DATA&lt;br /&gt;
      JUMP TO 1&lt;br /&gt;
51.   *PROCESS DATA&lt;br /&gt;
         .&lt;br /&gt;
         .&lt;br /&gt;
         .&lt;br /&gt;
      *SUBROUTINE TO PERFORM VALIDATION BY TABLE LOOKUP&lt;br /&gt;
      * IN:       %A       VALUE&lt;br /&gt;
      * OUT:      %TAG     NONZERO IF INVALID&lt;br /&gt;
900.  SUBROUTINE&lt;br /&gt;
         .&lt;br /&gt;
         .&lt;br /&gt;
         .&lt;br /&gt;
END    &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===$DSCR function===&lt;br /&gt;
&amp;lt;p&amp;gt;The $DSCR function interprets its character string argument as a field name. It returns a variable-length character string describing the specified field. New application development should incorporate [[$Fdef#$Fdef|$Fdef]] that supplanted the $DSCR function.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;The following discussion is provided to maintain existing code. Each letter in the returned string represents a particular field attribute. Attributes are listed in [[#$DSCR function|$DSCR function]].    &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;caption&amp;gt;$DSCR field attribute codes (file context)&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;Character&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Attribute&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;A&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;ORDERED CHARACTER&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;C&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;CODED&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;D&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;DEFERRABLE&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;F&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;FRV&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;I&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;INVISIBLE&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;K&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;KEY&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;L&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;LEVEL&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;M&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;MANY-VALUED&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;N&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;ORDERED NUMERIC&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;O&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;OCCURS&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;P&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;UPDATE IN PLACE&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;Q&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;UNIQUE&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;R&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;NUMERIC RANGE&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;S&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;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&amp;gt;T&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;FLOAT&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;&amp;lt;var&amp;gt;U&amp;lt;/var&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;var&amp;gt;Undefined&amp;lt;/var&amp;gt;&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;W&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;AT-MOST-ONE&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;How $DSCR works&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;When $DSCR is invoked in file context, the returned string represents the description of the specified field in the current file. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Each letter that appears in the return value corresponds to an attribute in the field description. For example, if K is one of the letters in the returned string, then the field is KEY. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;If a particular letter does not appear in the result of a $DSCR call, then either the corresponding attribute does not apply or the attribute&#039;s opposite is in effect. For example, if M (many-valued) does not appear, the field is NON-CODED and NON-FRV, in which case M does not apply, or it is FEW-VALUED. You can resolve this by looking for C and F in the returned string.     &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;When $DSCR is invoked in group context, the returned string represents a composite description of the field in all of the files of the current group. Some of the letters imply that the corresponding field attribute is present in all of the files in the group; others imply that the attribute is present in some (at least one) file in the group. If the field specified as the $DSCR argument is not defined in the current file or group, $DSCR returns the character string &amp;quot;U&amp;quot; (undefined). [[#$DSCR function|$DSCR function]] lists the individual letters and their meanings in group context. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;caption&amp;gt;$DSCR field attribute codes (group context)&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;Character&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Attribute&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;A&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;ORDERED CHARACTER in some&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;C&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;CODED in all&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;D&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;DEFERRABLE in some&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;F&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;FRV in some&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;I&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;INVISIBLE in all&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;K&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;KEY in all&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;L&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;LEVEL in some&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;M&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;MANY-VALUED in all&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;N&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;ORDERED NUMERIC in some&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;O&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;OCCURS in some&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;P&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;UPDATE IN PLACE in some&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;Q&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;UNIQUE in some&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;R&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;NUMERIC RANGE in all&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;S&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;STRING in all&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;T&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;FLOAT in some&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;W&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;AT-MOST-ONE in all&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;U&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Undefined&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;Example&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;This request determines the attributes of a field and performs one of three types of searches, depending on the results of $DSCR.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;BEGIN&lt;br /&gt;
             %A = $READ (&#039;FIELD NAME&#039;)&lt;br /&gt;
             %B = $READ (&#039;FIELD VALUE&#039;)&lt;br /&gt;
             %C = $DSCR (%A)&lt;br /&gt;
             IF %C EQ &#039;U&#039; THEN&lt;br /&gt;
                PRINT &#039;ILLEGAL FIELD&#039;&lt;br /&gt;
                JUMP TO STOP&lt;br /&gt;
             END IF&lt;br /&gt;
             *CHECK FOR NON-KEY&lt;br /&gt;
             IF $INDEX (%C, &#039;K&#039;) EQ 0 THEN&lt;br /&gt;
                JUMP TO NUM.RNG.CHK&lt;br /&gt;
             END IF&lt;br /&gt;
             FIND AND PRINT COUNT&lt;br /&gt;
                %%A = %B&lt;br /&gt;
             END FIND&lt;br /&gt;
             JUMP TO STOP&lt;br /&gt;
&lt;br /&gt;
             *CHECK FOR NUMERIC RANGE&lt;br /&gt;
NUM.RNG.CHK: IF $INDEX (%C, &#039;R&#039;) EQ 0 THEN&lt;br /&gt;
                JUMP TO ALL.RECS&lt;br /&gt;
             END IF&lt;br /&gt;
             FIND AND PRINT COUNT&lt;br /&gt;
                %%A IS %B&lt;br /&gt;
             END FIND&lt;br /&gt;
             JUMP TO STOP&lt;br /&gt;
             *NEITHER KEY FOR NUMERIC RANGE&lt;br /&gt;
ALL.RECS:    FIND ALL RECORDS&lt;br /&gt;
             END FIND&lt;br /&gt;
             FOR EACH RECORD IN ALL.RECS&lt;br /&gt;
                IF %%A = %B THEN&lt;br /&gt;
                   PLACE RECORD ON LIST OK&lt;br /&gt;
                END IF&lt;br /&gt;
             END FOR&lt;br /&gt;
OKS:         COUNT RECORDS ON LIST OK&lt;br /&gt;
             PRINT COUNT IN OKS&lt;br /&gt;
STOP:        END&lt;br /&gt;
END   &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:SOUL]]&lt;/div&gt;</summary>
		<author><name>Mlarocca</name></author>
	</entry>
	<entry>
		<id>https://m204wiki.rocketsoftware.com/index.php?title=Program_Communication_facilities&amp;diff=70987</id>
		<title>Program Communication facilities</title>
		<link rel="alternate" type="text/html" href="https://m204wiki.rocketsoftware.com/index.php?title=Program_Communication_facilities&amp;diff=70987"/>
		<updated>2014-07-31T19:49:15Z</updated>

		<summary type="html">&lt;p&gt;Mlarocca: /* Usage notes */&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;
&amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; provides facilities that allow a User Language request to communicate with user-written CICS programs, CMS EXECs, or SNA Communications Server (formerly VTAM) application programs. These facilities for program, or intersystem, communication (between &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; and another system &amp;amp;mdash; CICS or CMS &amp;amp;mdash; on the same machine or between &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; and another system on a different machine) are as follows:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;TPROCESS, or Terminal Process, a process-to-process communication facility in CICS and CMS &amp;amp;mdash; A request can identify a CICS program or CMS EXEC and trigger its execution. In addition, the User Language request can communicate with the CICS program or CMS EXEC.   &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Transfer Control &amp;amp;mdash; A request can identify a CICS program or SNA Communications Server application and transfer control to it. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Horizon===&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; also offers, as an optional feature, its distributed application facility, Horizon, which supports the LU 6.2 protocol of IBM&#039;s Systems Network Architecture (SNA). Horizon allows &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; applications to participate in program-to-program processing by communicating through SNA Communications Server with one or more other programs. Communication takes place over an SNA network, using verbs and protocols conforming to LU 6.2 architecture. Horizon uses User Language statements and &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; commands.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===BATCH2===&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; BATCH2 utility program enables you to pass a User Language request to a &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; Online that is running in a separate region, partition, or virtual machine. The BATCH2 connection emulates a line-by-line terminal. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Partner process definition===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
A partner process is the entity that is the object of program communication statements in a User Language request. For example, if a request transfers control to a CICS program, the CICS program is referred to as the partner process. Similarly, if a request communicates with a CMS REXX EXEC, the EXEC is referred to as the partner process.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
With Horizon, when a request communicates with another request that resides in a separate &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; Online, the initiating request is the client process, while the responding request is referred to as the server process.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Network entity definition===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Before a User Language request can participate in Program Communication, the network entities link, processgroup, and process must be defined by using the &amp;lt;var&amp;gt;[[DEFINE LINK command|DEFINE LINK]]&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;[[DEFINE PROCESSGROUP command|DEFINE PROCESSGROUP]]&amp;lt;/var&amp;gt;, and &amp;lt;var&amp;gt;[[DEFINE PROCESS command|DEFINE PROCESS]]&amp;lt;/var&amp;gt; commands.&lt;br /&gt;
Also, the defined link must be enabled by the &amp;lt;var&amp;gt;[[OPEN LINK command|OPEN LINK]]&amp;lt;/var&amp;gt; command. These commands can be issued only by a user with system manager privileges, or in the User 0 stream. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===TCP/IP Sockets Interface for Model 204===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The TCP/IP Sockets Interface for Model&amp;amp;nbsp;204 makes &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; a server or a client by writing a User Language application using calls that closely follow the Berkeley Socket Interface. The IBM programming interface comes with TCP/IP on your operating system; you can consult IBM documentation for more details.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
==TPROCESS (terminal process) communication==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The TPROCESS facility allows a User Language request &amp;quot;conversational&amp;quot; communication with a CICS program or CMS EXEC. This communication is achieved by using special statements, functions, and subcommands. User Language also allows some level of coordination of the use of the terminal by the request and the partner process.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The TPROCESS discussion that follows is divided into a section for each partner in a TPROCESS communication. The description of the User Language side of a TPROCESS communication begins in [[#User Language TPROCESS communication|User Language TPROCESS communication]]. CICS TPROCESS communication is discussed on [[#CICS TPROCESS communication|CICS TPROCESS communication]]. CMS TPROCESS communication is discussed on [[#CMS TPROCESS communication|CMS TPROCESS communication]].&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Sample programs for a TPROCESS communication between a CICS program and a User Language request begin on [[#CICS TPROCESS example|CICS TPROCESS example]]. Sample programs for a TPROCESS communication between a CMS EXEC and a User Language request begin on [[#CMS TPROCESS example|CMS TPROCESS example]]. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
TPROCESS applications cannot use the SECTRLOG trusted login option. Using trusted Login results in the following message:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;M204.1786: PROCESS-TO-PROCESS NOT SUPPORTED ON THIS THREAD&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
==User Language TPROCESS communication==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The discussion of the User Language part of a TPROCESS conversation is contained largely in the descriptions of the individual statements, which begin in [[#OPEN PROCESS statement|OPEN PROCESS statement]]. The statements are summarized in [[#User Language communication statements|User Language communication statements]]. Coordination of control of the conversation is described below.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Controlling the conversation===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
To use TPROCESS communication, the DEFINE LINK command must specify PROTOCOL=MASTER. This indicates that the User Language request controls, at every point in the conversation, whether the partner process can issue a send or receive operation. If the partner process issues a send or receive operation at a point when the User Language request issues the same operation, the partner process is informed that the operation is invalid. The User Language request is not informed that the partner process attempted the invalid operation. This is the sense in which the User Language request acts as the &amp;quot;master&amp;quot; in the conversation.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The SIGNAL operation can be used by either partner to interrupt the other. It does not affect the control of the conversation by the User Language request. It can be issued at any point in the conversation by either the User Language request or the partner process. The SIGNAL operation can be used to indicate that some part of the TPROCESS conversation has completed, for example, as an end-of-data flag after a stream of consecutive SENDs, or to communicate that some error condition has been encountered.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===User Language communication statements===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The User Language TPROCESS communication statements are summarized in [[#User Language communication statements|User Language communication statements]] and is discussed in detail on the pages that follow. Handling errors during statement processing is described in [[#Error handling for TPROCESS statements|Error handling for TPROCESS statements]].  &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;caption&amp;gt;TPROCESS User Language statements&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;Statement&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&amp;gt;CLOSE PROCESS&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Ends the conversation between the request and the partner process. &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;FLUSH PROCESS&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Supports increased router method independence in User Language.&amp;lt;/td&amp;gt;&lt;br /&gt;
&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 PROCESS&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Begins a conversation between a request and a partner process.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;RECEIVE &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Receives data from a partner process.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;SEND&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Transmits data from a request to a partner process.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;SIGNAL PROCESS&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Signals interruption of the conversation in process.&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;
===CLOSE PROCESS statement===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The CLOSE PROCESS statement ends the conversation between a User Language request and a partner process. &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 CLOSE PROCESS statement is:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;CLOSE PROCESS {cid | processname | %variable} &lt;br /&gt;
 [SYNCLEVEL | FLUSH | %variable]&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;cid refers to a conversation ID, and processname refers to a partner process defined in a DEFINE PROCESS command that must be open. This CID or process name can be provided as the value of a %variable.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;If no CID value is specified on the OPEN PROCESS statement, processname should be used. If a CID value is specified on the OPEN PROCESS, you also must specify that value here on the CLOSE statement.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;SYNCLEVEL, FLUSH, and %variable (used as the second parameter) have no effect, except to allow portability from one TRANSPORT/PROTOCOL combination to another (see the DEFINE LINK command). &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
After the CLOSE PROCESS statement is issued, the request can resume output to the terminal if the output was suppressed by the OPEN PROCESS statement. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===OPEN PROCESS statement===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The OPEN PROCESS statement begins a conversation between a User Language request and the partner process. &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 OPEN PROCESS statement is:    &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;OPEN PROCESS {processname | %variable}&lt;br /&gt;
  [CID {name | %variable}]&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;processname refers to a partner process defined in a DEFINE PROCESS command. The partner process name also can be provided as the value of a %variable.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;CID specifies the ID for use in subsequent User Language statements for the conversation. If CID is not given, the process name is used as the ID. CID must be specified if there are two or more active conversations with the same process name. And, if CID is specified, subsequent conversation statements must also specify the same CID value. &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 the DEFINE PROCESSGROUP command contains TERMINAL=REMOTE, the terminal is assumed to be under the partner&#039;s control, and any User Language terminal output, except error messages produced by the request, are discarded and cause the request to be cancelled. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If TERMINAL=LOCAL is specified, the terminal is assumed to be under control of the User Language request, and the partner program should not write to it.    &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===RECEIVE statement===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The RECEIVE statement receives data from a partner process. &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 RECEIVE statement is:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;RECEIVE {IMAGE imagename | %variable} &lt;br /&gt;
 FROM {cid | processname | %variable} &lt;br /&gt;
 [ERESULT %variable]&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;imagename specifies that the receiving area is an image previously defined by an image definition. The image automatically is set active by the RECEIVE statement.&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
This area also can be a %variable. The data received from the partner process is assumed to be in string form and is converted to the type of %variable.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;cid refers to a conversation ID, and processname refers to a partner process defined in a DEFINE PROCESS command that must be open. This CID or process name can be provided as the value of a %variable.&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If no CID value is specified on the OPEN PROCESS statement, processname should be used.   If a CID value is specified on the OPEN PROCESS, you also must specify that value here on the RECEIVE statement.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;RESULT returns the following values: &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;If $STATUS = 0, &amp;quot;Data complete&amp;quot; &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;If $STATUS = 1, &amp;quot;Data truncated&amp;quot; &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;If i$STATUS &amp;gt; 1, &amp;quot;Null&amp;quot; &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If the receiving area is not large enough to accommodate the data transmitted by the partner process, the following actions occur: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;If the receiving area is an image, truncation occurs. However, a warning message is not issued. This type of truncation is caused by one of the following conditions:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The full screen buffer area (that is, FSCB) is not large enough to accommodate the data; therefore, the excess data is lost. &lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Refer to [[Large request considerations#FSCB (full-screen buffer)|FSCB (full-screen buffer)]] for more information on its size requirements.&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;The data has been received into the full screen buffer area; however, the image defined is not large enough to receive the data.&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The %imagename:READLEN %variable can be checked to determine the actual length of the data to be received. The IDENTIFY statement with a larger image can be used to access all of the data. &amp;lt;/p&amp;gt;&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;If the receiving area is a %variable, truncation occurs.    &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===SEND statement===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The SEND statement initiates the transmission of data from a User Language request to a partner process. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Later in the conversation, the request can ensure that the partner process has successfully processed the data either by using a RECEIVE statement or by detecting (using the $STATUS function) a signal operation issued by the partner process. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Either of these synchronization methods can be used; however, the request and the partner process must agree on how synchronization is performed. &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 SEND statement is:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;SEND {IMAGE imagename |&#039;string&#039; | %variable} &lt;br /&gt;
 TO {cid | processname | %variable} &lt;br /&gt;
 [REQSENT %variable] [FLUSH]&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;imagename specifies that the object to be sent is an image previously defined by an image definition. The image must be set active by either the READ IMAGE, PREPARE, or IDENTIFY statement before it can be used by the SEND statement.&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The object also can be a quoted string or a %variable. A %variable is converted to string form (that is, the sequence of characters generated by a PRINT %variable statement) before being sent to the partner process.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;cid refers to a conversation ID, and processname refers to a partner process defined in a DEFINE PROCESS command that must be open. This CID or process name can be provided as the value of a %variable. &lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If no CID value is specified on the OPEN PROCESS statement, processname should be used. If a CID value is specified on the OPEN PROCESS, you also must specify that value here on the SEND statement.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;REQSEND and FLUSH allow portability from one TRANSPORT/PROTOCOL combination to another (see the DEFINE LINK command). REQSEND always returns a 0 for a TPROCESS conversation.  &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Truncation occurs and a warning message is issued if the data being sent exceeds the length (that is, the value of the DATALEN option) specified on the DEFINE PROCESS command.   &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===SIGNAL PROCESS statement===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The SIGNAL PROCESS statement provides a mechanism by which a request can signal an interruption of the conversation in process. &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 SIGNAL PROCESS statement is:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;SIGNAL PROCESS {cid | processname | %variable} {nnn | %variable}&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
Where:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;cid refers to a conversation ID, and processname refers to a partner process defined in a DEFINE PROCESS command that must be open. This CID or process name can be provided as the value of a %variable.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;If no CID value is specified on the OPEN PROCESS statement, processname should be used.   If a CID value is specified on the OPEN PROCESS, you also must specify that value here on the SIGNAL statement.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;n is an arbitrary number assigned to this SIGNAL. This number must be an integer in the range of -2,147,483,648 through +2,147,483,647 (a four-byte binary value). This number also can be provided as a %variable. If neither n nor a %variable is specified, a default value of 0 is used.  &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 SIGNAL PROCESS statement causes the next communication attempted by the partner process to be suppressed, and to return an indication that the signal occurred with the value sent by the SIGNAL PROCESS statement.   &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Error handling for TPROCESS statements===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Error conditions encountered during the processing of CLOSE PROCESS, OPEN PROCESS, RECEIVE, SEND, and SIGNAL PROCESS statements 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 automatically displayed on the terminal. The request should check for errors by using the $Status and $StatusD functions. You can retrieve the text of the most recently issued error message by using the $ERRMSG function.   &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If more than one error occurs during the processing of a statement, $Status, $StatusD, and $ERRMSG retain the error that has the highest level of severity. If multiple errors have the same (and highest) level of severity, $Status, $StatusD, and $ERRMSG retain the error that occurred the earliest.&lt;br /&gt;
For more information on these functions, refer to [[SOUL $functions]].&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The values returned by $Status are summarized in [[#Error handling for TPROCESS statements|Error handling for TPROCESS statements]].     &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;caption&amp;gt;$Status return values&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;Return&lt;br /&gt;
value&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Error&lt;br /&gt;
level&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;&lt;br /&gt;
Result/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;0&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Success&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;The message text set to null.&amp;lt;/td&amp;gt;&lt;br /&gt;
&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;Warning&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;The statement generating this code has completed, but a warning condition was encountered. $StatusD provides a detailed warning code.&amp;lt;/td&amp;gt;&lt;br /&gt;
&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;Signal&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
A SIGNAL has been received from the partner process.&lt;br /&gt;
The $StatusD function provides the SIGNAL value. If this code is received on a:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
SIGNAL statement, then the SIGNAL was transmitted to the partner process. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
SEND statement, the data transmitted was not received by the partner process and was discarded. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
RECEIVE statement, no data was received and the contents of the receiving area are unpredictable.&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;3&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;The User Language statement is invalid in this conversation state.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;4&lt;br /&gt;
or greater&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Serious Error&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;If this code is generated by a CLOSE PROCESS statement, then the CLOSE PROCESS functions have been completed to the greatest degree possible. Any other statement that generates this code did not complete at all. $StatusD provides a detailed error code.&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;
[[#Error handling for TPROCESS statements|Error handling for TPROCESS statements]] provides the message text returned by the $ERRMSG function, depending upon the values returned by the $Status and $StatusD functions.&lt;br /&gt;
For a detailed explanation of these messages, see the M204.xxxx descriptions in the&lt;br /&gt;
[http://www.rocketsoftware.com/m204/products/index/documentation/v7r4/Model-204-Messages/view Model 204 core messages],&lt;br /&gt;
where &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;xxxx&amp;lt;/var&amp;gt; is the $StatusD value.    &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;caption&amp;gt;$ERRMSG text per $Status / $StatusD&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;[[$Status]]&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;[[$StatusD]]&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Text returned by the $ERRMSG function&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 align=&amp;quot;right&amp;quot;&amp;gt;0&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Successful: Error message area set to null&amp;lt;/td&amp;gt;&lt;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 align=&amp;quot;right&amp;quot;&amp;gt;1785&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Data received has been truncated&amp;lt;/td&amp;gt;&lt;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 align=&amp;quot;right&amp;quot;&amp;gt;ANY&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;A SIGNAL has been received: Error message area is set to null&amp;lt;/td&amp;gt;&lt;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;3&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt;1254&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;User Language statement invalid in this conversation state&amp;lt;/td&amp;gt;&lt;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;4&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt;89&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;No I/O allowed on terminal while TPROCESS is in effect&amp;lt;/td&amp;gt;&lt;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;5&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt;1521&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Remote process does not exist or required access not authorized&amp;lt;/td&amp;gt;&lt;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;5&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt;1572&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Process xxxxxxxx is 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 align=&amp;quot;right&amp;quot;&amp;gt;5&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt;1746&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;PROCESS, PROCESSGROUP, or LINK not found&amp;lt;/td&amp;gt;&lt;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;5&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt;1786&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;TPROCESS not supported on this thread&amp;lt;/td&amp;gt;&lt;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;5&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt;1791&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Partner process will not accept defined protocol, mode, or terminal&amp;lt;/td&amp;gt;&lt;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;5&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt;1806&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Process not defined for transfer&amp;lt;/td&amp;gt;&lt;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;10&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt;1787&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;The defined TPROCESS buffer size is too large&amp;lt;/td&amp;gt;&lt;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;10&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt;1788&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Unable to allocate necessary TPROCESS data areas&amp;lt;/td&amp;gt;&lt;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;51&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt;1793&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Partner process 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;52&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt;1796&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;TPROCESS communications link has been 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 align=&amp;quot;right&amp;quot;&amp;gt;54&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt;1784&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Invalid TPROCESS status code&amp;lt;/td&amp;gt;&lt;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;54&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt;1789&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Invalid TPROCESS message&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;
==CICS TPROCESS communication==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Program communication functions in CICS are invoked with calls: the calls IFRECV, IFSENDX, and IFSGNL are used to communicate with the User Language request. IFPREP is used to set and query session parameters. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
CICS TPROCESS support requirements are described below. The rest of the CICS TPROCESS discussion contains a summary and then individual descriptions of the CICS TPROCESS calls, followed on [[#CICS TPROCESS example|CICS TPROCESS example]] by a sample CICS conversation program.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Support required for CICS TPROCESS===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
In the discussion in this section, it is assumed that the user is accessing &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; through the CICS full screen interface (IODEV=11). The data set or file definition statements for &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; files that are accessed by CICS applications are included in the JCL for the &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; region, not the CICS region.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
In order for the CICS program to communicate with the request, the program, as identified by the DEFINE PROCESS command and invoked by the OPEN PROCESS statement, must be link-edited with the IFPPCI module. IFPPCI must be preprocessed and assembled at installation time. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The pseudo conversational CICS support provided for 3270 full screen interface transactions that is used in TPROCESS communications requires that the M204PSFS module must be also preprocessed and assembled at installation time. This allows a User Language request to initiate terminal I/O in conversational mode with a CICS partner program.   &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
M204PSFS, the CICS full screen interface module, must have a TWA defined.&lt;br /&gt;
For more information about the &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; CICS full screen interface, see the&lt;br /&gt;
Rocket Model 204 Installation Guide for your operating system. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
==CICS TPROCESS calls==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The IFPPCI module, described further in the &amp;lt;var class=&amp;quot;book&amp;quot;&amp;gt;Rocket Model 204 Installation Guide for IBM z/OS&amp;lt;/var&amp;gt;, has five entry points that can be called by the CICS program.&lt;br /&gt;
The entry points, and the functions they provide, are summarized in [[#CICS TPROCESS calls|CICS TPROCESS calls]]. Each call is discussed in greater detail on the pages that follow. The notation conventions used for the individual call descriptions are discussed below.       &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;caption&amp;gt;CICS TPROCESS calls&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;Call&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&amp;gt;IFCSA&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Prior to &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; V3R1, passed the address of the Common System Area (CSA) to the CICS Interface. As of V3R1, the IFCSA call does not function, but is not upwardly incompatible.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;IFPREP&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Allows the CICS program to set session defaults and retrieve information regarding the TPROCESS conversation.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;IFRECV&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Receives data from the User Language 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;IFSEND&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Sends data to the User Language 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;IFSGNL&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Signals the User Language request, interrupting the conversation.&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;
===Notation conventions for CICS call descriptions===&lt;br /&gt;
 &lt;br /&gt;
====Call name and syntax====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The syntax of calls is presented in this format:&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;callname&amp;lt;/span&amp;gt;|&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;alias&amp;lt;/span&amp;gt; (&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;parm1, parm2,...parmn&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;/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;term&amp;quot;&amp;gt;callname&amp;lt;/var&amp;gt; is a keyword that specifies the name of the function. &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;parm1&amp;lt;/var&amp;gt; is the first parameter in the call list. You must specify parameters in the proper sequence, as shown (&amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;parm2&amp;lt;/var&amp;gt; follows &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;parm1&amp;lt;/var&amp;gt;; &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;parmn&amp;lt;/var&amp;gt; is last). &lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
A comma delimiter (&amp;lt;tt&amp;gt;,&amp;lt;/tt&amp;gt;) separates parameters in the list, and the entire parameter list is enclosed inside parentheses, for illustrative purposes only. (When coding calls, use whatever delimiter and format that are valid in your programming language.)   &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;
====Parameters====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Each parameter description provides a three-character code having the following format:   &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;[X,&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;y&amp;lt;/span&amp;gt;,&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;z&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;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;X specifies that the parameter is used for input or output operations, and is either of the following codes: &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;I (input) &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;O (output) &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;y&amp;lt;/var&amp;gt; specifies that the parameter, if coded, must be defined in the host language program as one of three possible data type variables, and is one of the following codes:    &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;i (integer whose maximum length is 4 bytes) &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;s (short character string whose maximum length is 32 bytes) &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;c (character string whose maximum length is the buffer size)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;z&amp;lt;/var&amp;gt; specifies whether the parameter must be coded in the call, and is either (or both) of the following codes:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;r (required)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;o (optional) &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;
====Example====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
For example, RETCODE [O,i,r] where:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;O specifies that RETCODE is an output parameter&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;i specifies an integer type variable (maximum length is 4 bytes) &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;r specifies that RETCODE is required&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Individual call descriptions===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The individual CICS TPROCESS calls are described on the pages that follow. The completion codes and corresponding completion detail values for the calls are summarized in [[#CICS completion codes|CICS completion codes]]. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===IFCSA===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
As of &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; Version 3.1 and later, the IFCSA call is no longer required in IFAM2 programs, as it no longer performs a function. For purposes of upward compatibility the IFCSA call can remain in your current programs. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Prior to &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; Version 3.1, the IFCSA call was required to be the first call issued during the IFAM2 session. The IFCSA call passed the Common System Area (CSA) address. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===IFPREP===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The IFPREP call prepares the session for TPROCESS communications. IFPREP enables your CICS program to set session defaults and retrieve information on a TPROCESS conversation.       &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 IFPREP call is:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;IFPREP(RETCODE,RC_DETAIL,PROCESS_ID,LANG_IND,DATA_LEN)&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Parameters====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Specify the parameters in the syntax order shown above. &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;Parameter &amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Discussion&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;RETCODE&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;[O,i,r] The &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; return code is a required output parameter. The code is a binary integer value. [[#CICS completion codes|CICS completion codes]] displays all the CICS TPROCESS return codes.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;RC_DETAIL&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;[O,i,r] The return code detail is a required output parameter. The code is a binary integer value. &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; returns a second level code which indicates the status of the TPROCESS conversation. &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;PROCESS_ID&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;[O,i,r] The process identifier is a required output parameter. Specify an integer variable. &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; returns a value that must be referenced in subsequent IFSEND, IFRECV, and IFSGNL calls to transmit data in TPROCESS applications. &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;LANG_IND&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
[I,i,r] The language indicator is a required input parameter which establishes the calling sequence convention to be used corresponding to the host language. The indicator specifies the format of arguments that are passed in subsequent calls. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Specify one of the following integer values: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
1  - PL/I F-level, and BAL languages &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
2  - COBOL, Fortran, and BAL languages &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
3  - PL/I with + Optimizer / Checkout compilers, VS/Fortran, and BAL languages &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Any convention can be specified for use with the BAL language, and the BAL programmer must adhere to the convention that is specified when coding arguments.&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;DATA_LEN&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;[O,i,r] The data length is a required output parameter. Specify an integer value. &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; returns the value of the DATALEN parameter in the DEFINE PROCESS command.&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;
====Notes and tips====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
IFPREP must be called before the IFSEND, IFRECV, or IFSGNL calls. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Completion codes (RETCODE) applicable====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The completion codes that apply to the IFPREP call 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;td align=&amp;quot;right&amp;quot;&amp;gt;0&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; Successful&amp;lt;/td&amp;gt;&lt;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;4&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; Error. Refer to [[#CICS completion codes|CICS completion codes]]. &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;
===IFRECV===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
IFRECV enables the CICS program to receive a data stream from its partner, the User Language request.&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 for the IFRECV call is:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;IFRECV(RETCODE,RC_DETAIL,PROCESS_ID,DATA_AREA,DATA_LEN)&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Parameters====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Specify the parameters in the syntax order shown above.&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;Parameter &amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Discussion&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;RETCODE&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;[O,i,r] The &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; return code is a required output parameter. The code is a binary integer value. [[#CICS completion codes|CICS completion codes]] displays all the CICS TPROCESS return codes. &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;RC_DETAIL&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;[O,i,r] The return code detail is a required output parameter. The code is a binary integer value. &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; returns a second level code which, indicates the status of the TPROCESS conversation. &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;PROCESS_ID&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;[I,i,r] The process identifier is a required input parameter. Specify an integer variable, the value that is returned by &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; in the preceding IFPREP call.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;DATA_AREA&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;[O,c,r] The data area is a required output parameter which specifies the address of the user&#039;s data area. Specify a character string variable. This area receives the data stream that is sent by the User Language request to the HLI program. &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;DATA_LEN&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;[I,i,r] The data length is a required input parameter if the language indicator parameter (LANG_IND) setting is 2 (COBOL, Fortran, BAL) in the preceding IFPREP call. Specify an integer value, the length of the receiving area. &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; returns the value which is the actual length of the data that was moved into the receiving area. &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 class=&amp;quot;note&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Note:&amp;lt;/b&amp;gt; The data area length is optional if the language indicator parameter (LANG_IND) setting is 1 or 3 (PL/I, VS/Fortran, BAL) in the preceding IFPREP call. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Notes and tips====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Use the IFRECV call to receive data from a User Language request in a CICS TPROCESS conversation. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Completion codes (RETCODE) applicable====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The completion codes that apply to the IFRECV call 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;td align=&amp;quot;right&amp;quot;&amp;gt; 0&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Successful&amp;lt;/td&amp;gt;&lt;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;Warning&amp;lt;/td&amp;gt;&lt;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;No data was received and the contents of the data area and data area length&lt;br /&gt;
arguments are unpredictable.&amp;lt;/td&amp;gt;&lt;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; 4&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Error. Refer to [[#CICS completion codes|CICS completion codes]].&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;
===IFSEND===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
IFSEND enables the CICS program to send a data stream to its partner, the User Language request. &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 IFSEND call is:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;IFSEND(RETCODE,RC_DETAIL,PROCESS_ID,DATA_AREA,DATA_LEN)&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Parameters====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Specify the parameters in the syntax order shown above.&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;Parameters &amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Discussion&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;RETCODE&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;[O,i,r] The &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; return code is a required output parameter. The code is a binary integer value. [[#CICS completion codes|CICS completion codes]] displays all the CICS TPROCESS return codes. &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;RC_DETAIL&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;[O,i,r] The return code detail is a required output parameter. The code is a binary integer value. &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; returns a second level code which indicates the status of the TPROCESS conversation. &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;PROCESS_ID&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;[I,i,r] The process identifier is a required input parameter. Specify an integer variable, the value that is returned by &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; in the preceding IFPREP call. &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;DATA_AREA&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;[O,c,r] The data area is a required output parameter which specifies the address of the user&#039;s data area. Specify a character string variable. This area receives the data stream that is sent by the User Language request to the HLI program. &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;DATA_LEN&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;[I,i,r] The data length is a required input parameter if the language indicator parameter (LANG_IND) setting is 2 (COBOL, Fortran, BAL) in the preceding IFPREP call. Specify an integer value, the length of the receiving area. &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; returns the value which is the actual length of the data that was moved into the receiving area. &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 class=&amp;quot;note&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Note:&amp;lt;/b&amp;gt; The data area length is optional if the language indicator parameter (LANG_IND) setting is 1 or 3 (PL/I, VS/Fortran, BAL) in the preceding IFPREP call. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Notes and tips====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Use the IFSEND call to send data to a User Language request in a CICS TPROCESS conversation.   &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Completion codes (RETCODE) applicable====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The completion codes that apply to the IFSEND call 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;td align=&amp;quot;right&amp;quot;&amp;gt;0&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Successful&amp;lt;/td&amp;gt;&lt;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;Warning&amp;lt;/td&amp;gt;&lt;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;Signal received. The data specified in the data area argument was not transmitted.&amp;lt;/td&amp;gt;&lt;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;4&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Error. Refer to [[#CICS completion codes|CICS completion codes]].&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;
===IFSGNL===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
IFSGNL enables your CICS program to send a signal to its partner, the User Language request. The signal causes the next communication attempted by the request to complete with $STATUS set to 2 and $STATUSD set to the value passed to the IFSGNL call. &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 IFSGNL call is:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;IFSGNL(RETCODE,RC_DETAIL,PROCESS_ID,SGNL_VAL)&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Parameters====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Specify the parameters in the syntax order shown above. &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;Parameters &amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Discussion&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;RETCODE&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;[O,i,r] The &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; return code is a required output parameter. The code is a binary integer value. [[#CICS completion codes|CICS completion codes]] displays all the CICS TPROCESS return codes.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;RC_DETAIL&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;[O,i,r] The return code detail is a required output parameter. The code is a binary integer value. &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; returns a second level code which indicates the status of the TPROCESS conversation. &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;PROCESS_ID&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;[I,i,r] The process identifier is a required input parameter. Specify an integer variable, the value that is returned by &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; in the preceding IFPREP call.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;SGNL_VAL&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;[I,i,o] The signal value is an optional input parameter. Specify a fullword binary value in the range -2,147,483,648 through +2,147,483,647. If the signal value is not specified, it defaults to 0.&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;
====Notes and tips====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Use the IFSGNL call to signal the User Language request in a CICS TPROCESS conversation. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===CICS completion codes===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
[[#CICS completion codes|CICS completion codes]] describes the completion codes and corresponding completion detail values for the IFPREP, IFRECV, IFSEND, and IFSGNL calls. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;caption&amp;gt;TPROCESS completion codes&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;Code&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Completion detail value&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 align=&amp;quot;right&amp;quot;&amp;gt;0&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;For the current release, the value is always zero.&amp;lt;/td&amp;gt;&lt;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 align=&amp;quot;right&amp;quot;&amp;gt;11&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If the call was IFSEND, the call is truncated before transmission.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If the call was IFRECV, the data is truncated during receipt.&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 align=&amp;quot;right&amp;quot;&amp;gt;2&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt;ANY&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;This argument is equal to the signal value specified by the User Language request. It can be an integer between -2,147,483,648 and 2,147,483,647.&amp;lt;/td&amp;gt;&lt;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;3&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;(reserved for future use)&amp;lt;/td&amp;gt;&lt;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;4&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;There is a severe error.&amp;lt;/td&amp;gt;&lt;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;4&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt;10&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;CRAM/IUCV link 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 align=&amp;quot;right&amp;quot;&amp;gt;4&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt;11&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Remote process active upon detachment.&amp;lt;/td&amp;gt;&lt;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;4&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt;12&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;No data received. Call IFSEND to transmit data.&lt;br /&gt;
The contents of the data area and the data area length are unpredictable.&amp;lt;/td&amp;gt;&lt;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;4&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt;13&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;No data sent. Call IFRECV to receive data.&amp;lt;/td&amp;gt;&lt;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;4&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt;100&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;User Language request issued a CLOSE PROCESS statement.&amp;lt;/td&amp;gt;&lt;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;4&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt;102&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Connection error.&amp;lt;/td&amp;gt;&lt;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;4&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt;200&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Not enough memory to allocate IFCB.&amp;lt;/td&amp;gt;&lt;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;4&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt;201&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;IFPREP has not been called.&amp;lt;/td&amp;gt;&lt;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;4&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt;202&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Not enough arguments were passed.&amp;lt;/td&amp;gt;&lt;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;4&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt;301&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Syntax error encountered in CMS Host Language Interface subcommand. Subcommand ignored.&amp;lt;/td&amp;gt;&lt;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;4&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt;302&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Error assigning a value to variable while processing an IFRECV command. Data discarded.&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;
==CICS TPROCESS example==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
In this example, the User Language request communicates with a CICS program using the SEND and RECEIVE statements. The request sends two numbers to the CICS program. The CICS program adds the numbers together and sends the sum back to the User Language request. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;DEFINE LINK LK4CICS WITH SCOPE=SYSTEM              -&lt;br /&gt;
                         TRANSPORT=TERMINAL        -&lt;br /&gt;
                         PROTOCOL=MASTER&lt;br /&gt;
DEFINE PROCESSGROUP PGP4CICS WITH SCOPE=SYSTEM     -&lt;br /&gt;
                                  LINK=LK4CICS     -&lt;br /&gt;
                                  TERMINAL=LOCAL&lt;br /&gt;
DEFINE PROCESS PS4CICS WITH SCOPE=SYSTEM           -&lt;br /&gt;
                            DESTINATION=PGP4CICS   -&lt;br /&gt;
                            PARTNER=PARTNER        -&lt;br /&gt;
                            DATALEN=100            -&lt;br /&gt;
                            MODE=LINK&lt;br /&gt;
OPEN LINK LK4CICS&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
  BEGIN&lt;br /&gt;
  SCREEN SCR1&lt;br /&gt;
  MAX PFKEY 12&lt;br /&gt;
  TITLE &#039;CP PROCESS-TO-PROCESS EXAMPLE&#039; AT 12 BRIGHT&lt;br /&gt;
  SKIP 2 LINES&lt;br /&gt;
  PROMPT &#039;INPUT TWO NUMBERS, TO BE TRANSMITTED -&lt;br /&gt;
          TO THE CICS&#039;&lt;br /&gt;
  PROMPT &#039;PARTNER PROCESS WHICH WILL RETURN THE -&lt;br /&gt;
          VALUE OF THE SUM&#039;&lt;br /&gt;
  SKIP 2 LINES&lt;br /&gt;
  PROMPT &#039;INPUT FIRST VALUE :&#039; AT 12 INPUT -&lt;br /&gt;
          VAL1 LEN 4 NUMERIC&lt;br /&gt;
  PROMPT &#039;INPUT SECOND VALUE :&#039; AT 12 INPUT VAL2 -&lt;br /&gt;
          LEN 4 NUMERIC&lt;br /&gt;
  SKIP 2 LINES&lt;br /&gt;
  PROMPT &#039;ENTER X TO STOP RUN:&#039; AT 12 INPUT EOJ LEN 1&lt;br /&gt;
  END SCREEN&lt;br /&gt;
  *&lt;br /&gt;
  IMAGE IMG1&lt;br /&gt;
       VALUE1 IS ZONED LEN 4 UNSIGNED&lt;br /&gt;
       VALUE2 IS ZONED LEN 4 UNSIGNED&lt;br /&gt;
       FILLER IS STRING LEN 72&lt;br /&gt;
  END IMAGE&lt;br /&gt;
  *&lt;br /&gt;
 &lt;br /&gt;
    IMAGE IMG2&lt;br /&gt;
       VALUE1 IS ZONED LEN 5 UNSIGNED&lt;br /&gt;
       FILLER IS STRING LEN 75&lt;br /&gt;
  END IMAGE&lt;br /&gt;
  *&lt;br /&gt;
 &lt;br /&gt;
    PREPARE IMAGE IMG1&lt;br /&gt;
  PREPARE IMAGE IMG2&lt;br /&gt;
  *&lt;br /&gt;
  OPEN PROCESS PS4CICS&lt;br /&gt;
  IF $STATUS GT 1 THEN&lt;br /&gt;
  PRINT &#039;OPEN PROCESS FAILED, $STATUSD =&#039; AND $STATUSD AND $ERRMSG&lt;br /&gt;
  JUMP TO STOP.RUN&lt;br /&gt;
  END IF&lt;br /&gt;
  *&lt;br /&gt;
  MAIN.LOOP:&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
  *&lt;br /&gt;
  READ SCREEN SCR1&lt;br /&gt;
  %IMG1:VALUE1 = %SCR1:VAL1&lt;br /&gt;
  %IMG1:VALUE2 = %SCR1:VAL2&lt;br /&gt;
  *&lt;br /&gt;
  IF %SCR1:EOJ EQ &#039;X&#039; THEN&lt;br /&gt;
  JUMP TO STOP.RUN&lt;br /&gt;
  END IF&lt;br /&gt;
  *&lt;br /&gt;
  SEND IMAGE IMG1 TO PS4CICS&lt;br /&gt;
  IF $STATUS GT 1 THEN&lt;br /&gt;
  PRINT &#039;SEND FAILED, $STATUSD =&#039; AND -&lt;br /&gt;
       $STATUSD AND $ERRMSG&lt;br /&gt;
  JUMP TO STOP.RUN&lt;br /&gt;
  END IF&lt;br /&gt;
  *&lt;br /&gt;
  RECEIVE IMAGE IMG2 FROM PS4CICS&lt;br /&gt;
  IF $STATUS GT 1 THEN&lt;br /&gt;
  PRINT &#039;RECEIVE FAILED, $STATUSD =&#039; AND -&lt;br /&gt;
         $STATUSD AND $ERRMSG&lt;br /&gt;
  JUMP TO STOP.RUN&lt;br /&gt;
  END IF&lt;br /&gt;
  *&lt;br /&gt;
  PRINT &#039;THE VALUE RETURNED IS&#039; AND %IMG2:VALUE1&lt;br /&gt;
  *&lt;br /&gt;
  JUMP TO MAIN.LOOP&lt;br /&gt;
  *&lt;br /&gt;
  STOP.RUN:&lt;br /&gt;
  *&lt;br /&gt;
  CLOSE PROCESS PS4CICS&lt;br /&gt;
  PRINT &#039;END OF SAMPLE CP PROGRAM&#039;&lt;br /&gt;
  END&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===CICS partner===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The following sample CICS program could communicate with the above User Language request to perform the addition operation and send back the sum to the request.&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;*********************************************&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;* THIS IS AN EXAMPLE OF A CICS &#039;PARTNER PROCESS&#039;&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;* PROGRAM.&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;* ITS PURPOSE IS TO PROVIDE A SKELETON, FROM WHICH A MORE&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;* COMPLEX PROGRAM CAN BE DEVELOPED.&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;* THE LOGIC OF THIS PROGRAM IS AS FOLLOWS:&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;* 1) RECEIVE A MESSAGE FROM THE USER LANGUAGE PARTNER.&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;*    THIS MESSAGE CONTAINS 2 NUMBERS.&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;* 2) ADD THESE NUMBERS TOGETHER&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;* 3) SEND A MESSAGE TO THE USER LANGUAGE PARTNER THAT&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;*    CONTAINS THE SUM.&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;* 4) CONTINUE THIS LOOP (STEP 1 THRU 3) UNTIL THE USER&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;*    LANGUAGE PARTNER CLOSES THE CONVERSATION.&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;**********************************************&lt;br /&gt;
    EJECT&lt;br /&gt;
 IDENTIFICATION DIVISION.&lt;br /&gt;
 PROGRAM-ID. PARTNER.&lt;br /&gt;
 &lt;br /&gt;
 ENVIRONMENT DIVISION.&lt;br /&gt;
 INPUT-OUTPUT SECTION.&lt;br /&gt;
 &lt;br /&gt;
 DATA DIVISION.&lt;br /&gt;
 WORKING-STORAGE SECTION.&lt;br /&gt;
 &lt;br /&gt;
 01  CONTROL-FLAGS.&lt;br /&gt;
     05  EOJ-FLAG           PIC X(01) VALUE &#039;N&#039;.&lt;br /&gt;
 &lt;br /&gt;
 01  CALL-PARAMETER-AREA.&lt;br /&gt;
     05  COMPLETION-CODE    PIC S9(05) VALUE +0 COMP.&lt;br /&gt;
     05  COMPLETION-DETAIL  PIC S9(05) VALUE +0 COMP.&lt;br /&gt;
     05  LANGUAGE-INDICATOR PIC S9(05) VALUE +2 COMP.&lt;br /&gt;
     05  PROCESS-IDENTIFIER PIC S9(05) VALUE +0 COMP.&lt;br /&gt;
     05  DATA-LENGTH        PIC S9(05) VALUE +0 COMP.&lt;br /&gt;
 &lt;br /&gt;
 01  RECV-AREA-LENGTH       PIC S9(05) VALUE +80 COMP.&lt;br /&gt;
 01  RECV-AREA.&lt;br /&gt;
     05  RECV-VALUE-1       PIC 9(04) VALUE 0.&lt;br /&gt;
     05  RECV-VALUE-2       PIC 9(04) VALUE 0.&lt;br /&gt;
     05  FILLER             PIC X(72) VALUE SPACES.&lt;br /&gt;
 &lt;br /&gt;
 01  SEND-AREA-LENGTH       PIC S9(05) VALUE +80 COMP.&lt;br /&gt;
 01  SEND-AREA.&lt;br /&gt;
     05  SEND-VALUE         PIC 9(05) VALUE 0.&lt;br /&gt;
     05  FILLER             PIC X(75) VALUE SPACES.&lt;br /&gt;
 &lt;br /&gt;
 LINKAGE SECTION.&lt;br /&gt;
 &lt;br /&gt;
 01  LINKAGE-POINTERS USAGE COMP.&lt;br /&gt;
     05  FILLER             PIC S9(08).&lt;br /&gt;
 &lt;br /&gt;
 PROCEDURE DIVISION.&lt;br /&gt;
 &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;* MAINLINE ROUTINE&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;****************************************&lt;br /&gt;
 &lt;br /&gt;
     PERFORM 100-INITIALIZE THRU 100-EXIT.&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;** **  (TO MAKE PROGRAM LOOP UNTIL &amp;quot;X&amp;quot; IS ENTERED ON SCREEN) **&lt;br /&gt;
     PERFORM 200-MAIN-LOOP THRU 200-EXIT&lt;br /&gt;
       UNTIL EOJ-FLAG = &#039;Y&#039;.&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;** ** PERFORM 200-MAIN-LOOP THRU 200-EXIT.&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;**&lt;br /&gt;
 &lt;br /&gt;
     EXEC CICS RETURN&lt;br /&gt;
     END-EXEC.&lt;br /&gt;
 &lt;br /&gt;
     GOBACK.&lt;br /&gt;
 &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;* SUB-ROUTINES USED IN MAINLINE&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;*****************************************&lt;br /&gt;
 &lt;br /&gt;
 100-INITIALIZE.&lt;br /&gt;
 &lt;br /&gt;
     MOVE &#039; &#039; TO EOJ-FLAG.&lt;br /&gt;
     EXEC CICS ENTER TRACEID(001) END-EXEC.&lt;br /&gt;
     MOVE 2 TO LANGUAGE-INDICATOR.&lt;br /&gt;
     EXEC CICS ENTER TRACEID(002) END-EXEC.&lt;br /&gt;
     CALL &#039;IFPREP&#039; USING COMPLETION-CODE&lt;br /&gt;
                         COMPLETION-DETAIL&lt;br /&gt;
                         PROCESS-IDENTIFIER&lt;br /&gt;
                         LANGUAGE-INDICATOR&lt;br /&gt;
                         DATA-LENGTH.&lt;br /&gt;
 &lt;br /&gt;
     IF COMPLETION-CODE &amp;gt; 1&lt;br /&gt;
       MOVE &#039;Y&#039; TO EOJ-FLAG.&lt;br /&gt;
 &lt;br /&gt;
 100-EXIT. EXIT.&lt;br /&gt;
 &lt;br /&gt;
 200-MAIN-LOOP.&lt;br /&gt;
 &lt;br /&gt;
     EXEC CICS ENTER TRACEID(003) END-EXEC.&lt;br /&gt;
     CALL &#039;IFRECV&#039; USING COMPLETION-CODE&lt;br /&gt;
                         COMPLETION-DETAIL&lt;br /&gt;
                         PROCESS-IDENTIFIER&lt;br /&gt;
                         RECV-AREA&lt;br /&gt;
                         RECV-AREA-LENGTH.&lt;br /&gt;
 &lt;br /&gt;
     IF COMPLETION-CODE &amp;gt; 1&lt;br /&gt;
       MOVE &#039;Y&#039; TO EOJ-FLAG&lt;br /&gt;
       GO TO 200-EXIT.&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
     COMPUTE SEND-VALUE =&lt;br /&gt;
       RECV-VALUE-1 + RECV-VALUE-2.&lt;br /&gt;
 &lt;br /&gt;
     EXEC CICS ENTER TRACEID(004) END-EXEC.&lt;br /&gt;
     CALL &#039;IFSEND&#039; USING COMPLETION-CODE&lt;br /&gt;
                         COMPLETION-DETAIL&lt;br /&gt;
                         PROCESS-IDENTIFIER&lt;br /&gt;
                         SEND-AREA&lt;br /&gt;
                         SEND-AREA-LENGTH.&lt;br /&gt;
 &lt;br /&gt;
     IF COMPLETION-CODE &amp;gt; 1&lt;br /&gt;
       MOVE &#039;Y&#039; TO EOJ-FLAG.&lt;br /&gt;
 &lt;br /&gt;
 200-EXIT. EXIT.&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
==CMS TPROCESS communication==&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 support communication between a User Language request and one concurrent CMS partner process. A REXX or EXEC2 EXEC communicates with a User Language program by using data transmission subcommands directed to the &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; environment. These subcommands are available for use only with the CMS interface.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
In CMS, program communication functions are called via subcommands. The subcommands IFRECV, IFSENDX, and IFSGNL are used to communicate with the User Language request. Two other subcommands, IFSET and IFEXTRACT, are used to set and query session parameters. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
CMS TPROCESS requirements are described below. The rest of the CMS TPROCESS discussion contains a summary and then individual descriptions of the CMS TPROCESS subcommands followed by sample CMS EXEC and User Language TPROCESS conversation programs. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Requirements for using CMS TPROCESS===&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; supports communication between a User Language request and one concurrent CMS partner process, subject to these restrictions: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;In the discussion that follows, it is assumed that the user is accessing &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; through IUCV and through the CMS full screen interface (IODEV=41).&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;The &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; environment, as the target of a subcommand, must be explicitly established with the ADDRESS command in REXX, or the &amp;amp;amp;PRESUME or &amp;amp;amp;SUBCOMMAND commands in EXEC2.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;The CMS partner process must be written in System Product Interpreter language (REXX) or EXEC2. The partner process communicates through the standard CMS SUBCOM interface, which is supported by these languages.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;CMS must be at z/VM/SP Release 3, or later.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;The user interface module (M204USER), invoked by the M204 command, must be installed as either a saved segment or a Nucleus Extension. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Many CMS commands that an EXEC can call run in the User Area. These commands would overlay the interface module if it also ran in the User Area, causing unpredictable results. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
See the description of the M204 EXEC in the &amp;lt;var class=&amp;quot;book&amp;quot;&amp;gt;[http://www.rocketsoftware.com/m204/products/model204/documentation/v7r4/M204-System-Mgr/view Rocket Model 204 System Manager&#039;s Guide]&amp;lt;/var&amp;gt; for more information about invoking the user interface module. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
==CMS TPROCESS subcommands==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The subcommands used in CMS TPROCESS are summarized in [[#Subcommand summary|Subcommand summary]], and their return codes are summarized in [[#Return codes|Return codes]]. The subcommands discussion begins in [[#Individual subcommand descriptions|Individual subcommand descriptions]]. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Subcommand summary===&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;caption&amp;gt;CMS TPROCESS subcommands&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;Subcommand&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&amp;gt;IFEXTRACT and IFSET&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Allows the CMS EXEC to set session defaults and retrieve information regarding the TPROCESS conversation.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;IFRECV&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Receives data from the User Language 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;IFSENDX&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Sends data to the User Language 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;IFSGNL&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Signals the User Language request, interrupting the conversation.&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;
===Return codes===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
[[#Return codes|Return codes]] lists return codes defined for the subcommands. [[#CICS completion codes|CICS completion codes]] displays these codes and their corresponding completion detail values. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;caption&amp;gt;Return codes CMS TPROCESS subcommands&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;&lt;br /&gt;
Code&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Completion detail value&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;&lt;br /&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;Successful&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;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;Warning&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Data transfer cannot have completed as expected. Refer to the completion detail variable, if one has been defined, for more information.&amp;lt;/td&amp;gt;&lt;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;Signal received&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;See the completion detail variable, if one has been defined, for the signal value. No data was sent/received. For IFRECV, the value of the target variable has not been changed.&amp;lt;/td&amp;gt;&lt;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;3&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;(reserved for future use)&amp;lt;/td&amp;gt;&lt;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;4&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Error&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;The subcommand did not complete successfully. See [[#CICS completion codes|CICS completion codes]] for the completion detail code.&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;
===Individual subcommand descriptions===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The individual CMS TPROCESS subcommands are described in this section.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===IFEXTRACT===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The IFEXTRACT subcommand obtains current parameter values from the &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; conversation partner. &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 IFEXTRACT subcommand is:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;IFEXTRACT &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;parameter&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;parameter&amp;lt;/var&amp;gt; is a parameter relating to the TPROCESS conversation. For information about setting these parameters, see [[#IFSET|the IFSET subcommand]].&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;Parameter &amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Specifies&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;STATUSDVAR &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Name of the variable in which the user wants to receive completion detail codes and signal values. If this parameter is not set, completion detail codes and signal values are not provided to the 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;LANGINT   &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Interface used when setting EXEC variables.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;DATALEN    &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Maximum data length in bytes that an IFSENDX or IFRECV operation can process. &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;
====Notes and tips====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
IFEXTRACT returns parameter information in either of the following forms:&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;term&amp;quot;&amp;gt;variable parametername.0 &amp;lt;/var&amp;gt;specifies number of values returned (n)&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;variables parametername.1-n&amp;lt;/var&amp;gt; specifies parameter values &lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
where parametername is STATUSDVAR, LANGINT, or DATALEN and the values returned are as shown in [[#IFEXTRACT|IFEXTRACT]].&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;caption&amp;gt;Returned values for IFEXTRACT parameters&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;Parameter&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Returned value&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Equal 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;STATUSDVAR&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;STATUSDVAR.0&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;1, if a STATUSDVAR has been set, 0 if not&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;STATUSDVAR&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;STATUSDVAR.1&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Name of the current STATUSDVAR&lt;br /&gt;
variable, if one is 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&amp;gt;LANGINT&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;variable LANGINT.0&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;1&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;LANGINT&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;variable LANGINT.1&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Current value of LANGINT&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;DATALEN&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;DATALEN.0&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;1&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;DATALEN&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;DATALEN.1&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Current value of DATALEN&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;
 &lt;br /&gt;
===IFRECV===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The CMS partner process must issue an IFRECV subcommand to receive data from the User Language request. &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 IFRECV subcommand is:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;IFRECV &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;expression&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;expression&amp;lt;/var&amp;gt; is a statement that evaluates to a single CMS EXEC2 or REXX symbol. The symbol is taken as the name of the target variable which contains the transmitted data when IFRECV completes. The expression argument to IFRECV must evaluate to a single symbol name. For EXEC2, the resulting symbol name must be stripped of its preceding ampersand (&amp;lt;tt&amp;gt;&amp;amp;amp;&amp;lt;/tt&amp;gt;). &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Examples====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
In the REXX example that follows, the line enclosed by quotation marks is passed as a literal string to the &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; interface. The variable &#039;NAME&#039; is set to the received value:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;ADDRESS M204&lt;br /&gt;
&#039;IFRECV NAME&#039;&lt;br /&gt;
IF RC = 0 THEN&lt;br /&gt;
  IF NAME = ABC ...&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
In this example, the expression &#039;item1 item2&#039; is evaluated by the interpreter, and the string &#039;ABCDEFGH&#039; is used as the target variable name:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;ITEM2 = EFGH&lt;br /&gt;
ITEM1 = ABCD&lt;br /&gt;
&#039;IFRECV&#039; item1 item2&lt;br /&gt;
IF RC = 0 THEN&lt;br /&gt;
  IF ABCDEFGH = 12345 ...&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The target variable used in this example is &amp;amp;amp;CAR:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;IFRECV CAR&lt;br /&gt;
&amp;amp;amp;IF &amp;amp;amp;RC &amp;amp;#172;= 0 &amp;amp;amp;GOTO -ERROR&lt;br /&gt;
&amp;amp;amp;IF &amp;amp;amp;CAR = PINTO ...&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Because the interpreter evaluates &amp;amp;amp;CAR in the IFRECV command, the target variable used in this example is &amp;amp;amp;MAKEMODEL: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;&amp;amp;amp;CAR = &amp;amp;amp;CONCAT OF MAKE MODEL&lt;br /&gt;
IFRECV &amp;amp;amp;CAR&lt;br /&gt;
&amp;amp;amp;IF &amp;amp;amp;RC &amp;amp;#172;= 0 &amp;amp;amp;GOTO -ERROR&lt;br /&gt;
&amp;amp;amp;IF &amp;amp;amp;MAKEMODEL = PINTO&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===IFSENDX===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The CMS partner process must issue an IFSENDX subcommand to send data to the User Language procedure.&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 IFSENDX subcommand is:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;IFSENDX [&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;expression&amp;lt;/span&amp;gt;]&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&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;expression&amp;lt;/var&amp;gt; is optional and specifies an arbitrary EXEC2 or REXX expression that is evaluated by the interpreter. The result is sent to &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt;. The expression begins with the second byte following the IFSENDX keyword. If no expression is coded, a null string is sent.     &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===IFSET===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The IFSET subcommand sets parameter values for the TPROCESS conversation.    &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 IFSET subcommand is:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;IFSET &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;parameter value&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;parameter&amp;lt;/var&amp;gt; is one of the parameters relating to the TPROCESS conversation. You can specify a value for either of these parameters:&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;STATUSDVAR&amp;lt;/var&amp;gt;   &lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The STATUSDVAR parameter specifies the name of the variable in which the user wants to receive detail completion codes and signal values. IFSET should be used to set the STATUSDVAR parameter before issuing IFSENDX, IFRECV, or IFSGNL. If STATUSDVAR is not set, detail completion codes and signal values are not provided to the user. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The value given for STATUSDVAR in an IFSET subcommand must resolve to a valid symbol 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;&amp;lt;var&amp;gt;LANGINT&amp;lt;/var&amp;gt; &lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The LANGINT parameter specifies the interface used when setting EXEC variables. For EXEC2 users, the only valid value is DIRECT, the default. REXX users can specify SYMBOLIC.     &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;
====Setting LANGINT====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
&amp;lt;var&amp;gt;LANGINT&amp;lt;/var&amp;gt; affects the treatment of the variable name specified for &amp;lt;var&amp;gt;STATUSDVAR&amp;lt;/var&amp;gt; in the &amp;lt;var&amp;gt;IFSET&amp;lt;/var&amp;gt; subcommand and in the &amp;lt;var&amp;gt;IFRECV&amp;lt;/var&amp;gt; subcommand. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If the value specified is SYMBOLIC and the variable is a compound symbol, normal REXX substitution occurs for everything after the stem. Alternatively, if the value of &amp;lt;var&amp;gt;LANGINT&amp;lt;/var&amp;gt; is DIRECT, the name is considered a literal. No substitution occurs. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
In the following example, the DIRECT setting causes the symbol &amp;lt;code&amp;gt;DATA.J&amp;lt;/code&amp;gt; to receive each of the ten values specified, whereas the SYMBOLIC setting causes an array &amp;lt;code&amp;gt;DATA.1&amp;lt;/code&amp;gt; through &amp;lt;code&amp;gt;DATA.10&amp;lt;/code&amp;gt; to receive the values because &amp;lt;code&amp;gt;J&amp;lt;/code&amp;gt; is evaluated by REXX when &amp;lt;var&amp;gt;LANGINT&amp;lt;/var&amp;gt; is set to SYMBOLIC. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;DO J = 1 TO 10&lt;br /&gt;
  &#039;IFRECV DATA.J&#039;&lt;br /&gt;
  IF RC &amp;amp;#172;=0 THEN LEAVE&lt;br /&gt;
END &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Refer to the &amp;lt;var class=&amp;quot;book&amp;quot;&amp;gt;IBM z/VM/SP System Product Interpreter Reference&amp;lt;/var&amp;gt; for information about the distinction between the DIRECT and SYMBOLIC interfaces to REXX variables. &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====DATALEN cannot be set====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The DATALEN parameter specifies the maximum data length in bytes that an IFSENDX or IFRECV operation can process. DATALEN is set by the &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; DEFINE PROCESS command and cannot be changed by the IFSET subcommand.    &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===IFSGNL===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The CMS partner process can issue an IFSGNL subcommand to interrupt the conversation. A signal subcommand suppresses the next communication attempted by the SOUL request, causing the request to complete with $STATUS set to 2 and $STATUSD set to the value passed to the IFSGNL subcommand.   &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 IFSGNL subcommand is:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;IFSGNL [&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;expression&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;expression&amp;lt;/var&amp;gt; is optional and, if specified, must resolve to an integer value in the range -2,147,483,648 through +2,147,483,647. If no expression is coded, the default value is 0. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Notes and tips====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
A signal subcommand suppresses the next communication attempted by the User Language request. IFSGNL returns a completion code of 2 and the value that was sent in the expression by the IFSGNL subcommand. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
==CMS TPROCESS example==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
In this example, the SOUL request communicates with a CMS EXEC using the SEND and RECEIVE statements. The purpose of the example is to copy (or &amp;quot;upload&amp;quot;) a CMS file into 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;/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;*&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;* THE DEFINE COMMANDS USUALLY ARE IN THE USER ZERO STREAM.&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;* OTHERWISE, THE SYSTEM MANAGER IS NEEDED.&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;* THEY ARE SHOWN HERE FOR DOCUMENTATION PURPOSES.&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;* NOTICE THE REQUIRED OPEN LINK COMMAND.&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;* ONCE OPENED, THE LINK REMAINS OPEN UNTIL EXPLICITLY&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;* CLOSED BY AN EOJ OR BY THE FORCE OPTION OF THE CLOSE LINK&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;* COMMAND.&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;*&lt;br /&gt;
DEFINE LINK LINK11 WITH SCOPE=SYSTEM                  -&lt;br /&gt;
  TRANSPORT=TERMINAL PROTOCOL=MASTER&lt;br /&gt;
 &lt;br /&gt;
DEFINE PROCESSGROUP PGRP11 WITH SCOPE=SYSTEM          -&lt;br /&gt;
  LINK=LINK11 TERMINAL=LOCAL&lt;br /&gt;
 &lt;br /&gt;
DEFINE PROCESS UPLOAD WITH SCOPE=SYSTEM DATALEN=255   -&lt;br /&gt;
  MODE=EXEC DESTINATION=PGRP11 PARTNER=DBASE3&lt;br /&gt;
 &lt;br /&gt;
OPEN LINK LINK11&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;* UPLOAD RECORDS FROM A CMS FILE.&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;* RESTRICTION: THE MAXIMUM LENGTH OF ANY LINE IS 255.&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;*&lt;br /&gt;
BEGIN&lt;br /&gt;
%DATA STRING LEN 255&lt;br /&gt;
%FN STRING COMMON&lt;br /&gt;
%CNT FIXED COMMON&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;*&lt;br /&gt;
%CNT = 0&lt;br /&gt;
%FN = $READ(&#039;CMS FILE NAME TYPE MODE&#039;)&lt;br /&gt;
OPEN PROCESS UPLOAD&lt;br /&gt;
 &lt;br /&gt;
IF $STATUS NE 0 THEN&lt;br /&gt;
    CALL EXIT (&#039;ATTACHING TO REXX PROGRAM&#039;)&lt;br /&gt;
END IF&lt;br /&gt;
 &lt;br /&gt;
SEND %FN TO UPLOAD&lt;br /&gt;
 &lt;br /&gt;
IF $STATUS NE 0 THEN&lt;br /&gt;
    CALL EXIT (&#039;SENDING FILENAME TO REXX PROGRAM&#039;)&lt;br /&gt;
END IF&lt;br /&gt;
REPEAT&lt;br /&gt;
    RECEIVE %DATA FROM UPLOAD&lt;br /&gt;
    IF $STATUS NE 0 THEN&lt;br /&gt;
    *&lt;br /&gt;
    * END OF FILE IF SIGNAL 0 ISSUED:&lt;br /&gt;
    *&lt;br /&gt;
        IF $STATUS EQ 2 AND $STATUSD EQ 0 THEN&lt;br /&gt;
            CALL EXIT(&#039;&#039;)&lt;br /&gt;
        END IF&lt;br /&gt;
    *&lt;br /&gt;
    * OTHERWISE, THIS IS A TERMINATING ERROR:&lt;br /&gt;
    *&lt;br /&gt;
        CALL EXIT (&#039;RECEIVING RECORD FROM REXX PROGRAM&#039;)&lt;br /&gt;
    END IF&lt;br /&gt;
    %CNT = %CNT + 1&lt;br /&gt;
    STORE RECORD&lt;br /&gt;
        ID = &#039;UPLOAD&#039;&lt;br /&gt;
        DATA = %DATA&lt;br /&gt;
    END STORE&lt;br /&gt;
END REPEAT&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;* SUBROUTINE TO EXIT THE UPLOAD OPERATION, WITH OPTIONAL&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;* ERROR MESSAGE:&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;*&lt;br /&gt;
SUBROUTINE EXIT (%MSG STRING LEN 40)&lt;br /&gt;
%EM STRING LEN 80&lt;br /&gt;
%FN STRING COMMON&lt;br /&gt;
%CNT FIXED COMMON&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;* SAVE INDICATORS BEFORE CLOSING PROCESS:&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;*&lt;br /&gt;
%ST = $STATUS&lt;br /&gt;
%STD = $STATUSD&lt;br /&gt;
%EM = $ERRMSG&lt;br /&gt;
CLOSE PROCESS UPLOAD&lt;br /&gt;
 &lt;br /&gt;
PRINT %CNT AND &#039;RECORDS UPLOADED FROM CMS FILE&#039; AND %FN&lt;br /&gt;
 &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 THIS IS AN ERROR EXIT, PRINT ERROR INDICATORS:&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;*&lt;br /&gt;
IF %MSG NE &amp;lt;nowiki&amp;gt;&#039;&#039;&amp;lt;/nowiki&amp;gt; THEN&lt;br /&gt;
    PRINT &#039;ERROR&#039; AND %MSG&lt;br /&gt;
    PRINT &#039;STATUS&#039; AND %ST AND &#039;DETAIL&#039; AND %STD&lt;br /&gt;
    PRINT &#039;ERROR MESSAGE:&#039; AND %EM&lt;br /&gt;
END IF&lt;br /&gt;
STOP&lt;br /&gt;
END&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===CMS partner===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The following sample CMS EXEC could communicate with the above SOUL request to upload a file:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;/* Upload file to SOUL */&lt;br /&gt;
&#039;MAKEBUF&#039;&lt;br /&gt;
buf = rc&lt;br /&gt;
 &lt;br /&gt;
/* Tell M204 the name of statusdvar, and get the file id: */&lt;br /&gt;
address M204 &#039;IFSET STATUSDVAR statusdvar&#039;&lt;br /&gt;
address M204 &#039;IFRECV fileid&#039;&lt;br /&gt;
if rc &amp;amp;#172;= 0 then call exit &#039;receiving fileid,&lt;br /&gt;
from SOUL&#039;&lt;br /&gt;
 &lt;br /&gt;
/* Stack the records from the file: */&lt;br /&gt;
qd = queued()&lt;br /&gt;
&#039;EXECIO * DISKR&#039; fileid&#039;(FIFO FINIS&#039;&lt;br /&gt;
if rc ¬= 0 then call exit &#039;reading CMS file&#039; fileid&lt;br /&gt;
 &lt;br /&gt;
/* Send the records to User Language: */&lt;br /&gt;
do i = 1 to queued() - qd&lt;br /&gt;
   parse pull line&lt;br /&gt;
   address M204 &#039;IFSENDX&#039; line&lt;br /&gt;
   if rc &amp;amp;#172;= 0 then&lt;br /&gt;
      call exit &#039;sending line&#039; i &#039;of CMS file&#039; fileid &#039;,&lt;br /&gt;
      to User Language&#039;&lt;br /&gt;
   end&lt;br /&gt;
 &lt;br /&gt;
/* Send signal indicating successful end of file: */&lt;br /&gt;
address M204 &#039;IFSGNL 0&#039;&lt;br /&gt;
 &lt;br /&gt;
exit&lt;br /&gt;
 &lt;br /&gt;
/* Exit with error message: */&lt;br /&gt;
exit:&lt;br /&gt;
parse arg msg&lt;br /&gt;
say &#039;Error&#039; msg&lt;br /&gt;
say &#039;RC&#039; rc &#039;detail&#039; statusdvar&lt;br /&gt;
&#039;DROPBUF&#039; buf&lt;br /&gt;
exit&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Transfer Control facility==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The Transfer Control facility allows a SOUL request to identify a partner CICS program or SNA Communications Server application and transfer control to it. In addition, the request is allowed to pass a parameter area to the partner. Once the transfer has been effected, the user is disconnected from &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;
===Requirements and considerations===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The Transfer Control facility requirements and considerations for a &amp;quot;local&amp;quot; transfer to CICS differ from those for a &amp;quot;remote&amp;quot; transfer to a SNA Communications Server application. For example, if the transfer is to a CICS partner, the partner is a &amp;quot;process&amp;quot; identified by the value of the PARTNER parameter of the DEFINE PROCESS command. If the transfer is to a SNA Communications Server partner, the partner is an application identified by the value of the REMOTEID parameter of the DEFINE PROCESSGROUP command.   &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The description of the Transfer Control facility is divided into separate discussions for CICS and for SNA Communications Server. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
==CICS Transfer Control==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The CICS Transfer Control facility allows a User Language request to identify a partner CICS program and transfer control to it. The transfer can be started by a user logged on to &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; through the CICS Interface. The User Language request is allowed to pass a parameter area to the partner.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===System manager requirements===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
To use the Transfer Control facility:&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;[[DEFINE LINK command|DEFINE LINK]]&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;[[DEFINE PROCESSGROUP command|DEFINE PROCESSGROUP]]&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;[[DEFINE PROCESS command|DEFINE PROCESS]]&amp;lt;/var&amp;gt;, and &amp;lt;var&amp;gt;[[OPEN LINK command|OPEN LINK]]&amp;lt;/var&amp;gt; commands must be issued.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;The DEFINE LINK command must specify &amp;lt;code&amp;gt;PROTOCOL=TRANSFER&amp;lt;/code&amp;gt;.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;The DEFINE PROCESS command must specify &amp;lt;code&amp;gt;MODE=XCTL&amp;lt;/code&amp;gt;.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;The CICS partner process must be a CICS program defined to CICS.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===TRANSFER statement===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The TRANSFER statement is used to transfer control from a request to a CICS partner process. Any User Language statements between the TRANSFER statement and the request&#039;s END statement are not executed before the actual transfer of control.   &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 TRANSFER statement for CICS is: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntaxUL&amp;quot;&amp;gt;TRANSFER [CONTROL] TO PROCESS &lt;br /&gt;
 {processname | %variable} &lt;br /&gt;
 [PASSING {IMAGE imagename | &#039;string&#039; | %variable}]&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;processname&amp;lt;/var&amp;gt; refers to a partner process defined in an already issued DEFINE PROCESS command. This name also can be provided as the value of a %variable.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;The PASSING clause identifies the data to be passed to the CICS program (the partner process). This data can be specified as an image, where &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;imagename&amp;lt;/var&amp;gt; is an image previously defined in an image definition. The data also can be a quoted string or a %variable.   &lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Execution====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When the TRANSFER statement is executed, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; first commits the current transaction with a COMMIT RELEASE statement. (For a detailed description of the COMMIT RELEASE statement, refer to [[Record level locking and concurrency control#RELEASE option|RELEASE option]].) After the transaction is committed, the following actions are performed:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The user is disconnected from &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 user is transferred to the specified partner process. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;The following &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; message appears in the audit trail:&amp;lt;/li&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;*** M204.1899: TRANSFER STATEMENT COMPLETE, USER DISCONNECTED&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
This message can invoke an active ON ERROR unit and/or subsystem error procedure. (See [[Application Subsystem development]] for more information about error procedures and subsystems.)&lt;br /&gt;
Rocket Software recommends that you treat this message not as an error message but as an indication of normal completion of the TRANSFER statement. &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;
===Receiving the transferred data===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
To receive the data passed by the User Language request, the CICS program can use instructions with the following format:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;EXEC CICS HANDLE CONDITION QIDERR(&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;label1&amp;lt;/span&amp;gt;) LENGERR(&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;label2&amp;lt;/span&amp;gt;)&lt;br /&gt;
 &lt;br /&gt;
EXEC CICS READQ TS QUEUE(&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;queue_name&amp;lt;/span&amp;gt;)             X&lt;br /&gt;
  ITEM(&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;item_number&amp;lt;/span&amp;gt;)                              X&lt;br /&gt;
  INTO(&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;buffer&amp;lt;/span&amp;gt;) LENGTH(&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;buffer_length&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;queue_name&amp;lt;/var&amp;gt; is an 8-byte TS queue name made up of the string RECV followed by the terminal ID. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If the HANDLE CONDITION statement is omitted, and an error occurs reading the TS queue, the CICS program is abnormally terminated.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Example====&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;PROCEDURE TRANSFER.TO.CICS&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;* TRANSFER CONTROL TO A CICS PROGRAM&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;* THE DEFINE COMMANDS USUALLY ARE IN THE USER ZERO STREAM.&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;* OTHERWISE, THE SYSTEM MANAGER IS NEEDED.&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;* THEY ARE SHOWN HERE FOR DOCUMENTATION PURPOSES.&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;* NOTICE THE REQUIRED OPEN LINK COMMAND.&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;* ONCE OPENED, THE LINK REMAINS OPEN UNTIL EXPLICITLY&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;* CLOSED BY AN EOJ OR BY THE FORCE OPTION OF THE CLOSE&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;* LINK COMMAND.&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;*&lt;br /&gt;
DEFINE LINK LINK1 WITH SCOPE=SYSTEM TRANSPORT=TERMINAL -&lt;br /&gt;
  PROTOCOL=TRANSFER&lt;br /&gt;
 &lt;br /&gt;
DEFINE PROCESSGROUP GROUP1 WITH SCOPE=SYSTEM         -&lt;br /&gt;
  LINK=LINK1&lt;br /&gt;
 &lt;br /&gt;
DEFINE PROCESS CICSTRAN WITH SCOPE=SYSTEM DATALEN=40 -&lt;br /&gt;
  MODE=XCTL DESTINATION=GROUP1 PARTNER=CICSPGM&lt;br /&gt;
 &lt;br /&gt;
OPEN LINK LINK1&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;*&lt;br /&gt;
BEGIN&lt;br /&gt;
%TEXT IS STRING LEN 20&lt;br /&gt;
   .&lt;br /&gt;
   .&lt;br /&gt;
   .&lt;br /&gt;
ERROR.PROC: ON ERROR&lt;br /&gt;
              %TEXT = $ERRMSG&lt;br /&gt;
  IF %TEXT = &#039;M204.1899: TRANSFER &#039; THEN&lt;br /&gt;
    PRINT &#039;THE TRANSFER TO CICS WAS        -&lt;br /&gt;
    SUCCESSFUL.&#039;&lt;br /&gt;
  ELSE&lt;br /&gt;
                PRINT &#039;THE TRANSFER TO CICS HAS FAILED.&#039;&lt;br /&gt;
     PRINT &#039;THE ERROR ENCOUNTERED IS: &#039;     -&lt;br /&gt;
      WITH $ERRMSG&lt;br /&gt;
  END IF&lt;br /&gt;
  END ON&lt;br /&gt;
    .&lt;br /&gt;
    .&lt;br /&gt;
    .&lt;br /&gt;
    TRANSFER CONTROL TO PROCESS CICSTRAN PASSING %PARM.DATA&lt;br /&gt;
    .&lt;br /&gt;
    .&lt;br /&gt;
    .&lt;br /&gt;
END PROCEDURE&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
==SNA Communications Server Transfer Control==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
SNA Communications Server Transfer Control enables a &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; Online application in a SNA Communications Server network to simultaneously transfer control of the terminal and pass a command string to another designated SNA Communications Server application. Typically this transfer is from one &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; Online to another and is transparent to the user, involving no additional password entry or disruption for the terminal user. Upon transfer, the user is disconnected from the original application. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When the user transfers the terminal to another application, that application processes the accompanying command string, which can be as many as 255 bytes. If the destination application is a &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; Online, the command string can be formatted to log the user into an application subsystem, making the transfer transparent to the user. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When finished in the destination Online, the user can be transferred back to the original &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; Online or to another application in the SNA Communications Server network. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Terminology===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
In this section:&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 class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; Online from which a user is transferred is also referred to as the initial or transferring side, or Online. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;The application to which a user transfers is also referred to as the receiving or destination side, Online, or application. &lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===System manager requirements===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
To use the Transfer Control facility, the &amp;lt;var&amp;gt;[[DEFINE LINK command|DEFINE LINK]]&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;[[DEFINE PROCESSGROUP command|DEFINE PROCESSGROUP]]&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;[[DEFINE PROCESS command|DEFINE PROCESS]]&amp;lt;/var&amp;gt;, and &amp;lt;var&amp;gt;[[OPEN LINK command|OPEN LINK]]&amp;lt;/var&amp;gt; commands must be issued for the side initiating the transfer. These are system manager commands.&lt;br /&gt;
The DEFINE LINK command must specify &amp;lt;code&amp;gt;PROTOCOL=TRANSFER&amp;lt;/code&amp;gt;.&lt;br /&gt;
The DEFINE PROCESS command must specify &amp;lt;code&amp;gt;MODE=PASS&amp;lt;/code&amp;gt;.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When DEFINE PROCESS is set with &amp;lt;code&amp;gt;MODE=PASS&amp;lt;/code&amp;gt;,&lt;br /&gt;
only z/OS and z/VSE IODEV=7 users are allowed to initiate the TRANSFER statement. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The SNA Communications Server APPL statement that defines the transferring &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; Online to SNA Communications Server must include AUTH=(PASS,ACQ). The name in this statement is the same as the VTAMNAME User 0 parameter setting for the &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; Online. Arrange this with your SNA Communications Server systems programmer. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Security concerns are discussed in [[#Security for Model 204-to-Model 204 transfers|Security for Model 204-to-Model 204 transfers]]. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===TRANSFER statement format and execution===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The TRANSFER statement is used to transfer control from a User Language request to a SNA Communications Server application. Issuing TRANSFER in the request initiates this process.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The SNA Communications Server application transferred to is identified by its SNA Communications Server applid, which is the User 0 VTAMNAME parameter value for &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; destinations. This applid is specified on the REMOTEID parameter of the DEFINE PROCESSGROUP command for the Online initiating the transfer.   &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The TRANSFER statement for a SNA Communications Server transfer is valid only if the DEFINE PROCESS command for the &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; Online initiating the transfer specifies MODE=PASS and the DEFINE LINK command specifies PROTOCOL=TRANSFER.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If the user is transferred to another &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; Online, the command string passed at the time of transfer can be formatted by Transfer Control to automatically log the user in at the destination Online. TRANSFER statement and DEFINE PROCESS command options determine how the command string is to be formatted. For more information about these options, see the description of the PASSING parameter below, and also see [[#Login command line formatting|Login command line formatting]].&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 TRANSFER statement is:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntaxUL&amp;quot;&amp;gt;TRANSFER [CONTROL] TO PROCESS &lt;br /&gt;
 {&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;processname&amp;lt;/span&amp;gt; | &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;%variable&amp;lt;/span&amp;gt;} &lt;br /&gt;
 [WITH] [USERID {&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;%variable&amp;lt;/span&amp;gt; | &#039;&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;string&amp;lt;/span&amp;gt;&#039;}] &lt;br /&gt;
 [PASSWORD {&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;%variable&amp;lt;/span&amp;gt; | &#039;&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;string&amp;lt;/span&amp;gt;&#039;}] &lt;br /&gt;
 [ACCOUNT {&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;%variable&amp;lt;/span&amp;gt; | &#039;&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;string&amp;lt;/span&amp;gt;&#039;}] &lt;br /&gt;
 [PASSING {IMAGE &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;imagename&amp;lt;/span&amp;gt; | &#039;&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;string&amp;lt;/span&amp;gt;&#039; | &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;%variable&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;processname&amp;lt;/var&amp;gt; is the name of a process defined in a DEFINE PROCESS command for the transferring side. This name also can be provided as the value of a %variable.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;USERID specifies the user ID of the user that is being transferred.  &lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
USERID is allowed only if the DEFINE PROCESS command options MODE=PASS and UIDSOURCE=OPEN are specified. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If USERID is specified, the Transfer Control facility assumes that the transfer is to another &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; Online, and it automatically formats and encrypts a LOGON command string for the destination Online. For more information about this formatting, see [[#Login command line formatting|Login command line formatting]].&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
USERID can also be provided as the value of a %variable. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;PASSWORD specifies the password to be included in the LOGON command string sent to the &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; destination Online. &lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
PASSWORD is accepted only if the DEFINE PROCESS command options MODE=PASS and UIDSOURCE=CURRENT or UIDSOURCE=OPEN are specified. If MODE=PASS and UIDSOURCE=OPEN, and USERID is not specified on the TRANSFER statement, PASSWORD is ignored. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
PASSWORD can also be provided as the value of a %variable. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Unlike the account and user ID, the current user password is not available in decrypted form to a &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; Online. If sending a password is appropriate, the User Language request must supply it. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;ACCOUNT specifies the account value to be included in the LOGON command string sent to the &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; destination Online.  &lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
ACCOUNT is accepted only if the DEFINE PROCESS command option MODE=PASS and the TRANSFER option USERID are specified. ACCOUNT is overridden by the DEFINE PROCESS command option ACCTSOURCE (see [[#Login command line formatting|Login command line formatting]]); it is ignored if USERID is not specified. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
ACCOUNT can also be provided as the value of a %variable. &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 PASSING clause identifies the data to be passed to the destination SNA Communications Server application.  &lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
PASSING data can be specified as an image, where &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;imagename&amp;lt;/var&amp;gt; is an image previously defined in an image definition. The data also can be a quoted string or a %variable. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When MODE=PASS and either of the DEFINE PROCESS options UIDSOURCE=CURRENT or UIDSOURCE=OPEN are specified, it is assumed the SNA Communications Server application is another &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; Online. A LOGON command string is formatted automatically, and the PASSING data is attached to the end of the string. For more information about this automatic formatting, see [[#Login command line formatting|Login command line formatting]]. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Be sure that only &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; commands are entered in the PASSING data when transferring to another &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; Online.&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;
====Execution====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When the request containing the TRANSFER statement is executed, the user is disconnected from &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; on the transferring side and transferred to the destination application. The following events are included:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Transparent to the user, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; issues an OPEN PROCESS in preparation for the transfer. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;The user stays connected to the initial &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; Online until that Online receives notification that a session is established with the destination SNA Communications Server application. Depending on the notification, the following actions are performed: &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 the notification is that the session is rejected by the destination SNA Communications Server application, control is returned to the statement following the TRANSFER statement. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If the time waiting on notification exceeds the time specified on the  TIMEOUT option of the DEFINE PROCESS command, the user is disconnected from the initial &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; Online and returned to SNA Communications Server. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If the notification is that the session is established with the destination SNA Communications Server application, the user is disconnected from the initial &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; Online and transferred to the specified destination. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Before the disconnection preceding a transfer, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; commits the current transaction with a COMMIT RELEASE statement. (For a detailed description of the COMMIT RELEASE statement, refer to [[Record level locking and concurrency control#RELEASE option|RELEASE option]].) &lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
After the disconnection, SNA Communications Server executes the CLSDST=PASS macro, which transfers the user to the SNA Communications Server application specified in the DEFINE PROCESSGROUP REMOTEID option. &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 following &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; message appears in the audit trail:&amp;lt;/li&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;*** M204.1899: TRANSFER STATEMENT COMPLETE, USER DISCONNECTED&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
This message can invoke an active ON ERROR unit and/or subsystem error procedure. (For more information about error procedures and subsystems, see [[Application Subsystem development]].) It is recommended that you treat this message not as an error message but as an indication of normal completion of the TRANSFER statement.    &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;
===Login command line formatting===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
For transfers between &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; Onlines, the data passed at the time of transfer can include an automatically formatted (and encrypted) LOGON command string. The transferred user thereby gains access to the destination &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; Online without having to enter a password, and any other commands in the passed data are processed thereafter. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
A transfer that enables login of a user without a password is called trusted. No password is formatted in the passed command line nor checked for at the receiving side: the receiving Online trusts that the transferring Online has verified the user&#039;s password and allows the user to log in without a password.&lt;br /&gt;
This feature is also used by the &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; product Horizon, and is described in detail in the&lt;br /&gt;
&amp;lt;var class=&amp;quot;book&amp;quot;&amp;gt;Rocket Model 204 Horizon: Intersystem Processing Guide&amp;lt;/var&amp;gt;. &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 exception to the previous feature is SNA Communications Server Transfer Control does not support Guest User that is used by Horizon.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
A user can also transfer with an automatically formatted LOGON string that includes a password. Such a transfer is non-trusted and can only occur between two &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; Onlines. For transfers between &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; Onlines, the inclusion of an automatically formatted LOGON string is optional. Transfers to a non-&amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; destination do not have the option of including an automatically formatted LOGON string.   &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The login formatting options are controlled by TRANSFER statement and DEFINE command parameter combinations which determine if or how the command string is to be formatted. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Components of transferred data====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The data string passed during a transfer is the sum of two components, the automatically formatted login string and the value of the PASSING parameter.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The PASSING parameter contents is the value of the TRANSFER statement PASSING parameter. This string can contain whatever commands or data the transferring side is to have processed at the receiving side. For non-trusted &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; to &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; transfers, this string can contain a LOGON command line with optional password in addition to other &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; commands. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The login string contents depend on whether the transfer is trusted or not. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Components of formatted login string====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If the transfer is trusted, the encrypted login string contains this information: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;VTAM &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;applid&amp;lt;/span&amp;gt;, LOGON &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;userid&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;processgroupname&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;SNA Communications Server applid is the transferring side&#039;s SNA Communications Server applid (User 0 parameter VTAMNAME value). This value must be the same as the receiving side&#039;s DEFINE PROCESSGROUP command REMOTEID parameter. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;LOGON is the &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; LOGON command.&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;userid&amp;lt;/var&amp;gt; is the user ID to be logged in at the destination Online. If UIDSOURCE=CURRENT, the transferring user&#039;s current user ID is used. If UIDSOURCE=OPEN, the user ID specified on the TRANSFER statement USERID parameter is used. &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;processgroupname&amp;lt;/var&amp;gt; is the name set in the receiving side&#039;s processgroup definition. This name must be the same as the value of the transferring side&#039;s DEFINE PROCESS command PARTNER parameter. &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 the transfer is non-trusted, the encrypted string can contain this information: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;VTAM &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;applid&amp;lt;/span&amp;gt;, LOGON &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;userid&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;password&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;SNA Communications Server &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;applid&amp;lt;/var&amp;gt; is as defined above. However, this value is not checked if the transfer is non-trusted.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;LOGON and &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;userid&amp;lt;/var&amp;gt; are as defined above.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;password is the transferring user&#039;s. It is obtained from the TRANSFER statement PASSWORD parameter, if coded. If no PASSWORD is coded, the user is prompted for one at the destination Online.  &lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Controlling login string formatting====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
This section summarizes the DEFINE command and TRANSFER statement parameter settings required to indicate whether a login string is automatically formatted and from where the user ID and password (if any) are obtained. The description is divided according to the type of transfer (trusted or non-trusted).&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Where possible, the description includes the mutual dependencies of the TRANSFER statement parameters (USERID and PASSWORD), but leaves out the ACCOUNT parameter. For more information about these parameters, see [[#TRANSFER statement|TRANSFER statement]] and also [[#Login command line formatting|Login command line formatting]]. [[#Login command line formatting|Login command line formatting]] shows the effect on automatic login formatting of all the dependencies and combinations of the DEFINE PROCESS and TRANSFER parameters.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Trusted transfers====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Trusted transfers are possible between &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; Onlines that have LOGIN=TRUST on both DEFINE PROCESSGROUPs. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Pass an automatically formatted login string with no password at the time of transfer along with whatever PASSING data is entered.&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Make sure LOGIN=TRUST is specified on both DEFINE PROCESSGROUPs; LOGIN=NOTRUST is the default.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Make sure the receiving side&#039;s DEFINE PROCESSGROUP command REMOTEID parameter is set to the SNA Communications Server applid of the transferring side.   &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Make sure the transferring side&#039;s DEFINE PROCESS command  PARTNER parameter is set to the processgroup name of the receiving side. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Indicate automatic formatting. Set the transferring side&#039;s DEFINE  PROCESS command UIDSOURCE parameter to a value other than the default, NONE. UIDSOURCE=NONE prevents automatic login  formatting. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Indicate where to get the user ID. If UIDSOURCE=CURRENT, the transferring user&#039;s current user ID is used. If UIDSOURCE=OPEN, the user ID specified on the TRANSFER statement USERID parameter is used.&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 trusted feature is nullified if you include a password in the TRANSFER statement PASSWORD parameter. In this case, the transfer is permitted but the PASSWORD value is checked at the receiving side. &amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Non-trusted transfer options====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Non-trusted transfers are between &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; Onlines that have LOGIN=NOTRUST set on either of the DEFINE PROCESSGROUP commands. Formatting options follow:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Pass an automatically formatted login string along with PASSING data.&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Indicate automatic formatting. Set the transferring side&#039;s DEFINE PROCESS command UIDSOURCE parameter to a value other than the default, NONE. UIDSOURCE=NONE prevents automatic login formatting. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Indicate where to get the user ID. If UIDSOURCE=CURRENT, the transferring user&#039;s current user ID is used. If UIDSOURCE=OPEN, the user ID specified on the TRANSFER statement USERID parameter is used. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Indicate where to get the password. Provide for one either in the automatically formatted login string (code the TRANSFER statement PASSWORD parameter) or by entering it in response to a prompt at the receiving side. &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;Have no automatic login string formatted. This is the default option.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Indicate no automatic formatting by not setting the&lt;br /&gt;
DEFINE PROCESS command UIDSOURCE parameter.&lt;br /&gt;
UIDSOURCE=NONE, the default, prevents automatic formatting of the login string. UIDSOURCE=OPEN with the TRANSFER statement USERID parameter not set also means do not automatically format a login string (see [[#Login command line formatting|Login command line formatting]]). &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
LOGIN need not be set since LOGIN=NOTRUST is the default.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Include any login information in the PASSING data.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Coordinating TRANSFER and DEFINE PROCESS parameters====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The options selected in the DEFINE PROCESS and TRANSFER CONTROL statement determine whether the Transfer Control facility automatically formats a &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; login data string. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
[[#Login command line formatting|Login command line formatting]] shows the resulting determination for the DEFINE PROCESS and TRANSFER CONTROL combinations. The values in the table have the following meanings:  &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;table class=&amp;quot;thJustBold&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;DPU&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Depends if USERID is set or not &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;ERR&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Cancel request and issue error message&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;N/A&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Not applicable &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;NO&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;No automatic formatting; assume transfer is to a non-&amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; SNA Communications Server&lt;br /&gt;
application&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;YES&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Automatically format login data&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;
===Security for Model 204-to-Model 204 transfers===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
SNA Communications Server Transfer Control enables transfer from one &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; Online to another without the necessity of entering a password at the destination Online. To be sure that such a transfer is secure, the Transfer Control facility has security measures to control: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The users who can access the destination &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; Online &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;The system from which a user can transfer &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;The format of the passed data &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 rest of this section discusses Transfer Control facility protection for transfers from one &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; Online to another. For transfer to a non-&amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; application, there is no automatic formatting and passing of a login command line. The security measures described below are not applicable.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====User access protection====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The Transfer Control facility uses &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; login and subsystem security to facilitate and secure the access of a transferred user to the receiving &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; system. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Login security ordinarily ensures that a user has a valid user ID and, if included, a valid password. Transfer Control uses the &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;trusted partner&amp;lt;/var&amp;gt; feature, which enables login of a transferred user without a password. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
A trusted transfer requires that &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;both&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; Onlines involved have LOGIN=TRUST included in their processgroup definitions. The transferred user is logged in without a password and is assigned privileges as usual (from CCASTAT or an external security package) according to user ID. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
For more information about login privileges, see the login security description in&lt;br /&gt;
[[DEFINE PROCESSGROUP command: Transfer Control]]&lt;br /&gt;
and see [[Security#Subsystem_security|Subsystem_security]]. &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; Only ACF2 is supported for Trusted Login; Security Server (formerly RACF) and Top Secret are not. Also, Guest User is not supported for SNA Communications Server Transfer Control. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can optionally include a password in the data passed in a transfer where both sides have LOGIN=TRUST. However, such a transfer thereby becomes non-trusted. The password is checked at the receiving side and the user is processed according to normal &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; login security. Non-trusted transfers between &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; Onlines always require that a valid password be supplied to the receiving side. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====System-level protection====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
DEFINE command parameter settings at both &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; systems participating in a trusted transfer must be coordinated to enable an automatic login upon transfer to take place:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;DEFINE PROCESSGROUP    &lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The receiving side&#039;s REMOTEID parameter must be set to the SNA Communications Server applid of the transferring side. This SNA Communications Server applid is part of the formatted command line passed to and checked at the receiving side. An invalid applid value prevents automatic login at the receiving side. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;DEFINE PROCESS  &lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The transferring side&#039;s PARTNER parameter must be set to the processgroup name of the receiving side. This processgroup name is part of the formatted command line passed to and checked at the receiving side. An invalid PARTNER value prevents automatic login at the receiving side. &amp;lt;/p&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;
These DEFINE command parameter settings are not checked at the receiving side if the transfer is non-trusted.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Command line protection====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Both trusted and non-trusted transfers between &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; Onlines can include an accompanying automatically formatted LOGIN command string. Whether this automatic formatting occurs depends on the parameter options set on the TRANSFER statement and on the transferring side&#039;s DEFINE PROCESS command. For more information about this automatic formatting, see [[#Login command line formatting|Login command line formatting]]. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The Transfer Control facility protects an automatically formatted LOGIN command string by encryption. The encrypted string is decrypted by the receiving Online. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===$REMOTE for transferring back===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
For transfers into a &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; Online from another &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; Online, the $REMOTE function simplifies transfer back to the initial Online. $REMOTE returns the SNA Communications Server applid of the original &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; Online. This value is used by a User Language request at the destination Online if a return transfer is desired.   &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Syntax====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The $REMOTE function takes no arguments. If an IODEV=7 thread is used to connect to a &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; Online, $REMOTE returns an 8-byte character string consisting of the SNA Communications Server applid of a remote &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; Online. If the user transferred into the &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; Online from a non-&amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; Online, $REMOTE returns blanks. $REMOTE returns a value only if used with an IODEV=7 thread.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Operation====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
In the discussion that follows, the &amp;quot;initial side&amp;quot; is the &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; Online from which a user is transferred. The &amp;quot;receiving side&amp;quot; is the &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; Online to which the user is transferred.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Implementing a return transfer with $REMOTE requires coordination of the receiving side&#039;s network definitions and return TRANSFER statement. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Network definitions&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Set up the receiving side&#039;s DEFINE LINK and DEFINE PROCESSGROUP commands as recommended thus far beginning in [[#SNA Communications Server Transfer Control|SNA Communications Server Transfer Control]], in the [[DEFINE command]] descriptions, and in [[#SNA Communications Server Transfer Control examples|SNA Communications Server Transfer Control examples]].&lt;br /&gt;
The DEFINE PROCESS definition involves the crucial tactic: Define a process with the same process name as the process group definition REMOTEID value, namely, the SNA Communications Server applid of the initial side. &amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;TRANSFER statement&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Capture the value of $REMOTE in a %variable. Use this %variable as the processname %variable on a TRANSFER statement issued at the receiving side. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The TRANSFER statement is thus directed via $REMOTE to the process definition, and via the process definition to the processgroup REMOTEID, which points to the initial side. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
This approach increases in value as the number of potential transfer partners increases. Only a new process and processgroup have to be defined for each new partner; the User Language request with the TRANSFER statement remains the same.&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Example====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
In the following example, a user has been transferred into a &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; Online with SNA Communications Server applid M204B, from a &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; Online with SNA Communications Server applid M204A. Using the following DEFINE commands and User Language request, the user is transferred back to the initial &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; Online, M204A, logged in with the current user ID and trusted password, and placed into an APSY subsystem called INQUIRY. &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;*&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;* Network Definitions for M204B, the&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;* destination Online:&lt;br /&gt;
 &lt;br /&gt;
DEFINE LINK M204BL WITH SCOPE=SYSTEM     -&lt;br /&gt;
  PROTOCOL=TRANSFER  -&lt;br /&gt;
  TRANSPORT=TERMINAL&lt;br /&gt;
 &lt;br /&gt;
DEFINE PROCESSGROUP M204BPG WITH SCOPE=SYSTEM     -&lt;br /&gt;
  LINK=M204BL   -&lt;br /&gt;
  REMOTEID=M204A   -&lt;br /&gt;
  LOGIN=TRUST&lt;br /&gt;
 &lt;br /&gt;
DEFINE PROCESS M204A WITH SCOPE=SYSTEM     -&lt;br /&gt;
  PARTNER=M204APG   -&lt;br /&gt;
  DESTINATION=M204BPG   -&lt;br /&gt;
  DATALEN=100   -&lt;br /&gt;
  MODE=PASS  -&lt;br /&gt;
  UIDSOURCE=CURRENT&lt;br /&gt;
 &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;*&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;* Opening of the link:&lt;br /&gt;
 &lt;br /&gt;
OPEN LINK M204BL&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;*&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The User Language statements for transferring back to M204A follow:&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;
%PROCSNAME = $REMOTE&lt;br /&gt;
%DATA = &#039;INQUIRY&#039;&lt;br /&gt;
 .&lt;br /&gt;
 .&lt;br /&gt;
 .&lt;br /&gt;
TRANSFER CONTROL TO PROCESS %PROCSNAME    -&lt;br /&gt;
PASSING %DATA&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;b&amp;gt;When a transfer fails&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When a TRANSFER statement is invoked and the transfer fails, the $REMOTE function returns an 8-character string of blanks.     &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Error handling===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Error conditions during SNA Communications Server transfers are listed below followed by their remedies.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The session is not established when attempting transfer to a SNA Communications Server application, and the user is left in native SNA Communications Server.  &lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
For example, if a user is transferred to a &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; Online and no threads are available, the session is rejected and the user is left in native SNA Communications Server. In this case, the initial &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; Online is notified that the session was not established in the destination SNA Communications Server application. The user is not logged out of the initial &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; Online until either this notification is received or the TIMEOUT parameter on the DEFINE PROCESS command expires. &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 TIMEOUT parameter is a safeguard against a terminal hang while establishing the session with the destination SNA Communications Server application. &lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;An incorrect password or user ID is passed to the destination Online with the transfer, and the user is left at command level in the destination Online.  &lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The user can attempt to login manually to the destination Online. Once the login process is correctly completed, the rest of the passed command string is processed.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;After the user is logged in at the destination &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; Online, an error occurs while the rest of the command string is being processed; the user is left at command level in the destination Online.  &lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
A message is issued indicating the user&#039;s original &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; Online VTAMNAME and current &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; Online VTAMNAME. Also, the User Language $REMOTE function is available. $REMOTE returns to the User Language request the SNA Communications Server applid of the &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; Online that initiated the transfer. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
A User Language request can use the SNA Communications Server applid of the initial Online to transfer the user back to that Online, as described on [[#$REMOTE for transferring back|$REMOTE for transferring back]]. &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;
==SNA Communications Server Transfer Control examples==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
This section has a series of examples of SNA Communications Server transfers. The examples show different combinations of partner characteristics (&amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; and non-&amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt;, trusted and non-trusted) and formatting of command lines (automatically formatted login or user-formatted).&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Example 1: To a non-Model 204 SNA Communications Server application===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The transfer is to a SNA Communications Server application other than &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; and transferred into the SNA Communications Server application ANYAPPL. For the side initiating the transfer: &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;* Network definitions&lt;br /&gt;
 &lt;br /&gt;
DEFINE LINK TRANF1 WITH SCOPE=SYSTEM     -&lt;br /&gt;
       PROTOCOL=TRANSFER  -&lt;br /&gt;
       TRANSPORT=TERMINAL&lt;br /&gt;
 &lt;br /&gt;
DEFINE PROCESSGROUP TRANF1PG WITH SCOPE=SYSTEM    -&lt;br /&gt;
       LINK=TRANF1  -&lt;br /&gt;
       REMOTEID=ANYAPPL&lt;br /&gt;
 &lt;br /&gt;
DEFINE PROCESS TRANF1PR WITH SCOPE=SYSTEM    -&lt;br /&gt;
       DESTINATION=TRANF1PG  -&lt;br /&gt;
       PARTNER=ANYAPPL  -&lt;br /&gt;
       DATALEN=100  -&lt;br /&gt;
       MODE=PASS&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;* Link opening&lt;br /&gt;
 &lt;br /&gt;
OPEN LINK TRANF1&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;* User Language&lt;br /&gt;
 &lt;br /&gt;
BEGIN&lt;br /&gt;
 .&lt;br /&gt;
 .&lt;br /&gt;
%DATA=&#039;TRANSFERRED FROM A MODEL204 ONLINE&#039;&lt;br /&gt;
TRANSFER CONTROL TO PROCESS TRANF1PR PASSING %DATA&lt;br /&gt;
 .&lt;br /&gt;
 .&lt;br /&gt;
 .&lt;br /&gt;
END&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Comments====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Since the side receiving the transfer is not a &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; application, no &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; login string is formatted. The value of the DEFINE PROCESS parameter PARTNER is the SNA Communications Server applid of the destination and not the name of the process group defined at the destination. The SNA Communications Server applid is used because the application transferred to is not a &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; Online, which rules out the possibility of a trusted transfer.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Example 2: From Model 204 to another Model 204, with NOTRUST===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The user transfers from a &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; Online to another &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; Online. The processgroups for both partners are defined with LOGIN=NOTRUST (the default). The transferring user is logged out of the initial &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; Online and transferred to the receiving side, whose SNA Communications Server applid is M204B. M204B accepts this user as a normal SNA Communications Server login and processes the rest of the passed data string. For the side initiating the transfer: &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;* Network definitions&lt;br /&gt;
 &lt;br /&gt;
DEFINE LINK TRANF1 WITH SCOPE=SYSTEM    -&lt;br /&gt;
       PROTOCOL=TRANSFER  -&lt;br /&gt;
       TRANSPORT=TERMINAL&lt;br /&gt;
 &lt;br /&gt;
DEFINE PROCESSGROUP TRANF1PG WITH SCOPE=SYSTEM    -&lt;br /&gt;
       LINK=TRANF1  -&lt;br /&gt;
       REMOTEID=M204B&lt;br /&gt;
 &lt;br /&gt;
DEFINE PROCESS TRANF1PR WITH SCOPE=SYSTEM    -&lt;br /&gt;
       DESTINATION=TRANF1PG  -&lt;br /&gt;
       PARTNER=M204B  -&lt;br /&gt;
       DATALEN=100  -&lt;br /&gt;
       MODE=PASS&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;* Link opening&lt;br /&gt;
 &lt;br /&gt;
OPEN LINK TRANF1&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;* User Language&lt;br /&gt;
 &lt;br /&gt;
BEGIN&lt;br /&gt;
 .&lt;br /&gt;
 .&lt;br /&gt;
 %DATA=&#039;LOGON USERID;PASSWORD;OPEN PROCFILE;  -&lt;br /&gt;
  I PROC&#039;&lt;br /&gt;
 .&lt;br /&gt;
 .&lt;br /&gt;
 TRANSFER CONTROL TO PROCESS TRANF1PR PASSING  -&lt;br /&gt;
  %DATA&lt;br /&gt;
 .&lt;br /&gt;
 .&lt;br /&gt;
END&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Comments====&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; login data string is formatted &amp;quot;manually&amp;quot; in the User Language request (see %DATA). The value of the DEFINE PROCESS parameter PARTNER is the SNA Communications Server applid of the destination and not the name of the process group defined at the destination. The process group name is not required because the transfer is not a trusted transfer. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Since the transfer is to a non-trusted &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; Online, and a transfer out of that Online is not anticipated, the LINK, PROCESSGROUP, and PROCESS definitions for that Online are not necessary. These definitions are required only for the side initiating a transfer or for both sides when a transfer is trusted.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Example 3: From Model 204 to Model 204 with formatted login data string===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The user transfers from a &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; Online to another &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; Online. The processgroups for both sides are defined with LOGIN=NOTRUST, by default. The LOGON command data string containing the current user ID is built at transfer time. The password is prompted for by the User Language request and passed in the login data string at the time of transfer. For the side initiating the transfer: &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;* Network definitions&lt;br /&gt;
 &lt;br /&gt;
DEFINE LINK TRANF1 WITH SCOPE=SYSTEM    -&lt;br /&gt;
       PROTOCOL=TRANSFER  -&lt;br /&gt;
       TRANSPORT=TERMINAL&lt;br /&gt;
 &lt;br /&gt;
DEFINE PROCESSGROUP TRANF1PG WITH SCOPE=SYSTEM    -&lt;br /&gt;
       LINK=TRANF1  -&lt;br /&gt;
       REMOTEID=M204B&lt;br /&gt;
 &lt;br /&gt;
DEFINE PROCESS TRANF1PR WITH SCOPE=SYSTEM    -&lt;br /&gt;
       DESTINATION=TRANF1PG  -&lt;br /&gt;
       PARTNER=M204B  -&lt;br /&gt;
       DATALEN=100  -&lt;br /&gt;
       MODE=PASS  -&lt;br /&gt;
       UIDSOURCE=CURRENT&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;* Link opening&lt;br /&gt;
 &lt;br /&gt;
OPEN LINK TRANF1&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;* User Language&lt;br /&gt;
 &lt;br /&gt;
BEGIN&lt;br /&gt;
 .&lt;br /&gt;
 .&lt;br /&gt;
%PSWD=$READ(&#039;ENTER PASSWORD&#039;)&lt;br /&gt;
 .&lt;br /&gt;
 .&lt;br /&gt;
%DATA=&#039;OPEN MYFILE;I MYPROC&#039;&lt;br /&gt;
 .&lt;br /&gt;
 .&lt;br /&gt;
TRANSFER CONTROL TO PROCESS TRANF1PR WITH   -&lt;br /&gt;
PASSWORD %PSWD PASSING %DATA&lt;br /&gt;
 .&lt;br /&gt;
 .&lt;br /&gt;
END&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Comments====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The LOGON command line has the format: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;&#039;LOGON currentuserid;password;OPEN MYFILE;I MYPROC&#039;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The current user ID is formatted into the login command string because UIDSOURCE=CURRENT is set on the process definition. The password prompted for at the time of transfer (by $READ) is also formatted into the login command string. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Since the transfer is not trusted, a password must be provided. Once the correct password is identified, the rest of the passed data string is processed. If a correct password is not provided, the user can try to manually log in. If the user eventually logs in successfully, the rest of the passed data string is processed.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Since UIDSOURCE=CURRENT, the transfer is assumed to be to another &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; Online, and the login data string is encrypted. The string is decrypted upon receipt by M204B, the Online to which the user is transferred.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The value of the DEFINE PROCESS parameter PARTNER is the SNA Communications Server applid of the destination and not the name of the processgroup defined at the destination. The processgroup name is not required because the transfer is not a trusted transfer.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Since the transfer is to a non-trusted &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; Online, and a transfer out of that Online is not anticipated, the LINK, PROCESSGROUP, and PROCESS definitions for that Online are unnecessary. These definitions are required only for the side initiating a transfer or for both sides when a transfer is trusted.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Example 4: From Model 204 to Model 204, with TRUST===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The user transfers from a &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; Online to another &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; Online. The system managers have set both &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; Onlines to LOGIN=TRUST. The user is transferred without a password. For M204A, the side initiating the transfer: &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;* Network definitions&lt;br /&gt;
 &lt;br /&gt;
DEFINE LINK M204AL WITH SCOPE=SYSTEM    -&lt;br /&gt;
       PROTOCOL=TRANSFER  -&lt;br /&gt;
       TRANSPORT=TERMINAL&lt;br /&gt;
 &lt;br /&gt;
DEFINE PROCESSGROUP M204APG WITH SCOPE=SYSTEM    -&lt;br /&gt;
       LINK=M204AL  -&lt;br /&gt;
       REMOTEID=M204B  -&lt;br /&gt;
       LOGIN=TRUST&lt;br /&gt;
 &lt;br /&gt;
DEFINE PROCESS M204APR WITH SCOPE=SYSTEM    -&lt;br /&gt;
       PARTNER=M204BPG  -&lt;br /&gt;
       DESTINATION=M204APG  -&lt;br /&gt;
       DATALEN=100  -&lt;br /&gt;
       MODE=PASS  -&lt;br /&gt;
       UIDSOURCE=CURRENT&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;* Link opening&lt;br /&gt;
 &lt;br /&gt;
OPEN LINK M204AL&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
For M204B, the Online to which the user is transferred:&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;* Network definitions&lt;br /&gt;
 &lt;br /&gt;
DEFINE LINK M204BL WITH SCOPE=SYSTEM    -&lt;br /&gt;
       PROTOCOL=TRANSFER  -&lt;br /&gt;
       TRANSPORT=TERMINAL&lt;br /&gt;
 &lt;br /&gt;
DEFINE PROCESSGROUP M204BPG WITH SCOPE=SYSTEM    -&lt;br /&gt;
       LINK=M204BL  -&lt;br /&gt;
       REMOTEID=M204A  -&lt;br /&gt;
       LOGIN=TRUST&lt;br /&gt;
 &lt;br /&gt;
DEFINE PROCESS M204BPR WITH SCOPE=SYSTEM    -&lt;br /&gt;
       PARTNER=M204APG  -&lt;br /&gt;
       DESTINATION=M204BPG  -&lt;br /&gt;
       DATALEN=100  -&lt;br /&gt;
       MODE=PASS  -&lt;br /&gt;
       UIDSOURCE=CURRENT&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;* Link opening&lt;br /&gt;
 &lt;br /&gt;
OPEN LINK M204BL&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;*  User Language&lt;br /&gt;
 &lt;br /&gt;
BEGIN&lt;br /&gt;
 .&lt;br /&gt;
 .&lt;br /&gt;
%DATA=&#039;OPEN FILE;I PROC&#039;&lt;br /&gt;
 .&lt;br /&gt;
 .&lt;br /&gt;
TRANSFER CONTROL TO PROCESS M204APR PASSING %DATA&lt;br /&gt;
 .&lt;br /&gt;
 .&lt;br /&gt;
END&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Comments====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
An encrypted login data string is built using the current user ID, M204B&#039;s process group name (M204BPG), no password (since the transfer is trusted), and the contents of %DATA.   &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The value of the DEFINE PROCESS parameter PARTNER is the process group defined at the destination and not the SNA Communications Server applid of the destination Online. The process group is used because the transfer is trusted. For security, the destination process group name is passed in the login command line and checked.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The user is logged into M204B without a password for two reasons:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;M204A knows the trusted processgroup name of M204B (PARTNER=M204BPG).&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;M204B&#039;s processgroup M204BPG is set with REMOTEID equal to M204A&#039;s SNA Communications Server applid and LOGIN=TRUST.  &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;
Since the transfer to M204B is to a trusted &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; Online, the LINK and PROCESSGROUP definitions for that Online are necessary. The PROCESS definition for that Online is optional unless a transfer out of that Online is anticipated.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Although the process definition for M204B is not necessary for a transfer to M204B, it can be specially defined so that M204B can transfer the user back to the initial Online, M204A. For more information about return transfers, see [[#Security for Model 204-to-Model 204 transfers|Security for Model 204-to-Model 204 transfers]].&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Example 5: From trusted to non-trusted Model 204===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The user transfers from a trusted &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; Online to a non-trusted &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; Online. The user is prompted for a password in the destined Online, after which the rest of the login data string is acted upon. For M204A, the side initiating the transfer: &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;* Network definitions&lt;br /&gt;
 &lt;br /&gt;
DEFINE LINK M204AL WITH SCOPE=SYSTEM    -&lt;br /&gt;
       PROTOCOL=TRANSFER  -&lt;br /&gt;
       TRANSPORT=TERMINAL&lt;br /&gt;
 &lt;br /&gt;
DEFINE PROCESSGROUP M204APG WITH SCOPE=SYSTEM    -&lt;br /&gt;
       LINK=M204AL  -&lt;br /&gt;
       REMOTEID=M204B  -&lt;br /&gt;
       LOGIN=TRUST&lt;br /&gt;
 &lt;br /&gt;
DEFINE PROCESS M204APR WITH SCOPE=SYSTEM    -&lt;br /&gt;
       PARTNER=M204BPG  -&lt;br /&gt;
       DESTINATION=M204APG  -&lt;br /&gt;
       DATALEN=100  -&lt;br /&gt;
       MODE=PASS  -&lt;br /&gt;
       UIDSOURCE=OPEN&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;* Link opening&lt;br /&gt;
 &lt;br /&gt;
OPEN LINK M204AL&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
For M204B, the Online to which the user is transferred:&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;* Network definitions&lt;br /&gt;
 &lt;br /&gt;
DEFINE LINK M204BL WITH SCOPE=SYSTEM    -&lt;br /&gt;
       PROTOCOL=TRANSFER  -&lt;br /&gt;
       TRANSPORT=TERMINAL&lt;br /&gt;
 &lt;br /&gt;
DEFINE PROCESSGROUP M204BPG WITH SCOPE=SYSTEM    -&lt;br /&gt;
       LINK=M204BL  -&lt;br /&gt;
       REMOTEID=M204A  -&lt;br /&gt;
       LOGIN=NOTRUST&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;* Link opening&lt;br /&gt;
 &lt;br /&gt;
OPEN LINK M204BL&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;*  User Language&lt;br /&gt;
 &lt;br /&gt;
BEGIN&lt;br /&gt;
 .&lt;br /&gt;
 .&lt;br /&gt;
%UID=$READ(&#039;ENTER USERID&#039;)&lt;br /&gt;
 .&lt;br /&gt;
 .&lt;br /&gt;
%DATA=&#039;OPEN FILE;I PROC&#039;&lt;br /&gt;
 .&lt;br /&gt;
 .&lt;br /&gt;
TRANSFER CONTROL TO PROCESS M024APR WITH USERID    -&lt;br /&gt;
%UID PASSING %DATA&lt;br /&gt;
 .&lt;br /&gt;
 .&lt;br /&gt;
END&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Comments====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
A login data string is built using %UID, no password, and the %DATA contents. The login data string is encrypted and passed to M204B. M204B decrypts the login data string and prompts for a password. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Because the processgroup M204BPG is defined with LOGIN=NOTRUST, and no password is passed, the user is prompted for a password. After the correct password is entered, the rest of the passed data string is processed. If the correct password is not given, the user can try to manually log in. If the user eventually logs in successfully, the rest of the passed data string is processed.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The value of the DEFINE PROCESS parameter PARTNER is the processgroup defined at the receiving side. It could also be the SNA Communications Server applid of the receiving Online. Because the transfer is not trusted, the processgroup name is neither passed with the login command line nor checked for at the receiving Online.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Since the transfer to M204B is to a non-trusted &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; Online, the LINK and PROCESSGROUP definitions for that Online are not necessary. The PROCESS definition for that Online is optional unless a transfer out of that Online is anticipated.               &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
==Horizon==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
This section provides a brief overview of the optional distributed application facility, Horizon, and the User Language statements that support it.&lt;br /&gt;
The &amp;lt;var class=&amp;quot;book&amp;quot;&amp;gt;Rocket Model 204 Horizon: Intersystem Processing Guide&amp;lt;/var&amp;gt;&lt;br /&gt;
provides detailed information on using Horizon. This information includes syntax and usage description for the User Language statements and &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; commands, as well as information relating to the installation and use of a Horizon network.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
IBM has determined a set of conventions governing communication between different members of a computer network. These conventions, defining the structure of the network and the rules for communication within the network, are IBM&#039;s Systems Network Architecture (SNA). One subset of these conventions are the LU (logical unit) 6.2 protocols, which are conversation rules that cover SNA program-to-program communications.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The LU 6.2 protocols govern communication between &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; programs residing in the same or different Online environments. Other protocols govern other types of communication. For example, communication between User Language requests and CICS programs or CMS EXECs in the same Online environment use non-conversational process-to-process protocols.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Horizon verbs are Model 204 commands and User Language statements===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The LU 6.2 conversation rules are enforced by software that consists of a group of instructions, or verbs, that control the maintenance of the network and the interactions between conversation partners. The &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; LU 6.2 interface, Horizon, 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; commands and User Language statements:&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 class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; commands define and control a network that includes the host &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; program.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;The User Language statements correspond to LU 6.2 conversation verb definitions and govern conversations between the host &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; program and other partner &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; or non-&amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; programs. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Horizon uses variations of several of the User Language statements and &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; commands that are used with the TPROCESS facility (discussed on [[#User Language TPROCESS communication|User Language TPROCESS communication]]). &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
LU 6.2 security considerations slightly affect some SUBSYSMGMT screens&lt;br /&gt;
(see the&lt;br /&gt;
&amp;lt;var class=&amp;quot;book&amp;quot;&amp;gt;[http://www.rocketsoftware.com/m204/products/model204/documentation/v7r4/M204-System-Mgr/view Rocket Model 204 System Manager&#039;s Guide]]&amp;lt;/var&amp;gt;)&lt;br /&gt;
and the &amp;lt;var class=&amp;quot;book&amp;quot;&amp;gt;Rocket Model 204 Security Interfaces Manual&amp;lt;/var&amp;gt;. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===User Language interface===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The LU 6.2 User Language statements that can be issued by a program are dependent on the state of the particular conversation. This state can be determined through the use of the QUERY PROCESS statement, which is described in this section. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
In keeping with error handling for TPROCESS (discussed on [[#Error handling for TPROCESS statements|Error handling for TPROCESS statements]]), error conditions encountered during the execution of the Horizon User Language statements are not displayed on the terminal. The User Language request should check for errors by using the $STATUS and $STATUSD functions. The text of the most recently issued error message can be retrieved by using the $ERRMSG function.    &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====OPEN PROCESS statement====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The OPEN PROCESS statement initiates the conversation. This involves the allocation of an existing session or the starting of a new session, if possible.       &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
There are two distinct uses of the OPEN PROCESS statement:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The client process uses OPEN PROCESS to allocate an outbound conversation; that is, to invoke a server process. Allocation involves creating control blocks, getting control of a session for the conversation, and requesting the initiation of the server process at the remote site with optional initialization parameters.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;The server process uses OPEN PROCESS to identify an inbound conversation. An inbound OPEN PROCESS statement (that is,&lt;br /&gt;
OPEN PROCESS with the ACCEPT operand) can be issued only by a server process. Its purpose is to get any initialization parameters specified in the initiation of the conversation by the client process. &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, the OPEN PROCESS statement establishes the conversation ID (CID) for both types of conversations.  &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====CONFIRM statement====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The CONFIRM statement sends a confirmation request to a remote process. The User Language request then waits for the receiver to issue CONFIRMED or SEND ERROR. This statement allows the local and remote processes to synchronize their processing with one another. The conversation buffer is flushed as a result of this statement. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====CONFIRMED statement====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The CONFIRMED statement sends a positive confirmation to the remote process that the last statement was executed successfully. This is issued only in response to a CONFIRM request. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====CLOSE PROCESS statement====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The CLOSE PROCESS statement deallocates the specified conversation from the process.  &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====FLUSH PROCESS statement====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The FLUSH PROCESS statement causes the conversation buffer to be sent to the conversation partner.  &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====INVITE statement====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The INVITE statement permits a program to request data from one or more partners simultaneously and allows the issuing program to continue to run while its requests for data are being processed. The INVITE statement causes the send buffer to be flushed to the partner, and places the partner in Send state, enabling the partner to send data when it is ready. After INVITE is issued, the issuing program continues to execute.  &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====QUERY PROCESS statement====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The QUERY PROCESS statement returns information about a conversation. The information returned depends on the parameters specified; the types of information include:     &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Current conversation state of the conversation&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Name of the process group associated with the conversation&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Name of the LU at which the remote process is located&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Level of synchronization processing used for the conversation (that is, whether confirmation processing is allowed)&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Mode name for the session that the conversation is using&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====RECEIVE statement====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The RECEIVE statement receives any data sent by the remote process.   &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====SIGNAL PROCESS statement====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The SIGNAL PROCESS statement notifies the remote process that the local process is requesting to enter SEND state.     &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====SEND statement====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The SEND statement transmits data to the remote process.    &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====SEND ERROR statement====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The SEND ERROR statement sends negative acknowledgments indicating that the local process detected an application error. SEND ERROR forces a conversation interruption.   &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====TEST RECEIPT statement====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The TEST RECEIPT statement determines whether or not a partner process has sent anything in reply to an INVITE statement. Using TEST RECEIPT allows the issuing program to perform other tasks while the partner is preparing its reply to the INVITE. After a reply is detected, the RECEIVE statement is used to store the data sent.     &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====WAIT FOR RECEIPT statement====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The WAIT FOR RECEIPT statement causes the issuing User Language program to stop running until a reply is received from the specified remote partner(s). After a reply is detected, the RECEIVE statement is used to store the data sent.  &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
==BATCH2 facility==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The BATCH2 utility program accesses a &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; Online that is running in a separate region, partition, or virtual machine. BATCH2 establishes a remote User Language connection which emulates a line-by-line terminal. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The BATCH2 utility program reads a user-specified input data stream and transmits this data to the &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; Online. The resulting output generated by the Online is written to a user-specified output data stream. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can set a job-step return code in BATCH2 jobs. In addition to the abnormal termination error codes, 300 and 600, BATCH2 now returns a user&#039;s return code to the job step or exec. &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;If BATCH2... &amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Return code value is...&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;Completes normally &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Highest return code received by the user of the BATCH2 thread. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Unlike in a single user job, this value is independent of the highest return code value for the entire Online job. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When invoking BATCH2, the job-step or exec specifies the type of return code to return: a batch or Online value.&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 nowrap&amp;gt;Terminates abnormally &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Same completion codes as in previous releases, 300 or 600. These are return codes for the BATCH2 job itself and are not user values.&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;
====Usage notes====&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The return code is specific to each user. If the User Language stream in the BATCH2 CCAIN file logs on more than one user, the value returned is for the last user logged on; it is not the highest return code received by any other user of the thread.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;If a user runs as a connected but not logged on user (that is, no user was logged on in the CCAIN stream), then BATCH2 returns no user return code; the return code is 0.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;BATCH2 logs the user out of &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; when it reaches the end of the CCAIN stream. If the LOGOUT command is explicitly entered in the CCAIN stream, then no user is logged on when BATCH2 terminates and issues its final LOGOUT. In this case the return code is not available to BATCH2 and the return code is 0. Therefore, to obtain the BATCH2 return code, do not enter the LOGOUT command in the CCAIN stream. Also, if message M204.0353 is set to NOTERM with the MSGCTL command, return codes will not be available unless CUSTOM=6 is set.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;$Jobcode can now be called by Online as well as batch users. This means that calls to $Jobcode can now be included in the CCAIN stream. See [[$Jobcode#$Jobcode|$Jobcode]].&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Support required for BATCH2===&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The z/OS or z/VSE BATCH2 user must access &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; with an IODEV=29 thread; a CMS user must use an IODEV=39 thread. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;The M204IFAM EXEC must be available on the CMS machine that is running the BATCH2 utility. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;For z/OS and z/VSE, CRAM must be installed.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Specifying runtime parameters===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can specify the channel name of the &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; Online to which the BATCH2 utility is connecting and can control the messages BATCH2 displays in the output stream by setting the channel name and OMC runtime (User 0) parameters. Examples showing where and how these parameters are specified for each operating system are provided beginning with [[#z/OS JCL using BATCH2|z/OS JCL using BATCH2]] through [[#CMS job using BATCH2|CMS job using BATCH2]].&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Channel name parameter====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The channel name determines the specific &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; Online with which BATCH2 establishes a connection. &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; system manager should supply the channel name for the Online to which you want to connect. If you do not specify the channel name parameter, a default value of M204PROD for z/OS and z/VSE or M204VMIO for z/VM is used. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Output Message Control (OMC) parameter====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The OMC parameter allows you to specify a category of output messages to be discarded. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
For example, suppose the input data stream contains an OPEN NEWFILE command. BATCH2 transmits this data to the ONLINE when it is read from the input data stream. The Online region sends BATCH2 the following message:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;M204.0620: FILE NEWFILE OPENED&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When this message is received, BATCH2 writes it to the output data stream.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If you do not want this type of message written to the output data stream, specify the appropriate value in the OMC parameter. In this example, the M204.0620 message belongs to the information message category (Class I). If you specify an OMC parameter value of 4, BATCH2 discards this and all Class I messages.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====OMC options====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Under z/OS or CMS, you can specify the OMC parameter value, in either decimal (ddd) or hexadecimal (hh) form, as any combination of the options in [[#Specifying runtime parameters|Specifying runtime parameters]]. Values can be summed. Equivalent bit settings for z/VSE are shown in [[#z/VSE JCL using BATCH2|z/VSE JCL using BATCH2]].&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;caption&amp;gt;OMC parameter 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;Decimal (&amp;lt;i&amp;gt;ddd&amp;lt;/i&amp;gt;)&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Hexadecimal (&amp;lt;i&amp;gt;hh&amp;lt;/i&amp;gt;)&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Discards...&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;128&amp;lt;/td&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;Class E messages (error messages)&amp;lt;/td&amp;gt;&lt;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;64&amp;lt;/td&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;New page indicator (page eject)&amp;lt;/td&amp;gt;&lt;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;32&amp;lt;/td&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;This job, if the user is restarted&amp;lt;/td&amp;gt;&lt;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;16&amp;lt;/td&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;Nondisplay input prompt messages&amp;lt;/td&amp;gt;&lt;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;8&amp;lt;/td&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;$READ prompt messages&amp;lt;/td&amp;gt;&lt;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;4&amp;lt;/td&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;Class I messages (informational messages)&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 default value for the OMC parameter is zero, which results in these actions:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;All messages are written to the CCAOUT data stream.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;The new page requests are honored with a page eject.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;The user restarted condition is ignored. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====User return code (URCTYPE) parameter====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The URCTYPE parameter specifies the type of return code that BATCH2 returns to the job-step or exec that invoked the utility. The parameter is a single character:&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; 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;N (default) &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Zero (0) and is equivalent to omitting the 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;O &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Online value&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;B &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Batch value&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;
===Input and output data streams===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
BATCH2 uses the CCAIN and CCAOUT files for the input and output data streams, respectively. You can control some characteristics of the input and output data streams by setting User 0 input and output parameters.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Specifying input stream characteristics====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
CCAIN defines the input data stream to be transmitted to the &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; ONLINE. BATCH2 reads this data stream and transmits each record to the ONLINE. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The data stream appears to the ONLINE as if it were transmitted by a line-by-line terminal. Therefore, the &amp;lt;var&amp;gt;[[INMRL parameter|INMRL]]&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;[[INCCC parameter|INCCC]]&amp;lt;/var&amp;gt; User 0 parameter values for this thread determine, respectively, the maximum length of the input line and the continuation character position.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Specifying output stream characteristics====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
CCAOUT defines where the output data stream, the output generated for this user from the &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; Online, is written. BATCH2 receives the output from the Online and writes each record to the output data stream. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Because BATCH2 emulates a line-by-line terminal, the values of the User 0 parameters &amp;lt;var&amp;gt;[[OUTMRL parameter|OUTMRL]]&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;[[OUTCCC parameter|OUTCCC]]&amp;lt;/var&amp;gt; for this thread determine, respectively, the maximum length of the output line and the continuation character position.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Using *DEVICE command in BATCH2 jobs====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
To change the values used for OUTMRL and OUTLPP, use the *DEVICE command and the RESET command. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If an input line begins with *DEVICE, followed by a number, a comma, and another number, the first number is used to change the value used for OUTMRL and the second is used to change OUTLPP. &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 values of OUTMRL and OUTLPP (as returned by the VIEW command) are not actually updated, however, until the RESET command is issued.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
This is the &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;only&amp;lt;/var&amp;gt; way to affect the value of OUTMRL used for output lines; that is, the RESET OUTMRL command does not have the effect of changing the buffer size of OUTMRL unless it is preceded by a *DEVICE 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 *DEVICE command is:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;*DEVICE &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;n1&amp;lt;/span&amp;gt;,&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;n2&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;n1&amp;lt;/var&amp;gt; specifies characters per line, and &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;n2&amp;lt;/var&amp;gt; specifies lines per page. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
For example, this line changes the value used for OUTMRL to 132 and OUTLPP to 55:&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;*DEVICE 132,55&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You do&amp;lt;var&amp;gt; not&amp;lt;/var&amp;gt; need to be logged in to issue this command. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===z/OS JCL using BATCH2===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
This example shows sample JCL for a job that uses the BATCH2 facility running under z/OS. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;//  JOB&lt;br /&gt;
//RUN  EXEC  PGM=BATCH2,&lt;br /&gt;
// PARM=&#039;TESTM204,OMC=64,URCTYPE=B&#039;&lt;br /&gt;
//STEPLIB DD DSN=LOCAL.M204.LOAD,DISP=SHR&lt;br /&gt;
//CCAOUT  DD SYSOUT=C&lt;br /&gt;
//CCAIN   DD *&lt;br /&gt;
LOGIN user ID&lt;br /&gt;
password&lt;br /&gt;
OPEN file&lt;br /&gt;
 .&lt;br /&gt;
 .&lt;br /&gt;
 .&lt;br /&gt;
CLOSE ALL&lt;br /&gt;
LOGOUT&lt;br /&gt;
//&lt;br /&gt;
&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 PARM option on the EXEC statement is:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;PARM=&#039;[&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;channel&amp;lt;/span&amp;gt;][,[OMC={X&#039;&#039;&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;hh&amp;lt;/span&amp;gt;&#039;&#039; | &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;ddd&amp;lt;/span&amp;gt;}] &lt;br /&gt;
      [,URCTYPE={N | O | B}]]&#039;&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;channel&amp;lt;/var&amp;gt; is the Online region channel name. If channel is not specified, the name defaults to M204PROD. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;OMC is the keyword which specifies the Output Message Control parameter. You can specify the OMC value in either hh or ddd form. If you do not specify a value, OMC defaults to 0. &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;hh&amp;lt;/var&amp;gt; is a hex value from 00 to FF.&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;ddd&amp;lt;/var&amp;gt; is a decimal value from 0 to 255.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;URCTYPE is the keyword that specifies the type of return code.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Commas must represent defaulted parameters, if later ones are specified.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====PARM option examples====&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;In this example, the PARM= option specifies a channel name of TESTM204 and a hex value of &#039;F0&#039; (the default) for the OMC parameter. &lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;//   PARM=&#039;TESTM204,OMC=X&#039;&#039;F0&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;In this example, the PARM= option setting allows the channel name to default (to M204PROD). The decimal value of 4 for the OMC parameter causes class 1 (information) messages to be discarded. &lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;//   PARM=&#039;,OMC=4&#039;&lt;br /&gt;
&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===z/VSE JCL using BATCH2===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The following example-syntax shows JCL for a job that uses the BATCH2 utility running under z/VSE.    &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;// JOB BATCH2&lt;br /&gt;
// DLBL M204LIB,&#039;M204.PROD.LIBRARY&#039;&lt;br /&gt;
// EXTENT ,SYSnnn, balance of extent information&lt;br /&gt;
// LIBDEF PHASE.SEARCH=M204LIB.V4R2&lt;br /&gt;
// DLBL CCAOUT,&#039;M204.BATCH2.CCAOUT&#039;&lt;br /&gt;
// EXTENT SYSnnn, balance of extent information&lt;br /&gt;
// UPSI bbbbbbbb&lt;br /&gt;
// OPTION SYSPARM=&#039;channel&#039;&lt;br /&gt;
// EXEC BATCH2,SIZE=AUTO, PARM=&#039;channel,urctype&#039;&lt;br /&gt;
LOGIN user ID&lt;br /&gt;
password&lt;br /&gt;
OPEN file&lt;br /&gt;
 .&lt;br /&gt;
 .&lt;br /&gt;
 .&lt;br /&gt;
CLOSE ALL&lt;br /&gt;
LOGOUT&lt;br /&gt;
/*&lt;br /&gt;
/&amp;amp;amp;&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;bbbbbbbb&amp;lt;/var&amp;gt; in the UPSI statement in the preceding example is the Output Message Control (OMC) parameter in bits. If you do not specify a value, OMC defaults to all zeroes. In z/VSE, you can specify the OMC parameter as a combination of the option bits shown in [[#z/VSE JCL using BATCH2|z/VSE JCL using BATCH2]]: &lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;caption&amp;gt;z/VSE OMC parameter 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;Setting&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;10000000&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Discard class E messages (error messages)&amp;lt;/td&amp;gt;&lt;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;01000000&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Ignore new page indicator (page eject)&amp;lt;/td&amp;gt;&lt;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;00100000&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;If the user is restarted, terminate this job&amp;lt;/td&amp;gt;&lt;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;00010000&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Discard nondisplay input prompt messages&amp;lt;/td&amp;gt;&lt;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;00001000&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Discard $READ prompt messages&amp;lt;/td&amp;gt;&lt;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;00000100&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Discard class I messages (informational messages)&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;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;channel&amp;lt;/var&amp;gt; in the OPTION SYSPARM statement in the preceding example is the Online partition channel name. If channel is not specified, the name defaults to M204PROD. See [[#Specifying runtime parameters|Specifying runtime parameters]] for a description of channel name. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;urctype specifies the type of return code, N, O, or B, to return the job step. See [[#Specifying runtime parameters|Specifying runtime parameters]] for return code values and meaning.&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 class=&amp;quot;code&amp;quot;&amp;gt;// UPSE 00000000&lt;br /&gt;
// EXEC BATCH2,SIZE=AUTO,PARM=&#039;CRIOCHNL,B&#039;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===CMS job using BATCH2===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
This example shows sample commands for a job that uses the BATCH2 utility running under CMS. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;&amp;amp;amp;TRACE ERR&lt;br /&gt;
 &lt;br /&gt;
FILEDEF CCAIN DISK BATCH2 CCAIN A&lt;br /&gt;
FILEDEF CCAOUT DISK BATCH2 CCAOUT A&lt;br /&gt;
 &lt;br /&gt;
M204BAT2 TESTM204 64 X&#039;0&#039; &#039;B&#039;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Syntax====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The command to execute the BATCH2 module shown in the example above is: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;M204BAT2 [&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;channel&amp;lt;/span&amp;gt;][X&#039;&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;hh&amp;lt;/span&amp;gt;&#039; | &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;ddd&amp;lt;/span&amp;gt;][&#039;N&#039; | &#039;O&#039; | &#039;B&#039;]&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;channel&amp;lt;/var&amp;gt; is the Online region line mode channel name set by the VMIOCHNL CCAIN parameter. If channel is not specified, the name defaults to M204VMIO. See [[#Specifying runtime parameters|Specifying runtime parameters]] for a description of channel name. &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;hh&amp;lt;/var&amp;gt; is a hex value from 00 to FF and ddd is a decimal value from 0 to 255. You can specify the OMC value in either hexadecimal (hh) or decimal (ddd) form. For a description of valid values, see [[#Specifying runtime parameters|Specifying runtime parameters]]. If no value is specified, the OMC parameter defaults to 0. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&#039;N&#039;, &#039;O&#039;, or &#039;B&#039; specifies the return value of the URCTYPE parameter. See [[#Specifying runtime parameters|Specifying runtime parameters]] for return code values and meanings.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====M204BAT2 statement examples====&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;In this example, the M204BAT2 statement specifies a channel name of TESTM204 and a hex value of 0 (the default) for the OMC parameter. Invoke M204BAT2 with the URCTYPE parameter in quotes:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;M204BAT2 TESTM204 X&#039;0&#039; &#039;B&#039;&lt;br /&gt;
&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;In this example, the M204BAT2 statement allows the channel name to default (M204VMIO). The decimal value of 4 for the OMC parameter causes class 1 (information) messages to be discarded. &lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;M204BAT2 4&lt;br /&gt;
&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Using M204IFAM EXEC====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
During initialization, the BATCH2 utility invokes a procedure called M204IFAM EXEC to obtain the name of the virtual machine running the &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; ONLINE and to obtain the needed IUCV communication method.&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 M204IFAM EXEC must be available on the CMS machine that is running the BATCH2 utility. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
An example of an M204IFAM EXEC is:&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;&amp;amp;amp;STACK LIFO &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;userid&amp;lt;/span&amp;gt; IUCV&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;userid&amp;lt;/var&amp;gt; is the name of the virtual machine that is running the&lt;br /&gt;
&amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; Online.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;IUCV indicates the IUCV communication method.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====REXX EXEC for BATCH2====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
This example shows an EXEC that runs the BATCH2 utility. The EXEC dynamically creates an M204IFAM EXEC file:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;/* REXX example of BATCH2 EXEC */&lt;br /&gt;
 &lt;br /&gt;
arg m204 ccain channel option&lt;br /&gt;
if arg() = 0 then signal noentry&lt;br /&gt;
if m204 = &#039;?&#039; then&lt;br /&gt;
  signal noentry&lt;br /&gt;
continue:&lt;br /&gt;
  &#039;erase m204ifam exec a&#039;&lt;br /&gt;
  &#039;erase batch2 ccaout a&#039;&lt;br /&gt;
  &#039;EXECIO 1 DISKW M204IFAM EXEC A (FINIS ST &amp;amp;amp;STACK LIFO&#039; m204 &#039;IUCV&#039;&lt;br /&gt;
  &#039;filedef ccain disk&#039; ccain &#039;ccain a&#039;&lt;br /&gt;
  &#039;filedef ccaout disk&#039; ccain &#039;ccaout a&#039;&lt;br /&gt;
  &#039;M204BAT2&#039; channel option&lt;br /&gt;
 eexit:&lt;br /&gt;
  exit rc&lt;br /&gt;
 noentry:&lt;br /&gt;
  say &#039;To use BATCH2 EXEC enter the following arguments:&#039;&lt;br /&gt;
 say &#039;M204 service machine, BATCH2 ccain, channel and&lt;br /&gt;
 BATCH2 options&#039;&lt;br /&gt;
  rc=4&lt;br /&gt;
 signal eexit&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===BATCH2 completion codes===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Upon termination, the BATCH2 facility returns a completion code. [[#BATCH2 completion codes|BATCH2 completion codes]] lists possible values:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;caption&amp;gt;BATCH2 completion codes&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;Setting&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;Successful completion&amp;lt;/td&amp;gt;&lt;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;300&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Abnormal termination. Refer to CCAOUT for an error message.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If a completion code of 300 is returned, an error message appears in the&lt;br /&gt;
CCAOUT data stream. Some possible errors are:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Invalid channel name parameter value.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Invalid OMC parameter value.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
CCAIN data stream could not be opened.&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 align=&amp;quot;right&amp;quot;&amp;gt;600&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;The CCAOUT data stream could not be opened.&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;
==Thread signaling and synchronization facilities==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
In some applications, User Language programmers need to coordinate processing of two or more threads. For example, one thread may perform process-to-process communication, and then signal the completion of the process to a user represented by a SNA Communications Server thread. At that moment, the user may be working or waiting for the signal. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
User Language has signaling and synchronization capabilities. A thread can: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Send a signal that an event associated with the signal is finished&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Wait for the signal to arrive and examine the contents of a signal&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Implementing thread signaling and synchronization in User Language===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The signal is implemented using an Event Control Block (ECB), a permanent data structure in memory that indicates the event state and user supplied data associated with the event. The ECB is shared by all threads participating in the synchronization process. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;To send a signal to a thread, a User Language application uses the $POST function, which marks the event as posted (or completed) and causes the waiting thread to wake up and resume processing. Furthermore, you can supply a numeric post code that is stored in the ECB, which may be examined by the waiting thread or threads. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;To wait for a signal, a User Language application uses the $WAIT function that puts a thread in a wait state until the event is posted by another thread and the signal arrives. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====ECB-related functions====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Using the $POST and $WAIT functions, you can synchronize the execution of two threads. A User Language application may associate a string of text with an ECB using the $ECBDSET function; the text may be read by other threads using $ECBDGET function.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The following $functions, are available for implementing signaling and synchronization between threads:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;caption&amp;gt;$Functions for signaling and synchronization&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;Purpose &amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;For details see...&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;[[$ECBDGET]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Retrieve string data associated with an ECB. &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;[[$ECBDGET#$ECBDGET|$ECBDGET]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;[[$ECBDSET]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Associate a string of data with an ECB.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;[[$ECBDSET#$ECBDSET|$ECBDSET]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;[[$ECBTEST]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Test an ECB to see whether it is posted or not. &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;[[$ECBTEST#$ECBTEST|$ECBTEST]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;[[$POST]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Indicate that an event has occurred. The thread waiting on an ECB can resume processing.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;[[$POST#$POST|$POST]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;[[$UNPOST]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Indicate that an event did not occur or recur. &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;[[$UNPOST#$UNPOST|$UNPOST]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;[[$WAIT]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Suspend a user until an event happens and the ECB is posted.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;[[$WAIT#$WAIT|$WAIT]]&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;
You can also use these functions to implement a third-party software backup plan for &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt;; see the&lt;br /&gt;
&amp;lt;var class=&amp;quot;book&amp;quot;&amp;gt;[http://www.rocketsoftware.com/m204/products/model204/documentation/v7r4/M204-System-Mgr/view Rocket Model 204 System Manager&#039;s Guide&amp;lt;/var&amp;gt;&lt;br /&gt;
for a chapter on recovery features.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Assigning and using an ECB number====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The ECBs used to synchronize threads are referenced by number in the ECB-related functions. User Language programmers should carefully choose the ECB numbers for use by threads and applications.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Programming thread synchronization in User Language===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Programming thread synchronization in User Language using the ECB-related functions requires a clear understanding of how threads interact with each other. You must avoid situations where deadlocks are possible; for example, when Thread A waits on the signal from Thread B, which is already waiting on a signal from Thread A. In this situation, both threads are unable to run and will wait indefinitely until canceled with a BUMP command. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You must take into consideration that once posted, the ECB remains posted until explicitly unposted using the $UNPOST function. The $WAIT function does not change the ECB contents after completion, so the next invocation of the $WAIT function with the unchanged ECB has exactly the same effect as the first one. Use the $UNPOST function after all the threads waiting on the event have had a chance to run and check the ECB. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Posting and unposting ECBs====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Posting an ECB does not mean that all threads waiting on that ECB can run immediately. Those waiting threads are now eligible to run and will be dispatched by the &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; scheduler based on priority and available resources.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If an ECB is posted and then immediately unposted, any threads that have not yet run and are still waiting on that ECB will never see the post and will continue to wait.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Only an unposted ECB may be posted. Attempting to post an already posted ECB produces a non zero return code; the content of the ECB is not changed. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
A string may be associated with an ECB using the $ECBDSET or $POST functions. However, in most cases you should use the $POST function to associate a string with an ECB. The $POST function stores a string only if the referenced ECB is unposted; the $ECBDSET function stores a string regardless of the state of the ECB.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Thread synchronization programming details====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The number of ECBs available to an Online is determined by the &amp;lt;var[[NECBS parameter|NECBS]]&amp;lt;/var&amp;gt; parameter set in CCAIN. The parameter cannot be reset.&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
ECBs are referenced by a number from 1 to NECBS and are available to any User Language application running on any thread. Therefore, care must be taken when assigning an ECB number to a processes or an application to avoid conflicts. A thread or an application cannot reserve an ECB, because it universal in scope. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You may use a %variable to program an ECB number in all the ECB-related $functions. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If the $ECBDSET function associates a string with an ECB more than once, the $ECBDGET function can retrieve only the most recent string.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Pay special attention to initialization of the synchronization process, since some applications may be sensitive to the order in which threads are initialized. When &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; is initialized, all ECBs are reset to zero, indicating that no events have yet happened. A thread restart has no effect on any ECBs. Therefore, Thread A waiting on a particular ECB will remain waiting even if Thread B, which intended to post that ECB, is restarted prior to the evaluation of the $POST call.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Examples of programming thread synchronization====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
To better understand how User Language synchronization is implemented, lets look at the following example. Thread A (server) performs a service for many client threads. To request a service, a client thread B posts ECB 5, sets a post code indicating the required service, and passes the ECB number. It waits for the service completion, which will be a string associated with ECB 5. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The client thread B also checks whether the post operation was successful. Another client thread C may have already posted ECB 5. In that case, the client thread B waits on ECB 3, which is posted when server thread A finishes with the current request. No provisions for restart are made. If thread A is bumped or fails before it posts ECB 12, client thread B is left in a permanent wait state. A BUMP command or a procedure, which posts thread B with a post code indicating a restart, may be required.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Server thread A====&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;BEGIN&lt;br /&gt;
 REPEAT FOREVER&lt;br /&gt;
  %X = $POST(3,1)&lt;br /&gt;
  %X = $WAIT(5)&lt;br /&gt;
  %CLIENT.ECB = $ECBDGET(5)&lt;br /&gt;
  %POSTCODE = $STATUSD&lt;br /&gt;
  %X = $UNPOST(5)&lt;br /&gt;
  %X = $UNPOST(3)&lt;br /&gt;
  IF %POSTCODE = 1 THEN&lt;br /&gt;
   PERFORM TYPE 1 SERVICE&lt;br /&gt;
  ELSEIF %POSTCODE = 2 THEN&lt;br /&gt;
   PERFORM TYPE 2 SERVICE&lt;br /&gt;
  ELSEIF %POSTCODE = 10 THEN&lt;br /&gt;
    /? REQUEST TO BRING DOWN THE SERVER THREAD ?/&lt;br /&gt;
    %X = $POST(%CLIENT.ECB,0)&lt;br /&gt;
    /? INDICATE TO CLIENT THE REQUEST COMPLETED ?/&lt;br /&gt;
    JUMP TO EXIT&lt;br /&gt;
  END IF&lt;br /&gt;
  IF SERVICE SUCCESSFUL THEN&lt;br /&gt;
      %X = $POST(%CLIENT.ECB,0)&lt;br /&gt;
       /? INDICATE TO CLIENT THE REQUEST ?/&lt;br /&gt;
       /? COMPLETED SUCCESSFULLY ?/&lt;br /&gt;
  ELSE&lt;br /&gt;
   %X = $POST(%CLIENT.ECB,100)&lt;br /&gt;
    /? INDICATE AN ERROR RETURN ?/&lt;br /&gt;
  END IF&lt;br /&gt;
 END REPEAT&lt;br /&gt;
EXIT: END&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Client thread B====&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;BEGIN&lt;br /&gt;
  %MYECB  = 12&lt;br /&gt;
  %ACTION = 1&lt;br /&gt;
  START:&lt;br /&gt;
   %X = $POST(5,%ACTION,%MYECB)&lt;br /&gt;
    /? POST SERVER THREAD AND PASS REQUEST TYPE ?/&lt;br /&gt;
    /? AND ECB NUMBER                           ?/&lt;br /&gt;
   IF %X = 14 THEN&lt;br /&gt;
      /? IF ECB ALREADY POSTED WAIT TILL SERVER ?/&lt;br /&gt;
      /? IS FREE                                ?/&lt;br /&gt;
     %X = $WAIT(3)&lt;br /&gt;
     JUMP TO START&lt;br /&gt;
   END IF&lt;br /&gt;
  %X = $WAIT(%MYECB)&lt;br /&gt;
  %POSTCODE=$STATUSD&lt;br /&gt;
  %X = $UNPOST(%MYECB)&lt;br /&gt;
 &lt;br /&gt;
========* CHECK %POSTCODE AND CONTINUE PROCESSING&lt;br /&gt;
 END&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Each client thread should use a different ECB number for %MYECB. &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; Server thread A code first copies the post code and data into %variables, then it unposts ECB 5. As soon as ECB 5 is unposted, a client thread may post it again and change the post code and associated string. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
==TCP/IP Sockets Interface for Model 204==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The TCP/IP Sockets Interface for &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; gives you the ease and flexibility of making &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; a server or a client simply by writing a User Language application using calls that are described in this section.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The TCP/IP Socket Interface for &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; is designed to follow as closely as possible the Berkeley Sockets interface, as implemented and documented by IBM. Except for the REGISTER call, all the TCP/IP Sockets Interface for &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; calls result in an IBM call of almost the same name. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The IBM programming interface comes with TCP/IP on your operating system. You can consult IBM documentation for more details.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Linking FUNU for ASCII to EBCDIC conversion===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Because it is very common to perform ASCII to EBCDIC conversion and back with a TCP/IP interface, Rocket Software recommends that you link the FUNU module during your &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; installation process or relink it later when you decide to use the TCP/IP Sockets Interface for &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt;. This ensures access to the $ASCII and $EBCDIC functions, which are used for EBCDIC and ASCII conversion to send and receive messages. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;For z/VSE, link the FUNU.A member&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;For z/VM, link the FUNU module&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;For z/OS, edit the SOCKETS parameter in INSPARMS to SOCKETS=Y and provide a decryption key during the installation process. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Understanding sockets===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Sockets is a method for communication between a client program and a server program in a network. A socket is defined as the endpoint in a connection. Sockets are created and used with a set of programming requests or function calls: for TCP/IP Sockets Interface for &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; the $SOCKET and $SOCKETX functions. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Sockets can also be used for communication between processes within the same computer. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
[[#Understanding sockets|Understanding sockets]] illustrates a typical sequence of socket requests in which a server handles data from a single client, and the client then ends the connection.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;caption&amp;gt;Common sequence of calls&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 colspan=&amp;quot;2&amp;quot;&amp;gt;Client calls&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th colspan=&amp;quot;2&amp;quot;&amp;gt;Server calls&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;Specify local--&amp;gt;&lt;br /&gt;
 TCP/IP address&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;INIT&lt;br /&gt;
&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;INIT&lt;br /&gt;
&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
&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;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;SOCKET&lt;br /&gt;
&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;SOCKET&lt;br /&gt;
BIND&lt;br /&gt;
LISTEN&lt;br /&gt;
&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Get a socket to&lt;br /&gt;
&amp;lt;-- receive connections; specify port&amp;lt;/td&amp;gt;&lt;br /&gt;
&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;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Specify remote--&amp;gt;&lt;br /&gt;
 address and port&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;CONNECT--&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;SELECT&lt;br /&gt;
ACCEPT&lt;br /&gt;
&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
&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;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;SETSOCKOPT&lt;br /&gt;
&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Data traffic&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;WRITE--&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;SELECT&lt;br /&gt;
READ&lt;br /&gt;
&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
&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;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;SELECT&lt;br /&gt;
READ&lt;br /&gt;
&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;--WRITE&lt;br /&gt;
&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
&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;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;SHUTDOWN&lt;br /&gt;
CLOSE--&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
&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;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;TERM&lt;br /&gt;
&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;TERM&lt;br /&gt;
&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;amp;nbsp;&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;
===Using the TCP/IP Sockets Interface for Model 204===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can open and use Horizon links at the same time you are using the TCP/IP Sockets Interface for &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt;. However, you cannot use a Horizon verb such as SEND in the interface, nor can you use a call such as SELECT on a Horizon link. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
To allow TCP/IP communications in your Online, the TCPNAME= in CCAIN should point to the z/OS TCP/IP module or the z/VM virtual machine for your operating system. This parameter will default, if not specified. See the &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; Parameter and Command Reference for details.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
==TCP/IP for z/VSE==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The introduction of TCP/IP to z/VSE &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; means that z/VSE sites can access TCP/IP applications. Furthermore, to improve performance, you can write new applications or rewrite older applications to take advantage of TCP/IP. Using TCP/IP is significantly faster than using SNA, LU62, or APPC network service.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
In z/VSE the system programmer can start TCP/IP stacks in one or more z/VSE partitions, and each TCP/IP stack has its own system ID.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Using the TCPNAME parameter for z/VSE===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When the &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; Online starts, it needs to know which of the TCP/IP stacks to talk to. The stack name is passed using the TCPNAME parameter. The format is: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;TCPNAME=00, TCPNAME=01, ...TCPNAME=nn&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
This means the system ID must be a 2-character numeric ID, and it must be coded. The default value for TCPNAME for the z/VSE operating system is 00, and may be coded if the system ID is other than 00.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
This value is used when the first TCP/IP link is opened, and if there is an error setting the ID the following error message is displayed:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;M204.2710: ERROR x SETTING TCP/IP SYSID nn&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;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;x is the return code from the TCP interface&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;nn is the value passed in TCPNAME&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Using TCP/IP-related commands===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Horizon on TCP/IP, the TCP/IP Sockets Interface for &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt;, and SQL/RCL are available to z/VSE sites. The syntax and usage for the following &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; commands that support Horizon for TCP/IP communication are described in the linked individual command descriptions:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[[DEFINE LINK: Horizon for TCP/IP]]&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
In your DEFINE LINK commands when you set PROTOCOL=IP, you must set TRANSPORT=TCPVSE. TCP/IP software for z/VSE sites is available through IBM. Contact your IBM representative for details.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;[[DEFINE PROCESS: Horizon for TCP/IP and VTAM]]&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;[[DEFINE PROCESSGROUP: Horizon for TCP/IP]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
==$SOCKET function==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The calls possible for the $SOCKET function are listed in this section with a description of purpose, syntax, and arguments. Keep in mind that the arguments for the calls are positional, so if you do not enter a value for a particular argument, you should enter a comma as a position marker.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
On z/OS systems, the $SOCKET function supports IPv6 network addresses. You can increase the address parameter on the INIT, CONNECT, and ACCEPT calls from 15 to 45 bytes if you are using IPv6 addresses. Specify IPv4 addresses in the dotted decimal format. IPv6 addresses are in the colon-separated format.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Syntax====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The following is syntax for the $SOCKET function&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;%returncode&amp;lt;/span&amp;gt;=$SOCKET(&#039;&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;socket-call&amp;lt;/span&amp;gt;&#039;,&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;argument1&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;argument2&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;/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;term&amp;quot;&amp;gt;socket-call&amp;lt;/var&amp;gt; is one of the calls described in this section.&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;argument1, argument2&amp;lt;/var&amp;gt;,...are specified in the definition of each call.&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 $SOCKET function illustrates a valid ACCEPT call:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;%rc=$socket(&#039;ACCEPT&#039;,%lsocket,&#039;%rport&#039;,%raddr)&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===ACCEPT call===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The ACCEPT call responds to a connection request from a client after a SELECT call has detected input on the listening socket. This call is issued by the server. The address and port variables are updated, and the call returns the accepted socket number. The returned port variable is not needed; it is not the port number used by the client. &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;(&#039;ACCEPT&#039;, &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;passive-socket-number&amp;lt;/span&amp;gt;, &#039;&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;port-variable-name&amp;lt;/span&amp;gt;&#039;, &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;address-output&amp;lt;/span&amp;gt;[,&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;interface&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;/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;term&amp;quot;&amp;gt;passive-socket-number&amp;lt;/var&amp;gt; specifies by integer the listening socket. It is usually the first socket obtained by a server. &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;port-variable-name&amp;lt;/var&amp;gt; specifies a numeric fixed variable, which holds an output value as an integer. Enclose this argument in single quotation marks.&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;address-output&amp;lt;/var&amp;gt; specifies the dotted decimal address of the client making the connection request. &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;address-output&amp;lt;/var&amp;gt; is a 15-byte string argument in the format &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;nnn.nnn.nnn.nnn&amp;lt;/var&amp;gt;.&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
On z/OS systems, address-output can be an IPv6 address of 45 bytes. The IPv6 address format is up to 8 halfwords separated by colons: &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;nn:nn:nn:nn:nn:nn:nn:nn&amp;lt;/var&amp;gt;, which can also be written as &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;nn:nn:nn:nn::nn&amp;lt;/var&amp;gt;, with the double colon indicating missing halfwords of binary zeroes.&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;var class=&amp;quot;term&amp;quot;&amp;gt;interface&amp;lt;/var&amp;gt; specifies the host port the call applies to. If an interface is not specified, the default is the first or only interface.&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 class=&amp;quot;code&amp;quot;&amp;gt;%rc=$socket(&#039;ACCEPT&#039;,%lsocket,&#039;%rport&#039;,%raddr,%pathname)&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===BIND call===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The BIND call provides the socket number and port number.&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;(&#039;BIND&#039;,&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;socket&amp;lt;/span&amp;gt;,&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;port&amp;lt;/span&amp;gt;[,&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;interface&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;/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;term&amp;quot;&amp;gt;socket&amp;lt;/var&amp;gt; specifies, as an integer, the socket number.&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;port&amp;lt;/var&amp;gt; specifies the server port number as an integer. &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;port&amp;lt;/var&amp;gt; corresponds to the SERVPORT argument in a &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; DEFINE LINK command.&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;interface&amp;lt;/var&amp;gt; specifies the host port the call applies to. If an interface is not specified, the default is the first or only interface.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Usage====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The BIND call is used only by the server to prepare a socket obtained by the server for connection requests from clients.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
A standard TCP error code of 48 (decimal) means that the socket is still in use. TCP/IP holds on to a socket for a minute or so after it was last closed, so this error can occur even thought no application apparently has it open.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Example====&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;%rc=$socket(&#039;BIND&#039;, %lsocket, %port)&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===CANCEL call===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The CANCEL call ends an asynchronous request.&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;(&#039;CANCEL&#039;, &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;socket&amp;lt;/span&amp;gt;, &#039;&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;callname&amp;lt;/span&amp;gt;&#039;[,&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;interface&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;/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;term&amp;quot;&amp;gt;socket&amp;lt;/var&amp;gt; specifies the socket used by the call being cancelled, or -1 to match any call. &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;callname&amp;lt;/var&amp;gt; specifies the call being cancelled, as a literal enclosed in single quotation marks. This is usually &amp;lt;code&amp;gt;&#039;SELECT&#039;&amp;lt;/code&amp;gt; to cancel a SELECT call, &amp;lt;code&amp;gt;&#039;READ&#039;&amp;lt;/code&amp;gt; to cancel a READ call, or &amp;lt;code&amp;gt;&#039;&amp;lt;tt&amp;gt;*&amp;lt;/tt&amp;gt;&#039;&amp;lt;/code&amp;gt; to match any call.&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;interface&amp;lt;/var&amp;gt; specifies the host port the call applies to. If an interface is not specified, the default is the first or only interface.&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;p&amp;gt;&lt;br /&gt;
Use CANCEL to cancel a call that has been issued by another thread. The thread doing the CANCEL must have registered with the same interface. If user &amp;lt;code&amp;gt;USER1&amp;lt;/code&amp;gt;, for example, has issued a READ on socket 5, and no data is forthcoming on that socket, the READ will hang indefinitely, so &amp;lt;code&amp;gt;USER2&amp;lt;/code&amp;gt; can register with the interface and issue one of the following commands to cancel the hung call:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;(&#039;CANCEL&#039;,5,&#039;READ&#039;)&lt;br /&gt;
 &lt;br /&gt;
(&#039;CANCEL&#039;,-1,&#039;READ&#039;)&lt;br /&gt;
 &lt;br /&gt;
(&#039;CANCEL&#039;,-1,&#039;*&#039;)&lt;br /&gt;
 &lt;br /&gt;
(&#039;CANCEL&#039;,5,&#039;*&#039;)&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===CLOSE call===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The CLOSE call stops the use of a socket.&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;(&#039;CLOSE&#039;, &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;socket&amp;lt;/span&amp;gt;[,&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;interface&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;/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;term&amp;quot;&amp;gt;socket&amp;lt;/var&amp;gt;, an integer, specifies the socket number.&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;interface&amp;lt;/var&amp;gt; specifies the host port the call applies to. If an interface is not specified, the default is the first or only interface.&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 class=&amp;quot;code&amp;quot;&amp;gt;%rc=$Socket(&#039;CLOSE&#039;,%socket,%pathname)&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Usage notes====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Using the optional CLOSE call, a programmer can follow the standard practice of closing within the program anything that the program opened, rather than relying on the operating system to properly close down a socket when the interface is terminated.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===CONNECT call===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The CONNECT call is used by a client thread to associate with a server.&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;(&#039;CONNECT&#039;, &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;socket&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;port&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;address&amp;lt;/span&amp;gt;[,INTERFACE])&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;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;socket&amp;lt;/var&amp;gt;, an integer, specifies the socket number returned from the SOCKET call. &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;port&amp;lt;/var&amp;gt; specifies the server port number as an integer. This port corresponds to the &amp;lt;var&amp;gt;SERVPORT&amp;lt;/var&amp;gt; argument in a &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;DEFINE LINK&amp;lt;/var&amp;gt; command.&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;address&amp;lt;/var&amp;gt; specifies a dotted decimal internet address as a 15-byte string in the format &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;nnn.nnn.nnn.nnn&amp;lt;/var&amp;gt;.&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
On z/OS systems, address output can be an IPv6 address of 45 bytes. The IPv6 address format is up to 8 halfwords separated by colons: &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;nn:nn:nn:nn:nn:nn:nn:nn&amp;lt;/var&amp;gt;, which can also be written as &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;nn:nn:nn:nn::nn&amp;lt;/var&amp;gt;, with the double colon indicating missing halfwords of binary zeroes.&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;var class=&amp;quot;term&amp;quot;&amp;gt;interface&amp;lt;/var&amp;gt; specifies the host port the call applies to. If an interface is not specified, the default is the first or only interface.&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 class=&amp;quot;code&amp;quot;&amp;gt;%rc=$Socket(&#039;CONNECT&#039;,%socket,%remport,%remaddr,%pathname)&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===INIT call===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The INIT call calls TCP/IP to create the interface in the local environment.&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;(&#039;INIT&#039;, &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;interface&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;address&amp;lt;/span&amp;gt;,&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;port&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;max-connections&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;max-requests&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;/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;term&amp;quot;&amp;gt;interface&amp;lt;/var&amp;gt; specifies an up-to 8-character name for the local end of the TCP/IP connection.&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;address&amp;lt;/var&amp;gt; specifies a dotted decimal internet address as a 15-byte string in the format &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;nnn.nnn.nnn.nnn&amp;lt;/var&amp;gt;.&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
On z/OS systems, address output can be an IPv6 address of 45 bytes. The IPv6 address format is up to 8 halfwords separated by colons: &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;nn:nn:nn:nn:nn:nn:nn:nn&amp;lt;/var&amp;gt;, which can also be written as &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;nn:nn:nn:nn::nn&amp;lt;/var&amp;gt;, with the double colon indicating missing halfwords of binary zeroes.&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;var class=&amp;quot;term&amp;quot;&amp;gt;port&amp;lt;/var&amp;gt; specifies the local port number as an integer. This port corresponds to the SERVPORT argument in a &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; DEFINE LINK command.&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;max-connections&amp;lt;/var&amp;gt; specifies the maximum number of connections, as in a &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; DEFINE LINK command. The value of &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;max-connections&amp;lt;/var&amp;gt; is an integer from 1 to 31. [[Contacting Rocket Software Technical Support|Technical Support]] recommends that you specify at least 3.&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;max-requests&amp;lt;/var&amp;gt; specifies the maximum number of outstanding requests. Technical Support recommends that you set the value of &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;max-requests&amp;lt;/var&amp;gt; to at least four up to a maximum of 31.&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;p&amp;gt;&lt;br /&gt;
The number of sockets created for the interface is returned.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The INIT call corresponds to a &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; DEFINE and OPEN LINK command. INIT must be the first call.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Several users could use the same interface. Only the first user must make the INIT and the REGISTER calls; subsequent users need make only the REGISTER call.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Example====&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;%rc = $socket(&#039;INIT&#039;,%pathname,%addr,%port,6,7)&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===LISTEN call===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The LISTEN call indicates that a socket is to accept incoming connection requests. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Syntax====&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;(&#039;LISTEN&#039;, &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;socket&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;backlog&amp;lt;/span&amp;gt;[,INTERFACE])&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;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;socket&amp;lt;/var&amp;gt;, an integer, specifies the socket number that was returned from the SOCKET call.&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;backlog&amp;lt;/var&amp;gt;, an integer, specifies the maximum number of simultaneous connection requests. Make &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;backlog&amp;lt;/var&amp;gt; not less than the expected maximum number of simultaneous connection requests from a client. &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;interface&amp;lt;/var&amp;gt; specifies the host port the call applies to. If an interface is not specified, the default is the first or only interface.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Usage note====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The LISTEN call is used by the server to prepare a socket obtained by the server for connection requests from clients.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Example====&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;%rc=$socket(&#039;LISTEN&#039;,%lsocket,10,%pathname)&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===READ call===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The READ call receives data.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The return code is the amount of data transferred to the buffer. If this is zero, the socket has been closed by the session partner. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If there is no data available and the socket is in blocking mode, the socket waits indefinitely for data. If you receive less data than is available, a second READ call will receive the remaining data. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Syntax====&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;(&#039;READ&#039;, &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;socket&amp;lt;/span&amp;gt;,&#039;&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;buffer&amp;lt;/span&amp;gt;&#039;, &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;maximum-length&amp;lt;/span&amp;gt;[, &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;interface&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;/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;term&amp;quot;&amp;gt;socket&amp;lt;/var&amp;gt;, an integer, specifies the socket number. &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;buffer&amp;lt;/var&amp;gt; specifies the output location for data on the read operation. The value is represented by a string percent variable or an image name. Enclose the value in quotation marks: for example, &amp;lt;code&amp;gt;&#039;%buff&#039;&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&#039;MYIMAGE&#039;&amp;lt;/code&amp;gt; respectively.&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If the READ call expects less data than is available, subsequent READ calls accept the remaining data.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If the READ call expects more data than is available, the READ variable is padded on the right with spaces. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;maximum-length&amp;lt;/var&amp;gt; specifies the maximum length of data as an integer.&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;interface&amp;lt;/var&amp;gt; specifies the host port the call applies to. If an interface is not specified, the default is the first or only interface.&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 class=&amp;quot;code&amp;quot;&amp;gt;%rc=$socket(&#039;READ&#039;,%socket,&#039;%fred&#039;,12,%pathname)&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===REGISTER call===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The REGISTER call connects the calling user to the interface, but makes no extra call to TCP/IP.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Syntax====&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;(&#039;REGISTER&#039;, &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;interface&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;interface&amp;lt;/var&amp;gt; specifies an up-to-8-character name for the TCP/IP environment, which identifies the host port.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Example====&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;%rc=$socket(&#039;REGISTER&#039;,%pathname)&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Usage notes====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You must include a REGISTER call immediately after the INIT call when:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;You want to continue using the interface after the thread closes its last socket.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;A thread other than the one that created the interface wants to use the interface.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===SELECT call===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The SELECT call waits for an event on more than one socket. The thread waits until an event or timeout occurs. The call returns the number of sockets affected, or zero, if the call has timed out. The file descriptors (FDS) variables are updated to show which sockets have had events.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Syntax====&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;(&#039;SELECT&#039;, &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;highest-socket&amp;lt;/span&amp;gt;,&lt;br /&gt;
         &#039;&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;readFDS-variable-name&amp;lt;/span&amp;gt;&#039;,&lt;br /&gt;
         &#039;&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;writeFDS-variable-name&amp;lt;/span&amp;gt;&#039;,&lt;br /&gt;
         &#039;&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;exceptFDS-variable-name&amp;lt;/span&amp;gt;&#039;,&lt;br /&gt;
         &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;timeout&amp;lt;/span&amp;gt;[, &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;interface&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;/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;term&amp;quot;&amp;gt;highest-socket&amp;lt;/var&amp;gt; specifies the highest socket number in the FDS arguments, plus one, as an integer. For example, if the FDS arguments select sockets 3, 2, and 0, specify 4, which is the highest socket plus 1. &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;readFDS-variable-name&amp;lt;/var&amp;gt; specifies to TCP/IP which sockets to wait on for input. Enclose this integer argument in quotation marks, because this is a fixed 4-byte full word variable used to hold a value output. &lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The integer is a bitmap that identifies a group of sockets whose activity you want to track. The rightmost bit represents socket 0 and the most left bit represents socket 31. If you set the bit ON, that means: tell me if anything happens to this socket.&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;var class=&amp;quot;term&amp;quot;&amp;gt;writeFDS-variable-name&amp;lt;/var&amp;gt; specifies to TCP/IP whether the socket(s) are ready for writing data. Enclose this integer argument in quotation marks, because this is a fixed 4-byte full word variable used to hold a value output.&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The integer is a bitmap that identifies a group of sockets whose activity you want to track. The rightmost bit represents socket 0 and the most left bit represents socket 31. If you set the bit ON, that means: tell me if anything happens to this socket.&amp;lt;/p&amp;gt;&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;exceptFDS-variable-name&amp;lt;/var&amp;gt; specifies to TCP/IP to check for exceptions on the socket(s). Enclose this integer argument in quotation marks, because this is a fixed 4-byte full word variable used to hold a value output.&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The integer is a bitmap that identifies a group of sockets whose activity you want to track. The rightmost bit represents socket 0 and the most left bit represents socket 31. If you set the bit ON, that means: tell me if anything happens to this socket.&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;var class=&amp;quot;term&amp;quot;&amp;gt;timeout&amp;lt;/var&amp;gt; specifies a value in seconds, or a negative integer for no timeout.&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 in seconds&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&amp;gt;-1 &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;No time-out: waits for an event.&amp;lt;/td&amp;gt;&lt;br /&gt;
&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;amp;nbsp;0 &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Returns immediately, if no socket is selected.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Greater than 0 &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;The length of the time-out in seconds.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&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;interface&amp;lt;/var&amp;gt; specifies the host port the call applies to. If an interface is not specified, the default is the first or only interface.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Usage====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The SELECT call is used by the server to wait for connection requests from the client, and by both client and server to wait for data. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When a SELECT call on a listening socket returns showing that there is a connection request, the next server call must be an ACCEPT.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
A SELECT call on a data socket that returns showing an event on a socket may have zero-length data, showing that the partner has shut down the socket.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Example====&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;%rcC=$socket(&#039;SELECT&#039;, %highsock, &#039;%readFds&#039;, &#039;%writeFds&#039;, &#039;%exFds&#039;, 0, %pathname)&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Usage====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Using the SELECT call you can have TCP tell you when there is activity on a group of sockets. You tell TCP which sockets interest you by creating a bitmap. For example, If you set ReadFDS to X&#039;00000030&#039;, you are telling TCP to tell you when there is any input on sockets 4 or 5. The bitmap is set as follows: &#039;00110000&#039;, and the rightmost bit stands for socket 0. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The setting of a bitmap works the same for the ExceptFDS and WriteFDS arguments, but these bitmaps tell TCP to check whether there are exceptions on the socket, or that the socket is ready for writing data, respectively. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The SELECT call should be used by both client and server before a READ call.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The SELECT call waits until there is activity on chosen sockets. The file descriptors (FDS) bitmap specifies the sockets that TCP/IP is to wait for. Each FDS variable is a full-word, so you can specify sockets 0 to 31 inclusive. The rightmost bit of each full-word represents socket 0. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
In the [[#Example procedure - Server|Example procedure - Server]], there is a sample subroutine to add a given socket number to a bitmap, and to delete a socket from a bitmap. If you are waiting on more than one socket (which would be unlikely for the functions interface), you would need to check on return from the SELECT call which sockets caused the event. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
In the [[#Example procedure - Server|Example procedure - Server]], the WriteFDS argument is set to zero, as the ready-to-write event is not of interest. If there is an exception event, as shown by the output exception FDS being non-zero, this is a serious communications error, and you must close the interface.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===SHUTDOWN call===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The optional SHUTDOWN call closes traffic in one direction &amp;amp;mdash; receive or send &amp;amp;mdash; or both directions.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Syntax====&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;(&#039;SHUTDOWN&#039;, &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;socket&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;shutdown-value&amp;lt;/span&amp;gt;[, &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;interface&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;/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;term&amp;quot;&amp;gt;socket&amp;lt;/var&amp;gt;, an integer, specifies the socket number. &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;shutdown-value&amp;lt;/var&amp;gt; specifies the type of traffic to make inactive, represented as an integer.&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;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;0 &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Receive&amp;lt;/td&amp;gt;&lt;br /&gt;
&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;Send&amp;lt;/td&amp;gt;&lt;br /&gt;
&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;Both send and receive&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&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;interface&amp;lt;/var&amp;gt; specifies the host port the call applies to. If an interface is not specified, the default is the first or only interface.&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 class=&amp;quot;code&amp;quot;&amp;gt;%rc=$socket(&#039;SHUTDOWN&#039;,%socket,2,%pathname)&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Usage notes====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If you want to deactivate traffic in both directions you can issue a CLOSE call in place of a SHUTDOWN call.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===SOCKET call===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The SOCKET call allocates a socket.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Syntax====&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;(&#039;SOCKET&#039;, &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;domain&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;type&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;protocol&amp;lt;/span&amp;gt;[, &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;interface&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;/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;term&amp;quot;&amp;gt;domain&amp;lt;/var&amp;gt; specifies the integer 2, which is required. On z/OS systems, specify 19 if you are using IPv6 (AF_INET6) addressing.&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;type&amp;lt;/var&amp;gt; specifies the integer 1, which is required.&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;protocol&amp;lt;/var&amp;gt; specifies the integer 0, which is required.&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;interface&amp;lt;/var&amp;gt; specifies the host port the call applies to. If an interface is not specified, the default is the first or only interface.&lt;br /&gt;
&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;p&amp;gt;&lt;br /&gt;
The new socket number is returned. The SOCKET call is used by both the server and client. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Example====&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;%rc=$socket(&#039;SOCKET&#039;,2,1,0,%pathname)&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===TERM call===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The TERM call attempts to close any open sockets, and deletes the interface; it corresponds to a &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; CLOSE LINK command.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Syntax====&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;(&#039;TERM&#039;, &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;interface&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;span class=&amp;quot;term&amp;quot;&amp;gt;interface&amp;lt;/span&amp;gt; specifies the 8-character name that was used in the INIT call.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Example====&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;%rc=$socket(&#039;TERM&#039;,%pathname)&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Usage notes====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
A TERM call does an implicit CLOSE call for all open sockets, accompanied by the following message for each open socket:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;M204.2288: TCP/IP CLEANUP IS CLOSING SOCKET &amp;lt;i&amp;gt;socket-number&amp;lt;/i&amp;gt; FOR USER &amp;lt;i&amp;gt;userid&amp;lt;/i&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===WRITE call===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The WRITE call sends data.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Syntax====&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;(&#039;WRITE&#039;, &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;socket&amp;lt;/span&amp;gt;, &#039;&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;buffer&amp;lt;/span&amp;gt;&#039;, &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;length&amp;lt;/span&amp;gt;[, &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;interface&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;/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;term&amp;quot;&amp;gt;socket&amp;lt;/var&amp;gt;, an integer, specifies the socket number. &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;buffer&amp;lt;/var&amp;gt; specifies the data location, which can be a string percent variable or an image name. Enclose the value in quotation marks: for example, &amp;lt;code&amp;gt;&#039;%buff&#039;&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&#039;MYIMAGE&#039;&amp;lt;/code&amp;gt; respectively.&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;length&amp;lt;/var&amp;gt; specifies the length of data to be sent, in bytes. If this is less than the data in the variable or image, the data is truncated. If data is truncated and buffer is an image name, $STATUSD is set to -989, but this is a warning, and the data is transmitted correctly. &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;interface&amp;lt;/var&amp;gt; specifies the host port the call applies to. If an interface is not specified, the default is the first or only interface.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Usage====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The call returns the number of bytes written, which can be zero.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Example====&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;%rc = $socket(&#039;WRITE&#039;, %socket, &#039;%fred&#039;, 7, %pathname)&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
==$SOCKETX function==&lt;br /&gt;
 &lt;br /&gt;
====Syntax====&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;%returncode&amp;lt;/span&amp;gt;=$SocketX(&#039;&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;socket-call&amp;lt;/span&amp;gt;&#039;, &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;socket&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;option-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;/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;term&amp;quot;&amp;gt;socket-call&amp;lt;/var&amp;gt; is the GETHOST, GETSOCKOPT, SETSOCKOPT, or GETINFO call. GETINFO is supported on z/OS systems only.&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;socket&amp;lt;/var&amp;gt; is an integer that identifies the socket from an earlier ACCEPT or LISTEN call.&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;option-name&amp;lt;/var&amp;gt; is an integer that identifies the option. &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;Option-name integer &amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;IBM option&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;4 &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;SO_REUSEADDR&amp;lt;/td&amp;gt;&lt;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;8 &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;SO_KEEPALIVE&amp;lt;/td&amp;gt;&lt;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;32 &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;SO_BROADCAST&amp;lt;/td&amp;gt;&lt;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;256 &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;SO_OOBINLINE&amp;lt;/td&amp;gt;&lt;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;4097 &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;SO_SNDBUF&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;4103 &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;SO_ERROR&amp;lt;/td&amp;gt;&lt;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;4104 &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;SO_TYPE&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;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 $SOCKETX function illustrates a valid GETSOCKOPT call:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;%rc=$socketx(&#039;GETSOCKOPT&#039;,%socket,4097)&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Usage notes====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
For an expanded discussion of the options listed in the previous table, consult IBM documentation.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===GETHOST call===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The GETHOST call translates a host name to a network address (or addresses in the format of &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;nnn.nnn.nnn.nnn&amp;lt;/var&amp;gt;).&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;(&#039;GETHOST&#039;, &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;hostname&amp;lt;/span&amp;gt;, &#039;&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;address-array&amp;lt;/span&amp;gt;&#039;)&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;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;hostname&amp;lt;/var&amp;gt; specifies a 25-byte string to be translated to a dotted decimal address in the format &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;nnn.nnn.nnn.nnn&amp;lt;/var&amp;gt;.&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;address-array&amp;lt;/var&amp;gt;, which is enclosed in single-quotation marks, specifies an image containing an array of 15-byte strings for output. The GETHOST call will populate the address array with the retrieved dotted-decimal network address(es). &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;It is useful for a client to translate a server to a dotted-decimal address before issuing the CONNECT call. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;The GETHOST call, which corresponds to the IBM GETHOSTBYNAME call, can be issued even if no interface has been created. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;To translate the domain name on z/OS systems, you need to supply a DD card for the SYSTCPD data set, as in this example:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;//SYSTCPD DD DSN=TCPIP.PROFILE(TCPDATA), DISP=SHR&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 you want to make use of IPv6 addressing, use GETINFO instead of GETHOST.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;The GETHOST call is not supported on z/VM systems.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===GETSOCKOPT call===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The GETSOCKOPT call retrieves the current setting of a socket option. The return code is the value of the option. For Boolean values, this is 1 for YES or ON, and 0 for NO or OFF. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Syntax====&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;(&#039;GETSOCKOPT&#039;, &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;socket&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;option-name&amp;lt;/span&amp;gt;[, &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;interface&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;/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;term&amp;quot;&amp;gt;socket&amp;lt;/var&amp;gt; is an integer that identifies the socket.&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;option-name&amp;lt;/var&amp;gt; is an integer that identifies the option. &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;Integer &amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Option&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;4 &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;SO_REUSEADDR&amp;lt;/td&amp;gt;&lt;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;8 &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;SO_KEEPALIVE&amp;lt;/td&amp;gt;&lt;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;32 &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;SO_BROADCAST&amp;lt;/td&amp;gt;&lt;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;256 &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;SO_OOBINLINE&amp;lt;/td&amp;gt;&lt;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;4097 &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;SO_SNDBUF&amp;lt;/td&amp;gt;&lt;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;4103 &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;SO_ERROR&amp;lt;/td&amp;gt;&lt;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;4104 &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;SO_TYPE&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&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;interface&amp;lt;/var&amp;gt; specifies the host port the call applies to. If an interface is not specified, the default is the first or only interface.&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 class=&amp;quot;code&amp;quot;&amp;gt;%rc=$socketx(&#039;GETSOCKOPT&#039;,%socket,4097,%pathname)&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===SETSOCKOPT call===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The SETSOCKOPT call resets a socket option.&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;(&#039;SETSOCKOPT&#039;, &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;socket&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;option-name&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;option-value&amp;lt;/span&amp;gt;[, &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;interface&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;/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;term&amp;quot;&amp;gt;socket&amp;lt;/var&amp;gt; is an integer that identifies the socket.&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;option-name&amp;lt;/var&amp;gt; is an integer that identifies the option. &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;Integer &amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Option&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;4 &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;SO_REUSEADDR&amp;lt;/td&amp;gt;&lt;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;8 &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;SO_KEEPALIVE&amp;lt;/td&amp;gt;&lt;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;32 &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;SO_BROADCAST&amp;lt;/td&amp;gt;&lt;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;256 &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;SO_OOBINLINE&amp;lt;/td&amp;gt;&lt;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;4097 &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;SO_SNDBUF&amp;lt;/td&amp;gt;&lt;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;4103 &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;SO_ERROR&amp;lt;/td&amp;gt;&lt;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;4104 &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;SO_TYPE&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&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;option-value&amp;lt;/var&amp;gt; specifies an integer. Consult the IBM documentation for the option values.&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;interface&amp;lt;/var&amp;gt; specifies the host port the call applies to. If an interface is not specified, the default is the first or only interface.&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 $SOCKETX function illustrates a SOCKOPT call to set on the KEEPALIVE option:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;%rc=$socketx(&#039;SETSOCKOPT&#039;,8,1,%pathname)&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===GETINFO call===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
(Available on z/OS systems only.) The GETINFO call invokes the GETADDRINFO service to translate a network symbolic address to an IPv4 or IPv6 address.&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;$SOCKETX(&#039;GETINFO&#039;, &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;name&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;output-structure&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;flag-fullword&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;family&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 the flag and family fullwords, described in the &amp;lt;var class=&amp;quot;book&amp;quot;&amp;gt;Application Programming Interface Reference&amp;lt;/var&amp;gt; manual, have the following values:&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;* FLAG WORD= (FULLWORD) FLAG WORD FOR GETADDRINFO CALL&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;* VALID VALUES (ADDITIVE) ARE&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;* AI_PASSIVE : 1 - get value suitable for listening&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;* AI_CANONNAMEOK : 2&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;* AI_NUMERICHOST : 4&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;* AI_NUMERICSERV : 8&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;* AI_V4MAPPED : 16 - include V4-mapped IPV6 addresses&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;* AI_ALL : 32 - get all possible addresses&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;* AI_ADDRCONFIG : 64&lt;br /&gt;
family fullword: fixed value or literal&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;* USED TO LIMIT THE ADDRESSES RETURNED&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;* VALID VALUES ARE&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;* AI_UNSPEC : 0 - get both IPV4 and IPV6&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;* AI_INET : 2 - get IPV4 only&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;* AI_INET6 : 19 - get IPV6 only&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The default for both the flags and family fullwords is zero.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The output structure, which can be either variable or image, is:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;ADDRESS1 STRING LEN 45 first address&lt;br /&gt;
FAMILY1 STRING LEN 1 4, 6, or space&lt;br /&gt;
ADDRESS2 STRING LEN 45 second address&lt;br /&gt;
FAMILY2 STRING LEN 1 4, 6, or space&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
With a return code zero result, it is possible that ADDRESS2 and FAMILY2 are both set to spaces if there is only one address returned that fits the supplied criteria.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The following sample procedure illustrates the GETINFO call:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;BEGIN&lt;br /&gt;
DECLARE %PATH1 STRING LEN 80&lt;br /&gt;
DECLARE %FAMILY FIXED&lt;br /&gt;
DECLARE %FLAGS FIXED&lt;br /&gt;
DECLARE %I FIXED&lt;br /&gt;
%PATH1 = $READ(&#039;SYMBOLIC NAME?&#039;)&lt;br /&gt;
%PATH1 = $UNBLANK(%PATH1)&lt;br /&gt;
%FAMILY = $READ(&#039;FAMILY - 0 (ANY) 2 (IPV4) OR 19 (IPV6)&#039;)&lt;br /&gt;
%FLAGS = $READ(&#039;FLAGS - 1 (PASSIVE) 16 (V4MAPPED) 32 (ALL)&#039;)&lt;br /&gt;
IMAGE GHOUTPUT&lt;br /&gt;
ARRAY OCCURS 2&lt;br /&gt;
ADDRESS IS STRING LEN 45&lt;br /&gt;
FAMILY IS STRING LEN 1&lt;br /&gt;
END ARRAY&lt;br /&gt;
END IMAGE&lt;br /&gt;
PREPARE IMAGE GHOUTPUT&lt;br /&gt;
DECLARE %RC FIXED&lt;br /&gt;
%RC = $SOCKETX(&#039;GETINFO&#039;,%PATH1,&#039;GHOUTPUT&#039;,%FLAGS,%FAMILY)&lt;br /&gt;
FOR %I FROM 1 TO 2&lt;br /&gt;
PRINT &#039;ADDRESS FROM GETINFO &#039; AND %GHOUTPUT:ADDRESS(%I)&lt;br /&gt;
PRINT &#039;FAMILY FROM GETINFO &#039; AND %GHOUTPUT:FAMILY(%I)&lt;br /&gt;
END FOR&lt;br /&gt;
PRINT &#039;RC &#039; AND %RC&lt;br /&gt;
END&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
which will give output like this:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;output&amp;quot;&amp;gt;$$SYMBOLIC NAME?&lt;br /&gt;
MYHOST&lt;br /&gt;
$$FAMILY - 0 (ANY) 2 (IPV4) OR 19 (IPV6)&lt;br /&gt;
0&lt;br /&gt;
$$FLAGS - 1 (PASSIVE) 16 (V4MAPPED) 32 (ALL)&lt;br /&gt;
48&lt;br /&gt;
ADDRESS FROM GETINFO 2001:23:20:55::206&lt;br /&gt;
FAMILY FROM GETINFO 6&lt;br /&gt;
ADDRESS FROM GETINFO ::FFFF:191.28.55.206&lt;br /&gt;
FAMILY FROM GETINFO 6&lt;br /&gt;
RC 0&lt;br /&gt;
&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; In the previous example, two addresses are returned, because the ALL flag (32) was included, and the second address returned is a v4-mapped IPv6 address.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
==Error codes, examples, and limitations==&lt;br /&gt;
 &lt;br /&gt;
===Error codes for calls===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The error codes listed in [[#Error codes for calls|Error codes for calls]] were written specifically for TCP/IP Sockets Interface for &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt;. Additional error codes you might encounter are described in IBM documentation for TCP/IP for z/OS: API Reference.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The following error codes are valid when the return code is -1, except for -991, which can occur after a successful READ call, where the return code is the number of bytes transferred to the variable.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;caption&amp;gt;Error codes returned by $STATUSD&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;Values&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;-999 &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Invalid argument.&amp;lt;/td&amp;gt;&lt;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;-998 &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Call attempted, other than the INIT call, when the user is not registered with a functions interface.&amp;lt;/td&amp;gt;&lt;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;-997 &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Failure attempting to allocate storage.&amp;lt;/td&amp;gt;&lt;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;-996 &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;This is a failure writing data into an output variable or image.&amp;lt;/td&amp;gt;&lt;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;-995 &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;The link is an incorrect type (for INIT, REGISTER, and TERM calls)&amp;lt;/td&amp;gt;&lt;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;-994 &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;The socket has not been released. In the case of a CLOSE call, the socket is of the wrong type &amp;amp;mdash; possibly a Horizon socket.&amp;lt;/td&amp;gt;&lt;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;-993 &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;There has been a physical error on the interface.&amp;lt;/td&amp;gt;&lt;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;-992 &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;The pathname is unknown (for REGISTER and TERM calls only).&amp;lt;/td&amp;gt;&lt;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;-991 &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;On a READ call, the string is shorter than the length parameter. The data received is truncated.&amp;lt;/td&amp;gt;&lt;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;-990&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Socket not found.&amp;lt;/td&amp;gt;&lt;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;-989&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;On a WRITE call this is a warning code that shows that the image being sent was truncated.&amp;lt;/td&amp;gt;&lt;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;-988&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Error on GETHOSTBYNAME call.&amp;lt;/td&amp;gt;&lt;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;-987&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Error deleting the temporary interface after GETHOST call.&amp;lt;/td&amp;gt;&lt;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;-986&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;The CANCEL call found no matching call to cancel; no action was taken.&amp;lt;/td&amp;gt;&lt;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;-985&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;The socket number obtained on a SOCKET or ACCEPT was above the limit of 31, so it has been closed. It may be that 32 sockets are already in use. Or, if many sockets are opened and closed quickly, perhaps not enough time &amp;amp;mdash; one minute &amp;amp;mdash; has elapsed to reuse a free socket. You can close an open socket, or you can wait to reuse a free socket. &amp;lt;/td&amp;gt;&lt;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;-984&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Universal Buffer not there.&amp;lt;/td&amp;gt;&lt;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;-983&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Universal Buffer length error.&amp;lt;/td&amp;gt;&lt;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;-982&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Universal Buffer allocation error.&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 procedure - Server==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
This code is included on the installation distribution medium. See the individual operating system installation guide for its location. The following code is called SOCKSMPS, located 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;Operating system &amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Located&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;z/OS &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;JCLLIB data 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&amp;gt;z/VM &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;193 C&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;z/VSE &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;J610 sublib&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 class=&amp;quot;code&amp;quot;&amp;gt;BEGIN&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;*    This is an example of the server side of the sockets&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;*    interface&lt;br /&gt;
   DECLARE %PATHNAME STRING LEN 8&lt;br /&gt;
   DECLARE %SOCKET   FIXED&lt;br /&gt;
   DECLARE %LSOCKET  FIXED&lt;br /&gt;
   DECLARE %HIGHSOCK FIXED&lt;br /&gt;
   DECLARE %NEWSOCK  FIXED&lt;br /&gt;
   DECLARE %TSOCKET  FIXED&lt;br /&gt;
   DECLARE %PORT     FIXED&lt;br /&gt;
   DECLARE %RPORT    FIXED&lt;br /&gt;
   DECLARE %ADDR     STRING LEN 15&lt;br /&gt;
   DECLARE %RADDR    STRING LEN 15&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;*    NNN.NNN.NNN.NNN (dotted decimal internet address) is&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;*    15 characters long (maximum)&lt;br /&gt;
   DECLARE %RC       FIXED&lt;br /&gt;
   DECLARE %SOMAX    FIXED&lt;br /&gt;
   DECLARE %READFDS  FIXED&lt;br /&gt;
   DECLARE %EXFDS    FIXED&lt;br /&gt;
   DECLARE %WRITEFDS FIXED&lt;br /&gt;
   DECLARE %FRED     STRING LEN 12&lt;br /&gt;
   DECLARE %FN       STRING LEN 10&lt;br /&gt;
   %PATHNAME = &#039;TCPS&#039;&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;*    %PATHNAME is 8 characters - the link name&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;*    %LSOCKET is the listening socket, %SOCKET for data&lt;br /&gt;
   %PORT     = 7633&lt;br /&gt;
   %SOMAX    = 8&lt;br /&gt;
   %FRED     = &#039;DATA OUT&#039;&lt;br /&gt;
   %ADDR     = &#039;193.208.28.129&#039;&lt;br /&gt;
   %RADDR    = &#039;193.208.28.129&#039;&lt;br /&gt;
   %RC       = 0&lt;br /&gt;
   %READFDS  = 0&lt;br /&gt;
   %EXFDS    = %READFDS&lt;br /&gt;
   %WRITEFDS = %READFDS&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;*    %HIGHSOCK is used in SELECT calls for the highest number&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;*    of sockets in an FDS&lt;br /&gt;
   %HIGHSOCK = 0&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;*    In the following call, 6 is the maximum number of&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;*    connections and 7 is the maximum number of requests.&lt;br /&gt;
   %RC = $SOCKET(&#039;INIT&#039;,%PATHNAME,%ADDR,%PORT,6,7)&lt;br /&gt;
   %RC = $SOCKET(&#039;REGISTER&#039;,%PATHNAME)&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;*    2,1,0 are the domain, type, and protocol&lt;br /&gt;
   %RC = $SOCKET(&#039;SOCKET&#039;,2,1,0)&lt;br /&gt;
   %LSOCKET = %RC&lt;br /&gt;
   %NEWSOCK = %LSOCKET&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;*    call ADDSOCK to add the new socket to the FDS and&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;*    update %HIGHSOCK&lt;br /&gt;
   CALL ADDSOCK&lt;br /&gt;
   %RC = $SOCKET(&#039;BIND&#039;,%LSOCKET,%PORT)&lt;br /&gt;
   %RC = $SOCKET(&#039;LISTEN&#039;,%LSOCKET,10)&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;*    Wait for a connection&lt;br /&gt;
   %RC = $SOCKET(&#039;SELECT&#039;,%HIGHSOCK, -&lt;br /&gt;
           &#039;%READFDS&#039;,&#039;%WRITEFDS&#039;,&#039;%EXFDS&#039;,0)&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;*   -1 is error&lt;br /&gt;
   IF %RC &amp;lt; 0 THEN&lt;br /&gt;
     JUMP TO SELECT.ERROR&lt;br /&gt;
   END IF&lt;br /&gt;
  AUDIT &#039;AFTER SELECT READ FDS IS &#039; AND %READFDS&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;*   &amp;gt;1 shows that sockets have been selected&lt;br /&gt;
   IF %RC &amp;gt; 0 THEN&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;*   But is&#039;s bad news if it&#039;s an exception FDS&lt;br /&gt;
    IF %EXFDS &amp;gt; 0 THEN&lt;br /&gt;
     AUDIT &#039;EXCEPTION FDS NON-ZERO &#039; AND %EXFDS&lt;br /&gt;
     JUMP TO SELECT.ERROR&lt;br /&gt;
    ELSE&lt;br /&gt;
     JUMP TO SELECT.ACCEPT&lt;br /&gt;
    END IF&lt;br /&gt;
   END IF&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;*    If rc=0, there has been a time-out, which should not happen&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;*    if the timeout argument is -1.&lt;br /&gt;
  JUMP TO COMMON.END&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;*&lt;br /&gt;
SELECT.ACCEPT:&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;*   The listen has resulted in a connection request - accept it&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;*   Note that quotation marks enclose the port argument in the&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;*   call - we are passing the name of the variable, not its&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;*   value, because the port number will be placed in the&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;*   variable by the function.&lt;br /&gt;
  %RC = $SOCKET(&#039;ACCEPT&#039;,%LSOCKET,&#039;%RPORT&#039;,%RADDR)&lt;br /&gt;
  IF %RC GT 0 THEN&lt;br /&gt;
   AUDIT &#039;REMOTE ADDRESS IS &#039; AND %RADDR&lt;br /&gt;
   AUDIT &#039;REMOTE PORT IS &#039; AND %RPORT&lt;br /&gt;
   AUDIT &#039;NEW SOCKET IS &#039; AND %RC&lt;br /&gt;
   %SOCKET = %RC&lt;br /&gt;
  ELSE&lt;br /&gt;
   JUMP TO COMMON.END&lt;br /&gt;
  END IF&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;*&lt;br /&gt;
   %NEWSOCK = %LSOCKET&lt;br /&gt;
   CALL DELSOCK&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;*    Use DELSOCK to delete the listening socket from the FDS&lt;br /&gt;
   %NEWSOCK = %SOCKET&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;*    We now need to select on the data socket instead of the&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;*    listening socket (Socket 1)&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;*    Call ADDSOCK to add the new socket to the FDS and&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;*    update %HIGHSOCK&lt;br /&gt;
   CALL ADDSOCK&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;*    8 is SO_KEEPALIVE, which we set ON (0 is OFF, 1 is ON)&lt;br /&gt;
  %RC = $SOCKET(&#039;SETSOCKOPT&#039;,%SOCKET,8,1)&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;*    Wait for data&lt;br /&gt;
SELECT2:&lt;br /&gt;
   %RC = $SOCKET(&#039;SELECT&#039;,%HIGHSOCK, -&lt;br /&gt;
         &#039;%READFDS&#039;,&#039;%WRITEFDS&#039;,&#039;%EXFDS&#039;,0)&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;*    -1 is error&lt;br /&gt;
   IF %RC &amp;lt; 0 THEN&lt;br /&gt;
     JUMP TO SELECT.ERROR&lt;br /&gt;
   END IF&lt;br /&gt;
     AUDIT &#039;AFTER SELECT READ FDS IS &#039; AND %READFDS&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;*    &amp;gt;1 shows that sockets were selected&lt;br /&gt;
   IF %RC &amp;gt; 0 THEN&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;*    But it&#039;s bad news if it&#039;s an exception FDS&lt;br /&gt;
    IF %EXFDS &amp;gt; 0 THEN&lt;br /&gt;
     AUDIT &#039;EXCEPTION FDS NON-ZERO &#039; AND %EXFDS&lt;br /&gt;
     JUMP TO SELECT.ERROR&lt;br /&gt;
    ELSE&lt;br /&gt;
     JUMP TO SELECT.READ&lt;br /&gt;
    END IF&lt;br /&gt;
   END IF&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;*    rc=0 (time-out)&lt;br /&gt;
   JUMP TO COMMON.END&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;*&lt;br /&gt;
SELECT.READ:&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;*    Note that on the READ, the buffer variable name is enclosed&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;*    in quotation marks.&lt;br /&gt;
  %RC = $SOCKET(&#039;READ&#039;,%SOCKET,&#039;%FRED&#039;,12)&lt;br /&gt;
  IF %RC &amp;lt; 0 THEN&lt;br /&gt;
     AUDIT &#039;READ ERROR&#039;&lt;br /&gt;
     JUMP TO COMMON.END&lt;br /&gt;
  END IF&lt;br /&gt;
  IF %RC = 0 THEN&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;*    If number of bytes = 0, this is remote socket close&lt;br /&gt;
  JUMP TO COMMON.END&lt;br /&gt;
END IF&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;*    Read again until we detect a close&lt;br /&gt;
  JUMP TO SELECT2&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;*    %RC = $SOCKET(&#039;WRITE&#039;,%SOCKET,%FRED,7)&lt;br /&gt;
  JUMP TO COMMON.END&lt;br /&gt;
SELECT.ERROR:&lt;br /&gt;
    AUDIT &#039;SELECT ERROR&#039;&lt;br /&gt;
COMMON.END:&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;*    Deactivate and close the data socket&lt;br /&gt;
  IF %SOCKET GE 0 THEN&lt;br /&gt;
   %RC = $SOCKET(&#039;SHUTDOWN&#039;,%SOCKET,2)&lt;br /&gt;
   %RC = $SOCKET(&#039;CLOSE&#039;,%SOCKET)&lt;br /&gt;
  END IF&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;*    Deactivate and close the listening socket&lt;br /&gt;
  IF %LSOCKET GE 0 THEN&lt;br /&gt;
   %RC = $SOCKET(&#039;SHUTDOWN&#039;,%LSOCKET,2)&lt;br /&gt;
   %RC = $SOCKET(&#039;CLOSE&#039;,%LSOCKET)&lt;br /&gt;
  END IF&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;*&lt;br /&gt;
  %RC = $SOCKET(&#039;TERM&#039;,%PATHNAME)&lt;br /&gt;
ADDSOCK: SUBROUTINE&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;*    Adds NEWSOCK to the FDS bitmap&lt;br /&gt;
%READFDS  = %READFDS + $RXPI(2, %NEWSOCK)&lt;br /&gt;
%WRITEFDS = 0&lt;br /&gt;
%EXFDS    = %READFDS&lt;br /&gt;
%TSOCKET  = %NEWSOCK + 1&lt;br /&gt;
IF %TSOCKET GT %HIGHSOCK THEN&lt;br /&gt;
   %HIGHSOCK = %TSOCKET&lt;br /&gt;
END IF&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;*&lt;br /&gt;
END SUBROUTINE ADDSOCK&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;*&lt;br /&gt;
DELSOCK: SUBROUTINE&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;*    Deletes NEWSOCK from the FDS bitmap&lt;br /&gt;
%READFDS  = %READFDS - $RXPI(2, %NEWSOCK)&lt;br /&gt;
%WRITEFDS = 0&lt;br /&gt;
%EXFDS    = %READFDS&lt;br /&gt;
%TSOCKET   = %NEWSOCK + 1&lt;br /&gt;
IF %TSOCKET = %HIGHSOCK THEN&lt;br /&gt;
   %HIGHSOCK = %HIGHSOCK - 1&lt;br /&gt;
END IF&lt;br /&gt;
END SUBROUTINE DELSOCK&lt;br /&gt;
 END&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
==Example procedure - Client==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
This code is included on the installation distribution medium. See the individual operating system installation guide for its location. The following code is called SOCKSMPC, located 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;Operating system &amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Located&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;z/OS &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;JCLLIB data 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&amp;gt;z/VM &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;193 C&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;z/VSE &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;J610 sublib&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 class=&amp;quot;code&amp;quot;&amp;gt;BEGIN&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;*    This is an example of the client side of a sockets interface.&lt;br /&gt;
   DECLARE %PATHNAME STRING LEN 8&lt;br /&gt;
   DECLARE %SOCKET   FIXED&lt;br /&gt;
   DECLARE %PORT     FIXED&lt;br /&gt;
   DECLARE %REMPORT  FIXED&lt;br /&gt;
   DECLARE %FRED     STRING LEN 12&lt;br /&gt;
   DECLARE %ADDR     STRING LEN 15&lt;br /&gt;
   DECLARE %RC       FIXED&lt;br /&gt;
   DECLARE %SOMAX    FIXED&lt;br /&gt;
   DECLARE %FN       STRING LEN 10&lt;br /&gt;
   %PATHNAME = &#039;TCP9C&#039;&lt;br /&gt;
   %FRED     = &#039;HARRY&#039;&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;*    Pathname is 8 chars - the link name&lt;br /&gt;
   %PORT    = 7644&lt;br /&gt;
   %REMPORT = 7633&lt;br /&gt;
   %ADDR    = &#039;193.208.28.147&#039;&lt;br /&gt;
   %REMADDR = &#039;193.208.28.129&#039;&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;*&lt;br /&gt;
   %RC = $SOCKET(&#039;INIT&#039;,%PATHNAME,%ADDR,%PORT,6,7)&lt;br /&gt;
   %RC = $SOCKET(&#039;REGISTER&#039;,%PATHNAME)&lt;br /&gt;
   %RC = $SOCKET(&#039;SOCKET&#039;,2,1,0)&lt;br /&gt;
   %SOCKET = %RC&lt;br /&gt;
   %RC = $SOCKET(&#039;CONNECT&#039;,%SOCKET,%REMPORT,%REMADDR)&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;*    Note that on the WRITE call, the buffer variable name&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;*    is enclosed in quotation marks.&lt;br /&gt;
   %RC = $SOCKET(&#039;WRITE&#039;,%SOCKET,&#039;%FRED&#039;,5)&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;*    4097 is SO_SNDBUF&lt;br /&gt;
  %RC = $SOCKET(&#039;GETSOCKOPT&#039;,%SOCKET,4097)&lt;br /&gt;
   IF $STATUSD NE 0 THEN&lt;br /&gt;
    AUDIT &#039;ERR RETURN FROM GETSOCKOPT &#039; AND %RC AND $STATUSD&lt;br /&gt;
  ELSE&lt;br /&gt;
    AUDIT &#039;RETURN FROM GETSOCKOPT &#039; AND %RC AND $STATUSD&lt;br /&gt;
    %SOMAX = %RC&lt;br /&gt;
    AUDIT &#039;MAX OUTBUF IS &#039; AND %SOMAX&lt;br /&gt;
  END IF&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;*    0 is receive, 1 is send, 2 is both&lt;br /&gt;
   %RC = $SOCKET(&#039;SHUTDOWN&#039;,%SOCKET,2)&lt;br /&gt;
   %RC = $SOCKET(&#039;CLOSE&#039;,%SOCKET)&lt;br /&gt;
   %RC = $SOCKET(&#039;TERM&#039;,%PATHNAME)&lt;br /&gt;
END&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
==Limitations to TCP/IP Sockets Interface for Model 204==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
True communications programming requires an event-driven architecture, where independent threads can respond to external events, such as messages from TCP/IP. SOUL is a procedural language and is limited for event-driven processing, although it is possible to do some sockets programming.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Horizon can respond to asynchronous events by means of pseudo subtasks (PSTs) that wait for external events to occur. It controls sessions between servers and clients by borrowing the concepts of session and conversation from SNA LU6.2. It separates the layer involving the calls from the higher layer that processes conversational requests, such as SEND and RECEIVE. It also imposes a state discipline on the conversation, so that in a certain state some requests are illegal. A conversation in RECEIVE state, for example, cannot simply issue a SEND; the SOUL statement would get a state error.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
With the TCP/IP Socket Interface for &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt;, there is no concept of session or conversation, and there is no state discipline. A call may result in an error, but the error is either a syntax error or an error returned by TCP/IP. This means that the programmer is a responsible for tracking of the state of a connection.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The calls do not operate on interfaces that were not created using the calls themselves. This protects Horizon links from being manipulated incorrectly by rogue function calls. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
There is a restriction that a user can operate on only one TCP/IP interface at a time using function calls. The user may, however, also be registered with one or more Horizon interfaces.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The SELECT call takes bitmaps as input. It is not convenient to manipulate bitmaps as strings in User Language, so the call expects a 4-byte full-word FDS, instead of a variable-length string. This means that the maximum socket that can be selected in a SELECT call is currently 31. The [[#Example procedure - Server|Example procedure - Server]] has subroutines for updating the bitmaps.&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>Mlarocca</name></author>
	</entry>
	<entry>
		<id>https://m204wiki.rocketsoftware.com/index.php?title=SOUL_$functions&amp;diff=70986</id>
		<title>SOUL $functions</title>
		<link rel="alternate" type="text/html" href="https://m204wiki.rocketsoftware.com/index.php?title=SOUL_$functions&amp;diff=70986"/>
		<updated>2014-07-31T19:01:10Z</updated>

		<summary type="html">&lt;p&gt;Mlarocca: /* Summary of standard functions */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Overview==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Some operations are inefficient or impossible to code in a high-level programming language like User Language. To overcome this difficulty, User Language provides a variety of functions, which are assembly language subroutines you can call from within a User Language request.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The name of each User Language function begins with a dollar sign ($). For this reason, they are often referred to as $functions (dollar functions).&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
==Types of functions==&lt;br /&gt;
 &lt;br /&gt;
===Functions provided by User Language===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The functions provided by User Language are divided into two sets. One set is supplied as a standard feature and includes functions for data editing, data validation, and other purposes. The other set of functions (mathematical functions) is an optional feature of &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; and contains mathematical and scientific subroutines.    &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
In order to save machine resources, your site might have chosen to omit some of the standard functions as well as some or all of the mathematical functions. If a request calls a function that is not yet installed, compile-time errors result. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===User-written functions===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
In addition to the functions provided by User Language, some customer sites write their own functions based on their particular needs.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Before using any user-written functions, make sure that your site&#039;s FUNU module has been reassembled with the macro library supplied with the current release. Also, please be sure to carefully test your user-written functions before your system goes into production. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;p class=&amp;quot;note&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Note:&amp;lt;/b&amp;gt;&lt;br /&gt;
It is recommended that all user-written functions use the STMG/LMG Assembly Language instructions to save and restore any registers that are modified.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Customers are individually responsible for any functions they write. Rocket Software takes no responsibility for user-written functions or their documentation.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Using functions==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can use functions in several ways, including, as a term in:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;An expression in a variable assignment statement, for example:&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;%X=$EDIT(2573,&#039;99999&#039;)&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The specifications in a PRINT statement&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 PRINT statement can include a function call anywhere a field name can be used. For example:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;PRINT $EDIT(2573,&#039;99999&#039;)&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;An expression in a conditional statement, for example:&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;IF $EDIT(2573,&#039;99999&#039;) EQ 02573 THEN...&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;An expression which serves as the argument to another function, for example:&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;%L=$LEN($EDIT(2573,&#039;99999&#039;))&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The direct use of function calls in some statements, such as FIND, results in compilation errors.     &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Comparing successful and unsuccessful $function code====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If your request is coded as follows:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;BEGIN&lt;br /&gt;
$EDIT(2573,&#039;99999&#039;)&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 error is your result:&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 M204.0229: INVALID STATEMENT $EDIT(2573,&#039;99999&#039;)&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
However, if you code your request as follows, it works properly:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;BEGIN&lt;br /&gt;
PRINT $EDIT(2573,&#039;99999&#039;)&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;* Or *&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;* %X=$EDIT(2573,&#039;99999&#039;) *&lt;br /&gt;
END&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Function return values===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Each function returns a single value to the calling request. For example, this function sets %A equal to the user&#039;s login account name:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;%a = $account&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
This function causes the length of the current value of the FULLNAME field to be compared to 10:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;IF $LEN(FULLNAME) GT 10 THEN&lt;br /&gt;
   .&lt;br /&gt;
   .&lt;br /&gt;
   .&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Function arguments===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Some functions require one or more arguments which allow you to pass information to the subroutine. Some functions take no arguments. Arguments must be enclosed in parentheses and separated by commas. For example:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;IF $READ(&#039;CONTINUE?&#039;) EQ &#039;YES&#039; THEN&lt;br /&gt;
   .&lt;br /&gt;
   .&lt;br /&gt;
   .&lt;br /&gt;
%X = $mod(COUNT IN CT, %BASE)&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Rules for function arguments====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Function arguments follow the normal rules for arithmetic expressions. Arguments can include other function calls and can perform any type of computation. See the section [[Using variables and values in computation#Expressions|Expressions]] for detailed information on expression syntax.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Argument evaluation and conversion====&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; evaluates each argument to a function as either a string or a number. When this data type conflicts with the data type required by the function, the following rules apply:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;If an argument is expected to be numeric but is a string, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; converts the string to a number according to the conversion rules described in the assignment statement discussion in [[Using variables and values in computation#Relationship between %variable assignment and declaration|Relationship between %variable assignment and declaration]] and [[Using variables and values in computation#Conversion|Conversion]]. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;If an argument is expected to be a string but is numeric, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; converts the number to a string. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;If the original number contains decimal places, they are lost during the conversion.&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;
==Sending email messages via User Language==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The User Language &amp;lt;var&amp;gt;$SNDMAIL&amp;lt;/var&amp;gt; function simplifies sending an email message to issuing a single function call. You can easily send an email message using User Language without writing a procedure and without having an extensive knowledge of sockets or SMTP protocol.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Internet Protocol (IP) addressing====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
On z/OS systems only, Model 204 supports both IPv6 and IPv4 addressing.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Limitations of the $SNDMAIL function under z/VM and z/VSE====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
&amp;lt;var&amp;gt;$SNDMAIL&amp;lt;/var&amp;gt; is supported with the following exceptions:&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;[[SMTPCADD parameter|SMTPCADD]]&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;[[SMTPSADD parameter|SMTPSADD]]&amp;lt;/var&amp;gt; addresses must be supplied in internet protocol (IP) address protocol, not as domain names. You must supply IPv4 (dotted-decimal) internet addresses for the &amp;lt;var&amp;gt;SMTPCADD&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;SMTPSADD&amp;lt;/var&amp;gt; parameters.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Likewise, if the client and server names are specified using the SMAILD image rather than using the CCAIN parameters &amp;lt;var&amp;gt;SMTPCADD&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;SMTPSADD&amp;lt;/var&amp;gt;, the SERVERDDNAME and CLIENTDDNAME values must be supplied rather than the SERVERNAME and CLIENTNAME values. &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; does not support IPv6 addressing on z/VM or z/VSE systems.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Enabling $SNDMAIL===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The first requirement for enabling the use of $SNDMAIL is to set the following four required CCAIN parameters:&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;Parameter&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;SMTP purpose&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;SMTPCADD&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;SMTP client address. The client is the &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; address space. &lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
On z/OS systems:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Set this parameter to one of the following: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Symbolic name, such as MYMVS1, or SMTP.MYDOMAIN.COM.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Dotted decimal address, such as 182.148.55.206.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;IPV6 address, with up to 8 halfwords separated by colons, such as &amp;lt;code&amp;gt;C0:12:46:F0:00:00:00:01&amp;lt;/code&amp;gt;, which can also be written as &amp;lt;code&amp;gt;C0:12:46:F0::01&amp;lt;/code&amp;gt;. In other words, the double colon shows that there are missing halfwords of binary zeros.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
On z/VM or z/VSE systems:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Set this parameter to the dotted decimal address, such as &amp;lt;code&amp;gt;182.148.55.206&amp;lt;/code&amp;gt;.&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;SMTPCPRT&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;SMTP client port. The default value is 7700.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;SMTPSADD&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;SMTP server address.&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
On z/OS systems:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Set this parameter to one of the following: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Symbolic name, such as MYMVS1, or SMTP.MYDOMAIN.COM.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Dotted decimal address, such as 182.148.55.206.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;IPV6 address, with up to 8 halfwords separated by colons, such as &amp;lt;code&amp;gt;C0:12:46:F0:00:00:00:01&amp;lt;/code&amp;gt;, which can also be written as &amp;lt;code&amp;gt;C0:12:46:F0::01&amp;lt;/code&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;
On z/VM or z/VSE systems:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Set this parameter to the dotted decimal address, such as &amp;lt;code&amp;gt;182.148.55.206&amp;lt;/code&amp;gt;.&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;SMTPSPRT&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;SMTP server port. The default value is 25, which is standard for most SMTP servers.&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;
Your system manager can dynamically reset these parameters while the run is up. If you use the domain name for either &amp;lt;var&amp;gt;SMTPCADD&amp;lt;/var&amp;gt; or &amp;lt;var&amp;gt;SMTPSADD&amp;lt;/var&amp;gt;, you must have the following DD allocated to the Online:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;//SYSTCPD DD DSN=TCPIP.PROFILE(TCPDATA),DISP=SHR&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
This is the TCP/IP profile data set required to support the resolution of IP domain names. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
On some SMTP servers, a valid email address is required for the &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;%from&amp;lt;/var&amp;gt; argument in the &amp;lt;var&amp;gt;$SNDMAIL&amp;lt;/var&amp;gt; function. Most SMTP activity requires a valid SMTP server.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====$SNDMAIL and BATCH204====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
&amp;lt;var&amp;gt;$SNDMAIL&amp;lt;/var&amp;gt; is supported in BATCH204 if you relink BATCH204 with the following objects after V7R4 installation:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;TC62 (or TC62DOS on z/VSE systems)&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;TCIU&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;TCSE&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;LU62&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;FUNR (or FUNRDOS on z/VSE systems)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
After relinking you need to ensure that the following SMTP parameters are set in the ONLINE and BATCH204 CCAIN:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SMTPCADD&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;SMTPSADD&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;SMTPCPRT&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;SMTPSPRT&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===$SNDMAIL===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The &amp;lt;var&amp;gt;$SNDMAIL&amp;lt;/var&amp;gt; function sends an email message using the values you enter for the &amp;lt;var&amp;gt;$SNDMAIL&amp;lt;/var&amp;gt; arguments. &amp;lt;var&amp;gt;$SNDMAIL&amp;lt;/var&amp;gt; lets you send an email message with an optional attachment.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Syntax====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The syntax for the &amp;lt;var&amp;gt;$SNDMAIL&amp;lt;/var&amp;gt; function is:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;$SNDMAIL(%SUBJ,%RCPT,%BODY,%FROM,%TO,%CC,%BCC,&#039;EMAILD&#039;,%ATTACH,&#039;C&#039;)&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;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;%SUBJ, which is optional, specifies a %variable or literal that contains the topic line.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;%RCPT, which is optional, specifies a %variable or an image that contains the destination addresses, separated by commas. &lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If %RCPT is omitted, the destination addresses are taken from the %TO, %CC and %BCC arguments. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If %RCPT is an image, the image name must be enclosed within quotation marks, for example &#039;DEPT-ADDR&#039;.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;%BODY specifies a %variable or an image that contains the text of the message. If %BODY is an image, the image name must be enclosed in quotation marks, for example &#039;MSG-TXT&#039;.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;%FROM specifies a %variable that contains the FROM header field of up to 255 bytes. Although %FROM is optional, you should supply it, otherwise messages could fail when speaking to another SMTP server. If %FROM is omitted, the logged-on user ID is used. The email server may append the domain name to the given %FROM value.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;%TO, %CC, and %BC, which are optional, specify a %variable that contains the TO, CC, and BCC header fields, respectively, of up to 255 bytes each.&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Address must be enclosed in carets (&amp;lt;&amp;gt;), for example: M204-help &amp;lt;M204support@rocketsoftware.com&amp;gt;.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&#039;EMAILD&#039;, which is optional, specifies image data.  The parameter provides the ability to override the values specified in CCAIN for SMTPSPRT, SMTPCPRT, SMTPSADD, and SMTPCADD.  If &#039;EMAILD&#039; is present, it must be in the following format, with the items in the following order: &lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;* EMAILD - IMAGE WITH SMTP PARAMETERS&lt;br /&gt;
IMAGE EMAILD                                                                      &lt;br /&gt;
     SERVERPORT    IS BINARY LEN 4    ;*SMTPSPRT                                                &lt;br /&gt;
     CLIENTPORT    IS BINARY LEN 4    ;*SMTPCPRT                                                &lt;br /&gt;
     SERVERNAME    IS STRING LEN 255  ;*SMTPSADD                                              &lt;br /&gt;
     CLIENTNAME    IS STRING LEN 255  ;*SMTPCADD                                            &lt;br /&gt;
     SERVERDD      IS STRING LEN 15   ;*Server dotted decimal address IPv4 format (optional)             &lt;br /&gt;
     CLIENTDD      IS STRING LEN 15   ;*Client dotted decimal address IPv4 format (optional)            &lt;br /&gt;
     SERVERIPV6    IS STRING LEN 45   ;*Server dotted decimal address IPv6 format (optional) &lt;br /&gt;
     CLIENTIPV6    IS STRING LEN 45   ;*Client dotted decimal address IPv6 format (optional) &lt;br /&gt;
END IMAGE                                                                         &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The SERVERIPV6 and CLIENTIPV6 fields are provided for the IPv6 colon-separated network addresses. These two fields are optional, to provide backward compatibility.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;%ATTACH, which is optional, specifies a %variable or literal with the name of an attachment that will be appended to the message. The attachment is assumed to be in the Universal Buffer at offset 0 (also called position 1). The length of the attachment is defined by the $Buffer_Used value. If the %ATTACH parameter is omitted, there is no attachment.&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The function encodes the attachment using Base64 encoding, and may also translate it depending on the 10th argument.&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&#039;C&#039;, which is optional and is available as of Model 204 version 7.5, specifies that the object in the buffer will be translated to ASCII before being attached to the email. Alternatively, you can set this parameter to a percent variable with the value &#039;C&#039;. For example, translation to ASCII could be useful if the $SNDMAIL attachment is a CLOB (CHARACTER-LARGE-OBJECT) such as a text document.  If this argument is not specified with the value &#039;C&#039; or &#039;c&#039;, the attachment is sent as binary, that is, without translation.&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
In this example, the CLOB.TXT attachment will be translated to ASCII before being attached to the email:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;%RC = $SNDMAIL(%SUBJECT,,%BODY,%FROM,%TO,,,,&#039;CLOB.TXT&#039;,&#039;C&#039;)&lt;br /&gt;
&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;
===Setting CCAIN parameters for $SNDMAIL===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can set the following CCAIN parameters as default values for $SNDMAIL.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SMTPCADD is the default SMTP client address, the TCP/IP domain for the operating system, for the $SNDMAIL function. You can specify SMTPCADD as:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;(z/OS, z/VM, or z/VSE) Internet Protocol (IP) address, IPv4 format. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;(z/OS) Domain name of up to 255 bytes. If the first character of the address is an alphabetic character (A to Z), it is automatically evaluated as a domain name.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;(z/OS) IPV6 address, with up to 8 halfwords separated by colons, such as:&lt;br /&gt;
&amp;lt;code&amp;gt;C0:12:46:F0:00:00:00:01&amp;lt;/code&amp;gt;, which can also be written as &amp;lt;code&amp;gt;C0:12:46:F0::01&amp;lt;/code&amp;gt;. In other words, the double colon shows that there are missing halfwords of binary zeros.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can override SMTPCADD for a specific call by entering a different value in the EMAILD argument of the $SNDMAIL function call.&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;SMTPCPRT is the default SMTP client port for the $SNDMAIL function. The value can be any value in the user range &amp;amp;mdash; normally above 4095 and up to 32767.&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can override SMTPCPRT for a specific call by entering a different value in the EMAILD argument of the $SNDMAIL function call.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;SMTPSADD is the default SMTP server address for the $SNDMAIL function. You can specify SMTPSADD as:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;(z/OS, z/VM, or z/VSE) Internet Protocol (IP) address, IPv4 format.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;(z/OS) Domain name of up to 255 bytes. If the first character of the address is an alphabetic character (A to Z), it is automatically evaluated as a domain name.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;(z/OS) IPV6 address, with up to 8 halfwords separated by colons, such as: &amp;lt;code&amp;gt;C0:12:46:F0:00:00:00:01&amp;lt;/code&amp;gt;, which can also be written as &amp;lt;code&amp;gt;C0:12:46:F0::01&amp;lt;/code&amp;gt;. In other words, the double colon shows that there are missing halfwords of binary zeros.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can override SMTPSADD for a specific call by entering a different value in the EMAILD argument of the $SNDMAIL function call.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;SMTPSPRT is the default SMTP server port for the $SNDMAIL function. SMTPSPRT is normally set to the standard SMTP value of 25. You can override SMTPSPRT for a specific call by entering a different value in the EMAILD argument of the $SNDMAIL function.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
===Examples of running $SNDMAIL===&lt;br /&gt;
 &lt;br /&gt;
====Example 1====&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;%FROM  = &#039;me@mydomain.com&#039;&lt;br /&gt;
%TO    = &#039;My Friend &amp;lt;you@yourdomain.com&amp;gt;&#039;&lt;br /&gt;
%BNAME = &#039;mypicture.jpg&#039;&lt;br /&gt;
&lt;br /&gt;
MODIFY BUFFER CLEAR&lt;br /&gt;
&lt;br /&gt;
IN LOBSVR FOR 1 RECORD WHERE SVRKEY = %SVRKEY&lt;br /&gt;
  %ISIZE = $LOBLEN(SVRLOB)&lt;br /&gt;
  PRINT &#039;SIZE OF &#039; WITH %SVRKEY WITH &#039; IS &#039; WITH %ISIZE&lt;br /&gt;
  BUFFER, 1, %ISIZE = SVRLOB, 1, %ISIZE&lt;br /&gt;
END FOR&lt;br /&gt;
&lt;br /&gt;
PRINT &#039;BUFFER USED IS &#039; WITH $buffer_used&lt;br /&gt;
%SUBJECT   = &#039;THIS SENDS A JPG FROM LOBSVR - &#039; WITH %SVRKEY&lt;br /&gt;
%BODY      = &#039;THIS BODY CONTAINS &#039; WITH %SVRKEY&lt;br /&gt;
%RC        = $SNDMAIL(%SUBJECT,,%BODY,%FROM,%TO,,,,%BNAME)&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
In the previous example, a binary object (BLOB) is retrieved from the database and placed at position 1 in the buffer. The $SNDMAIL function sends this as a Base64-encoded attachment.&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 second parameter (the RCPTTO addresses) is omitted. The function creates this using the %TO parameter.&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;%TO  =&#039;JANE &amp;lt;YOU@YOURCORP.COM&amp;gt;&#039;&lt;br /&gt;
%BODY=&#039;See you at 9:30 AM tomorrow in the conference room&#039;&lt;br /&gt;
%RC  =$SNDMAIL(,,%BODY,,%TO)&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Example 3====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The EMAILD argument is used to override the default domain names and ports.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;IMAGE EMAILD&lt;br /&gt;
     SERVERPORT    IS BINARY LEN 4    ;*SMTPSPRT                                                &lt;br /&gt;
     CLIENTPORT    IS BINARY LEN 4    ;*SMTPCPRT                                                &lt;br /&gt;
     SERVERNAME    IS STRING LEN 255  ;*SMTPSADD                                              &lt;br /&gt;
     CLIENTNAME    IS STRING LEN 255  ;*SMTPCADD                                            &lt;br /&gt;
  END IMAGE&lt;br /&gt;
 &lt;br /&gt;
  PREPARE IMAGE EMAILD&lt;br /&gt;
  %EMAILD:SERVERNAME  = &#039;MAIL.SERVER.COM&#039;&lt;br /&gt;
  %EMAILD:CLIENTNAME  = &#039;MYMVSSYSTEM&#039;&lt;br /&gt;
  %EMAILD:SERVERPORT  = 25&lt;br /&gt;
  %EMAILD:CLIENTPORT  = 5601&lt;br /&gt;
  %FROM     = &#039;ME@MYCORP.COM&#039;&lt;br /&gt;
  %TO       = &#039;JANE &amp;lt;YOU@YOURCORP.COM&amp;gt;&#039;&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;* RCPTTO is defined as an image here, allowing the string of&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;* addressees to be more than 255 bytes long.&lt;br /&gt;
  IMAGE RCPTTO&lt;br /&gt;
     EMRCPT1    IS STRING LEN 255&lt;br /&gt;
  END IMAGE&lt;br /&gt;
 &lt;br /&gt;
  PREPARE IMAGE RCPTTO&lt;br /&gt;
  %RCPTTO:EMRCPT1 = &#039;YOU@YOURCORP.COM&#039;&lt;br /&gt;
  IMAGE BODY&lt;br /&gt;
     BODY1   IS STRING LEN 240&lt;br /&gt;
     BODY2   IS STRING LEN 240&lt;br /&gt;
  END IMAGE&lt;br /&gt;
 &lt;br /&gt;
  PREPARE IMAGE BODY&lt;br /&gt;
  %S = &#039;EXAMPLE 1&#039;                     /?    SUBJECT LINE     ?/&lt;br /&gt;
  %BODY:BODY1 = &#039;THIS IS BODY1 WHICH IS PART OF AN IMAGE&#039;&lt;br /&gt;
  %BODY:BODY2 = &#039;SO THE BODY TEXT CAN BE MORE THAN 255 BYTES LONG&#039;&lt;br /&gt;
  %RC         = $SNDMAIL(%S,&#039;RCPTTO&#039;,&#039;BODY&#039;,%FROM,%TO,,,&#039;EMAILD&#039;)&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Example 4====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
This example illustrates using EMAILD in an IPV6 environment. The lines that differ from Example 3 are shown in bold.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;IMAGE EMAILD&lt;br /&gt;
     SERVERPORT    IS BINARY LEN 4    ;*SMTPSPRT                                                &lt;br /&gt;
     CLIENTPORT    IS BINARY LEN 4    ;*SMTPCPRT                                                &lt;br /&gt;
     SERVERNAME    IS STRING LEN 255  ;*SMTPSADD                                              &lt;br /&gt;
     CLIENTNAME    IS STRING LEN 255  ;*SMTPCADD                                            &lt;br /&gt;
     SERVERDD      IS STRING LEN 15   ;*Server dotted decimal address IPv4 format (optional)             &lt;br /&gt;
     CLIENTDD      IS STRING LEN 15   ;*Client dotted decimal address IPv4 format (optional)            &lt;br /&gt;
     SERVERIPV6    IS STRING LEN 45   ;*Server dotted decimal address IPv6 format (optional) &lt;br /&gt;
     &amp;lt;b&amp;gt;CLIENTIPV6    IS STRING LEN 45   ;*Client dotted decimal address IPv6 format (optional)&amp;lt;/b&amp;gt; &lt;br /&gt;
END IMAGE                                                                         &lt;br /&gt;
 &lt;br /&gt;
PREPARE IMAGE EMAILD&lt;br /&gt;
%EMAILD:SERVERPORT = 25&lt;br /&gt;
%EMAILD:CLIENTPORT = 5601&lt;br /&gt;
%EMAILD:SERVERNAME = &#039;MAIL.SERVER.COM&#039;&lt;br /&gt;
&amp;lt;b&amp;gt;%EMAILD:CLIENTIPV6 = &#039;C0:12:46:F0::01&#039;&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
%FROM = &#039;ME@MYCORP.COM&#039;&lt;br /&gt;
%TO = &#039;JANE &amp;lt;YOU@YOURCORP.COM&amp;gt;&#039;&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;* RCPTTO is defined as an image here, allowing the string of&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;* addressees to be more than 255 bytes long.&lt;br /&gt;
  IMAGE RCPTTO&lt;br /&gt;
EMRCPT1 IS STRING LEN 255&lt;br /&gt;
  END IMAGE&lt;br /&gt;
 &lt;br /&gt;
  PREPARE IMAGE RCPTTO&lt;br /&gt;
%RCPTTO:EMRCPT1 = &#039;YOU@YOURCORP.COM&#039;&lt;br /&gt;
IMAGE BODY&lt;br /&gt;
     BODY1  IS STRING LEN 240&lt;br /&gt;
     BODY2  IS STRING LEN 240&lt;br /&gt;
END IMAGE&lt;br /&gt;
 &lt;br /&gt;
  PREPARE IMAGE BODY&lt;br /&gt;
%S = &#039;EXAMPLE 1&#039; /? SUBJECT LINE ?/&lt;br /&gt;
%BODY:BODY1 = &#039;THIS IS BODY1 WHICH IS PART OF AN IMAGE&#039;&lt;br /&gt;
%BODY:BODY2 = &#039;SO THE BODY TEXT CAN BE MORE THAN 255 BYTES LONG&#039;&lt;br /&gt;
%RC = $SNDMAIL(%S,&#039;RCPTTO&#039;,&#039;BODY&#039;,%FROM,%TO,,,&#039;EMAILD&#039;)&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===ASCII translation===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
All text, except an optional binary attachment, is translated from EBCDIC to ASCII before sending.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Line ends===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Text that is part of the header and body can include EBCDIC CRLF strings (X&#039;0D25&#039;) that are translated to ASCII along with the rest of the text.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Reserved names===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The $SNDMAIL function uses Interface names CCAEM000 through CCAEM999. The user does not specify these names &amp;amp;mdash; the link name is generated by the function.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Socket limits===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Up to 31 sockets are available on each link. If no more sockets are available on a particular link (CCAEM000, for example), the next link is tried. Thus, a maximum of 31,000 simultaneous email threads is theoretically possible.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Size of email message===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The FROM, TO, CC, BCC, RCPTTO addresses, and body length, excluding the optional binary attachment, must total less than 27454 bytes.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Return code===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The $SNDMAIL function returns a fixed full word binary return code. See [[#Handling error condition return codes|Handling error condition return codes]] for possible values.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===RCPTTO parameter===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If the $SNDMAIL EMAILD argument is omitted, the RCPTTO addresses are constructed from the addresses contained in the %TO, %CC, and %BCC arguments.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The sum of the lengths of the RCPTTO address string, (If supplied) and the body text cannot exceed 30,700.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Using quotation marks===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You must enclose the names of images within quotation marks, for example:  &#039;BODY&#039;. However, do not enclose the percent variable values within quotation marks, for example: %SUBJECT, not &#039;%SUBJECT&#039;.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Server and client names in the EMAILD parameters===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
In the EMAILD image, on a z/OS system, you can specify either or both the server and client names as domain names, for example: &amp;lt;var&amp;gt;SMTPSERVER.YOURDOMAIN.COM&amp;lt;/var&amp;gt; or as an Internet Protocol (IP) address. If you specify the domain name, a TCP/IP call looks up the IP address. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;If one field is present, all fields must be present, even if the optional fields are left blank. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;If a name or port field is absent, it is taken from the CCAIN parameters SMTPSADD, SMTPCADD, SMTPSPRT, and SMTPCPRT. &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 two port parameters have defaults: the SMTPSPRT default is 25; the SMTPCPRT default is 7700.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The two address parameters, SMTPSADD and SMTPCADD, can be specified either as domain names of up to 255 bytes or as IP addresses. If the address begins with an alphabetic character (A to Z), it is automatically evaluated as a domain name. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The four CCAIN default parameters SMTPSADD, SMTPCADD, SMTPSPRT, and SMTPCPRT can be examined using VIEW and changed using RESET.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===References===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
For more information about the standards used in this function, please refer to these Internet Request for Comments documents:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;RFC822, Standard for the format of ARPA Internet Text Messages&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;RFC2821, Simple Mail Transfer Protocol&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;RFC3548, The Base16, Base32, and Base64 Data Encoding&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;
===Error codes for $SNDMAIL===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The $SNDMAIL function issues a return code. An error in $SNDMAIL gives a return code of -1, and it is $StatusD that contains the error code. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The negative error codes starting with -999 are listed in [[#Handling error condition return codes|Handling error condition return codes]]. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
It is also possible that $SNDMAIL will return a positive error code, which comes from TCP/IP and is documented in the IBM TCP/IP documentation, TCP/IP V3.2 for MVS: API Reference, Appendix D. For example, an error code of 60 means that the connection attempt timed out. $SOCKET calls give the same errors.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
However, in the case of a non-zero (error) return code, the following message is issued to the user:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;M204.2799: $SNDMAIL ERROR errortext&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When an attempt is made to set or reset the SMTPCADD or SMTPSADD parameters and the address translation fails, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; issues the following messages:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;RESET SMTPCADD CCAGGGG&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;*** M204.2834: ADDRESS LOOKUP FAILED FOR CCAGGGG&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;*** 1  M204.1123: PARAMETER SMTPCADD NOT RESET&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Handling error condition return codes===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
[[#Handling error condition return codes|Handling error condition return codes]] lists the possible $SOCKET return codes.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;caption&amp;gt;$Socket return codes&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;SMTP&lt;br /&gt;
Error text &amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Numeric&lt;br /&gt;
value &amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;&lt;br /&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&amp;gt;ERBADARG &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;-999 &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;BAD ARGUMENT&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;ERNOTOPN &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;-998 &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;NOT OPEN&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;ERNOSTOR &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;-997 &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;NO STORAGE&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;ERIMAGER &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;-996 &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;IMAGE FAILURE&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;ERBADLNK &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;-995 &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;BAD LINK&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;ERNOTREL &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;-994 &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;SOCD NOT RELEASED&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;ERPHYERR &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;-993 &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;LINK DEAD&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;ERNOLINK &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;-992 &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;LINK UNKNOWN&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;ERTRUNC &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;-991 &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;VARIABLE TRUNCATION (READ CALL)&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;ERNOSOCK &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;-990 &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;SOCKET NOT FOUND&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;ERTRUNC2 &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;-989 &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;TRUNCATION ERROR ON IMAGE&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;EROPSYS &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;-988 &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;FUNCTION UNSUPPORTED ON THIS OPSYS&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; &amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;-987 &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Not used&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;ERNOSRCD &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;-986 &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;NO SRCD&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;ERFDSLIM &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;-985 &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;TOO MANY SOCKETS&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;ERBADUBN &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;-984 &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;UNIVERSAL BUFFER NOT THERE&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;ERBADUBL &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;-983 &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;UNIVERSAL BUFFER LENGTH ERROR&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;ERBADUBA &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;-982 &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;UNIVERSAL BUFFER ALLOCATION ERROR&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;EREMREAD &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;-981 &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;ERROR WITH EMAIL SERVER READ&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;EREMWRIT &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;-980 &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;ERROR WITH EMAIL SERVER WRITE&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;ERGHBERR &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;-979 &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;SKIP=0 ERROR ON GETHOST CALL&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;ERGHERR1 &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;-978 &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;T1 LT 0 ERROR ON GETHOST CALL&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;ERGHERR2 &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;-977 &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;NO ADDRESSES RETURNED&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;
 &lt;br /&gt;
When an error message (with code 5xx) is returned from the SMTP server, the following error message is displayed:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;M204.2796: &#039;SMTP %C&#039;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
where %C is the error message returned by SMTP.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
For the other error codes above, the following error message is returned, in addition to $StatusD being set.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;M204.2799: &#039;$SNDMAIL ERROR %C&#039;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
where %C is listed in the following table:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;caption&amp;gt;Error text message possibilities for M204.2799&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;%C in message 2799 &amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;$StatusD code(s)&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;IN PARAMETER &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;999&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;- SOCKET NOT FOUND &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;990&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;- FUNCTION NOT SUPPORTED ON THIS SYSTEM &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;998&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;- NO SRCD &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;986&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;- TOO MANY SOCKETS &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;985&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;WITH UNIVERSAL BUFFER &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;984, 983, 982&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;Reading from SMTP server &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;981&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;Writing to SMTP server &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;980&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;Using GETHOSTBYNAME lookup &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;979, 978, 977&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;GETTING STORAGE &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;997&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;IN IMAGE PROCESSING &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;996&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;WITH TCP LINK &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;995, 998, 993, 992&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;- SOCD NOT RELEASED &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;994&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;READING DATA - TRUNCATION &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;991&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;
==Summary of standard functions==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
The following table lists the standard &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;SOUL&amp;lt;/var&amp;gt; functions in alphabetical order. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
See also:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[[SOUL $functions#Using_functions|Using functions]] reviews coding in &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;SOUL&amp;lt;/var&amp;gt; with $functions.&lt;br /&gt;
&amp;lt;li&amp;gt;[[List of $functions]] contains the many additional $functions available as of version 7.5 of &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model 204&amp;lt;/var&amp;gt;.&lt;br /&gt;
&amp;lt;/ul&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;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;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;[[$Account]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Account under which the user is logged in.&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;[[$Acct]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;User ID under which the user is logged in.&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;[[$Alpha]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Whether a string is composed of only the letters A through Z.&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;[[$AlphNum]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Whether a string is composed of only the letters A through Z and digits 0 through 9.&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;[[$ArrSize]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Number of elements in a particular dimension of an array.&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;[[$Ascii]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Input string, converted from EBCDIC to ASCII.&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;[[$Binary]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;A number converted into fixed-point binary.&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;[[$BldProc]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Enables a request to build a temporary procedure.&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;[[$Buffer_Position]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Current Universal Buffer position.&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;[[$Buffer_Size]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Size of user&#039;s Universal Buffer.&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;[[$Buffer_Used]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Amount of data currently in Universal Buffer&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;[[$CenqCt]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Number of unused entries within the resource enqueuing table.&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;[[$ChkMod]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Whether the terminal operator entered data in any full-screen input field.&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;[[$ChkTag]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Whether any erroneous full-screen input has been entered by the end user.&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;[[$ChkPat]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Syntax of a pattern.&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;[[$Code]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Encoding facility.&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;[[$Curfile]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Name of the file from which the current record has been selected.&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;[[$Currec]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Integer equal to the internal number of the current record.&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;[[$C2X]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;A translation of each byte within a character string to its two-byte&lt;br /&gt;
hexadecimal representation.&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;[[$Date]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Current date in yy-mm-dd format.&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;[[$DateChg]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Specified number of days, added to or subtracted from a given date.&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;[[$DateChk]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Whether a given date is valid.&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;[[$DateCnv]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Date converted to a format specified by the user.&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;[[$DateDif]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Difference in days between two dates.&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;[[$DateP]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Current date in &amp;quot;dd mon yy&amp;quot; format.&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;[[$DayI]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Number reflecting current day of the week.&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;[[$Deblank]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Substring of a string, with leading and trailing blanks removed.&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;[[$Decode]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Decoding facility.&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;[[$Dscr]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Decoding facility.&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;[[$Dsn]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Data set name when you specify a file&#039;s DD name and the ordinal number.&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;[[$DsnNum]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Total number of data sets defined for a file when you specify the file&#039;s DD name.&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;[[$EcfStat]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Returns the detailed completion code from the previous EXTERNAL statement.&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;[[$Edit]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Edited numeric and alphanumeric text&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;[[$Eformat]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Exponent notations from converted numeric values&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;[[$Encrypt]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;A one-way encryption of a character 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&amp;gt;[[$Enter]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Efficient terminal dialogue with users of data entry applications.&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;[[$Errmsg]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Prefix and text of the last counting error or request cancellation message received.&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;[[$FDef]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;String that describes the attributes of a field in 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;/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;[[$FieldgroupId]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;The ID of the current field group. (Available as of Model 204 version 7.5.)&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;[[$FieldgroupOccurrence]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;The current occurrence number of the field group. (Available as of Model 204 version 7.5.)&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;[[$FldLen]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Length of a field.&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;[[$Float]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Floating-point to a 4-byte string without conversion (4-byte floating point number to a 4-byte 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&amp;gt;[[$FloatD]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Floating-point to a 4-byte string without conversion (8-byte floating point number to an 8-byte 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&amp;gt;[[$FlsAcc]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;User&#039;s access rights to a particular field.&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;[[$FlsChk]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Whether a given set of field level security accesses is valid for a field.&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;[[$Fsterr]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Variable-length string containing the prefix and the first counting error message or request cancellation message received by the user since the last time the count was reset to zero.&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;[[$Getg]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Information stored by a $SETG function.&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;[[$GetL]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Line number of the current line on the page on the user&#039;s terminal or on the output data set specified by a USE command.&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;[[$GetP]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Page number currently on the user&#039;s terminal or on the output data set specified by a USE command.&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;[[$GrmLoc]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Location of a missing member.&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;[[$GrmName]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;File name of a missing member.&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;[[$GrnLeft]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Number of optional files that may fail before MAXFAIL is exceeded.&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;[[$GrnMiss]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Number of missing members.&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;[[$HPage]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;String of special characters whose length is equal to the value specified as the $HPage argument.&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;[[$Hsh]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;A hash value from a converted string value. A hash value is a distinct numeric representation of a given string value.&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;[[$Incrg]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Performs simple arithmetic on global variables.&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;[[$Index]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;After comparing two strings, a number equal to the first position within the first string at which the second string appears; the same function as $SCAN.&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;[[$Itsopen]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Whether or not a file is open.&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;[[$Itsremote]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Whether the current file or group is remote or scattered.&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;[[$Jobcode]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Allows a request that is part of one step of a &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; batch run to communicate with a subsequent step.&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;[[$LangSpc]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;String containing the binary value of a character in a specified language.&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;[[$LangSrt]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;A binary string translated to sort according to the NLSORT macro for the specified language.&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;[[$LangUst]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Previously $LangSrt&#039;ed  string translated back to its original form.&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;[[$Len]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Length of a value in a field.&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;[[$Lowcase]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;A lower case string translated from an uppercase or mixed case 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&amp;gt;[[$LstFld]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Field names in a file, along with their field descriptions, into an image.&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;[[$LstProc]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Information that is stored for a procedure.&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;[[$MisGrup]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Group name if the error occurred in group context, null if in file context.&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;[[$MisName]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;File name of a missing member or 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;[[$MisNum]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Number of files that failed in a 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;[[$MisLoc]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Location of a missing member or 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;[[$MisStmt]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Statement that caused the ON unit to be entered.&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;[[$Mod]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Remainder that results when one argument is divided by the another argument.&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;[[$Occurs]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Whether a field has the OCCURS attribute.&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;[[$Oneof]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Table lookup that can replace a series of IF conditions.&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;[[$Pack]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Packed decimal representation of a 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&amp;gt;[[$Pad]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Designated character padded to the left.&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;[[$PadR]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Designated character padded to the right&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;[[$RdProc]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Lines of a User Language procedure, retrieved in sequential order, that is stored in 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;/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;[[$Read]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;An echo of the data a user enters as a request is evaluated&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;[[$ReadInv]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Performs the same function as $READ, except that input from the terminal is not echoed.&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;[[$ReadLc]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;An echo of the data a user enters as a request is evaluated, except that case translation is deactivated, regardless of the current *UPPER or *LOWER setting.&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;[[$Remote]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;VTAMNAME value of the originating &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; region when using SNA Communications Server (formerly VTAM) TRANSFER to transfer between &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; regions.&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;[[$Reverse]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Reversed order of a 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&amp;gt;[[$RlcFile]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Name of the file in which the last record locking conflict occurred.&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;[[$RlcRec]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Internal record number for which the last record locking conflict occurred.&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;[[$RlcUid]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;ID of the user who caused an ON FIND CONFICT or ON RECORD LOCKING CONFLICT. If the conflicting user is on a remote node, $RLCUID also returns the name of the node.&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;[[$RlcUsr]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;User number of the user with which the request conflicted when the last record locking conflict occurred.&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;[[$Round]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Number, rounded to a specified number of decimal places.&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;[[$Scan]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;After comparing two strings, a number equal to the first position within the first string at which the second string appears; the same function as $INDEX.&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;[[$Sclass]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Current user&#039;s subsystem user class.&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;[[$Setg]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;A created or changed entry in the global variable section of GTBL.&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;[[$SetL]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Sets the current line counter for the output device currently in effect.&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;[[$SetP]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Sets the current page number for the output device currently in effect.&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;[[$Slstats]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Resets the recording of since-last statistics anywhere within a request.&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;[[$Sndx]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;SOUNDEX code of an argument.&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;[[$Square]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;A number multiplied by itself.&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;[[$Stat]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Current value of any user statistic.&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;[[$Status]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;The success or failure of the last executed external I/O or program communication statement.&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;[[$StatusD]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;More detailed description of a condition returned by $STATUS.&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;[[$Strip]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;A number with suppressed leading zeros.&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;[[$Substr]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Substring of a 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&amp;gt;[[$Subsys]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Status of an APSY subsystem.&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;[[$Time]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Current time in hh:mm:ss format.&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;[[$Unbin]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Value converted from binary to string representation.&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;[[$Unblank]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Contents of an argument, removing leading and trailing blanks, and compressing multiple embedded blanks to one blank character.&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;[[$Unfloat]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Character string that represents a numeric counted string of 4 or 8 bytes, which contains a floating point.&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;[[$Unpack]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Unpacked decimal data &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;[[$UnqRec]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
In the case of a uniqueness violation, returns the file-relative record number of the record that already contains the field name = value pair&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If no uniqueness violation occurred. returns -1.&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;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;[[$Upcase]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;An uppercase string converted from a lower or mixed case 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&amp;gt;[[$Update]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Name of the group update file or the current 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;[[$UpdFld]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Name of the field for which a field level constraint violation has occurred, or a blank if no violation occurred.&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;[[$UpdFile]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Name of the file in which a field level constraint violation has occurred, or a blank if no violation occurred.&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;[[$UpdLoc]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Location name (node name) of the current update unit (Parallel Query Option/204 only).&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;[[$UpdOval]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Value of the original field occurrence causing a constraint violation, when invoked from an ON FCC unit following the detection of an AT-MOST-ONE field-level constraint conflict. &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;[[$UpdRec]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;File-relative record number of the record whose update caused a field level constraint violation, or -1 if no violation occurred.&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;[[$UpdStat]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Numeric value denoting the type of field level constraint violation that has occurred, or 0 if no violation occurred.&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;[[$UpdStmt]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Type of User Language updating statement causing a field level constraint violation, or a blank if no violation occurred.&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;[[$UpdVal]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Field value causing a field level constraint violation, or a blank if no violation occurred.&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;[[$User]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;User&#039;s user number.&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;[[$Userid]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;User ID under which the user is logged in.&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;[[$UsrPriv]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Whether a user ID has been granted specific &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; 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;[[$Verify]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Whether every character in one string is present in a second 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&amp;gt;[[$View]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Value of a parameter.&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;[[$Vnum]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Whether a given argument is in a valid format for a SORT BY VALUE NUMERICAL statement or for any type of mathematical operation.&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;[[$Word]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;P word in a specified string, delimited by a blank or optionally specified character.&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;[[$Words]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Number of words in a specified string, delimited by a blank or optionally specified character.&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;[[$X2C]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;One-byte EBCDIC characters translated from a string of 2-byte hexadecimal character.&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;
[[Category:SOUL]]&lt;/div&gt;</summary>
		<author><name>Mlarocca</name></author>
	</entry>
	<entry>
		<id>https://m204wiki.rocketsoftware.com/index.php?title=$WORDS&amp;diff=70985</id>
		<title>$WORDS</title>
		<link rel="alternate" type="text/html" href="https://m204wiki.rocketsoftware.com/index.php?title=$WORDS&amp;diff=70985"/>
		<updated>2014-07-31T18:57:32Z</updated>

		<summary type="html">&lt;p&gt;Mlarocca: Mlarocca moved page $WORDS to $Words: Lower case change&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[$Words]]&lt;/div&gt;</summary>
		<author><name>Mlarocca</name></author>
	</entry>
	<entry>
		<id>https://m204wiki.rocketsoftware.com/index.php?title=$Words&amp;diff=70984</id>
		<title>$Words</title>
		<link rel="alternate" type="text/html" href="https://m204wiki.rocketsoftware.com/index.php?title=$Words&amp;diff=70984"/>
		<updated>2014-07-31T18:57:31Z</updated>

		<summary type="html">&lt;p&gt;Mlarocca: Mlarocca moved page $WORDS to $Words: Lower case change&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;p&amp;gt;The $WORDS function returns the number of words in a specified string, delimited by a blank or optionally specified character.&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;The format of the $WORDS function is:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;$WORDS(&#039;inputstring&#039;, &amp;lt;var&amp;gt;[&amp;lt;/var&amp;gt;&#039;delimiter&#039;&amp;lt;var&amp;gt;]&amp;lt;/var&amp;gt;)&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;where:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;inputstring is the input from which the specified word is to be extracted. inputstring can be a quoted literal or a %variable.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;delimiter is an optional character to be used as a delimiter in parsing the input string into words. If delimiter is not specified, it defaults to a blank space. &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;b&amp;gt;Usage&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Null values between delimiters are not considered words. For example,&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;$WORDS(&#039;ABC==D=XXX&#039;,&#039;=&#039;)&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;returns a count of three words, not four.&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;The following function returns 4, the number of words in the string when a blank delimits a word:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;$WORDS (&#039;NOW IS THE TIME&#039;)&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
[[Category:SOUL $functions]]&lt;/div&gt;</summary>
		<author><name>Mlarocca</name></author>
	</entry>
	<entry>
		<id>https://m204wiki.rocketsoftware.com/index.php?title=$WORD&amp;diff=70983</id>
		<title>$WORD</title>
		<link rel="alternate" type="text/html" href="https://m204wiki.rocketsoftware.com/index.php?title=$WORD&amp;diff=70983"/>
		<updated>2014-07-31T18:57:04Z</updated>

		<summary type="html">&lt;p&gt;Mlarocca: Mlarocca moved page $WORD to $Word: Lower case change&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[$Word]]&lt;/div&gt;</summary>
		<author><name>Mlarocca</name></author>
	</entry>
	<entry>
		<id>https://m204wiki.rocketsoftware.com/index.php?title=$Word&amp;diff=70982</id>
		<title>$Word</title>
		<link rel="alternate" type="text/html" href="https://m204wiki.rocketsoftware.com/index.php?title=$Word&amp;diff=70982"/>
		<updated>2014-07-31T18:57:04Z</updated>

		<summary type="html">&lt;p&gt;Mlarocca: Mlarocca moved page $WORD to $Word: Lower case change&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;p&amp;gt;The $WORD function searches a string from the left for a complete word and returns the nth word in a specified string, delimited by a blank or optionally specified character.&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;The format of the $WORD function is:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;$WORD(&#039;inputstring&#039;,[&#039;delimiter&#039;],&amp;lt;var&amp;gt;[&amp;lt;/var&amp;gt;n&amp;lt;var&amp;gt;]&amp;lt;/var&amp;gt;)&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;where:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;inputstring is the input from which the specified word is to be extracted. inputstring can be a quoted literal or a %variable.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;delimiter is an optional quoted character or string to be used as a delimiter in parsing the input string into words. If delimiter is not specified, it defaults to a blank space. If delimiter consists of more than one character, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; uses the first character in the string as the delimiter.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;n is the ordinal number of the word to be extracted. $WORD returns a null string under any of the following conditions:&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;n is not specified&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;n is less than 1 (0 or negative)&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;n is greater than the number of words in inputstring&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;The commas which separate the three arguments are required, even if delimiter is not specified.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Usage&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Null values between delimiters are not considered words. For example, &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;$WORD(&#039;=ABCD==D=XXX&#039;,&#039;=&#039;,2)&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;returns D as the second word, not a null value.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Examples&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;The following function returns the third word in the string, &amp;quot;THE&amp;quot;, when a single space delimits a word:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;$WORD (&#039;NOW IS THE TIME&#039;,,3)&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;The following function returns the second word in the string, &amp;quot;S THE T&amp;quot;, where a word is composed of the characters that precede a delimiting I:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;$WORD (&#039;NOW IS THE TIME&#039;,&#039;I&#039;,2)&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
[[Category:SOUL $functions]]&lt;/div&gt;</summary>
		<author><name>Mlarocca</name></author>
	</entry>
	<entry>
		<id>https://m204wiki.rocketsoftware.com/index.php?title=$VNUM&amp;diff=70981</id>
		<title>$VNUM</title>
		<link rel="alternate" type="text/html" href="https://m204wiki.rocketsoftware.com/index.php?title=$VNUM&amp;diff=70981"/>
		<updated>2014-07-31T18:55:45Z</updated>

		<summary type="html">&lt;p&gt;Mlarocca: Mlarocca moved page $VNUM to $Vnum: Lower case change&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[$Vnum]]&lt;/div&gt;</summary>
		<author><name>Mlarocca</name></author>
	</entry>
	<entry>
		<id>https://m204wiki.rocketsoftware.com/index.php?title=$Vnum&amp;diff=70980</id>
		<title>$Vnum</title>
		<link rel="alternate" type="text/html" href="https://m204wiki.rocketsoftware.com/index.php?title=$Vnum&amp;diff=70980"/>
		<updated>2014-07-31T18:55:45Z</updated>

		<summary type="html">&lt;p&gt;Mlarocca: Mlarocca moved page $VNUM to $Vnum: Lower case change&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;p&amp;gt;The $VNUM function returns a 1 if the given argument is in a valid format for a SORT BY VALUE NUMERICAL statement or for any type of mathematical operation. To be valid, the argument must be a quoted rational number with optional sign. Leading or trailing blanks, or blanks between the sign and the number, are ignored. If the contents of the argument do not have the required form, 0 is returned. Numeric values with more than 63 significant digits are not in the correct form; a 0 is returned.   &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 class=&amp;quot;syntax&amp;quot;&amp;gt;$VNUM(&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;numeric-string-value&amp;lt;/span&amp;gt;{,&#039;SORT&#039; | &#039;SORTKEY&#039; | &#039;FLOAT&#039; | &#039;BINARY&#039;})     &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Where:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SORTKEY returns 1 if the numeric value is valid as a numeric string sortkey. See [[Sorting#NUMERICAL option|NUMERICAL option]]. A numeric string sortkey value that is not acceptable to $VNUM as a SORTKEY value is sorted in character order even if the SORT statement specifies numeric order.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;The following compression rules apply to SORTKEY:&amp;lt;/p&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;Leading plus (+) or minus (-) sign is compressed.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Leading blanks before and after the (optional) leading +/- sign are compressed.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Leading zeros after the (optional) leading +/- sign and blanks are compressed.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;1-63 integer digits before the (optional) decimal point are allowed.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Values greater than -1 and less than 1 require leading &amp;quot;0.nnn&amp;quot;.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Optional decimal point and fractional value are allowed.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Trailing blanks are compressed.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;1-253-byte total length is allowed.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&#039;FLOAT&#039; returns 1 if the numeric value is valid as an E-format floating point numeric string. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&#039;BINARY&#039; returns 1 if the numeric value is valid as a compressible binary value (to be stored in a BINARY NON-CODED field). See [[Data maintenance#Storing values in BINARY fields|Storing values in BINARY fields]]. Otherwise returns a 0.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;The following compression rules apply to BINARY:&amp;lt;/p&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;1-9 decimal integer values are allowed.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;No leading zeros are compressed.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Leading plus (+) sign is compressed.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Leading minus (-) sign is allowed.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Example 1&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;$VNUM(&#039; + 256.73 &#039;) equals 1&lt;br /&gt;
$VNUM(&#039;14&#039;) equals 1&lt;br /&gt;
$VNUM(&#039;-17.17&#039;) equals 1&lt;br /&gt;
$VNUM(&#039;.1794763&#039;) equals 1 &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Example 2&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;$VNUM(&#039; -256.73 AB&#039;) equals 0&lt;br /&gt;
$VNUM(&#039;256.73-&#039;) equals 0&lt;br /&gt;
$VNUM(&#039; TWELVE&#039;) equals 0 &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Example 3&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;This example averages premium amounts. The amounts are included in the average only if they meet the $VNUM specifications.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;BEGIN&lt;br /&gt;
          %CT IS FLOAT&lt;br /&gt;
GET.RECS: FIND ALL RECORDS&lt;br /&gt;
          END FIND&lt;br /&gt;
          FOR EACH RECORD IN GET.RECS&lt;br /&gt;
              IF $VNUM(TOTAL PREMIUM) THEN&lt;br /&gt;
                  %TOT = %TOT + TOTAL PREMIUM&lt;br /&gt;
                  %CT = %CT + 1&lt;br /&gt;
              END IF&lt;br /&gt;
          END FOR&lt;br /&gt;
          %AVERAGE = %TOT/%CT&lt;br /&gt;
          PRINT &#039;THE AVERAGE PREMIUM IS &#039; -&lt;br /&gt;
              WITH &#039;$&#039; WITH %AVERAGE&lt;br /&gt;
END     &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
[[Category:SOUL $functions]]&lt;/div&gt;</summary>
		<author><name>Mlarocca</name></author>
	</entry>
	<entry>
		<id>https://m204wiki.rocketsoftware.com/index.php?title=Files,_groups,_and_reference_context&amp;diff=70979</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=70979"/>
		<updated>2014-07-31T18:54:50Z</updated>

		<summary type="html">&lt;p&gt;Mlarocca: &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 in this manual, Parallel Query Option/204 is described in detail in the &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;. &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 the &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;.    &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;
[[#Using Model 204 file and group commands|Using Model 204 file and group commands]] 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 topic. For more information on the other commands in [[#Using Model 204 file and group commands|Using Model 204 file and group commands]], 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;
&amp;lt;li&amp;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;&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 [[List of Model 204 parameters]] and [[List of Model 204 commands]]. &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, including error handling, see [[#OPEN or OPENC statement|OPEN or OPENC statement]]. &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;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Permanent group &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Multiple permanent group &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;
====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;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;System level resources&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Application subsystems   &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;
See the&lt;br /&gt;
&amp;lt;I&amp;gt;[http://m204wiki.rocketsoftware.com/images/8/80/M204_V7R4_System_Manager.pdf Rocket Model 204 System Manager&#039;s Guide]&amp;lt;/i&amp;gt; for information about the Lock Files/Groups application subsystem definition option.&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]].&lt;br /&gt;
For file security details, see [[:Category:Model 204 files|Model 204 files]] [[that link is nonsense here|??]]. &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;
 &lt;br /&gt;
  [(option [, option ...])]&lt;br /&gt;
 &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;
===OPEN statement and OPENC statement===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The OPEN and OPENC statements are useful for opening a file and allowing the request to take actions based on the current status of the file.&lt;br /&gt;
Only file parameters are available to the request that issues the OPEN or OPENC statement.&lt;br /&gt;
For example, the current status of the file can be determined 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; to the request. &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
File data is not available until the current request has ended evaluation; then a subsequent request may access the data in the file that was previously opened with the OPEN or OPENC statement.  Since the file name is not known to the request at compile time, the request issuing the OPEN or OPENC statement cannot be compiled to access data in that file. &lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The OPEN or OPENC statement is supported in remote context. The use of 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 OPEN or OPENC statement is:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;OPEN[C] [FILE | [PERM | TEMP] GROUP]&lt;br /&gt;
 &lt;br /&gt;
 {name [AT {location | %variable | =}] | %variable}&lt;br /&gt;
 &lt;br /&gt;
 [PASSWORD {value | %variable}]&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;The C option specifies that the previous default file or group is preserved when the current file or group is opened. Default files and groups are discussed later in this page.    &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The FILE 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;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The PERM 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;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The TEMP 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;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The GROUP 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;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;filename 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 filename can be provided in a %variable.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The AT keyword specifies that the file to be opened is a remote file. Only individual files (or group members) can be specified using the AT keyword. An entire group cannot be treated as a remote object. Thus none of the keywords PERM, TEMP, or GROUP can be used with AT.&amp;lt;/li&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 AT clause) or by opening a scattered group of which the file is a member.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;location is the name of the remote node where the file is located. The location can be provided in a %variable.&amp;lt;/li&amp;gt;&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 call for 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 PASSWORD clause specifies a valid password for the file or group to 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;
 &lt;br /&gt;
====Usage notes====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If the GROUP keyword is specified without a PERM or TEMP 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;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Beginning with &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; V3R2.1, the following message is produced for a &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;SOUL&amp;lt;/var&amp;gt; OPEN statement in the form OPEN %variable, if the OPEN fails:&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;***M204.1521:%variable 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;
Beginning in V4R1.1, message 1521 is also produced for a failed OPEN statement in the form OPEN name. Now both forms of the OPEN statement produce the same message.&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. Message 1743 that was previously invoked when an OPEN %variable or OPEN name statement failed is not a counting error and does not invoke the APSY error procedure.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Error handling===&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 $ERRMSG 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;
&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;
&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;
&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 the Rocket &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; Horizon: Intersystem Processing Guide. &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&amp;gt;&lt;br /&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;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. 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;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&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 statement becomes the default. 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;&lt;br /&gt;
&amp;lt;li&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;An IN clause within the BEGIN or MORE command that initiates a request sets a default that remains in effect for only 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&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 CLEAR LIST, FIND, FOR RECORD NUMBER, and STORE RECORD 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] groupname&lt;br /&gt;
 &lt;br /&gt;
   MEMBER %member [AT {location | =}]&lt;br /&gt;
 &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 FOR RECORD NUMBER 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 the &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 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 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;.&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;
&amp;lt;/li&amp;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;
&amp;lt;/li&amp;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;/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;
 &lt;br /&gt;
   MEMBER {%member | filename [AT {location | =]&lt;br /&gt;
 &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;
&amp;lt;/li&amp;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;
&amp;lt;/li&amp;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.&amp;lt;/li&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 FOR RECORD NUMBER option does not support remote files.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;statement is one of the following:&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;
CLEAR LIST&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
FIND ALL RECORDS&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
FIND ALL VALUES&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
FOR RECORD NUMBER (FRN)&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
STORE RECORD&amp;lt;/p&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 JANSALES 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 FOR RECORD NUMBER (FRN) 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 A.CAT statement finds a set of records from the default group FISCAL. 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 HIST.MATCH statement, all statements refer to FISCAL. The HIST.MATCH statement uses the account number from the current record in FISCAL to search the single file HISTORY. The HIST.MATCH through HIST.CT statements refer to the HISTORY 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;FIND 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;SORT 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;FOR EACH VALUE 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;FOR EACH RECORD 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 FOR EACH RECORD 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 FOR EACH RECORD 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 FOR EACH RECORD 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 FOR RECORD NUMBER 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 FOR EACH RECORD IN ORDER BY form of the FOR EACH RECORD 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 BEGIN 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 FOR EACH RECORD 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;
[[#Referencing remote files in requests|Referencing remote files in requests]] 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 the &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 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:&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;
File is in group context &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
File is an optional group member&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
MAXFAIL parameter setting in CREATE GROUP is not exceeded&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Node to which the file belongs has no uncommitted updates&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Invokes one of two ON units:   &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;
ON MISSING MEMBER&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
ON MISSING FILE &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;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;/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;
&amp;lt;/li&amp;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;
&amp;lt;/li&amp;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;/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;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The group member is considered disabled. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;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;/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 FOR EACH RECORD 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;
&amp;lt;/li&amp;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;/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;
&amp;lt;/li&amp;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;
&amp;lt;/li&amp;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;/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;
&amp;lt;/li&amp;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;
&amp;lt;/li&amp;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.&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 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 FOR EACH RECORD 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;
&amp;lt;/li&amp;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;/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 FOR EACH RECORD 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;
&amp;lt;/li&amp;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;/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 FOR RECORD NUMBER statement are supported in remote file and scattered group context, although FOR RECORD NUMBER and FOR RECORD NUMBER IN label 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;
FOR RECORD NUMBER IN label refers to a preceding FOR EACH RECORD statement. In Parallel Query Option/204, the records retrieved for the FOR EACH RECORD loop are copied and sent to the client when the FOR EACH RECORD statement is evaluated. If the records are not locked after the retrieval, by the time the FOR RECORD NUMBER IN label 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 FOR RECORD NUMBER without IN label, &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 FOR RECORD NUMBER execution. Only the fields referred to by FOR RECORD NUMBER 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 FOR EACH RECORD NUMBER 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 OPT FNV 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 FOR EACH VALUE 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;
&amp;lt;/li&amp;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;
&amp;lt;/li&amp;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;/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;
&amp;lt;/li&amp;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;/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 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;).   &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;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Literal location names following dummy strings &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;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;/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 FIND statement to retrieve a set of records from a service node file. A client FOR EACH RECORD 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 FOR EACH RECORD 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 FOR EACH RECORD 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 FOR RECORD NUMBER. &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; Always lock a record before updating it. If an unlocked record set or list is being processed, use the FOR RECORD NUMBER 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&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
FOR RECORD NUMBER locks, copies, and sends the record to the client when the FOR RECORD NUMBER statement is executed. Using FOR RECORD NUMBER IN label 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;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;$UPDFILE&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;$UPDFLD&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;$UUPDOVAL&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;$UPDREC&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;$UPDSTAT&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;$UPDSTMT&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;$UPDVAL&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 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;
&amp;lt;/li&amp;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:&amp;lt;/li&amp;gt;&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 FIND or FOR RECORD NUMBER 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;
&amp;lt;/li&amp;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;
&amp;lt;/li&amp;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;/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]&lt;br /&gt;
       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 now 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 (filename AT location). Each of these functions returns the string:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;filename AT location&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
Where:&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
location 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;code&amp;quot;&amp;gt;$ITSOPEN(name)&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
where name 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(name)&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
where name 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;
 &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;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;$GRMLOC(index [,groupname])&lt;br /&gt;
&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Location of the missing (unavailable) group member identified by the index parameter.    &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;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&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;Name of the missing (unavailable) group member represented by the index parameter.    &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;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&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;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;/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;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&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;Number of optional group members that are unavailable to the request.     &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;
&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;
&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;
&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;
&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;
&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 = &#039;&#039; 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>Mlarocca</name></author>
	</entry>
	<entry>
		<id>https://m204wiki.rocketsoftware.com/index.php?title=$VIEW&amp;diff=70978</id>
		<title>$VIEW</title>
		<link rel="alternate" type="text/html" href="https://m204wiki.rocketsoftware.com/index.php?title=$VIEW&amp;diff=70978"/>
		<updated>2014-07-31T18:53:35Z</updated>

		<summary type="html">&lt;p&gt;Mlarocca: Mlarocca moved page $VIEW to $View: Lower case change&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[$View]]&lt;/div&gt;</summary>
		<author><name>Mlarocca</name></author>
	</entry>
	<entry>
		<id>https://m204wiki.rocketsoftware.com/index.php?title=$View&amp;diff=70977</id>
		<title>$View</title>
		<link rel="alternate" type="text/html" href="https://m204wiki.rocketsoftware.com/index.php?title=$View&amp;diff=70977"/>
		<updated>2014-07-31T18:53:35Z</updated>

		<summary type="html">&lt;p&gt;Mlarocca: Mlarocca moved page $VIEW to $View: Lower case change&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;p&amp;gt;The $VIEW function returns:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The value of a parameter (system, file, or user) to the request&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;File parameters&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;While $VIEW works for all viewable parameters in local context, it does not work for some file parameters in remote context.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Size and use of journal and checkpoint streams&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;b&amp;gt;Syntax to view a parameter value&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;The format of the $VIEW function to view parameter values is: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;$VIEW(parameter[,name]) &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;where:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;parameter is a character string that represents the name of a viewable &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; parameter or other information. For example:&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;$VIEW(&#039;ERASE&#039;) &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;returns a value of @ if the ERASE parameter is set to the character @. If the parameter name is invalid or the user is not authorized to display parameter values for the file, a null string is returned.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;name overrides the default file or group context for the function. The format for this argument is:&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;[[FILE | [PERM | TEMP] GROUP] name | $CURFILE&lt;br /&gt;
&lt;br /&gt;
 | $UPDATE] [AT location]&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;If this argument is omitted or null, the default context is the context of the statement containing the function. Thus, a default context is required for this function.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;You can specify $CURFILE as the name argument in place of a file/group name. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Viewing file-specific information&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;In addition to viewable parameters, the following file-specific information can also be viewed with $VIEW:&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;Name used with $VIEW&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;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;DTSLBOPR&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Date and time transaction was backed out during roll forward (for TBO files)&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Date and time partial transaction was applied during roll forward (for non-TBO files)&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;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;DTSLCHKP&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Date and time of last checkpoint rolled back to. Will be blank if the file has also been rolled forward.&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;DTSLRCVY&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Date and time of last recovery&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;DTSLUPDT&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Date and time of last update&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;DTSLDKWR&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Date and time of last DKWR&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;DTSLRFWD&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Date and time of last roll forward&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;FIWHEN&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Date and time FISTAT was reset&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;FIWHO&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Terminal ID that reset FISTAT&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;For example:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;$VIEW (&#039;FIWHEN&#039;)&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;returns:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;FIWHEN   94.257 SEP 14 16.40.45. DATE AND TIME FISTAT WAS RESET&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Syntax for viewing statistics fields&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;The first argument is the category, SLSTATS, SYSSTATS, or USRSTATS. The second argument is the name of the Statistic field to return. See the Rocket &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; System Managers Guide for the name of the statistics fields.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;$VIEW(category, field-to-return)&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Where the following categories and fields are valid: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;caption&amp;gt;Valid categories and fields with $VIEW&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;&lt;br /&gt;
Category&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Statistics field-to-return&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;&lt;br /&gt;
Equivalent-to or returns-value-of&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;&#039;SLSTATS&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&#039;USERID&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;[[$Userid]]&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;&#039;SLSTATS&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&#039;ACCOUNT&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;[[$Account]]&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;&#039;SLSTATS&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&#039;SUBSYSTEM&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;$SUBSYS with no argument&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;&#039;SLSTATS&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&#039;LAST&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;LAST=field&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;&#039;SLSTATS&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&#039;PROC-FILE&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Current procedure 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;&#039;SLSTATS&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&#039;PROC&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Current procedure &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;&#039;SLSTATS&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&#039;sl statistics name&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Statistics field&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;&#039;SYSSTATS&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&#039;system stat name&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Statistics field&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;&#039;SYSSTATS&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&#039;DKBM stat name&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Statistics field&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;&#039;USRSTATS&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&#039;user stat name&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Statistics field&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;&#039;USRSTATS&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&#039;conflict ctr name&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Statistics field&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;Usage&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;The time related Since Last statistics fields, CNCT, CPU, SCHDCPU, and STCPU, are not valid during evaluation time.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Specifying an invalid statistics field name returns a null value with the message:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;M204.1463: INVALID PARAMETER: fieldname&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Syntax to view the size and use of journal and checkpoint streams&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;The format of $VIEW for the use and size of journal and checkpoint streams is:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;$VIEW(&#039;CCAJRNL&#039;|&#039;CCAJLOG&#039;|&#039;CHKPOINT&#039;|&#039;CHKPNTS&#039;)&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Specify the following:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;%STRING = $VIEW(&#039;CCAJRNL&#039;|&#039;CCAJLOG&#039;|&#039;CHKPOINT&#039;|&#039;CHKPNTS&#039;)&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;$VIEW returns a string that describes the usage of the specified stream with the following character format:&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;Describes &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;LENGTH &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Displays&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;In use DDNAME&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt;8&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Alphanumeric characters&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;Percentage used &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt;4&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Integer with percentage sign&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;Maximum size &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt;9&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Number of tracks&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;Current size &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt;9&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Number of tracks&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;Unused spaces &amp;lt;/td&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;Number of tracks&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;VOLSER &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt;6&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Alphanumeric characters&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;Separating back slash &amp;lt;/td&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;A back slash&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;Data set name&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Variable&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Data set name&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;Separating back slash&amp;lt;/td&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;A back slash&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;Generation number &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Variable&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Generation number with a leading plus sign&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;You must ensure that the %variable being used to hold the requested information is defined as STRING LEN 80 or greater, for example:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;%STRING IS STRING LEN 80&lt;br /&gt;
&lt;br /&gt;
BEGIN&lt;br /&gt;
%STRING = $VIEW(&#039;CCAJRNL&#039;)&lt;br /&gt;
PRINT %STRING&lt;br /&gt;
END&lt;br /&gt;
&lt;br /&gt;
CCAJRNL  0%  37  0  0SU000\OHIO1.ONLINE.JOURNAL&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
[[Category:SOUL $functions]]&lt;/div&gt;</summary>
		<author><name>Mlarocca</name></author>
	</entry>
	<entry>
		<id>https://m204wiki.rocketsoftware.com/index.php?title=$VERIFY&amp;diff=70976</id>
		<title>$VERIFY</title>
		<link rel="alternate" type="text/html" href="https://m204wiki.rocketsoftware.com/index.php?title=$VERIFY&amp;diff=70976"/>
		<updated>2014-07-31T18:38:51Z</updated>

		<summary type="html">&lt;p&gt;Mlarocca: Mlarocca moved page $VERIFY to $Verify: Lower case change&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[$Verify]]&lt;/div&gt;</summary>
		<author><name>Mlarocca</name></author>
	</entry>
	<entry>
		<id>https://m204wiki.rocketsoftware.com/index.php?title=$Verify&amp;diff=70975</id>
		<title>$Verify</title>
		<link rel="alternate" type="text/html" href="https://m204wiki.rocketsoftware.com/index.php?title=$Verify&amp;diff=70975"/>
		<updated>2014-07-31T18:38:51Z</updated>

		<summary type="html">&lt;p&gt;Mlarocca: Mlarocca moved page $VERIFY to $Verify: Lower case change&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;p&amp;gt;The $VERIFY function returns a 1 (true) if every character contained in the string is present in the second string. Otherwise, 0 (false) is returned. If the second argument is a null string, 0 is returned. If the first argument is a null string but the second argument is not, a 1 is returned.          &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;$VERIFY can be used whenever $ALPHA, $ALPHNUM, and $VNUM do not provide sufficient flexibility.        &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Example 1&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;$VERIFY(&#039;1975&#039;,&#039;0123456789&#039;) equals 1&lt;br /&gt;
$VERIFY(&#039;-19.5&#039;,&#039;0123456789+-.&#039;) equals 1&lt;br /&gt;
$VERIFY(&#039;12A&#039;,&#039;0123456789&#039;) equals 0 &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Example 2&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;$VERIFY(&#039;ABC&#039;,&amp;quot;) equals 0&lt;br /&gt;
$VERIFY(&amp;quot;,&amp;quot;) equals 0&lt;br /&gt;
$VERIFY(&amp;quot;,&#039;1234567890&#039;) equals 1 &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
[[Category:SOUL $functions]]&lt;/div&gt;</summary>
		<author><name>Mlarocca</name></author>
	</entry>
	<entry>
		<id>https://m204wiki.rocketsoftware.com/index.php?title=$USRPRIV&amp;diff=70974</id>
		<title>$USRPRIV</title>
		<link rel="alternate" type="text/html" href="https://m204wiki.rocketsoftware.com/index.php?title=$USRPRIV&amp;diff=70974"/>
		<updated>2014-07-31T18:10:05Z</updated>

		<summary type="html">&lt;p&gt;Mlarocca: Redirected page to $UsrPriv&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[$UsrPriv]]&lt;/div&gt;</summary>
		<author><name>Mlarocca</name></author>
	</entry>
	<entry>
		<id>https://m204wiki.rocketsoftware.com/index.php?title=$UsrPrive&amp;diff=70973</id>
		<title>$UsrPrive</title>
		<link rel="alternate" type="text/html" href="https://m204wiki.rocketsoftware.com/index.php?title=$UsrPrive&amp;diff=70973"/>
		<updated>2014-07-31T18:08:40Z</updated>

		<summary type="html">&lt;p&gt;Mlarocca: Mlarocca moved page $UsrPrive to $UsrPriv: Lower case change&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[$UsrPriv]]&lt;/div&gt;</summary>
		<author><name>Mlarocca</name></author>
	</entry>
	<entry>
		<id>https://m204wiki.rocketsoftware.com/index.php?title=$UsrPriv&amp;diff=70972</id>
		<title>$UsrPriv</title>
		<link rel="alternate" type="text/html" href="https://m204wiki.rocketsoftware.com/index.php?title=$UsrPriv&amp;diff=70972"/>
		<updated>2014-07-31T18:08:40Z</updated>

		<summary type="html">&lt;p&gt;Mlarocca: Mlarocca moved page $UsrPrive to $UsrPriv: Lower case change&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;p&amp;gt;The $USRPRIV function is used to test whether a user ID has been granted specific &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; privileges. &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;The format of the $USRPRIV function is:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;$USRPRIV(privilege,logging option) &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;where:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; privilege is the privilege that is to be validated. Privilege can be one of the following values:&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;ANY_ADMINISTRATOR&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;The ANY_ADMINISTRATOR privilege test verifies that the user is user zero or a system manager.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;CHANGE_FILE_PASSWORD&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;CHANGE_LOGIN_PASSWORD &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;OVERRIDE_RECORD_SECURITY&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;SUPER_USER&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;SYSTEM_ADMINISTRATOR&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;SYSTEM_MANAGER&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;logging option specifies whether &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; should indicate that an error message should be issued for security violations:&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;LOG indicates that any privilege violation is logged.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;NOLOG indicates that the privileges should be determined but any violation found is not logged. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Currently, the logging option affects only the Security Server (formerly RACF) or Top Secret interface. The option has no effect on &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt;; the ACF2 Interface always logs a security violation regardless of the logging option.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;LOG is the default if a logging option is not specified. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;$USRPRIV returns a numeric true/false value indicating the result of the authorization check 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;Value&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;User is...&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;Not authorized for the privilege or an unknown privilege name is specified.&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;1&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Authorized for the specified privilege. &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;Example&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;The following statement could be used to test if the current user ID is authorized as a system manager.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;IF $USRPRIV(&#039;SYSTEM_MANAGER&#039;,&#039;NOLOG&#039;) THEN&lt;br /&gt;
    .&lt;br /&gt;
    .&lt;br /&gt;
    .&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;* PERFORM SYSTEM MANAGER AUTHORIZED CODE&lt;br /&gt;
END IF&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;* ELSE UNAUTHORIZED FOR SYSTEM MANAGER FUNCTIONS   &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
[[Category:SOUL $functions]]&lt;/div&gt;</summary>
		<author><name>Mlarocca</name></author>
	</entry>
	<entry>
		<id>https://m204wiki.rocketsoftware.com/index.php?title=$USRPRIV&amp;diff=70971</id>
		<title>$USRPRIV</title>
		<link rel="alternate" type="text/html" href="https://m204wiki.rocketsoftware.com/index.php?title=$USRPRIV&amp;diff=70971"/>
		<updated>2014-07-31T18:06:21Z</updated>

		<summary type="html">&lt;p&gt;Mlarocca: Mlarocca moved page $USRPRIV to $UsrPrive: Lower case change&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[$UsrPrive]]&lt;/div&gt;</summary>
		<author><name>Mlarocca</name></author>
	</entry>
</feed>