<?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=JDamon</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=JDamon"/>
	<link rel="alternate" type="text/html" href="https://m204wiki.rocketsoftware.com/index.php?title=Special:Contributions/JDamon"/>
	<updated>2026-05-21T20:15:44Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.43.1</generator>
	<entry>
		<id>https://m204wiki.rocketsoftware.com/index.php?title=Global_features&amp;diff=120849</id>
		<title>Global features</title>
		<link rel="alternate" type="text/html" href="https://m204wiki.rocketsoftware.com/index.php?title=Global_features&amp;diff=120849"/>
		<updated>2026-04-23T17:47:34Z</updated>

		<summary type="html">&lt;p&gt;JDamon: /* Syntax */&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;
&amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; offers several global features to store information in memory so that it is not automatically cleared between requests. The memory area for storing global information is a &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; internal work area or server table called the &amp;lt;b&amp;gt;global table&amp;lt;/b&amp;gt; or GTBL. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The global features are:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Global string variables&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Global objects&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Global found sets and lists&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Global screens, images, and menus&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Global positions&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Global information is available only to the user who creates it. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===GTBL internal work area===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Each user&#039;s GTBL is empty when the user logs in. GTBL accumulates global information that is available for the duration of the terminal session, unless you intentionally clear it. You can clear GTBL information selectively. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
For a discussion of GTBL space requirements, see [[Large request considerations#GTBL (global variable table)|GTBL (global variable table)]].&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Global items are stored in a specific order in GTBL. As shown in [[#GTBL internal work area|GTBL internal work area]], the area that stores global string variables is at the beginning of the table, and is built from the top down. The area that stores global objects is at the end of the table and is built from the bottom up. The unused or free space is between these two areas. &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;caption&amp;quot; style=&amp;quot;width:450px&amp;quot;&amp;gt;Storage of global variables and global objects in GTBL &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;figure&amp;quot;&amp;gt;[[File:Storage_of_global_vars_in_GTBL.png|450px]] &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Global string variables==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can use global string variables to: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Pass information from one request to another request&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Include procedures conditionally at the &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; command level&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Tailor a request dynamically &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;
As of Version 5.1, you can increase the speed and reduce the CPU time to find and update a global string variable by setting the &amp;lt;var&amp;gt;[[GTBLHASH parameter|GTBLHASH]]&amp;lt;/var&amp;gt; parameter to a nonzero value. The &amp;lt;var&amp;gt;GTBLHASH&amp;lt;/var&amp;gt; parameter specifies the number of buckets allocated in the global string variable section of GTBL.&lt;br /&gt;
When &amp;lt;var&amp;gt;GTBLHASH&amp;lt;/var&amp;gt; is a nonzero value, and you set or get a global string variable, the global string variable name is hashed to determine the bucket in which the name is located. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
This reduces the overall amount of data that must be scanned to find a global string variable or must be moved when a value is deleted or changes in size. If &amp;lt;var&amp;gt;GTBLHASH&amp;lt;/var&amp;gt; is 0, global string variables are processed as in pre-5.1 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;
The &amp;lt;var&amp;gt;[[GTBLPCT parameter|GTBLPCT]]&amp;lt;/var&amp;gt; parameter determines the initial percentage of GTBL to allocate for global string variables. The default value of &amp;lt;var&amp;gt;GTBLPCT&amp;lt;/var&amp;gt; is 50, meaning 50 percent of GTBL is initially allocated for global variable strings. The remainder, in this case 50 percent, is the initial allocation for global objects. However, if &amp;lt;var&amp;gt;GTBLHASH&amp;lt;/var&amp;gt; is 0, a nonzero setting for &amp;lt;var&amp;gt;GTBLPCT&amp;lt;/var&amp;gt; has no effect. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When in effect, if either area of GTBL fills and there are still free pages in GTBL, then GTBL can be rearranged if more space is required in the full area of GTBL. Because these rearrangements can be CPU intensive, Rocket Software recommends that you determine an accurate setting for &amp;lt;var&amp;gt;GTBLPCT&amp;lt;/var&amp;gt; to avoid frequent rearrangements. You can monitor the performance of the hash GTBL feature using the &amp;lt;code&amp;gt;GTBLRU&amp;lt;/code&amp;gt; user statistic and the &amp;lt;code&amp;gt;GTBLRS&amp;lt;/code&amp;gt; since-last statistic.&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Rearranging GTBL and tracking the rearrangements====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The following statistics are available as system statistics, user statistics and since-last statistics to keep track of GTBL rearrangements required for the hashed GTBL feature: &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;Statistic &amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Tracking&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;GTBLRU &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Number of GTBL rearrangements required to add a string variable global.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;GTBLRS &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Number of GTBL rearrangements required to add a global object. &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;
After reviewing the GTBLRU and GTBLRS statistics, you can consider taking the following actions: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;If both of these values are high, increase the size of GTBL by increasing &amp;lt;var&amp;gt;LGTBL&amp;lt;/var&amp;gt;. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;If GTBLRU is high but GTBLRS is not, increase &amp;lt;var&amp;gt;GTBLPCT&amp;lt;/var&amp;gt; or decrease &amp;lt;var&amp;gt;GTBLHASH&amp;lt;/var&amp;gt;. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;If GTBLRS is high but GTBLRU is low, decrease &amp;lt;var&amp;gt;GTBLPCT&amp;lt;/var&amp;gt;. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Global found sets and lists===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can use global found sets and lists to make found sets and lists available across request boundaries. A global found set or list remains in GTBL until you: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Explicitly delete it&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Issue a &amp;lt;var&amp;gt;Release&amp;lt;/var&amp;gt; or &amp;lt;var&amp;gt;Commit Release&amp;lt;/var&amp;gt; statement &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;The file or group it refers to is closed, including the file close processing done when exiting a subsystem or stopping &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Log out &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Sorted sets are a subgroup of found sets; they are treated the same by the &amp;lt;var&amp;gt;Clear&amp;lt;/var&amp;gt; statement that is used to clear global found sets.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Faster global variable processing option====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When global lists or found sets are processed as part of the &amp;lt;var&amp;gt;Find&amp;lt;/var&amp;gt; or &amp;lt;var&amp;gt;Place Records On&amp;lt;/var&amp;gt; statement, it must be verified that a global variable representing the list or found set exists in GTBL. The &amp;lt;var&amp;gt;CLEARG&amp;lt;/var&amp;gt; command or &amp;lt;var&amp;gt;Clear&amp;lt;/var&amp;gt; statement may delete the global variable, so an internal routine is called to verify whether the global variable is in GTBL. The internal routine creates a new copy, if it was deleted. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The internal routine scans NTBL to find an entry that points to the required variable, then it uses its hash value to scan GTBL. Scanning a large NTBL may take considerable time. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The NTBL scan can be eliminated, if internal variables representing global lists and found sets contain a global name hash value. Thus, an internal variable with a length of eight bytes that contains an NTBL entry offset points to the internal variable representing a global list or found set. This method avoids an NTBL scan, if a global variable has been deleted from GTBL. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
This faster global variable processing requires larger VTBL, because every global list or found set needs eight more bytes. If you want the benefit of this increased processing speed and can accommodate the increased VTBL requirement, set &amp;lt;var&amp;gt;FASTGLOB&amp;lt;/var&amp;gt; to 1. To maintain existing processing you can let &amp;lt;var&amp;gt;[[FASTGLOB parameter|FASTGLOB]]&amp;lt;/var&amp;gt; default to 0, or you can explicitly set &amp;lt;var&amp;gt;FASTGLOB&amp;lt;/var&amp;gt; to 0.&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Global positions===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can use &amp;lt;var&amp;gt;Remember&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;Position&amp;lt;/var&amp;gt; statements to save and recall a place in a &amp;lt;var&amp;gt;For&amp;lt;/var&amp;gt; loop, either globally or non-globally. This lets you suspend processing in a &amp;lt;var&amp;gt;For&amp;lt;/var&amp;gt; loop and resume it later, within the same request or in a subsequent request. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Global images and screens===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can use global images and screens to:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Pass image and screen data from one request to another&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Manage more than one image or screen in one request&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Manage menus, which are a special type of screen&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Reduce I/O by swapping modified global screens to CCASERVR instead of paging them between the buffer pool and CCATEMP &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Global string variables===&lt;br /&gt;
 &lt;br /&gt;
===Global string variable names and values===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Entries in the GTBL consist of global name=value pairs. The names and values of the global string variables are created with the &amp;lt;var&amp;gt;$Setg&amp;lt;/var&amp;gt; function from within a request. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;A global string variable name can consist of up to 255 characters and follows the naming conventions for variables (see [[Using variables and values in computation#%Variable names|%Variable names]]). Global string variables that contain special characters, other than a period (&amp;lt;tt&amp;gt;.&amp;lt;/tt&amp;gt;) cannot be used as &amp;lt;code&amp;gt;?&amp;amp;amp;&amp;lt;/code&amp;gt; dummy strings. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;A value can be 0, the null string, or up to 255 characters. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Clearing global string variables===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When a new value for an existing name is stored, the old entry is first deleted. Entries remain in the table until you delete them by issuing a &amp;lt;var&amp;gt;CLEARG&amp;lt;/var&amp;gt; command, execute a &amp;lt;var&amp;gt;Clear&amp;lt;/var&amp;gt; statement, execute a &amp;lt;var&amp;gt;$Delg&amp;lt;/var&amp;gt; function call, or you log out. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If you define a large number of global string variables, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; performance can be adversely affected. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
For details and examples of clearing global string variables, see [[#Clearing the GTBL work area|Clearing the GTBL work area]].&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Global variable functions and commands===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The following functions, statements, commands, and facilities manipulate entries in the global variable table: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Use the functions &amp;lt;var&amp;gt;[[$Setg]]&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;[[$Getg]]&amp;lt;/var&amp;gt; within a request to store and retrieve global string variables. Use &amp;lt;var&amp;gt;[[$Incrg]]&amp;lt;/var&amp;gt; to perform simple arithmetic on global string variables with numeric values. Use the &amp;lt;var&amp;gt;[[$Delg]]&amp;lt;/var&amp;gt; function to delete global string variables created by &amp;lt;var&amp;gt;$Setg&amp;lt;/var&amp;gt; or &amp;lt;var&amp;gt;$Incrg&amp;lt;/var&amp;gt;. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Use the &amp;lt;code&amp;gt;?&amp;amp;amp;&amp;lt;/code&amp;gt; dummy string within a request to read a variable in the GTBL. Refer to [[Procedures]] for more information about dummy strings. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Use the conditional &amp;lt;var&amp;gt;INCLUDE&amp;lt;/var&amp;gt; command (&amp;lt;code&amp;gt;IF A=B,&amp;lt;i&amp;gt;name&amp;lt;/i&amp;gt;&amp;lt;/code&amp;gt;) to search the global variable table for an entry whose name is A and whose value is &amp;lt;code&amp;gt;B&amp;lt;/code&amp;gt;. If the entry is found, the named procedure is included. The &amp;lt;var&amp;gt;IF&amp;lt;/var&amp;gt; command is discussed on [[#Conditional and unconditional INCLUDEs|Conditional and unconditional INCLUDEs]]. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Using global string variables in application subsystems===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
In addition to the above facilities, an application subsystem can designate specific global string variables in the subsystem definition. For more information about subsystem global string variables, refer to: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[[Application Subsystem development#Command line global variable|Command line global variable]] &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;[[Application Subsystem development#Communication global variable|Communication global variable]] &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;[[Application Subsystem development#Error global variable|Error global variable]] &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
==Passing string values from one request to another==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
It is often necessary to generate data in one request and to save the data for use in other independent requests to be run later in the terminal session. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Example 1====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Suppose that you want to store the current date in every record created during a session in YYMMDD format, a modified form of the value returned by the &amp;lt;var&amp;gt;$Date&amp;lt;/var&amp;gt; function. You can derive the date once at the beginning of the day and hold it for use throughout the day. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
At the beginning of the terminal session, you enter:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;BEGIN&lt;br /&gt;
    %DATE = $DATE&lt;br /&gt;
    %DATE = $SUBSTR(%DATE, 1, 2) -&lt;br /&gt;
         WITH $SUBSTR(%DATE, 4, 2) WITH -&lt;br /&gt;
         $SUBSTR(%DATE, 7, 2)&lt;br /&gt;
     IF $SETG(&#039;DATE&#039;, %DATE) THEN&lt;br /&gt;
          PRINT &#039;*** REQUEST TOO LONG - GTBL&#039;&lt;br /&gt;
          STOP&lt;br /&gt;
     END IF&lt;br /&gt;
END&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Later in the terminal session, you can use the specially formatted date: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;BEGIN&lt;br /&gt;
    %DATE = $GETG(&#039;DATE&#039;)&lt;br /&gt;
    STORE RECORD&lt;br /&gt;
        FIELD = VALUE&lt;br /&gt;
        FIELDB = VALUE&lt;br /&gt;
        DATE = %DATE&lt;br /&gt;
            .&lt;br /&gt;
            .&lt;br /&gt;
            .&lt;br /&gt;
    END STORE&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;
Assume that different sets of records are processed and the results are used to produce a final report. Because of compiler table limitations, you have to process requests that cannot be continued with the MORE command (see [[Large request considerations]]). You can store intermediate results in GTBL and produce the final report exclusively from the table.   &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;BEGIN&lt;br /&gt;
          .&lt;br /&gt;
          .&lt;br /&gt;
          .&lt;br /&gt;
      process hourly workers&#039; wages&lt;br /&gt;
          .&lt;br /&gt;
          .&lt;br /&gt;
          .&lt;br /&gt;
      IF $SETG(&#039;HOURLY TOTAL&#039;, %TOTAL) THEN&lt;br /&gt;
          PRINT &#039;*** REQUEST TOO LONG - GTBL&#039;&lt;br /&gt;
          STOP&lt;br /&gt;
      END IF&lt;br /&gt;
 &lt;br /&gt;
END&lt;br /&gt;
 &lt;br /&gt;
BEGIN&lt;br /&gt;
          .&lt;br /&gt;
          .&lt;br /&gt;
          .&lt;br /&gt;
      process monthly workers&#039; wages&lt;br /&gt;
          .&lt;br /&gt;
          .&lt;br /&gt;
          .&lt;br /&gt;
      IF $SETG(&#039;MONTHLY TOTAL&#039;, %TOTAL) THEN&lt;br /&gt;
          PRINT &#039;*** REQUEST TOO LONG - GTBL&#039;&lt;br /&gt;
          STOP&lt;br /&gt;
      END IF&lt;br /&gt;
END&lt;br /&gt;
 &lt;br /&gt;
BEGIN&lt;br /&gt;
      %HOURLY = $GETG(&#039;HOURLY TOTAL&#039;)&lt;br /&gt;
      %MONTHLY = $GETG(&#039;MONTHLY TOTAL&#039;)&lt;br /&gt;
           .&lt;br /&gt;
           .&lt;br /&gt;
           .&lt;br /&gt;
      format report&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;
==Using global string variables with a conditional INCLUDE command==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can use global string variables to create a modular programming environment in which you select procedures to perform a particular function without compiling and evaluating procedures designed for other related functions. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
To use global string variables effectively in creating such an environment, it is useful to review the differences between commands and User Language statements and between conditional and unconditional includes, as described in the following sections.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Differences between commands and User Language statements===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Commands and User Language statements have different effects and are used in different ways: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;System control commands can be issued only outside a request &amp;amp;mdash; at command level. They are acted upon immediately. User Language statements can be used only within a request. They are compiled on a line-by-line basis, but the entire request is not executed until &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; receives an END statement. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;INCLUDE is both a command and a User Language statement. In either context, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; is directed to take the next input line from an appropriate stored procedure. When the procedure lines are exhausted, the next input line is taken from the command or User Language statement immediately following the INCLUDE. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;IF has two formats: &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Conditional INCLUDE command&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;User Language statement &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;
===Conditional and unconditional INCLUDEs===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
A conditional include can be coded within an IF statement using the INCLUDE statement or with an INCLUDE command.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
An unconditional include can be coded with a standalone INCLUDE statement or command.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
This section describes conditional INCLUDE commands by providing examples and discussing how each example is processed.&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 request illustrates the conditional INCLUDE command:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;BEGIN&lt;br /&gt;
ALL: FIND ALL RECORDS&lt;br /&gt;
     END FIND&lt;br /&gt;
     FOR EACH RECORD IN ALL&lt;br /&gt;
         IF AGE GT &#039;10&#039; THEN&lt;br /&gt;
             IF $SETG(&#039;AGE&#039;, &#039;YES&#039;) THEN&lt;br /&gt;
                 PRINT &#039;*** REQUEST TOO LONG - GTBL&#039;&lt;br /&gt;
                 STOP&lt;br /&gt;
             END IF&lt;br /&gt;
         END IF&lt;br /&gt;
     END FOR&lt;br /&gt;
END&lt;br /&gt;
IF AGE = YES, COUNT&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====How Example 1 is processed====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The statements between the BEGIN and END are compiled and evaluated. If the AGE condition is true, a global string variable is set. &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; then processes the IF command. Statements in the COUNT procedure are compiled and executed only if the condition is true. Otherwise, the statements are never compiled.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Example 2====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Suppose that you enter record selection criteria and then select one of three reports to be generated. A set of four procedures can be created.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
For example, procedure A might contain the prompts for record selection and report type. Procedures B, C, and D might contain statements to produce the individual reports. Only procedure A and one of the other three procedures is compiled and evaluated. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;PROCEDURE A&lt;br /&gt;
BEGIN&lt;br /&gt;
FIND.RECS: FIND ALL RECORDS FOR WHICH&lt;br /&gt;
               ??SELECT.RECORDS&lt;br /&gt;
           END FIND&lt;br /&gt;
           IF $SETG(&#039;REPORTNUM&#039;, $READ(&#039;ENTER REPORT NO&#039;))&lt;br /&gt;
               THEN PRINT &#039;*** REQUEST TOO LONG - GTBL&#039;&lt;br /&gt;
               STOP&lt;br /&gt;
           END IF&lt;br /&gt;
END MORE&lt;br /&gt;
IF REPORTNUM = 1, B&lt;br /&gt;
IF REPORTNUM = 2, C&lt;br /&gt;
IF REPORTNUM = 3, D&lt;br /&gt;
END PROCEDURE&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Procedures B, C, and D have the same basic format, but variations in processing are applied to each record.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;PROCEDURE B&lt;br /&gt;
MORE&lt;br /&gt;
PROCESS: FOR EACH RECORD IN FIND.RECS&lt;br /&gt;
             .&lt;br /&gt;
             .&lt;br /&gt;
             .&lt;br /&gt;
         processing&lt;br /&gt;
             .&lt;br /&gt;
             .&lt;br /&gt;
             .&lt;br /&gt;
         END FOR PROCESS&lt;br /&gt;
END&lt;br /&gt;
END PROCEDURE&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====How Example 2 is processed====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The dialog produced by these procedures is shown below, with user input in boldface: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;b&amp;gt;INCLUDE A&amp;lt;/b&amp;gt;&lt;br /&gt;
??SELECT.RECORDS&lt;br /&gt;
&amp;lt;b&amp;gt;REGION = SOUTH OR WEST&amp;lt;/b&amp;gt;&lt;br /&gt;
$$ENTER REPORT NO&lt;br /&gt;
&amp;lt;b&amp;gt;2&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;i&amp;gt;output from Procedure C &amp;lt;/i&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Keep IF commands at as high a nesting level as possible====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
An alternate method of writing procedures is to follow each report&#039;s END MORE statement with IF commands. However, each procedure might then INCLUDE itself or another procedure, creating a lower level of nesting. If the procedure continued to INCLUDE itself, the maximum nesting level would be reached. As a general rule in a complex set of procedures, keep IF commands at as high a nesting level as possible. The global string variables to be tested can be set at any level.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
==Using global string variables to tailor a request==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Global string variables can be used in conjunction with the FILE$ condition (see [[Record retrievals#FILE$ condition|FILE$ condition]]) to access a set of files in a group. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Example====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
In the following example, the value of the global string variable, FILES, can be changed to access an alternative set of files. This example consists of two requests. The first &amp;amp;mdash; BEGIN through END MORE &amp;amp;mdash; sets the global string variable during the execution phase; the second &amp;amp;mdash; MORE through END &amp;amp;mdash; is then compiled with the correct value.   &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;
           IF $SETG(&#039;FILES&#039;,&#039;FILEA OR FILE$ FILEC&#039;) THEN&lt;br /&gt;
               PRINT &#039;***REQUEST TOO LONG -- GTBL&#039;&lt;br /&gt;
               %IGNORE = $SETG(&#039;FILES&#039;, &amp;amp;apos;&amp;amp;apos;)&lt;br /&gt;
           END IF&lt;br /&gt;
END MORE&lt;br /&gt;
MORE&lt;br /&gt;
           IF $GETG(&#039;files&#039;) = &amp;amp;apos;&amp;amp;apos; THEN&lt;br /&gt;
               STOP&lt;br /&gt;
           END IF&lt;br /&gt;
 GET.A:    FIND ALL RECORDS FOR WHICH&lt;br /&gt;
              (FILE$ ?&amp;amp;amp;FILES) AND FIELDX = &#039;A&#039;&lt;br /&gt;
           END FIND&lt;br /&gt;
           FOR EACH RECORD IN GET.A&lt;br /&gt;
               PRINT ALL INFORMATION&lt;br /&gt;
           END FOR&lt;br /&gt;
END&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
==Global objects==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Global objects include found sets, images, lists, menus, positions, screens, and sorted sets. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===General rules for declarations===&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;You must declare global lists, found sets, and sorted sets in every request that references them; the &amp;lt;var&amp;gt;Declare&amp;lt;/var&amp;gt; statement must come before the reference. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;If a global object is used in multiple subroutines, or in both the main program and a subroutine, the label must be declared as global in the main program before the subroutine(s). The subroutine(s) must then declare the label as common. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;If you refer to a global object before a &amp;lt;var&amp;gt;Declare&amp;lt;/var&amp;gt; statement, the system issues a duplicate label compilation error. Such a reference implicitly makes the object non global. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Incompatibility===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The [[PQO]] product does not support global found sets, lists, positions, or sorted sets. These global objects cannot be used in conjunction with remote files or scattered groups. This limitation exists, because GTBL does not exist on the PQO server. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Clearing global objects from GTBL===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
For syntax, details and examples of clearing global objects, see [[#Clearing the GTBL work area|Clearing the GTBL work area]]. &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Using global found sets and lists==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can pass found sets and lists from request to request by declaring them as &amp;lt;var&amp;gt;Global&amp;lt;/var&amp;gt;. A global found set or list is stored in the internal work area GTBL for the duration of the terminal session unless it is intentionally cleared, or the file or group with which it is associated is closed. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Creating a global found set or sorted set====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can create a global found set using this syntax: &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;[Declare] Label &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;labelname&amp;lt;/span&amp;gt; [Global | Common] &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;labelname&amp;lt;/var&amp;gt; is a unique global object name.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Creating a global list====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can declare a global list using the following syntax:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;[Declare] List &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;listname&amp;lt;/span&amp;gt; &lt;br /&gt;
  [In [File [Perm | Temp] Group] &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;name&amp;lt;/span&amp;gt;]&lt;br /&gt;
  [Global | Common] &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
In both cases, the keyword &amp;lt;var&amp;gt;Global&amp;lt;/var&amp;gt; implies &amp;lt;var&amp;gt;Common&amp;lt;/var&amp;gt;. These two keywords are mutually exclusive in the declaration statement. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Because &amp;lt;var&amp;gt;Global&amp;lt;/var&amp;gt; implies &amp;lt;var&amp;gt;Common&amp;lt;/var&amp;gt;, a list or found set can be declared &amp;lt;var&amp;gt;Global&amp;lt;/var&amp;gt; at any scope. See [[Subroutines#Scope of elements|Scope of elements]] for a discussion. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;The global name, label name, or list name, must be unique across all global objects. For a discussion, see [[Subroutines#Sharing common elements|Sharing common elements]]. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Usage rules====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The following rules apply to global found sets and lists: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;You must declare each global list or global found set as &amp;lt;code&amp;gt;&amp;lt;i&amp;gt;labelname&amp;lt;/i&amp;gt; Global&amp;lt;/code&amp;gt; in each procedure that uses it. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;The file context in which a global list or found set is used must be the same as the file context in which it was created. &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; compiler does not currently enforce this rule; therefore, your code must maintain this requirement. Rocket Software recommends that you populate a global found set or list only once within the scope of these global objects. However, this is not a restriction as long as file context is maintained. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Global found sets and lists are invalid in ad hoc group context. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Each global object name must be unique. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Global found sets and lists are not supported in remote file or scattered group contexts. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Example 1: Referencing a global found set===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
In this example, Procedure 1 declares the global found set and then performs the find. Procedure 2 needs only to declare the global found set and then reference the global found set labeled F1. The &amp;lt;var&amp;gt;For&amp;lt;/var&amp;gt; loops in both procedures process records in the &amp;lt;code&amp;gt;VEHICLES&amp;lt;/code&amp;gt; file for which the value of the field &amp;lt;code&amp;gt;COLOR&amp;lt;/code&amp;gt; was equal to &amp;lt;code&amp;gt;BLUE&amp;lt;/code&amp;gt; at the time of the evaluation of the &amp;lt;var&amp;gt;Find&amp;lt;/var&amp;gt; statement in Procedure 1. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;b&amp;gt;Procedure 1&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;BEGIN&lt;br /&gt;
DECLARE LABEL F1 GLOBAL&lt;br /&gt;
F1: IN VEHICLES FIND ALL RECORDS WHERE COLOR = &#039;BLUE&#039;&lt;br /&gt;
    END FIND&lt;br /&gt;
    FOR EACH RECORD IN F1&lt;br /&gt;
       PAI&lt;br /&gt;
    END FOR&lt;br /&gt;
END&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;b&amp;gt;Procedure 2&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;BEGIN&lt;br /&gt;
DECLARE LABEL F1 GLOBAL&lt;br /&gt;
    FOR EACH RECORD IN F1&lt;br /&gt;
       PAI&lt;br /&gt;
    END FOR&lt;br /&gt;
END&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Example 2: Maintaining file context===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Example 2 illustrates repopulating a global found set across the scope of its usage, maintaining the same file context throughout. In this example, Procedure 1 is identical to Procedure 1 in Example 1 above, and Procedure 3 is identical to Procedure 2 in Example 1. The second procedure in this example, however, performs a different find than the first. Procedure 3 then processes the records found in Procedure 2. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
So in this example, Procedure 1 processes records in the &amp;lt;code&amp;gt;VEHICLES&amp;lt;/code&amp;gt; file for which the value of the field &amp;lt;code&amp;gt;COLOR&amp;lt;/code&amp;gt; is equal to &amp;lt;code&amp;gt;BLUE&amp;lt;/code&amp;gt;, while Procedures 2 and 3 process records for which &amp;lt;code&amp;gt;COLOR&amp;lt;/code&amp;gt; was equal to &amp;lt;code&amp;gt;RED&amp;lt;/code&amp;gt; at the time of the &amp;lt;var&amp;gt;Find&amp;lt;/var&amp;gt; statement evaluation in Procedure 2. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;b&amp;gt;Procedure 1&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;BEGIN&lt;br /&gt;
DECLARE LABEL F1 GLOBAL&lt;br /&gt;
F1: IN VEHICLES FIND ALL RECORDS WHERE COLOR = &#039;BLUE&#039;&lt;br /&gt;
    END FIND&lt;br /&gt;
    FOR EACH RECORD IN F1&lt;br /&gt;
       PAI&lt;br /&gt;
    END FOR&lt;br /&gt;
END&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;b&amp;gt;Procedure 2&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;BEGIN&lt;br /&gt;
DECLARE LABEL F1 GLOBAL&lt;br /&gt;
F1: IN VEHICLES FIND ALL RECORDS WHERE COLOR = &#039;RED&#039;&lt;br /&gt;
    END FIND&lt;br /&gt;
    FOR EACH RECORD IN F1&lt;br /&gt;
       PAI&lt;br /&gt;
    END FOR&lt;br /&gt;
END&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;b&amp;gt;Procedure 3&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;BEGIN&lt;br /&gt;
DECLARE LABEL F1 GLOBAL&lt;br /&gt;
    FOR EACH RECORD IN F1&lt;br /&gt;
       PAI&lt;br /&gt;
    END FOR&lt;br /&gt;
END&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
==Using global sorted sets==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
A global sorted set is created when a SORT RECORDS statement or a FOR EACH RECORD IN ORDER BY statement is preceded by a label that has been declared GLOBAL. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Limiting subsequent references===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
For example, in Procedure 1 below, MAKE is the only field referenced in the request. Therefore, MAKE is the only field that can be referenced in subsequent requests. Thus, in Procedure 2, because the field MODEL was not referenced in the previous request, a blank is printed each time through the FOR loop. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Procedure 1====&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;BEGIN&lt;br /&gt;
DECLARE LABEL S1 GLOBAL&lt;br /&gt;
F1: IN VEHICLES FIND ALL RECORDS&lt;br /&gt;
    END FIND&lt;br /&gt;
S1: SORT RECORDS IN F1 BY MAKE&lt;br /&gt;
    FOR EACH RECORD IN S1&lt;br /&gt;
       PRINT MAKE&lt;br /&gt;
    END FOR&lt;br /&gt;
END&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Procedure 2====&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;BEGIN&lt;br /&gt;
DECLARE LABEL S1 GLOBAL&lt;br /&gt;
    FOR EACH RECORD IN S1&lt;br /&gt;
       PRINT MODEL&lt;br /&gt;
    END FOR&lt;br /&gt;
END&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Keeping all fields accessible for subsequent references===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
To ensure that all fields are accessible to subsequent requests, use a PAI or field name variable with the statement that creates the found set.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The sort key field(s) used on the SORT statement cannot be referred to by a subsequent request unless referred to in the SORT statement FOR loop in the request creating the set. While this restriction applies to the use of the SORT RECORDS statement, it does not apply to the use of the SORT RECORD KEYS statement.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If you are not going to refer to the sorted set in the request that creates the sorted set, you can code a FOR loop, which is compiled but never executed, that refers to each field that you want to refer to in a subsequent request. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
==Saving and recalling a position in a For loop==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can include statements in a &amp;lt;var&amp;gt;For&amp;lt;/var&amp;gt; loop to provide for the possibility of terminating the loop before the set of records or values being processed is exhausted. For example, you might use a &amp;lt;var&amp;gt;Jump To&amp;lt;/var&amp;gt; or &amp;lt;var&amp;gt;Loop End&amp;lt;/var&amp;gt; statement in conjunction with an &amp;lt;var&amp;gt;If&amp;lt;/var&amp;gt; statement to test each record or value before processing, and terminating the loop if a certain condition is met. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The &amp;lt;var&amp;gt;Remember&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;Position&amp;lt;/var&amp;gt; statements let you store the current processing position in a &amp;lt;var&amp;gt;For&amp;lt;/var&amp;gt; loop, then recall it at a later time and resume &amp;lt;var&amp;gt;For&amp;lt;/var&amp;gt; processing where you left off earlier. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Remember statement===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The purpose of the &amp;lt;var&amp;gt;Remember&amp;lt;/var&amp;gt; statement is to store the processing position in a &amp;lt;var&amp;gt;For&amp;lt;/var&amp;gt; loop. Each &amp;lt;var&amp;gt;Remember&amp;lt;/var&amp;gt; statement creates a GTBL entry of variable length. See [[Large request considerations]] for detailed descriptions of GTBL entries. If you remember a position as &amp;lt;var&amp;gt;Global&amp;lt;/var&amp;gt;, the entry remains in GTBL after the current request ends. &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; clears non-global &amp;lt;var&amp;gt;Remember&amp;lt;/var&amp;gt; positions at the end of each request.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Syntax====&lt;br /&gt;
{{Template:Remember statement syntax}}&lt;br /&gt;
Where:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The &amp;lt;var&amp;gt;Global&amp;lt;/var&amp;gt; option implies &#039;&#039;&#039;PERM&#039;&#039;&#039; and the position is retained in GTBL after the current request terminates. If &amp;lt;var&amp;gt;Global&amp;lt;/var&amp;gt; is not specified, &#039;&#039;&#039;TEMP&#039;&#039;&#039; is implied and the position is cleared from GTBL after the current request terminates.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;b&amp;gt;NOTE:&amp;lt;/B&amp;gt; The use of GLOBAL here must be consistent with the CLEAR GLOBAL POSITION statement.  If the latter is specified with PERM:&amp;lt;/p&amp;gt; &lt;br /&gt;
&amp;lt;p&amp;gt;CLEAR GLOBAL POSITION &amp;lt;b&amp;gt;PERM&amp;lt;/b&amp;gt; &#039;position_name&#039;,&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;then the REMEMBER statement must specify GLOBAL because it implies PERM.&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;position_name&amp;lt;/var&amp;gt; is a unique object name you assign to the &amp;lt;var&amp;gt;Remember&amp;lt;/var&amp;gt; position. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;b&amp;gt;NOTE:&amp;lt;/b&amp;gt;If the &#039;position_name&#039; is mixed or lower case, be sure to enclose it here in single quotation marks.  Do the same when referring to that name in other statements; e.g. CLEAR or POSITION.&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;foundsortset_name&amp;lt;/var&amp;gt; or &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;list_name&amp;lt;/var&amp;gt; must be identical to the listname or label specified on the &amp;lt;var&amp;gt;For&amp;lt;/var&amp;gt; loop:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;If you are processing a found set or a sorted set, &amp;lt;code&amp;gt;In &amp;lt;i&amp;gt;foundsortset_name&amp;lt;/i&amp;gt;&amp;lt;/code&amp;gt; is the label of the &amp;lt;var&amp;gt;Find&amp;lt;/var&amp;gt; statement that generated it. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;If you are processing a list, &amp;lt;code&amp;gt;On &amp;lt;i&amp;gt;list_name&amp;lt;/i&amp;gt;&amp;lt;/code&amp;gt; is the name you gave to the list when you originally declared it. &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;
====Usage notes====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The following rules apply to the use of the &amp;lt;var&amp;gt;Remember&amp;lt;/var&amp;gt; statement:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Can appear only within a &amp;lt;var&amp;gt;For&amp;lt;/var&amp;gt; loop, but not a nested &amp;lt;var&amp;gt;For&amp;lt;/var&amp;gt; loop. The file context must be identical to the context of the &amp;lt;var&amp;gt;For&amp;lt;/var&amp;gt; loop. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Is invalid in ad hoc group context, if used with the &amp;lt;var&amp;gt;Global&amp;lt;/var&amp;gt; option. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;The &amp;lt;var&amp;gt;Remember&amp;lt;/var&amp;gt; statement is incompatible with &amp;lt;var&amp;gt;For Each Record In Order By&amp;lt;/var&amp;gt; clauses. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Position statement===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
A &amp;lt;var&amp;gt;Position&amp;lt;/var&amp;gt; statement recalls a remembered position, so you can resume &amp;lt;var&amp;gt;For&amp;lt;/var&amp;gt; processing in a list or found set that was terminated at an earlier time. For example, if you remembered the position at record number 5, then your foundset is positioned at record number 6 for further processing.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
This &amp;lt;var&amp;gt;Position&amp;lt;/var&amp;gt; statement is not to be confused with the &amp;lt;var&amp;gt;Position&amp;lt;/var&amp;gt; statement used to read records sequentially in an external VSAM KSDS file. See [[Images#Position statement|Position statement]]. &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;Position {Foundset &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;foundsortset_name&amp;lt;/span&amp;gt; | List &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;list_name&amp;lt;/span&amp;gt;} [At] &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;position_name&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
Where:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;foundsortset_name&amp;lt;/var&amp;gt; or &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;list_name&amp;lt;/var&amp;gt; must be identical to the list or label name used on a previous &amp;lt;var&amp;gt;Remember&amp;lt;/var&amp;gt; statement and in the &amp;lt;var&amp;gt;For&amp;lt;/var&amp;gt; statement that follows. &lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If you are about to resume the processing of a found set, &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;foundsortset_name&amp;lt;/var&amp;gt; is the label of the &amp;lt;var&amp;gt;Find&amp;lt;/var&amp;gt; statement that generated it. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If you are about to resume the processing of a list, &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;list_name&amp;lt;/var&amp;gt; is the name you gave to the list when you originally declared it.&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;position_name&amp;lt;/var&amp;gt; is a name that you assigned to the remembered position when you stored it on a previous &amp;lt;var&amp;gt;Remember&amp;lt;/var&amp;gt; statement. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;b&amp;gt;NOTE:&amp;lt;/b&amp;gt;If the &#039;position_name&#039; is mixed or lower case, be sure to enclose it here in single quotation marks.  Do the same when referring to that name in other statements; e.g. CLEAR or REMEMBER.&amp;lt;/p&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 following rules apply:&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;Position&amp;lt;/var&amp;gt; statement must appear outside, immediately before the &amp;lt;var&amp;gt;For&amp;lt;/var&amp;gt; loop to which it refers; it cannot be in the &amp;lt;var&amp;gt;For&amp;lt;/var&amp;gt; loop itself.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;The &amp;lt;var&amp;gt;For&amp;lt;/var&amp;gt; statement that follows the &amp;lt;var&amp;gt;Position&amp;lt;/var&amp;gt; statement must have an identical file context and list name or label name as the statement that initiated the &amp;lt;var&amp;gt;For&amp;lt;/var&amp;gt; loop of the remembered position.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;The &amp;lt;var&amp;gt;Position&amp;lt;/var&amp;gt; statement is incompatible with &amp;lt;var&amp;gt;For Each Record In Order By&amp;lt;/var&amp;gt; clauses. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
==Global images and screens==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can use global images and screens to pass image and screen data from one request to another and to efficiently manage more than one image or screen in one request. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can also declare global menus, because a menu is a special type of screen. In this section, the term &amp;quot;screen&amp;quot; applies to both screens and menus, unless otherwise noted. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Declaring global images and screens===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You make an image or screen global by specifying the keyword &amp;lt;var&amp;gt;Global&amp;lt;/var&amp;gt; in its declaration statement. You can declare global images and screens to be &amp;lt;var&amp;gt;Temporary&amp;lt;/var&amp;gt;, deleted at request termination, or &amp;lt;var&amp;gt;Permanent&amp;lt;/var&amp;gt;, persist across request termination. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===How images and screens are processed===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When you declare an image or screen as &amp;lt;var&amp;gt;Global&amp;lt;/var&amp;gt;, it is stored in GTBL. Nonglobal images and screens, declared as &amp;lt;var&amp;gt;Common&amp;lt;/var&amp;gt;, or neither &amp;lt;var&amp;gt;Common&amp;lt;/var&amp;gt; nor &amp;lt;var&amp;gt;Global&amp;lt;/var&amp;gt;, are stored in FSCB. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
This section provides some background information about how &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; processes images and screens, contrasting how global and nonglobal images and screens are processed. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Images and screen processing===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The figures in the following subsections represent how nonglobal and global objects are processed. Comparing the two types of processing highlights the I/O and storage savings associated with the global images and screens. &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Processing of nonglobal objects====&lt;br /&gt;
&amp;lt;p class=&amp;quot;figure&amp;quot;&amp;gt;[[File:Nonglobal_object_processing.png|550px]] &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The &amp;lt;b&amp;gt;Nonglobal object processing&amp;lt;/b&amp;gt; figure illustrates the process in the following steps:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The compiler loads a compiled version of the screen or image into FSCB in the user&#039;s server.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;A copy of the compiled object is stored in the buffer pool.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;A &amp;lt;var&amp;gt;Prepare&amp;lt;/var&amp;gt; statement acts on the compiled object in the buffer pool and copies it into FSCB.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Update statements act on the copy of the object in FSCB.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;The updated object is copied from FSCB to a working copy of the object in the buffer pool.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;If a user waits too long or the buffer pool fills up, the object is written to CCATEMP. When a user presses Enter for that object, the object is loaded back from CCATEMP to the buffer pool. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;amp;nbsp;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Processing of global objects==== &lt;br /&gt;
&amp;lt;p class=&amp;quot;figure&amp;quot;&amp;gt;[[File:Global_object_processing.png|550px]] &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The &amp;lt;b&amp;gt;Global object processing&amp;lt;/b&amp;gt; figure illustrates the process in the following steps: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The compiler loads a compiled version of the screen or image into FSCB in the user&#039;s server. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;A copy of the compiled object is stored in the buffer pool. This copy is called &#039;VIRGIN&#039;, as it is never updated. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;A &amp;lt;var&amp;gt;Prepare&amp;lt;/var&amp;gt; statement acts on the compiled object in the buffer pool and copies it into GTBL. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Update statements act on the copy in GTBL. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Using Prepare and Identify statements===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
To help you decide how to use the &amp;lt;var&amp;gt;Prepare&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;Identify&amp;lt;/var&amp;gt; statements, review the following:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[[#GTBL internal work area|GTBL internal work area]] &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;[[#Timing and placement of a CLEAR statement|Timing and placement of a CLEAR statement]] &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;For syntax and usage of the &amp;lt;var&amp;gt;Prepare&amp;lt;/var&amp;gt; statement, see [[Full-screen feature#PREPARE statement|Prepare statement]]&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;For syntax and usage of the &amp;lt;var&amp;gt;Identify&amp;lt;/var&amp;gt; statement, see [[Images#Identify statement|Identify statement]] &lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Also when using the &amp;lt;var&amp;gt;Identify&amp;lt;/var&amp;gt; statement, see [[#Consistency checks performed|Consistency checks performed]]. &amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Performance and efficiency benefits===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Global images and screens can simply and efficiently perform image-to-image processing and screen-to-image processing, eliminating the need to map screen items to image items when passing or preserving screens. Using global images and screens: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Reduces CPU resources required to pass data between requests in applications where a large number of global variables would have been necessary. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Reduces the FSCB I/O between multiple images and between images and screens. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Makes the declaration of global data explicit, thus traceable by using naming conventions and cross-reference tools. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Simplifies code, eliminating the need for &amp;lt;var&amp;gt;If $Setg() Then ...&amp;lt;/var&amp;gt; sequences to map request %variables into global variables and for &amp;lt;var&amp;gt;%xyz = $Getg()&amp;lt;/var&amp;gt; sequences to map global variables into request %variables. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Reduces I/O by swapping modified global screens to CCASERVR instead of paging them between the buffer pool and CCATEMP. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===When to use global images and screens===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You achieve the greatest benefit by declaring as &amp;lt;var&amp;gt;Global&amp;lt;/var&amp;gt; the most frequently used images and screens in an application. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Infrequently used images and screens declared as nonglobal do not put pressure on the buffer pool, because there would not be many copies in the buffer pool for many users, and little I/O with CCATEMP. If an application has many images and/or screens, GTBL might overflow if all the images and/or screens are defined as global. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Consistency checks performed===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When a global image or screen is first referred to in a request, GTBL is searched for the object. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If the object is&amp;lt;var&amp;gt; not&amp;lt;/var&amp;gt; already present in GTBL, the object is written into GTBL. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If the object is present, two consistency checks are performed:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Persistence &amp;amp;mdash; &amp;lt;var&amp;gt;Permanent&amp;lt;/var&amp;gt; or &amp;lt;var&amp;gt;Temporary&amp;lt;/var&amp;gt; status &amp;amp;mdash; of the new object must match the persistence of the object already in GTBL. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Definition &amp;amp;mdash; &amp;lt;var&amp;gt;Permanent&amp;lt;/var&amp;gt; or &amp;lt;var&amp;gt;Temporary&amp;lt;/var&amp;gt; &amp;amp;mdash; of the new object must match the definition of the object already in GTBL. &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; If a global image has an array that uses the &amp;lt;var&amp;gt;Depending On &amp;lt;i&amp;gt;%variable&amp;lt;/i&amp;gt;&amp;lt;/var&amp;gt; option, the names of the %variables are not compared when the definition check is performed. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If either of these consistency checks fails &amp;amp;mdash; for example, an image is declared as &amp;lt;var&amp;gt;Temporary&amp;lt;/var&amp;gt;, but the same image already exists in GTBL, declared as &amp;lt;var&amp;gt;Permanent&amp;lt;/var&amp;gt; &amp;amp;mdash; then the request is canceled and the [[M204.2158]] message is generated: &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;Global &amp;lt;i&amp;gt;object-type&amp;lt;/i&amp;gt; definition doesn&#039;t match value in GTBL​,​ &amp;lt;i&amp;gt;error-description&amp;lt;/i&amp;gt;, name hash=&amp;lt;i&amp;gt;hash-code&amp;lt;/i&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Using global images and screens==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The following example illustrates using global images and screens to pass screen and image data between User Language requests. The example consists of the following procedures:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SCREENDEF defines a global screen.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;IMAGEDEF defines a global image.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;PROCA sets the screen item value and an image item value.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;PROCB displays the updated image item and the original screen item. &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;PROCEDURE SCREENDEF&lt;br /&gt;
   * KEEP GLOBAL SCREENS AND IMAGES IN SEPARATE PROCEDURES&lt;br /&gt;
   * FOR CENTRAL DEFINITION&lt;br /&gt;
   SCREEN SCREEN1 GLOBAL&lt;br /&gt;
      PROMPT &#039;SCREEN1&#039;&lt;br /&gt;
      INPUT ITEM NUMERIC LEN 4 AT 10&lt;br /&gt;
   END SCREEN&lt;br /&gt;
END PROCEDURE&lt;br /&gt;
 &lt;br /&gt;
PROCEDURE IMAGEDEF&lt;br /&gt;
   * KEEP GLOBAL SCREENS AND IMAGES IN SEPARATE PROCEDURES&lt;br /&gt;
   * FOR CENTRAL DEFINITION&lt;br /&gt;
   IMAGE IMAGE1 GLOBAL&lt;br /&gt;
      ITEM IS FLOAT LEN 8&lt;br /&gt;
   END IMAGE&lt;br /&gt;
END PROCEDURE&lt;br /&gt;
 &lt;br /&gt;
PROCEDURE PROCA&lt;br /&gt;
   BEGIN&lt;br /&gt;
   INCLUDE SCREENDEF&lt;br /&gt;
   INCLUDE IMAGEDEF&lt;br /&gt;
   * INITIALIZE SCREEN1 AND IMAGE1&lt;br /&gt;
   PREPARE SCREEN SCREEN1&lt;br /&gt;
   PREPARE IMAGE IMAGE1&lt;br /&gt;
   * USER SEES SCREEN1 AND ENTERS A VALUE N (E.G., 10) AS INPUT&lt;br /&gt;
   READ SCREEN SCREEN1&lt;br /&gt;
   %IMAGE1:ITEM = %SCREEN1:ITEM + 3&lt;br /&gt;
   END&lt;br /&gt;
END PROCEDURE&lt;br /&gt;
 &lt;br /&gt;
PROCEDURE PROCB&lt;br /&gt;
   BEGIN&lt;br /&gt;
   INCLUDE SCREENDEF&lt;br /&gt;
   INCLUDE IMAGEDEF&lt;br /&gt;
   * DO NOT INITIALIZE, JUST IDENTIFY FOR SUBSEQUENT REFERRAL&lt;br /&gt;
   IDENTIFY IMAGE IMAGE1&lt;br /&gt;
      * USER SEES UPDATED IMAGE ITEM (N+3) IN NEW REQUEST&lt;br /&gt;
   PRINT &#039;IMAGE ITEM = &#039; WITH %IMAGE1:ITEM&lt;br /&gt;
   * USER SEES ORIGINAL SCREEN ITEM WITH DATA THAT USER ENTERED&lt;br /&gt;
   READ SCREEN SCREEN1&lt;br /&gt;
   END&lt;br /&gt;
END PROCEDURE&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; You can run several procedures between PROCA and PROCB with the same results as if you ran those two procedures sequentially, because the defined global objects persist.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===System administration issues===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
To review the implications of the global images and screens feature for system administrators, see the following topics:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;GTBL size &amp;amp;mdash; [[Large request considerations#GTBL (global variable table)|GTBL (global variable table)]], [[Defining the runtime environment (CCAIN)#Understanding the global variable table (GTBL)|Understanding the global variable table (GTBL)]], and [[GTBLHASH parameter]]&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;VTBL usage with COMMON images and screens &amp;amp;mdash; [[Large request considerations#VTBL (compiler variable table)|VTBL (compiler variable table)]] and [[Defining the runtime environment (CCAIN)#Compiler variable table (VTBL)|Compiler variable table (VTBL)]]&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;User since-last statistics &amp;amp;mdash; [[Using system statistics#User since-last statistics|User since-last statistics]] &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
==Clearing the GTBL work area==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When you log off, all global objects and global variables are cleared. If you want to clear some or all global objects or global variables from GTBL during your working session, prior to logging out, you can issue: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;CLEAR statement &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;CLEARG and/or CLEARGO commands&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;$DELG function to selectively delete global string variables&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;RESET command for the GTBLEHASH and GTBLPCT parameters&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;UTABLE command that changes the size of FTBL, XTBL, or GTBL clears all global objects of any type&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Using the CLEARG and CLEARGO commands===&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;Use this command &amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;To Remove...&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;[[CLEARG command|CLEARG]]&amp;lt;/var&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Only global string 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;&amp;lt;var&amp;gt;[[CLEARGO command|CLEARGO]]&amp;lt;/var&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;All global objects: images, screens, menus, found sets, lists, and temporary and permanent positions from GTBL; it does not clear global string variables. &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 &amp;lt;var&amp;gt;CLEARGO&amp;lt;/var&amp;gt; command takes no arguments.&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Using the $DELG function===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can use the &amp;lt;var&amp;gt;[[$Delg]]&amp;lt;/var&amp;gt; function to delete global string variables created by either &amp;lt;var&amp;gt;[[$Setg]]&amp;lt;/var&amp;gt; or &amp;lt;var&amp;gt;[[$Incrg]]&amp;lt;/var&amp;gt;. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The &amp;lt;var&amp;gt;[[$Delg]]&amp;lt;/var&amp;gt; function deletes a single or group of similar global string variables, releasing and compacting the GTBL space for reuse. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Using the CLEAR statement===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can use the &amp;lt;var&amp;gt;Clear&amp;lt;/var&amp;gt; statement to clear global objects of the same type, an individual global object, or all global string variables, as shown 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;The statement &amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Clears...&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td nowrap&amp;gt;&amp;lt;var&amp;gt;Clear &amp;lt;i&amp;gt;type-of-object&amp;lt;/i&amp;gt; Objects&amp;lt;/var&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;A class of global objects or all global objects. Global string variables are not cleared, because they are not objects. &amp;lt;/td&amp;gt;&lt;br /&gt;
&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;Clear Global&amp;lt;/var&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Individual global objects from GTBL. &amp;lt;/td&amp;gt;&lt;br /&gt;
&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;Clear Globals&amp;lt;/var&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;All global string variables. You cannot selectively clear individual global string variables with the &amp;lt;var&amp;gt;Clear&amp;lt;/var&amp;gt; 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;
====Syntax====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The format for the &amp;lt;var&amp;gt;Clear&amp;lt;/var&amp;gt; statement is:&amp;lt;/p&amp;gt;&lt;br /&gt;
{{Template:Clear statement syntax}}&lt;br /&gt;
Where:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;All&amp;lt;/var&amp;gt; clears all permanent and temporary global objects, including: found sets, lists, images, menus, positions, screens, and sorted sets from GTBL. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Temp&amp;lt;/var&amp;gt; clears only global objects explicitly declared as &amp;lt;var&amp;gt;Temp&amp;lt;/var&amp;gt; in your request, including images, menus, and screens from GTBL. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;ListFdst&amp;lt;/var&amp;gt; clears all global found sets, lists, and sorted sets from GTBL. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Position&amp;lt;/var&amp;gt; clears all permanent and temporary positions from GTBL. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Objects&amp;lt;/var&amp;gt; specifies that the &amp;lt;var&amp;gt;CLEAR&amp;lt;/var&amp;gt; command is operating on the object type you specified, or operating on all types of objects. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Global&amp;lt;/var&amp;gt; clears a specific global object from GTBL. You cannot clear a global string variable created with the &amp;lt;var&amp;gt;$Setg&amp;lt;/var&amp;gt; function using this form. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Position [Perm | Temp]&amp;lt;/var&amp;gt; The use of PERM or TEMP must be consistent with GLOBAL in the REMEMBER statement.  If GLOBAL is specified in the REMEMBER statement, then PERM is implied.  If GLOBAL is omitted from the REMEMBER statement, TEMP is implied.&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;objectname&amp;lt;/var&amp;gt; is the literal name of the specific global object to be cleared from GTBL. Enclose &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;objectname&amp;lt;/var&amp;gt; in single quotation marks.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;b&amp;gt;NOTE:&amp;lt;/b&amp;gt; If the &amp;lt;i&amp;gt;&#039;objectname&#039;&amp;lt;/i&amp;gt; is mixed or lower case, be sure to enclose it here in single quotation marks.  Do the same when referring to that name in other statements; e.g. REMEMBER or POSITION.&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;%variable&amp;lt;/var&amp;gt; contains a value that specifies the global object to be cleared from GTBL. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Globals&amp;lt;/var&amp;gt; clears all global string variables created with the &amp;lt;var&amp;gt;$Setg&amp;lt;/var&amp;gt; function from GTBL. This form does &amp;lt;em&amp;gt;not&amp;lt;/em&amp;gt; clear any global objects. &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 following statements clear all permanent and temporary global found sets, images, lists, menus, positions, screens, and sorted sets:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;Clear Objects&lt;br /&gt;
 &lt;br /&gt;
Clear All Objects&lt;br /&gt;
 &lt;br /&gt;
Clear All Global Objects&lt;br /&gt;
 &lt;br /&gt;
Clear Global Objects&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Clearing global found sets and lists===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can clear global found sets and lists in GTBL without logging off using the following examples: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Clear a specific global list or found set by issuing one of these statements:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;Clear Global List &#039;&amp;lt;i&amp;gt;objectname&amp;lt;/i&amp;gt;&#039;&lt;br /&gt;
 &lt;br /&gt;
Clear Global List &amp;lt;i&amp;gt;%variable&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
Clear Global Foundset &#039;&amp;lt;i&amp;gt;objectname&amp;lt;/i&amp;gt;&#039;&lt;br /&gt;
 &lt;br /&gt;
Clear Global Foundset &amp;lt;i&amp;gt;%variable&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;Clear all global found sets and lists with the statement: &lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;Clear ListFdst [Global] Objects &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
(Global found sets and lists are among the global objects cleared by the &amp;lt;var&amp;gt;CLEARGO&amp;lt;/var&amp;gt; command.) &amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Close a file or group with which a global list or found set is associated. This includes the file close processing done when exiting or stopping a subsystem. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Issue a &amp;lt;var&amp;gt;UTABLE&amp;lt;/var&amp;gt; command that changes the size of FTBL, XTBL, or GTBL. &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 you clear a global list or global found set, then any request that uses the global and does not have the &amp;lt;var&amp;gt;Find&amp;lt;/var&amp;gt; statement that creates the global object receives either of the following error messages:&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;M204.0301 Referenced statement label undefined&lt;br /&gt;
 &lt;br /&gt;
M204.0311 Unacceptable statement reference&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===RELEASE and COMMIT RELEASE statements with global foundsets and lists===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The &amp;lt;var&amp;gt;Release&amp;lt;/var&amp;gt; statements and the &amp;lt;var&amp;gt;Commit Release&amp;lt;/var&amp;gt; statements empty the contents of a global found set, global sort set, or global list. The label and positions associated with a found set, sort set, or the list is still considered global, but it is empty. Global positions are not cleared by &amp;lt;var&amp;gt;Release&amp;lt;/var&amp;gt; or &amp;lt;var&amp;gt;Commit Release&amp;lt;/var&amp;gt; statements, however, without records there is nothing to process.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Clearing remembered positions===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Each &amp;lt;var&amp;gt;Remember&amp;lt;/var&amp;gt; statement creates a GTBL entry, whether or not &amp;lt;var&amp;gt;Global&amp;lt;/var&amp;gt; is specified. If GLOBAL is not specified, the position is temporary and is cleared from GTBL at the end of request execution.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
All remembered positions, along with all other GTBL entries, are cleared when you log off. You can also clear remembered positions in the following ways:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;You can clear a specific temporary position by issuing one of these statements:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;Clear Global Position Temp &#039;&amp;lt;i&amp;gt;objectname&amp;lt;/i&amp;gt;&#039;&lt;br /&gt;
 &lt;br /&gt;
Clear Global Position Temp &amp;lt;i&amp;gt;%variable&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;You can clear a specific permanent position by issuing one of these statements: &lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;Clear Global Position Perm &#039;&amp;lt;i&amp;gt;objectname&amp;lt;/i&amp;gt;&#039;&lt;br /&gt;
 &lt;br /&gt;
Clear Global Position Perm &amp;lt;i&amp;gt;%variable&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;You clear all global found sets, lists, or sorted sets with which a remembered position is associated:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;Clear ListFdst [Global] Objects&lt;br /&gt;
&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;You clear all remembered positions by issuing the statement:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;Clear Position [Global] Objects&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;
====Usage notes====&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;When you are using the &amp;lt;var&amp;gt;Clear Global Position&amp;lt;/var&amp;gt; statement, &amp;lt;var&amp;gt;Perm&amp;lt;/var&amp;gt; is the default. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;The &amp;lt;var&amp;gt;CLEARGO&amp;lt;/var&amp;gt; command has the effect of clearing all remembered positions.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Any &amp;lt;var&amp;gt;UTABLE&amp;lt;/var&amp;gt; command that changes the size of FTBL, GTBL, or XTBL clears all remembered positions.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Timing and placement of a Clear statement===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The &amp;lt;var&amp;gt;Clear Global&amp;lt;/var&amp;gt; statement takes effect at evaluation time and its placement in a request can have significant consequences: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;If the global object being cleared is referenced in the same request, it is marked as pending clear. The global is then emptied (zero records), and all its record locks are removed. It is cleared and deleted from GTBL at the end of 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;/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>JDamon</name></author>
	</entry>
	<entry>
		<id>https://m204wiki.rocketsoftware.com/index.php?title=Global_features&amp;diff=120848</id>
		<title>Global features</title>
		<link rel="alternate" type="text/html" href="https://m204wiki.rocketsoftware.com/index.php?title=Global_features&amp;diff=120848"/>
		<updated>2026-04-23T17:44:11Z</updated>

		<summary type="html">&lt;p&gt;JDamon: /* Syntax */&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;
&amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; offers several global features to store information in memory so that it is not automatically cleared between requests. The memory area for storing global information is a &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; internal work area or server table called the &amp;lt;b&amp;gt;global table&amp;lt;/b&amp;gt; or GTBL. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The global features are:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Global string variables&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Global objects&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Global found sets and lists&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Global screens, images, and menus&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Global positions&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Global information is available only to the user who creates it. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===GTBL internal work area===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Each user&#039;s GTBL is empty when the user logs in. GTBL accumulates global information that is available for the duration of the terminal session, unless you intentionally clear it. You can clear GTBL information selectively. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
For a discussion of GTBL space requirements, see [[Large request considerations#GTBL (global variable table)|GTBL (global variable table)]].&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Global items are stored in a specific order in GTBL. As shown in [[#GTBL internal work area|GTBL internal work area]], the area that stores global string variables is at the beginning of the table, and is built from the top down. The area that stores global objects is at the end of the table and is built from the bottom up. The unused or free space is between these two areas. &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;caption&amp;quot; style=&amp;quot;width:450px&amp;quot;&amp;gt;Storage of global variables and global objects in GTBL &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;figure&amp;quot;&amp;gt;[[File:Storage_of_global_vars_in_GTBL.png|450px]] &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Global string variables==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can use global string variables to: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Pass information from one request to another request&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Include procedures conditionally at the &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; command level&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Tailor a request dynamically &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;
As of Version 5.1, you can increase the speed and reduce the CPU time to find and update a global string variable by setting the &amp;lt;var&amp;gt;[[GTBLHASH parameter|GTBLHASH]]&amp;lt;/var&amp;gt; parameter to a nonzero value. The &amp;lt;var&amp;gt;GTBLHASH&amp;lt;/var&amp;gt; parameter specifies the number of buckets allocated in the global string variable section of GTBL.&lt;br /&gt;
When &amp;lt;var&amp;gt;GTBLHASH&amp;lt;/var&amp;gt; is a nonzero value, and you set or get a global string variable, the global string variable name is hashed to determine the bucket in which the name is located. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
This reduces the overall amount of data that must be scanned to find a global string variable or must be moved when a value is deleted or changes in size. If &amp;lt;var&amp;gt;GTBLHASH&amp;lt;/var&amp;gt; is 0, global string variables are processed as in pre-5.1 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;
The &amp;lt;var&amp;gt;[[GTBLPCT parameter|GTBLPCT]]&amp;lt;/var&amp;gt; parameter determines the initial percentage of GTBL to allocate for global string variables. The default value of &amp;lt;var&amp;gt;GTBLPCT&amp;lt;/var&amp;gt; is 50, meaning 50 percent of GTBL is initially allocated for global variable strings. The remainder, in this case 50 percent, is the initial allocation for global objects. However, if &amp;lt;var&amp;gt;GTBLHASH&amp;lt;/var&amp;gt; is 0, a nonzero setting for &amp;lt;var&amp;gt;GTBLPCT&amp;lt;/var&amp;gt; has no effect. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When in effect, if either area of GTBL fills and there are still free pages in GTBL, then GTBL can be rearranged if more space is required in the full area of GTBL. Because these rearrangements can be CPU intensive, Rocket Software recommends that you determine an accurate setting for &amp;lt;var&amp;gt;GTBLPCT&amp;lt;/var&amp;gt; to avoid frequent rearrangements. You can monitor the performance of the hash GTBL feature using the &amp;lt;code&amp;gt;GTBLRU&amp;lt;/code&amp;gt; user statistic and the &amp;lt;code&amp;gt;GTBLRS&amp;lt;/code&amp;gt; since-last statistic.&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Rearranging GTBL and tracking the rearrangements====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The following statistics are available as system statistics, user statistics and since-last statistics to keep track of GTBL rearrangements required for the hashed GTBL feature: &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;Statistic &amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Tracking&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;GTBLRU &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Number of GTBL rearrangements required to add a string variable global.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;GTBLRS &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Number of GTBL rearrangements required to add a global object. &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;
After reviewing the GTBLRU and GTBLRS statistics, you can consider taking the following actions: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;If both of these values are high, increase the size of GTBL by increasing &amp;lt;var&amp;gt;LGTBL&amp;lt;/var&amp;gt;. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;If GTBLRU is high but GTBLRS is not, increase &amp;lt;var&amp;gt;GTBLPCT&amp;lt;/var&amp;gt; or decrease &amp;lt;var&amp;gt;GTBLHASH&amp;lt;/var&amp;gt;. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;If GTBLRS is high but GTBLRU is low, decrease &amp;lt;var&amp;gt;GTBLPCT&amp;lt;/var&amp;gt;. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Global found sets and lists===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can use global found sets and lists to make found sets and lists available across request boundaries. A global found set or list remains in GTBL until you: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Explicitly delete it&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Issue a &amp;lt;var&amp;gt;Release&amp;lt;/var&amp;gt; or &amp;lt;var&amp;gt;Commit Release&amp;lt;/var&amp;gt; statement &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;The file or group it refers to is closed, including the file close processing done when exiting a subsystem or stopping &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Log out &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Sorted sets are a subgroup of found sets; they are treated the same by the &amp;lt;var&amp;gt;Clear&amp;lt;/var&amp;gt; statement that is used to clear global found sets.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Faster global variable processing option====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When global lists or found sets are processed as part of the &amp;lt;var&amp;gt;Find&amp;lt;/var&amp;gt; or &amp;lt;var&amp;gt;Place Records On&amp;lt;/var&amp;gt; statement, it must be verified that a global variable representing the list or found set exists in GTBL. The &amp;lt;var&amp;gt;CLEARG&amp;lt;/var&amp;gt; command or &amp;lt;var&amp;gt;Clear&amp;lt;/var&amp;gt; statement may delete the global variable, so an internal routine is called to verify whether the global variable is in GTBL. The internal routine creates a new copy, if it was deleted. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The internal routine scans NTBL to find an entry that points to the required variable, then it uses its hash value to scan GTBL. Scanning a large NTBL may take considerable time. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The NTBL scan can be eliminated, if internal variables representing global lists and found sets contain a global name hash value. Thus, an internal variable with a length of eight bytes that contains an NTBL entry offset points to the internal variable representing a global list or found set. This method avoids an NTBL scan, if a global variable has been deleted from GTBL. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
This faster global variable processing requires larger VTBL, because every global list or found set needs eight more bytes. If you want the benefit of this increased processing speed and can accommodate the increased VTBL requirement, set &amp;lt;var&amp;gt;FASTGLOB&amp;lt;/var&amp;gt; to 1. To maintain existing processing you can let &amp;lt;var&amp;gt;[[FASTGLOB parameter|FASTGLOB]]&amp;lt;/var&amp;gt; default to 0, or you can explicitly set &amp;lt;var&amp;gt;FASTGLOB&amp;lt;/var&amp;gt; to 0.&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Global positions===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can use &amp;lt;var&amp;gt;Remember&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;Position&amp;lt;/var&amp;gt; statements to save and recall a place in a &amp;lt;var&amp;gt;For&amp;lt;/var&amp;gt; loop, either globally or non-globally. This lets you suspend processing in a &amp;lt;var&amp;gt;For&amp;lt;/var&amp;gt; loop and resume it later, within the same request or in a subsequent request. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Global images and screens===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can use global images and screens to:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Pass image and screen data from one request to another&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Manage more than one image or screen in one request&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Manage menus, which are a special type of screen&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Reduce I/O by swapping modified global screens to CCASERVR instead of paging them between the buffer pool and CCATEMP &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Global string variables===&lt;br /&gt;
 &lt;br /&gt;
===Global string variable names and values===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Entries in the GTBL consist of global name=value pairs. The names and values of the global string variables are created with the &amp;lt;var&amp;gt;$Setg&amp;lt;/var&amp;gt; function from within a request. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;A global string variable name can consist of up to 255 characters and follows the naming conventions for variables (see [[Using variables and values in computation#%Variable names|%Variable names]]). Global string variables that contain special characters, other than a period (&amp;lt;tt&amp;gt;.&amp;lt;/tt&amp;gt;) cannot be used as &amp;lt;code&amp;gt;?&amp;amp;amp;&amp;lt;/code&amp;gt; dummy strings. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;A value can be 0, the null string, or up to 255 characters. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Clearing global string variables===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When a new value for an existing name is stored, the old entry is first deleted. Entries remain in the table until you delete them by issuing a &amp;lt;var&amp;gt;CLEARG&amp;lt;/var&amp;gt; command, execute a &amp;lt;var&amp;gt;Clear&amp;lt;/var&amp;gt; statement, execute a &amp;lt;var&amp;gt;$Delg&amp;lt;/var&amp;gt; function call, or you log out. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If you define a large number of global string variables, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; performance can be adversely affected. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
For details and examples of clearing global string variables, see [[#Clearing the GTBL work area|Clearing the GTBL work area]].&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Global variable functions and commands===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The following functions, statements, commands, and facilities manipulate entries in the global variable table: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Use the functions &amp;lt;var&amp;gt;[[$Setg]]&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;[[$Getg]]&amp;lt;/var&amp;gt; within a request to store and retrieve global string variables. Use &amp;lt;var&amp;gt;[[$Incrg]]&amp;lt;/var&amp;gt; to perform simple arithmetic on global string variables with numeric values. Use the &amp;lt;var&amp;gt;[[$Delg]]&amp;lt;/var&amp;gt; function to delete global string variables created by &amp;lt;var&amp;gt;$Setg&amp;lt;/var&amp;gt; or &amp;lt;var&amp;gt;$Incrg&amp;lt;/var&amp;gt;. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Use the &amp;lt;code&amp;gt;?&amp;amp;amp;&amp;lt;/code&amp;gt; dummy string within a request to read a variable in the GTBL. Refer to [[Procedures]] for more information about dummy strings. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Use the conditional &amp;lt;var&amp;gt;INCLUDE&amp;lt;/var&amp;gt; command (&amp;lt;code&amp;gt;IF A=B,&amp;lt;i&amp;gt;name&amp;lt;/i&amp;gt;&amp;lt;/code&amp;gt;) to search the global variable table for an entry whose name is A and whose value is &amp;lt;code&amp;gt;B&amp;lt;/code&amp;gt;. If the entry is found, the named procedure is included. The &amp;lt;var&amp;gt;IF&amp;lt;/var&amp;gt; command is discussed on [[#Conditional and unconditional INCLUDEs|Conditional and unconditional INCLUDEs]]. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Using global string variables in application subsystems===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
In addition to the above facilities, an application subsystem can designate specific global string variables in the subsystem definition. For more information about subsystem global string variables, refer to: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[[Application Subsystem development#Command line global variable|Command line global variable]] &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;[[Application Subsystem development#Communication global variable|Communication global variable]] &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;[[Application Subsystem development#Error global variable|Error global variable]] &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
==Passing string values from one request to another==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
It is often necessary to generate data in one request and to save the data for use in other independent requests to be run later in the terminal session. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Example 1====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Suppose that you want to store the current date in every record created during a session in YYMMDD format, a modified form of the value returned by the &amp;lt;var&amp;gt;$Date&amp;lt;/var&amp;gt; function. You can derive the date once at the beginning of the day and hold it for use throughout the day. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
At the beginning of the terminal session, you enter:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;BEGIN&lt;br /&gt;
    %DATE = $DATE&lt;br /&gt;
    %DATE = $SUBSTR(%DATE, 1, 2) -&lt;br /&gt;
         WITH $SUBSTR(%DATE, 4, 2) WITH -&lt;br /&gt;
         $SUBSTR(%DATE, 7, 2)&lt;br /&gt;
     IF $SETG(&#039;DATE&#039;, %DATE) THEN&lt;br /&gt;
          PRINT &#039;*** REQUEST TOO LONG - GTBL&#039;&lt;br /&gt;
          STOP&lt;br /&gt;
     END IF&lt;br /&gt;
END&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Later in the terminal session, you can use the specially formatted date: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;BEGIN&lt;br /&gt;
    %DATE = $GETG(&#039;DATE&#039;)&lt;br /&gt;
    STORE RECORD&lt;br /&gt;
        FIELD = VALUE&lt;br /&gt;
        FIELDB = VALUE&lt;br /&gt;
        DATE = %DATE&lt;br /&gt;
            .&lt;br /&gt;
            .&lt;br /&gt;
            .&lt;br /&gt;
    END STORE&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;
Assume that different sets of records are processed and the results are used to produce a final report. Because of compiler table limitations, you have to process requests that cannot be continued with the MORE command (see [[Large request considerations]]). You can store intermediate results in GTBL and produce the final report exclusively from the table.   &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;BEGIN&lt;br /&gt;
          .&lt;br /&gt;
          .&lt;br /&gt;
          .&lt;br /&gt;
      process hourly workers&#039; wages&lt;br /&gt;
          .&lt;br /&gt;
          .&lt;br /&gt;
          .&lt;br /&gt;
      IF $SETG(&#039;HOURLY TOTAL&#039;, %TOTAL) THEN&lt;br /&gt;
          PRINT &#039;*** REQUEST TOO LONG - GTBL&#039;&lt;br /&gt;
          STOP&lt;br /&gt;
      END IF&lt;br /&gt;
 &lt;br /&gt;
END&lt;br /&gt;
 &lt;br /&gt;
BEGIN&lt;br /&gt;
          .&lt;br /&gt;
          .&lt;br /&gt;
          .&lt;br /&gt;
      process monthly workers&#039; wages&lt;br /&gt;
          .&lt;br /&gt;
          .&lt;br /&gt;
          .&lt;br /&gt;
      IF $SETG(&#039;MONTHLY TOTAL&#039;, %TOTAL) THEN&lt;br /&gt;
          PRINT &#039;*** REQUEST TOO LONG - GTBL&#039;&lt;br /&gt;
          STOP&lt;br /&gt;
      END IF&lt;br /&gt;
END&lt;br /&gt;
 &lt;br /&gt;
BEGIN&lt;br /&gt;
      %HOURLY = $GETG(&#039;HOURLY TOTAL&#039;)&lt;br /&gt;
      %MONTHLY = $GETG(&#039;MONTHLY TOTAL&#039;)&lt;br /&gt;
           .&lt;br /&gt;
           .&lt;br /&gt;
           .&lt;br /&gt;
      format report&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;
==Using global string variables with a conditional INCLUDE command==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can use global string variables to create a modular programming environment in which you select procedures to perform a particular function without compiling and evaluating procedures designed for other related functions. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
To use global string variables effectively in creating such an environment, it is useful to review the differences between commands and User Language statements and between conditional and unconditional includes, as described in the following sections.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Differences between commands and User Language statements===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Commands and User Language statements have different effects and are used in different ways: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;System control commands can be issued only outside a request &amp;amp;mdash; at command level. They are acted upon immediately. User Language statements can be used only within a request. They are compiled on a line-by-line basis, but the entire request is not executed until &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; receives an END statement. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;INCLUDE is both a command and a User Language statement. In either context, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; is directed to take the next input line from an appropriate stored procedure. When the procedure lines are exhausted, the next input line is taken from the command or User Language statement immediately following the INCLUDE. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;IF has two formats: &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Conditional INCLUDE command&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;User Language statement &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;
===Conditional and unconditional INCLUDEs===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
A conditional include can be coded within an IF statement using the INCLUDE statement or with an INCLUDE command.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
An unconditional include can be coded with a standalone INCLUDE statement or command.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
This section describes conditional INCLUDE commands by providing examples and discussing how each example is processed.&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 request illustrates the conditional INCLUDE command:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;BEGIN&lt;br /&gt;
ALL: FIND ALL RECORDS&lt;br /&gt;
     END FIND&lt;br /&gt;
     FOR EACH RECORD IN ALL&lt;br /&gt;
         IF AGE GT &#039;10&#039; THEN&lt;br /&gt;
             IF $SETG(&#039;AGE&#039;, &#039;YES&#039;) THEN&lt;br /&gt;
                 PRINT &#039;*** REQUEST TOO LONG - GTBL&#039;&lt;br /&gt;
                 STOP&lt;br /&gt;
             END IF&lt;br /&gt;
         END IF&lt;br /&gt;
     END FOR&lt;br /&gt;
END&lt;br /&gt;
IF AGE = YES, COUNT&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====How Example 1 is processed====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The statements between the BEGIN and END are compiled and evaluated. If the AGE condition is true, a global string variable is set. &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; then processes the IF command. Statements in the COUNT procedure are compiled and executed only if the condition is true. Otherwise, the statements are never compiled.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Example 2====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Suppose that you enter record selection criteria and then select one of three reports to be generated. A set of four procedures can be created.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
For example, procedure A might contain the prompts for record selection and report type. Procedures B, C, and D might contain statements to produce the individual reports. Only procedure A and one of the other three procedures is compiled and evaluated. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;PROCEDURE A&lt;br /&gt;
BEGIN&lt;br /&gt;
FIND.RECS: FIND ALL RECORDS FOR WHICH&lt;br /&gt;
               ??SELECT.RECORDS&lt;br /&gt;
           END FIND&lt;br /&gt;
           IF $SETG(&#039;REPORTNUM&#039;, $READ(&#039;ENTER REPORT NO&#039;))&lt;br /&gt;
               THEN PRINT &#039;*** REQUEST TOO LONG - GTBL&#039;&lt;br /&gt;
               STOP&lt;br /&gt;
           END IF&lt;br /&gt;
END MORE&lt;br /&gt;
IF REPORTNUM = 1, B&lt;br /&gt;
IF REPORTNUM = 2, C&lt;br /&gt;
IF REPORTNUM = 3, D&lt;br /&gt;
END PROCEDURE&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Procedures B, C, and D have the same basic format, but variations in processing are applied to each record.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;PROCEDURE B&lt;br /&gt;
MORE&lt;br /&gt;
PROCESS: FOR EACH RECORD IN FIND.RECS&lt;br /&gt;
             .&lt;br /&gt;
             .&lt;br /&gt;
             .&lt;br /&gt;
         processing&lt;br /&gt;
             .&lt;br /&gt;
             .&lt;br /&gt;
             .&lt;br /&gt;
         END FOR PROCESS&lt;br /&gt;
END&lt;br /&gt;
END PROCEDURE&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====How Example 2 is processed====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The dialog produced by these procedures is shown below, with user input in boldface: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;b&amp;gt;INCLUDE A&amp;lt;/b&amp;gt;&lt;br /&gt;
??SELECT.RECORDS&lt;br /&gt;
&amp;lt;b&amp;gt;REGION = SOUTH OR WEST&amp;lt;/b&amp;gt;&lt;br /&gt;
$$ENTER REPORT NO&lt;br /&gt;
&amp;lt;b&amp;gt;2&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;i&amp;gt;output from Procedure C &amp;lt;/i&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Keep IF commands at as high a nesting level as possible====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
An alternate method of writing procedures is to follow each report&#039;s END MORE statement with IF commands. However, each procedure might then INCLUDE itself or another procedure, creating a lower level of nesting. If the procedure continued to INCLUDE itself, the maximum nesting level would be reached. As a general rule in a complex set of procedures, keep IF commands at as high a nesting level as possible. The global string variables to be tested can be set at any level.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
==Using global string variables to tailor a request==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Global string variables can be used in conjunction with the FILE$ condition (see [[Record retrievals#FILE$ condition|FILE$ condition]]) to access a set of files in a group. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Example====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
In the following example, the value of the global string variable, FILES, can be changed to access an alternative set of files. This example consists of two requests. The first &amp;amp;mdash; BEGIN through END MORE &amp;amp;mdash; sets the global string variable during the execution phase; the second &amp;amp;mdash; MORE through END &amp;amp;mdash; is then compiled with the correct value.   &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;
           IF $SETG(&#039;FILES&#039;,&#039;FILEA OR FILE$ FILEC&#039;) THEN&lt;br /&gt;
               PRINT &#039;***REQUEST TOO LONG -- GTBL&#039;&lt;br /&gt;
               %IGNORE = $SETG(&#039;FILES&#039;, &amp;amp;apos;&amp;amp;apos;)&lt;br /&gt;
           END IF&lt;br /&gt;
END MORE&lt;br /&gt;
MORE&lt;br /&gt;
           IF $GETG(&#039;files&#039;) = &amp;amp;apos;&amp;amp;apos; THEN&lt;br /&gt;
               STOP&lt;br /&gt;
           END IF&lt;br /&gt;
 GET.A:    FIND ALL RECORDS FOR WHICH&lt;br /&gt;
              (FILE$ ?&amp;amp;amp;FILES) AND FIELDX = &#039;A&#039;&lt;br /&gt;
           END FIND&lt;br /&gt;
           FOR EACH RECORD IN GET.A&lt;br /&gt;
               PRINT ALL INFORMATION&lt;br /&gt;
           END FOR&lt;br /&gt;
END&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
==Global objects==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Global objects include found sets, images, lists, menus, positions, screens, and sorted sets. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===General rules for declarations===&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;You must declare global lists, found sets, and sorted sets in every request that references them; the &amp;lt;var&amp;gt;Declare&amp;lt;/var&amp;gt; statement must come before the reference. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;If a global object is used in multiple subroutines, or in both the main program and a subroutine, the label must be declared as global in the main program before the subroutine(s). The subroutine(s) must then declare the label as common. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;If you refer to a global object before a &amp;lt;var&amp;gt;Declare&amp;lt;/var&amp;gt; statement, the system issues a duplicate label compilation error. Such a reference implicitly makes the object non global. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Incompatibility===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The [[PQO]] product does not support global found sets, lists, positions, or sorted sets. These global objects cannot be used in conjunction with remote files or scattered groups. This limitation exists, because GTBL does not exist on the PQO server. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Clearing global objects from GTBL===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
For syntax, details and examples of clearing global objects, see [[#Clearing the GTBL work area|Clearing the GTBL work area]]. &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Using global found sets and lists==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can pass found sets and lists from request to request by declaring them as &amp;lt;var&amp;gt;Global&amp;lt;/var&amp;gt;. A global found set or list is stored in the internal work area GTBL for the duration of the terminal session unless it is intentionally cleared, or the file or group with which it is associated is closed. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Creating a global found set or sorted set====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can create a global found set using this syntax: &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;[Declare] Label &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;labelname&amp;lt;/span&amp;gt; [Global | Common] &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;labelname&amp;lt;/var&amp;gt; is a unique global object name.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Creating a global list====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can declare a global list using the following syntax:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;[Declare] List &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;listname&amp;lt;/span&amp;gt; &lt;br /&gt;
  [In [File [Perm | Temp] Group] &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;name&amp;lt;/span&amp;gt;]&lt;br /&gt;
  [Global | Common] &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
In both cases, the keyword &amp;lt;var&amp;gt;Global&amp;lt;/var&amp;gt; implies &amp;lt;var&amp;gt;Common&amp;lt;/var&amp;gt;. These two keywords are mutually exclusive in the declaration statement. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Because &amp;lt;var&amp;gt;Global&amp;lt;/var&amp;gt; implies &amp;lt;var&amp;gt;Common&amp;lt;/var&amp;gt;, a list or found set can be declared &amp;lt;var&amp;gt;Global&amp;lt;/var&amp;gt; at any scope. See [[Subroutines#Scope of elements|Scope of elements]] for a discussion. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;The global name, label name, or list name, must be unique across all global objects. For a discussion, see [[Subroutines#Sharing common elements|Sharing common elements]]. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Usage rules====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The following rules apply to global found sets and lists: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;You must declare each global list or global found set as &amp;lt;code&amp;gt;&amp;lt;i&amp;gt;labelname&amp;lt;/i&amp;gt; Global&amp;lt;/code&amp;gt; in each procedure that uses it. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;The file context in which a global list or found set is used must be the same as the file context in which it was created. &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; compiler does not currently enforce this rule; therefore, your code must maintain this requirement. Rocket Software recommends that you populate a global found set or list only once within the scope of these global objects. However, this is not a restriction as long as file context is maintained. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Global found sets and lists are invalid in ad hoc group context. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Each global object name must be unique. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Global found sets and lists are not supported in remote file or scattered group contexts. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Example 1: Referencing a global found set===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
In this example, Procedure 1 declares the global found set and then performs the find. Procedure 2 needs only to declare the global found set and then reference the global found set labeled F1. The &amp;lt;var&amp;gt;For&amp;lt;/var&amp;gt; loops in both procedures process records in the &amp;lt;code&amp;gt;VEHICLES&amp;lt;/code&amp;gt; file for which the value of the field &amp;lt;code&amp;gt;COLOR&amp;lt;/code&amp;gt; was equal to &amp;lt;code&amp;gt;BLUE&amp;lt;/code&amp;gt; at the time of the evaluation of the &amp;lt;var&amp;gt;Find&amp;lt;/var&amp;gt; statement in Procedure 1. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;b&amp;gt;Procedure 1&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;BEGIN&lt;br /&gt;
DECLARE LABEL F1 GLOBAL&lt;br /&gt;
F1: IN VEHICLES FIND ALL RECORDS WHERE COLOR = &#039;BLUE&#039;&lt;br /&gt;
    END FIND&lt;br /&gt;
    FOR EACH RECORD IN F1&lt;br /&gt;
       PAI&lt;br /&gt;
    END FOR&lt;br /&gt;
END&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;b&amp;gt;Procedure 2&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;BEGIN&lt;br /&gt;
DECLARE LABEL F1 GLOBAL&lt;br /&gt;
    FOR EACH RECORD IN F1&lt;br /&gt;
       PAI&lt;br /&gt;
    END FOR&lt;br /&gt;
END&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Example 2: Maintaining file context===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Example 2 illustrates repopulating a global found set across the scope of its usage, maintaining the same file context throughout. In this example, Procedure 1 is identical to Procedure 1 in Example 1 above, and Procedure 3 is identical to Procedure 2 in Example 1. The second procedure in this example, however, performs a different find than the first. Procedure 3 then processes the records found in Procedure 2. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
So in this example, Procedure 1 processes records in the &amp;lt;code&amp;gt;VEHICLES&amp;lt;/code&amp;gt; file for which the value of the field &amp;lt;code&amp;gt;COLOR&amp;lt;/code&amp;gt; is equal to &amp;lt;code&amp;gt;BLUE&amp;lt;/code&amp;gt;, while Procedures 2 and 3 process records for which &amp;lt;code&amp;gt;COLOR&amp;lt;/code&amp;gt; was equal to &amp;lt;code&amp;gt;RED&amp;lt;/code&amp;gt; at the time of the &amp;lt;var&amp;gt;Find&amp;lt;/var&amp;gt; statement evaluation in Procedure 2. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;b&amp;gt;Procedure 1&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;BEGIN&lt;br /&gt;
DECLARE LABEL F1 GLOBAL&lt;br /&gt;
F1: IN VEHICLES FIND ALL RECORDS WHERE COLOR = &#039;BLUE&#039;&lt;br /&gt;
    END FIND&lt;br /&gt;
    FOR EACH RECORD IN F1&lt;br /&gt;
       PAI&lt;br /&gt;
    END FOR&lt;br /&gt;
END&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;b&amp;gt;Procedure 2&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;BEGIN&lt;br /&gt;
DECLARE LABEL F1 GLOBAL&lt;br /&gt;
F1: IN VEHICLES FIND ALL RECORDS WHERE COLOR = &#039;RED&#039;&lt;br /&gt;
    END FIND&lt;br /&gt;
    FOR EACH RECORD IN F1&lt;br /&gt;
       PAI&lt;br /&gt;
    END FOR&lt;br /&gt;
END&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;b&amp;gt;Procedure 3&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;BEGIN&lt;br /&gt;
DECLARE LABEL F1 GLOBAL&lt;br /&gt;
    FOR EACH RECORD IN F1&lt;br /&gt;
       PAI&lt;br /&gt;
    END FOR&lt;br /&gt;
END&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
==Using global sorted sets==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
A global sorted set is created when a SORT RECORDS statement or a FOR EACH RECORD IN ORDER BY statement is preceded by a label that has been declared GLOBAL. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Limiting subsequent references===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
For example, in Procedure 1 below, MAKE is the only field referenced in the request. Therefore, MAKE is the only field that can be referenced in subsequent requests. Thus, in Procedure 2, because the field MODEL was not referenced in the previous request, a blank is printed each time through the FOR loop. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Procedure 1====&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;BEGIN&lt;br /&gt;
DECLARE LABEL S1 GLOBAL&lt;br /&gt;
F1: IN VEHICLES FIND ALL RECORDS&lt;br /&gt;
    END FIND&lt;br /&gt;
S1: SORT RECORDS IN F1 BY MAKE&lt;br /&gt;
    FOR EACH RECORD IN S1&lt;br /&gt;
       PRINT MAKE&lt;br /&gt;
    END FOR&lt;br /&gt;
END&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Procedure 2====&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;BEGIN&lt;br /&gt;
DECLARE LABEL S1 GLOBAL&lt;br /&gt;
    FOR EACH RECORD IN S1&lt;br /&gt;
       PRINT MODEL&lt;br /&gt;
    END FOR&lt;br /&gt;
END&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Keeping all fields accessible for subsequent references===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
To ensure that all fields are accessible to subsequent requests, use a PAI or field name variable with the statement that creates the found set.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The sort key field(s) used on the SORT statement cannot be referred to by a subsequent request unless referred to in the SORT statement FOR loop in the request creating the set. While this restriction applies to the use of the SORT RECORDS statement, it does not apply to the use of the SORT RECORD KEYS statement.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If you are not going to refer to the sorted set in the request that creates the sorted set, you can code a FOR loop, which is compiled but never executed, that refers to each field that you want to refer to in a subsequent request. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
==Saving and recalling a position in a For loop==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can include statements in a &amp;lt;var&amp;gt;For&amp;lt;/var&amp;gt; loop to provide for the possibility of terminating the loop before the set of records or values being processed is exhausted. For example, you might use a &amp;lt;var&amp;gt;Jump To&amp;lt;/var&amp;gt; or &amp;lt;var&amp;gt;Loop End&amp;lt;/var&amp;gt; statement in conjunction with an &amp;lt;var&amp;gt;If&amp;lt;/var&amp;gt; statement to test each record or value before processing, and terminating the loop if a certain condition is met. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The &amp;lt;var&amp;gt;Remember&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;Position&amp;lt;/var&amp;gt; statements let you store the current processing position in a &amp;lt;var&amp;gt;For&amp;lt;/var&amp;gt; loop, then recall it at a later time and resume &amp;lt;var&amp;gt;For&amp;lt;/var&amp;gt; processing where you left off earlier. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Remember statement===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The purpose of the &amp;lt;var&amp;gt;Remember&amp;lt;/var&amp;gt; statement is to store the processing position in a &amp;lt;var&amp;gt;For&amp;lt;/var&amp;gt; loop. Each &amp;lt;var&amp;gt;Remember&amp;lt;/var&amp;gt; statement creates a GTBL entry of variable length. See [[Large request considerations]] for detailed descriptions of GTBL entries. If you remember a position as &amp;lt;var&amp;gt;Global&amp;lt;/var&amp;gt;, the entry remains in GTBL after the current request ends. &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; clears non-global &amp;lt;var&amp;gt;Remember&amp;lt;/var&amp;gt; positions at the end of each request.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Syntax====&lt;br /&gt;
{{Template:Remember statement syntax}}&lt;br /&gt;
Where:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The &amp;lt;var&amp;gt;Global&amp;lt;/var&amp;gt; option implies &#039;&#039;&#039;PERM&#039;&#039;&#039; and the position is retained in GTBL after the current request terminates. If &amp;lt;var&amp;gt;Global&amp;lt;/var&amp;gt; is not specified, &#039;&#039;&#039;TEMP&#039;&#039;&#039; is implied and the position is cleared from GTBL after the current request terminates.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;b&amp;gt;NOTE:&amp;lt;/B&amp;gt; The use of GLOBAL here must be consistent with the CLEAR GLOBAL POSITION statement.  If the latter is specified with PERM:&amp;lt;/p&amp;gt; &lt;br /&gt;
&amp;lt;p&amp;gt;CLEAR GLOBAL POSITION &amp;lt;b&amp;gt;PERM&amp;lt;/b&amp;gt; &#039;position_name&#039;,&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;then the REMEMBER statement must specify GLOBAL because it implies PERM.&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;position_name&amp;lt;/var&amp;gt; is a unique object name you assign to the &amp;lt;var&amp;gt;Remember&amp;lt;/var&amp;gt; position. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;b&amp;gt;NOTE:&amp;lt;/b&amp;gt;If the &#039;position_name&#039; is mixed or lower case, be sure to enclose it here in single quotation marks.  Do the same when referring to that name in other statements; e.g. CLEAR or POSITION.&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;foundsortset_name&amp;lt;/var&amp;gt; or &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;list_name&amp;lt;/var&amp;gt; must be identical to the listname or label specified on the &amp;lt;var&amp;gt;For&amp;lt;/var&amp;gt; loop:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;If you are processing a found set or a sorted set, &amp;lt;code&amp;gt;In &amp;lt;i&amp;gt;foundsortset_name&amp;lt;/i&amp;gt;&amp;lt;/code&amp;gt; is the label of the &amp;lt;var&amp;gt;Find&amp;lt;/var&amp;gt; statement that generated it. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;If you are processing a list, &amp;lt;code&amp;gt;On &amp;lt;i&amp;gt;list_name&amp;lt;/i&amp;gt;&amp;lt;/code&amp;gt; is the name you gave to the list when you originally declared it. &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;
====Usage notes====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The following rules apply to the use of the &amp;lt;var&amp;gt;Remember&amp;lt;/var&amp;gt; statement:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Can appear only within a &amp;lt;var&amp;gt;For&amp;lt;/var&amp;gt; loop, but not a nested &amp;lt;var&amp;gt;For&amp;lt;/var&amp;gt; loop. The file context must be identical to the context of the &amp;lt;var&amp;gt;For&amp;lt;/var&amp;gt; loop. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Is invalid in ad hoc group context, if used with the &amp;lt;var&amp;gt;Global&amp;lt;/var&amp;gt; option. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;The &amp;lt;var&amp;gt;Remember&amp;lt;/var&amp;gt; statement is incompatible with &amp;lt;var&amp;gt;For Each Record In Order By&amp;lt;/var&amp;gt; clauses. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Position statement===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
A &amp;lt;var&amp;gt;Position&amp;lt;/var&amp;gt; statement recalls a remembered position, so you can resume &amp;lt;var&amp;gt;For&amp;lt;/var&amp;gt; processing in a list or found set that was terminated at an earlier time. For example, if you remembered the position at record number 5, then your foundset is positioned at record number 6 for further processing.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
This &amp;lt;var&amp;gt;Position&amp;lt;/var&amp;gt; statement is not to be confused with the &amp;lt;var&amp;gt;Position&amp;lt;/var&amp;gt; statement used to read records sequentially in an external VSAM KSDS file. See [[Images#Position statement|Position statement]]. &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;Position {Foundset &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;foundsortset_name&amp;lt;/span&amp;gt; | List &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;list_name&amp;lt;/span&amp;gt;} [At] &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;position_name&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
Where:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;foundsortset_name&amp;lt;/var&amp;gt; or &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;list_name&amp;lt;/var&amp;gt; must be identical to the list or label name used on a previous &amp;lt;var&amp;gt;Remember&amp;lt;/var&amp;gt; statement and in the &amp;lt;var&amp;gt;For&amp;lt;/var&amp;gt; statement that follows. &lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If you are about to resume the processing of a found set, &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;foundsortset_name&amp;lt;/var&amp;gt; is the label of the &amp;lt;var&amp;gt;Find&amp;lt;/var&amp;gt; statement that generated it. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If you are about to resume the processing of a list, &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;list_name&amp;lt;/var&amp;gt; is the name you gave to the list when you originally declared it.&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;position_name&amp;lt;/var&amp;gt; is a name that you assigned to the remembered position when you stored it on a previous &amp;lt;var&amp;gt;Remember&amp;lt;/var&amp;gt; statement. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;b&amp;gt;NOTE:&amp;lt;/b&amp;gt;If the &#039;position_name&#039; is mixed or lower case, be sure to enclose it here in single quotes.  Do the same when referring to that name in other statements; e.g. CLEAR or REMEMBER.&amp;lt;/p&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 following rules apply:&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;Position&amp;lt;/var&amp;gt; statement must appear outside, immediately before the &amp;lt;var&amp;gt;For&amp;lt;/var&amp;gt; loop to which it refers; it cannot be in the &amp;lt;var&amp;gt;For&amp;lt;/var&amp;gt; loop itself.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;The &amp;lt;var&amp;gt;For&amp;lt;/var&amp;gt; statement that follows the &amp;lt;var&amp;gt;Position&amp;lt;/var&amp;gt; statement must have an identical file context and list name or label name as the statement that initiated the &amp;lt;var&amp;gt;For&amp;lt;/var&amp;gt; loop of the remembered position.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;The &amp;lt;var&amp;gt;Position&amp;lt;/var&amp;gt; statement is incompatible with &amp;lt;var&amp;gt;For Each Record In Order By&amp;lt;/var&amp;gt; clauses. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
==Global images and screens==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can use global images and screens to pass image and screen data from one request to another and to efficiently manage more than one image or screen in one request. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can also declare global menus, because a menu is a special type of screen. In this section, the term &amp;quot;screen&amp;quot; applies to both screens and menus, unless otherwise noted. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Declaring global images and screens===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You make an image or screen global by specifying the keyword &amp;lt;var&amp;gt;Global&amp;lt;/var&amp;gt; in its declaration statement. You can declare global images and screens to be &amp;lt;var&amp;gt;Temporary&amp;lt;/var&amp;gt;, deleted at request termination, or &amp;lt;var&amp;gt;Permanent&amp;lt;/var&amp;gt;, persist across request termination. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===How images and screens are processed===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When you declare an image or screen as &amp;lt;var&amp;gt;Global&amp;lt;/var&amp;gt;, it is stored in GTBL. Nonglobal images and screens, declared as &amp;lt;var&amp;gt;Common&amp;lt;/var&amp;gt;, or neither &amp;lt;var&amp;gt;Common&amp;lt;/var&amp;gt; nor &amp;lt;var&amp;gt;Global&amp;lt;/var&amp;gt;, are stored in FSCB. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
This section provides some background information about how &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; processes images and screens, contrasting how global and nonglobal images and screens are processed. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Images and screen processing===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The figures in the following subsections represent how nonglobal and global objects are processed. Comparing the two types of processing highlights the I/O and storage savings associated with the global images and screens. &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Processing of nonglobal objects====&lt;br /&gt;
&amp;lt;p class=&amp;quot;figure&amp;quot;&amp;gt;[[File:Nonglobal_object_processing.png|550px]] &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The &amp;lt;b&amp;gt;Nonglobal object processing&amp;lt;/b&amp;gt; figure illustrates the process in the following steps:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The compiler loads a compiled version of the screen or image into FSCB in the user&#039;s server.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;A copy of the compiled object is stored in the buffer pool.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;A &amp;lt;var&amp;gt;Prepare&amp;lt;/var&amp;gt; statement acts on the compiled object in the buffer pool and copies it into FSCB.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Update statements act on the copy of the object in FSCB.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;The updated object is copied from FSCB to a working copy of the object in the buffer pool.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;If a user waits too long or the buffer pool fills up, the object is written to CCATEMP. When a user presses Enter for that object, the object is loaded back from CCATEMP to the buffer pool. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;amp;nbsp;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Processing of global objects==== &lt;br /&gt;
&amp;lt;p class=&amp;quot;figure&amp;quot;&amp;gt;[[File:Global_object_processing.png|550px]] &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The &amp;lt;b&amp;gt;Global object processing&amp;lt;/b&amp;gt; figure illustrates the process in the following steps: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The compiler loads a compiled version of the screen or image into FSCB in the user&#039;s server. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;A copy of the compiled object is stored in the buffer pool. This copy is called &#039;VIRGIN&#039;, as it is never updated. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;A &amp;lt;var&amp;gt;Prepare&amp;lt;/var&amp;gt; statement acts on the compiled object in the buffer pool and copies it into GTBL. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Update statements act on the copy in GTBL. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Using Prepare and Identify statements===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
To help you decide how to use the &amp;lt;var&amp;gt;Prepare&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;Identify&amp;lt;/var&amp;gt; statements, review the following:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[[#GTBL internal work area|GTBL internal work area]] &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;[[#Timing and placement of a CLEAR statement|Timing and placement of a CLEAR statement]] &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;For syntax and usage of the &amp;lt;var&amp;gt;Prepare&amp;lt;/var&amp;gt; statement, see [[Full-screen feature#PREPARE statement|Prepare statement]]&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;For syntax and usage of the &amp;lt;var&amp;gt;Identify&amp;lt;/var&amp;gt; statement, see [[Images#Identify statement|Identify statement]] &lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Also when using the &amp;lt;var&amp;gt;Identify&amp;lt;/var&amp;gt; statement, see [[#Consistency checks performed|Consistency checks performed]]. &amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Performance and efficiency benefits===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Global images and screens can simply and efficiently perform image-to-image processing and screen-to-image processing, eliminating the need to map screen items to image items when passing or preserving screens. Using global images and screens: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Reduces CPU resources required to pass data between requests in applications where a large number of global variables would have been necessary. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Reduces the FSCB I/O between multiple images and between images and screens. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Makes the declaration of global data explicit, thus traceable by using naming conventions and cross-reference tools. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Simplifies code, eliminating the need for &amp;lt;var&amp;gt;If $Setg() Then ...&amp;lt;/var&amp;gt; sequences to map request %variables into global variables and for &amp;lt;var&amp;gt;%xyz = $Getg()&amp;lt;/var&amp;gt; sequences to map global variables into request %variables. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Reduces I/O by swapping modified global screens to CCASERVR instead of paging them between the buffer pool and CCATEMP. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===When to use global images and screens===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You achieve the greatest benefit by declaring as &amp;lt;var&amp;gt;Global&amp;lt;/var&amp;gt; the most frequently used images and screens in an application. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Infrequently used images and screens declared as nonglobal do not put pressure on the buffer pool, because there would not be many copies in the buffer pool for many users, and little I/O with CCATEMP. If an application has many images and/or screens, GTBL might overflow if all the images and/or screens are defined as global. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Consistency checks performed===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When a global image or screen is first referred to in a request, GTBL is searched for the object. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If the object is&amp;lt;var&amp;gt; not&amp;lt;/var&amp;gt; already present in GTBL, the object is written into GTBL. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If the object is present, two consistency checks are performed:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Persistence &amp;amp;mdash; &amp;lt;var&amp;gt;Permanent&amp;lt;/var&amp;gt; or &amp;lt;var&amp;gt;Temporary&amp;lt;/var&amp;gt; status &amp;amp;mdash; of the new object must match the persistence of the object already in GTBL. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Definition &amp;amp;mdash; &amp;lt;var&amp;gt;Permanent&amp;lt;/var&amp;gt; or &amp;lt;var&amp;gt;Temporary&amp;lt;/var&amp;gt; &amp;amp;mdash; of the new object must match the definition of the object already in GTBL. &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; If a global image has an array that uses the &amp;lt;var&amp;gt;Depending On &amp;lt;i&amp;gt;%variable&amp;lt;/i&amp;gt;&amp;lt;/var&amp;gt; option, the names of the %variables are not compared when the definition check is performed. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If either of these consistency checks fails &amp;amp;mdash; for example, an image is declared as &amp;lt;var&amp;gt;Temporary&amp;lt;/var&amp;gt;, but the same image already exists in GTBL, declared as &amp;lt;var&amp;gt;Permanent&amp;lt;/var&amp;gt; &amp;amp;mdash; then the request is canceled and the [[M204.2158]] message is generated: &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;Global &amp;lt;i&amp;gt;object-type&amp;lt;/i&amp;gt; definition doesn&#039;t match value in GTBL​,​ &amp;lt;i&amp;gt;error-description&amp;lt;/i&amp;gt;, name hash=&amp;lt;i&amp;gt;hash-code&amp;lt;/i&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Using global images and screens==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The following example illustrates using global images and screens to pass screen and image data between User Language requests. The example consists of the following procedures:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SCREENDEF defines a global screen.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;IMAGEDEF defines a global image.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;PROCA sets the screen item value and an image item value.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;PROCB displays the updated image item and the original screen item. &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;PROCEDURE SCREENDEF&lt;br /&gt;
   * KEEP GLOBAL SCREENS AND IMAGES IN SEPARATE PROCEDURES&lt;br /&gt;
   * FOR CENTRAL DEFINITION&lt;br /&gt;
   SCREEN SCREEN1 GLOBAL&lt;br /&gt;
      PROMPT &#039;SCREEN1&#039;&lt;br /&gt;
      INPUT ITEM NUMERIC LEN 4 AT 10&lt;br /&gt;
   END SCREEN&lt;br /&gt;
END PROCEDURE&lt;br /&gt;
 &lt;br /&gt;
PROCEDURE IMAGEDEF&lt;br /&gt;
   * KEEP GLOBAL SCREENS AND IMAGES IN SEPARATE PROCEDURES&lt;br /&gt;
   * FOR CENTRAL DEFINITION&lt;br /&gt;
   IMAGE IMAGE1 GLOBAL&lt;br /&gt;
      ITEM IS FLOAT LEN 8&lt;br /&gt;
   END IMAGE&lt;br /&gt;
END PROCEDURE&lt;br /&gt;
 &lt;br /&gt;
PROCEDURE PROCA&lt;br /&gt;
   BEGIN&lt;br /&gt;
   INCLUDE SCREENDEF&lt;br /&gt;
   INCLUDE IMAGEDEF&lt;br /&gt;
   * INITIALIZE SCREEN1 AND IMAGE1&lt;br /&gt;
   PREPARE SCREEN SCREEN1&lt;br /&gt;
   PREPARE IMAGE IMAGE1&lt;br /&gt;
   * USER SEES SCREEN1 AND ENTERS A VALUE N (E.G., 10) AS INPUT&lt;br /&gt;
   READ SCREEN SCREEN1&lt;br /&gt;
   %IMAGE1:ITEM = %SCREEN1:ITEM + 3&lt;br /&gt;
   END&lt;br /&gt;
END PROCEDURE&lt;br /&gt;
 &lt;br /&gt;
PROCEDURE PROCB&lt;br /&gt;
   BEGIN&lt;br /&gt;
   INCLUDE SCREENDEF&lt;br /&gt;
   INCLUDE IMAGEDEF&lt;br /&gt;
   * DO NOT INITIALIZE, JUST IDENTIFY FOR SUBSEQUENT REFERRAL&lt;br /&gt;
   IDENTIFY IMAGE IMAGE1&lt;br /&gt;
      * USER SEES UPDATED IMAGE ITEM (N+3) IN NEW REQUEST&lt;br /&gt;
   PRINT &#039;IMAGE ITEM = &#039; WITH %IMAGE1:ITEM&lt;br /&gt;
   * USER SEES ORIGINAL SCREEN ITEM WITH DATA THAT USER ENTERED&lt;br /&gt;
   READ SCREEN SCREEN1&lt;br /&gt;
   END&lt;br /&gt;
END PROCEDURE&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; You can run several procedures between PROCA and PROCB with the same results as if you ran those two procedures sequentially, because the defined global objects persist.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===System administration issues===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
To review the implications of the global images and screens feature for system administrators, see the following topics:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;GTBL size &amp;amp;mdash; [[Large request considerations#GTBL (global variable table)|GTBL (global variable table)]], [[Defining the runtime environment (CCAIN)#Understanding the global variable table (GTBL)|Understanding the global variable table (GTBL)]], and [[GTBLHASH parameter]]&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;VTBL usage with COMMON images and screens &amp;amp;mdash; [[Large request considerations#VTBL (compiler variable table)|VTBL (compiler variable table)]] and [[Defining the runtime environment (CCAIN)#Compiler variable table (VTBL)|Compiler variable table (VTBL)]]&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;User since-last statistics &amp;amp;mdash; [[Using system statistics#User since-last statistics|User since-last statistics]] &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
==Clearing the GTBL work area==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When you log off, all global objects and global variables are cleared. If you want to clear some or all global objects or global variables from GTBL during your working session, prior to logging out, you can issue: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;CLEAR statement &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;CLEARG and/or CLEARGO commands&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;$DELG function to selectively delete global string variables&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;RESET command for the GTBLEHASH and GTBLPCT parameters&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;UTABLE command that changes the size of FTBL, XTBL, or GTBL clears all global objects of any type&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Using the CLEARG and CLEARGO commands===&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;Use this command &amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;To Remove...&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;[[CLEARG command|CLEARG]]&amp;lt;/var&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Only global string 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;&amp;lt;var&amp;gt;[[CLEARGO command|CLEARGO]]&amp;lt;/var&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;All global objects: images, screens, menus, found sets, lists, and temporary and permanent positions from GTBL; it does not clear global string variables. &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 &amp;lt;var&amp;gt;CLEARGO&amp;lt;/var&amp;gt; command takes no arguments.&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Using the $DELG function===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can use the &amp;lt;var&amp;gt;[[$Delg]]&amp;lt;/var&amp;gt; function to delete global string variables created by either &amp;lt;var&amp;gt;[[$Setg]]&amp;lt;/var&amp;gt; or &amp;lt;var&amp;gt;[[$Incrg]]&amp;lt;/var&amp;gt;. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The &amp;lt;var&amp;gt;[[$Delg]]&amp;lt;/var&amp;gt; function deletes a single or group of similar global string variables, releasing and compacting the GTBL space for reuse. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Using the CLEAR statement===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can use the &amp;lt;var&amp;gt;Clear&amp;lt;/var&amp;gt; statement to clear global objects of the same type, an individual global object, or all global string variables, as shown 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;The statement &amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Clears...&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td nowrap&amp;gt;&amp;lt;var&amp;gt;Clear &amp;lt;i&amp;gt;type-of-object&amp;lt;/i&amp;gt; Objects&amp;lt;/var&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;A class of global objects or all global objects. Global string variables are not cleared, because they are not objects. &amp;lt;/td&amp;gt;&lt;br /&gt;
&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;Clear Global&amp;lt;/var&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Individual global objects from GTBL. &amp;lt;/td&amp;gt;&lt;br /&gt;
&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;Clear Globals&amp;lt;/var&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;All global string variables. You cannot selectively clear individual global string variables with the &amp;lt;var&amp;gt;Clear&amp;lt;/var&amp;gt; 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;
====Syntax====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The format for the &amp;lt;var&amp;gt;Clear&amp;lt;/var&amp;gt; statement is:&amp;lt;/p&amp;gt;&lt;br /&gt;
{{Template:Clear statement syntax}}&lt;br /&gt;
Where:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;All&amp;lt;/var&amp;gt; clears all permanent and temporary global objects, including: found sets, lists, images, menus, positions, screens, and sorted sets from GTBL. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Temp&amp;lt;/var&amp;gt; clears only global objects explicitly declared as &amp;lt;var&amp;gt;Temp&amp;lt;/var&amp;gt; in your request, including images, menus, and screens from GTBL. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;ListFdst&amp;lt;/var&amp;gt; clears all global found sets, lists, and sorted sets from GTBL. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Position&amp;lt;/var&amp;gt; clears all permanent and temporary positions from GTBL. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Objects&amp;lt;/var&amp;gt; specifies that the &amp;lt;var&amp;gt;CLEAR&amp;lt;/var&amp;gt; command is operating on the object type you specified, or operating on all types of objects. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Global&amp;lt;/var&amp;gt; clears a specific global object from GTBL. You cannot clear a global string variable created with the &amp;lt;var&amp;gt;$Setg&amp;lt;/var&amp;gt; function using this form. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Position [Perm | Temp]&amp;lt;/var&amp;gt; The use of PERM or TEMP must be consistent with GLOBAL in the REMEMBER statement.  If GLOBAL is specified in the REMEMBER statement, then PERM is implied.  If GLOBAL is omitted from the REMEMBER statement, TEMP is implied.&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;objectname&amp;lt;/var&amp;gt; is the literal name of the specific global object to be cleared from GTBL. Enclose &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;objectname&amp;lt;/var&amp;gt; in single quotation marks.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;b&amp;gt;NOTE:&amp;lt;/b&amp;gt; If the &amp;lt;i&amp;gt;&#039;objectname&#039;&amp;lt;/i&amp;gt; is mixed or lower case, be sure to enclose it here in single quotation marks.  Do the same when referring to that name in other statements; e.g. REMEMBER or POSITION.&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;%variable&amp;lt;/var&amp;gt; contains a value that specifies the global object to be cleared from GTBL. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Globals&amp;lt;/var&amp;gt; clears all global string variables created with the &amp;lt;var&amp;gt;$Setg&amp;lt;/var&amp;gt; function from GTBL. This form does &amp;lt;em&amp;gt;not&amp;lt;/em&amp;gt; clear any global objects. &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 following statements clear all permanent and temporary global found sets, images, lists, menus, positions, screens, and sorted sets:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;Clear Objects&lt;br /&gt;
 &lt;br /&gt;
Clear All Objects&lt;br /&gt;
 &lt;br /&gt;
Clear All Global Objects&lt;br /&gt;
 &lt;br /&gt;
Clear Global Objects&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Clearing global found sets and lists===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can clear global found sets and lists in GTBL without logging off using the following examples: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Clear a specific global list or found set by issuing one of these statements:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;Clear Global List &#039;&amp;lt;i&amp;gt;objectname&amp;lt;/i&amp;gt;&#039;&lt;br /&gt;
 &lt;br /&gt;
Clear Global List &amp;lt;i&amp;gt;%variable&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
Clear Global Foundset &#039;&amp;lt;i&amp;gt;objectname&amp;lt;/i&amp;gt;&#039;&lt;br /&gt;
 &lt;br /&gt;
Clear Global Foundset &amp;lt;i&amp;gt;%variable&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;Clear all global found sets and lists with the statement: &lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;Clear ListFdst [Global] Objects &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
(Global found sets and lists are among the global objects cleared by the &amp;lt;var&amp;gt;CLEARGO&amp;lt;/var&amp;gt; command.) &amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Close a file or group with which a global list or found set is associated. This includes the file close processing done when exiting or stopping a subsystem. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Issue a &amp;lt;var&amp;gt;UTABLE&amp;lt;/var&amp;gt; command that changes the size of FTBL, XTBL, or GTBL. &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 you clear a global list or global found set, then any request that uses the global and does not have the &amp;lt;var&amp;gt;Find&amp;lt;/var&amp;gt; statement that creates the global object receives either of the following error messages:&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;M204.0301 Referenced statement label undefined&lt;br /&gt;
 &lt;br /&gt;
M204.0311 Unacceptable statement reference&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===RELEASE and COMMIT RELEASE statements with global foundsets and lists===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The &amp;lt;var&amp;gt;Release&amp;lt;/var&amp;gt; statements and the &amp;lt;var&amp;gt;Commit Release&amp;lt;/var&amp;gt; statements empty the contents of a global found set, global sort set, or global list. The label and positions associated with a found set, sort set, or the list is still considered global, but it is empty. Global positions are not cleared by &amp;lt;var&amp;gt;Release&amp;lt;/var&amp;gt; or &amp;lt;var&amp;gt;Commit Release&amp;lt;/var&amp;gt; statements, however, without records there is nothing to process.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Clearing remembered positions===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Each &amp;lt;var&amp;gt;Remember&amp;lt;/var&amp;gt; statement creates a GTBL entry, whether or not &amp;lt;var&amp;gt;Global&amp;lt;/var&amp;gt; is specified. If GLOBAL is not specified, the position is temporary and is cleared from GTBL at the end of request execution.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
All remembered positions, along with all other GTBL entries, are cleared when you log off. You can also clear remembered positions in the following ways:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;You can clear a specific temporary position by issuing one of these statements:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;Clear Global Position Temp &#039;&amp;lt;i&amp;gt;objectname&amp;lt;/i&amp;gt;&#039;&lt;br /&gt;
 &lt;br /&gt;
Clear Global Position Temp &amp;lt;i&amp;gt;%variable&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;You can clear a specific permanent position by issuing one of these statements: &lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;Clear Global Position Perm &#039;&amp;lt;i&amp;gt;objectname&amp;lt;/i&amp;gt;&#039;&lt;br /&gt;
 &lt;br /&gt;
Clear Global Position Perm &amp;lt;i&amp;gt;%variable&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;You clear all global found sets, lists, or sorted sets with which a remembered position is associated:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;Clear ListFdst [Global] Objects&lt;br /&gt;
&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;You clear all remembered positions by issuing the statement:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;Clear Position [Global] Objects&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;
====Usage notes====&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;When you are using the &amp;lt;var&amp;gt;Clear Global Position&amp;lt;/var&amp;gt; statement, &amp;lt;var&amp;gt;Perm&amp;lt;/var&amp;gt; is the default. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;The &amp;lt;var&amp;gt;CLEARGO&amp;lt;/var&amp;gt; command has the effect of clearing all remembered positions.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Any &amp;lt;var&amp;gt;UTABLE&amp;lt;/var&amp;gt; command that changes the size of FTBL, GTBL, or XTBL clears all remembered positions.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Timing and placement of a Clear statement===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The &amp;lt;var&amp;gt;Clear Global&amp;lt;/var&amp;gt; statement takes effect at evaluation time and its placement in a request can have significant consequences: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;If the global object being cleared is referenced in the same request, it is marked as pending clear. The global is then emptied (zero records), and all its record locks are removed. It is cleared and deleted from GTBL at the end of 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;/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>JDamon</name></author>
	</entry>
	<entry>
		<id>https://m204wiki.rocketsoftware.com/index.php?title=Global_features&amp;diff=120847</id>
		<title>Global features</title>
		<link rel="alternate" type="text/html" href="https://m204wiki.rocketsoftware.com/index.php?title=Global_features&amp;diff=120847"/>
		<updated>2026-04-23T17:41:12Z</updated>

		<summary type="html">&lt;p&gt;JDamon: /* Remember statement */&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;
&amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; offers several global features to store information in memory so that it is not automatically cleared between requests. The memory area for storing global information is a &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; internal work area or server table called the &amp;lt;b&amp;gt;global table&amp;lt;/b&amp;gt; or GTBL. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The global features are:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Global string variables&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Global objects&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Global found sets and lists&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Global screens, images, and menus&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Global positions&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Global information is available only to the user who creates it. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===GTBL internal work area===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Each user&#039;s GTBL is empty when the user logs in. GTBL accumulates global information that is available for the duration of the terminal session, unless you intentionally clear it. You can clear GTBL information selectively. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
For a discussion of GTBL space requirements, see [[Large request considerations#GTBL (global variable table)|GTBL (global variable table)]].&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Global items are stored in a specific order in GTBL. As shown in [[#GTBL internal work area|GTBL internal work area]], the area that stores global string variables is at the beginning of the table, and is built from the top down. The area that stores global objects is at the end of the table and is built from the bottom up. The unused or free space is between these two areas. &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;caption&amp;quot; style=&amp;quot;width:450px&amp;quot;&amp;gt;Storage of global variables and global objects in GTBL &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;figure&amp;quot;&amp;gt;[[File:Storage_of_global_vars_in_GTBL.png|450px]] &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Global string variables==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can use global string variables to: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Pass information from one request to another request&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Include procedures conditionally at the &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; command level&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Tailor a request dynamically &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;
As of Version 5.1, you can increase the speed and reduce the CPU time to find and update a global string variable by setting the &amp;lt;var&amp;gt;[[GTBLHASH parameter|GTBLHASH]]&amp;lt;/var&amp;gt; parameter to a nonzero value. The &amp;lt;var&amp;gt;GTBLHASH&amp;lt;/var&amp;gt; parameter specifies the number of buckets allocated in the global string variable section of GTBL.&lt;br /&gt;
When &amp;lt;var&amp;gt;GTBLHASH&amp;lt;/var&amp;gt; is a nonzero value, and you set or get a global string variable, the global string variable name is hashed to determine the bucket in which the name is located. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
This reduces the overall amount of data that must be scanned to find a global string variable or must be moved when a value is deleted or changes in size. If &amp;lt;var&amp;gt;GTBLHASH&amp;lt;/var&amp;gt; is 0, global string variables are processed as in pre-5.1 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;
The &amp;lt;var&amp;gt;[[GTBLPCT parameter|GTBLPCT]]&amp;lt;/var&amp;gt; parameter determines the initial percentage of GTBL to allocate for global string variables. The default value of &amp;lt;var&amp;gt;GTBLPCT&amp;lt;/var&amp;gt; is 50, meaning 50 percent of GTBL is initially allocated for global variable strings. The remainder, in this case 50 percent, is the initial allocation for global objects. However, if &amp;lt;var&amp;gt;GTBLHASH&amp;lt;/var&amp;gt; is 0, a nonzero setting for &amp;lt;var&amp;gt;GTBLPCT&amp;lt;/var&amp;gt; has no effect. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When in effect, if either area of GTBL fills and there are still free pages in GTBL, then GTBL can be rearranged if more space is required in the full area of GTBL. Because these rearrangements can be CPU intensive, Rocket Software recommends that you determine an accurate setting for &amp;lt;var&amp;gt;GTBLPCT&amp;lt;/var&amp;gt; to avoid frequent rearrangements. You can monitor the performance of the hash GTBL feature using the &amp;lt;code&amp;gt;GTBLRU&amp;lt;/code&amp;gt; user statistic and the &amp;lt;code&amp;gt;GTBLRS&amp;lt;/code&amp;gt; since-last statistic.&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Rearranging GTBL and tracking the rearrangements====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The following statistics are available as system statistics, user statistics and since-last statistics to keep track of GTBL rearrangements required for the hashed GTBL feature: &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;Statistic &amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Tracking&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;GTBLRU &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Number of GTBL rearrangements required to add a string variable global.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;GTBLRS &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Number of GTBL rearrangements required to add a global object. &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;
After reviewing the GTBLRU and GTBLRS statistics, you can consider taking the following actions: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;If both of these values are high, increase the size of GTBL by increasing &amp;lt;var&amp;gt;LGTBL&amp;lt;/var&amp;gt;. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;If GTBLRU is high but GTBLRS is not, increase &amp;lt;var&amp;gt;GTBLPCT&amp;lt;/var&amp;gt; or decrease &amp;lt;var&amp;gt;GTBLHASH&amp;lt;/var&amp;gt;. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;If GTBLRS is high but GTBLRU is low, decrease &amp;lt;var&amp;gt;GTBLPCT&amp;lt;/var&amp;gt;. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Global found sets and lists===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can use global found sets and lists to make found sets and lists available across request boundaries. A global found set or list remains in GTBL until you: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Explicitly delete it&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Issue a &amp;lt;var&amp;gt;Release&amp;lt;/var&amp;gt; or &amp;lt;var&amp;gt;Commit Release&amp;lt;/var&amp;gt; statement &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;The file or group it refers to is closed, including the file close processing done when exiting a subsystem or stopping &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Log out &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Sorted sets are a subgroup of found sets; they are treated the same by the &amp;lt;var&amp;gt;Clear&amp;lt;/var&amp;gt; statement that is used to clear global found sets.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Faster global variable processing option====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When global lists or found sets are processed as part of the &amp;lt;var&amp;gt;Find&amp;lt;/var&amp;gt; or &amp;lt;var&amp;gt;Place Records On&amp;lt;/var&amp;gt; statement, it must be verified that a global variable representing the list or found set exists in GTBL. The &amp;lt;var&amp;gt;CLEARG&amp;lt;/var&amp;gt; command or &amp;lt;var&amp;gt;Clear&amp;lt;/var&amp;gt; statement may delete the global variable, so an internal routine is called to verify whether the global variable is in GTBL. The internal routine creates a new copy, if it was deleted. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The internal routine scans NTBL to find an entry that points to the required variable, then it uses its hash value to scan GTBL. Scanning a large NTBL may take considerable time. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The NTBL scan can be eliminated, if internal variables representing global lists and found sets contain a global name hash value. Thus, an internal variable with a length of eight bytes that contains an NTBL entry offset points to the internal variable representing a global list or found set. This method avoids an NTBL scan, if a global variable has been deleted from GTBL. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
This faster global variable processing requires larger VTBL, because every global list or found set needs eight more bytes. If you want the benefit of this increased processing speed and can accommodate the increased VTBL requirement, set &amp;lt;var&amp;gt;FASTGLOB&amp;lt;/var&amp;gt; to 1. To maintain existing processing you can let &amp;lt;var&amp;gt;[[FASTGLOB parameter|FASTGLOB]]&amp;lt;/var&amp;gt; default to 0, or you can explicitly set &amp;lt;var&amp;gt;FASTGLOB&amp;lt;/var&amp;gt; to 0.&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Global positions===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can use &amp;lt;var&amp;gt;Remember&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;Position&amp;lt;/var&amp;gt; statements to save and recall a place in a &amp;lt;var&amp;gt;For&amp;lt;/var&amp;gt; loop, either globally or non-globally. This lets you suspend processing in a &amp;lt;var&amp;gt;For&amp;lt;/var&amp;gt; loop and resume it later, within the same request or in a subsequent request. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Global images and screens===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can use global images and screens to:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Pass image and screen data from one request to another&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Manage more than one image or screen in one request&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Manage menus, which are a special type of screen&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Reduce I/O by swapping modified global screens to CCASERVR instead of paging them between the buffer pool and CCATEMP &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Global string variables===&lt;br /&gt;
 &lt;br /&gt;
===Global string variable names and values===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Entries in the GTBL consist of global name=value pairs. The names and values of the global string variables are created with the &amp;lt;var&amp;gt;$Setg&amp;lt;/var&amp;gt; function from within a request. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;A global string variable name can consist of up to 255 characters and follows the naming conventions for variables (see [[Using variables and values in computation#%Variable names|%Variable names]]). Global string variables that contain special characters, other than a period (&amp;lt;tt&amp;gt;.&amp;lt;/tt&amp;gt;) cannot be used as &amp;lt;code&amp;gt;?&amp;amp;amp;&amp;lt;/code&amp;gt; dummy strings. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;A value can be 0, the null string, or up to 255 characters. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Clearing global string variables===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When a new value for an existing name is stored, the old entry is first deleted. Entries remain in the table until you delete them by issuing a &amp;lt;var&amp;gt;CLEARG&amp;lt;/var&amp;gt; command, execute a &amp;lt;var&amp;gt;Clear&amp;lt;/var&amp;gt; statement, execute a &amp;lt;var&amp;gt;$Delg&amp;lt;/var&amp;gt; function call, or you log out. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If you define a large number of global string variables, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; performance can be adversely affected. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
For details and examples of clearing global string variables, see [[#Clearing the GTBL work area|Clearing the GTBL work area]].&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Global variable functions and commands===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The following functions, statements, commands, and facilities manipulate entries in the global variable table: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Use the functions &amp;lt;var&amp;gt;[[$Setg]]&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;[[$Getg]]&amp;lt;/var&amp;gt; within a request to store and retrieve global string variables. Use &amp;lt;var&amp;gt;[[$Incrg]]&amp;lt;/var&amp;gt; to perform simple arithmetic on global string variables with numeric values. Use the &amp;lt;var&amp;gt;[[$Delg]]&amp;lt;/var&amp;gt; function to delete global string variables created by &amp;lt;var&amp;gt;$Setg&amp;lt;/var&amp;gt; or &amp;lt;var&amp;gt;$Incrg&amp;lt;/var&amp;gt;. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Use the &amp;lt;code&amp;gt;?&amp;amp;amp;&amp;lt;/code&amp;gt; dummy string within a request to read a variable in the GTBL. Refer to [[Procedures]] for more information about dummy strings. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Use the conditional &amp;lt;var&amp;gt;INCLUDE&amp;lt;/var&amp;gt; command (&amp;lt;code&amp;gt;IF A=B,&amp;lt;i&amp;gt;name&amp;lt;/i&amp;gt;&amp;lt;/code&amp;gt;) to search the global variable table for an entry whose name is A and whose value is &amp;lt;code&amp;gt;B&amp;lt;/code&amp;gt;. If the entry is found, the named procedure is included. The &amp;lt;var&amp;gt;IF&amp;lt;/var&amp;gt; command is discussed on [[#Conditional and unconditional INCLUDEs|Conditional and unconditional INCLUDEs]]. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Using global string variables in application subsystems===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
In addition to the above facilities, an application subsystem can designate specific global string variables in the subsystem definition. For more information about subsystem global string variables, refer to: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[[Application Subsystem development#Command line global variable|Command line global variable]] &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;[[Application Subsystem development#Communication global variable|Communication global variable]] &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;[[Application Subsystem development#Error global variable|Error global variable]] &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
==Passing string values from one request to another==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
It is often necessary to generate data in one request and to save the data for use in other independent requests to be run later in the terminal session. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Example 1====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Suppose that you want to store the current date in every record created during a session in YYMMDD format, a modified form of the value returned by the &amp;lt;var&amp;gt;$Date&amp;lt;/var&amp;gt; function. You can derive the date once at the beginning of the day and hold it for use throughout the day. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
At the beginning of the terminal session, you enter:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;BEGIN&lt;br /&gt;
    %DATE = $DATE&lt;br /&gt;
    %DATE = $SUBSTR(%DATE, 1, 2) -&lt;br /&gt;
         WITH $SUBSTR(%DATE, 4, 2) WITH -&lt;br /&gt;
         $SUBSTR(%DATE, 7, 2)&lt;br /&gt;
     IF $SETG(&#039;DATE&#039;, %DATE) THEN&lt;br /&gt;
          PRINT &#039;*** REQUEST TOO LONG - GTBL&#039;&lt;br /&gt;
          STOP&lt;br /&gt;
     END IF&lt;br /&gt;
END&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Later in the terminal session, you can use the specially formatted date: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;BEGIN&lt;br /&gt;
    %DATE = $GETG(&#039;DATE&#039;)&lt;br /&gt;
    STORE RECORD&lt;br /&gt;
        FIELD = VALUE&lt;br /&gt;
        FIELDB = VALUE&lt;br /&gt;
        DATE = %DATE&lt;br /&gt;
            .&lt;br /&gt;
            .&lt;br /&gt;
            .&lt;br /&gt;
    END STORE&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;
Assume that different sets of records are processed and the results are used to produce a final report. Because of compiler table limitations, you have to process requests that cannot be continued with the MORE command (see [[Large request considerations]]). You can store intermediate results in GTBL and produce the final report exclusively from the table.   &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;BEGIN&lt;br /&gt;
          .&lt;br /&gt;
          .&lt;br /&gt;
          .&lt;br /&gt;
      process hourly workers&#039; wages&lt;br /&gt;
          .&lt;br /&gt;
          .&lt;br /&gt;
          .&lt;br /&gt;
      IF $SETG(&#039;HOURLY TOTAL&#039;, %TOTAL) THEN&lt;br /&gt;
          PRINT &#039;*** REQUEST TOO LONG - GTBL&#039;&lt;br /&gt;
          STOP&lt;br /&gt;
      END IF&lt;br /&gt;
 &lt;br /&gt;
END&lt;br /&gt;
 &lt;br /&gt;
BEGIN&lt;br /&gt;
          .&lt;br /&gt;
          .&lt;br /&gt;
          .&lt;br /&gt;
      process monthly workers&#039; wages&lt;br /&gt;
          .&lt;br /&gt;
          .&lt;br /&gt;
          .&lt;br /&gt;
      IF $SETG(&#039;MONTHLY TOTAL&#039;, %TOTAL) THEN&lt;br /&gt;
          PRINT &#039;*** REQUEST TOO LONG - GTBL&#039;&lt;br /&gt;
          STOP&lt;br /&gt;
      END IF&lt;br /&gt;
END&lt;br /&gt;
 &lt;br /&gt;
BEGIN&lt;br /&gt;
      %HOURLY = $GETG(&#039;HOURLY TOTAL&#039;)&lt;br /&gt;
      %MONTHLY = $GETG(&#039;MONTHLY TOTAL&#039;)&lt;br /&gt;
           .&lt;br /&gt;
           .&lt;br /&gt;
           .&lt;br /&gt;
      format report&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;
==Using global string variables with a conditional INCLUDE command==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can use global string variables to create a modular programming environment in which you select procedures to perform a particular function without compiling and evaluating procedures designed for other related functions. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
To use global string variables effectively in creating such an environment, it is useful to review the differences between commands and User Language statements and between conditional and unconditional includes, as described in the following sections.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Differences between commands and User Language statements===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Commands and User Language statements have different effects and are used in different ways: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;System control commands can be issued only outside a request &amp;amp;mdash; at command level. They are acted upon immediately. User Language statements can be used only within a request. They are compiled on a line-by-line basis, but the entire request is not executed until &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; receives an END statement. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;INCLUDE is both a command and a User Language statement. In either context, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; is directed to take the next input line from an appropriate stored procedure. When the procedure lines are exhausted, the next input line is taken from the command or User Language statement immediately following the INCLUDE. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;IF has two formats: &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Conditional INCLUDE command&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;User Language statement &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;
===Conditional and unconditional INCLUDEs===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
A conditional include can be coded within an IF statement using the INCLUDE statement or with an INCLUDE command.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
An unconditional include can be coded with a standalone INCLUDE statement or command.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
This section describes conditional INCLUDE commands by providing examples and discussing how each example is processed.&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 request illustrates the conditional INCLUDE command:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;BEGIN&lt;br /&gt;
ALL: FIND ALL RECORDS&lt;br /&gt;
     END FIND&lt;br /&gt;
     FOR EACH RECORD IN ALL&lt;br /&gt;
         IF AGE GT &#039;10&#039; THEN&lt;br /&gt;
             IF $SETG(&#039;AGE&#039;, &#039;YES&#039;) THEN&lt;br /&gt;
                 PRINT &#039;*** REQUEST TOO LONG - GTBL&#039;&lt;br /&gt;
                 STOP&lt;br /&gt;
             END IF&lt;br /&gt;
         END IF&lt;br /&gt;
     END FOR&lt;br /&gt;
END&lt;br /&gt;
IF AGE = YES, COUNT&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====How Example 1 is processed====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The statements between the BEGIN and END are compiled and evaluated. If the AGE condition is true, a global string variable is set. &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; then processes the IF command. Statements in the COUNT procedure are compiled and executed only if the condition is true. Otherwise, the statements are never compiled.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Example 2====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Suppose that you enter record selection criteria and then select one of three reports to be generated. A set of four procedures can be created.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
For example, procedure A might contain the prompts for record selection and report type. Procedures B, C, and D might contain statements to produce the individual reports. Only procedure A and one of the other three procedures is compiled and evaluated. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;PROCEDURE A&lt;br /&gt;
BEGIN&lt;br /&gt;
FIND.RECS: FIND ALL RECORDS FOR WHICH&lt;br /&gt;
               ??SELECT.RECORDS&lt;br /&gt;
           END FIND&lt;br /&gt;
           IF $SETG(&#039;REPORTNUM&#039;, $READ(&#039;ENTER REPORT NO&#039;))&lt;br /&gt;
               THEN PRINT &#039;*** REQUEST TOO LONG - GTBL&#039;&lt;br /&gt;
               STOP&lt;br /&gt;
           END IF&lt;br /&gt;
END MORE&lt;br /&gt;
IF REPORTNUM = 1, B&lt;br /&gt;
IF REPORTNUM = 2, C&lt;br /&gt;
IF REPORTNUM = 3, D&lt;br /&gt;
END PROCEDURE&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Procedures B, C, and D have the same basic format, but variations in processing are applied to each record.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;PROCEDURE B&lt;br /&gt;
MORE&lt;br /&gt;
PROCESS: FOR EACH RECORD IN FIND.RECS&lt;br /&gt;
             .&lt;br /&gt;
             .&lt;br /&gt;
             .&lt;br /&gt;
         processing&lt;br /&gt;
             .&lt;br /&gt;
             .&lt;br /&gt;
             .&lt;br /&gt;
         END FOR PROCESS&lt;br /&gt;
END&lt;br /&gt;
END PROCEDURE&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====How Example 2 is processed====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The dialog produced by these procedures is shown below, with user input in boldface: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;b&amp;gt;INCLUDE A&amp;lt;/b&amp;gt;&lt;br /&gt;
??SELECT.RECORDS&lt;br /&gt;
&amp;lt;b&amp;gt;REGION = SOUTH OR WEST&amp;lt;/b&amp;gt;&lt;br /&gt;
$$ENTER REPORT NO&lt;br /&gt;
&amp;lt;b&amp;gt;2&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;i&amp;gt;output from Procedure C &amp;lt;/i&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Keep IF commands at as high a nesting level as possible====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
An alternate method of writing procedures is to follow each report&#039;s END MORE statement with IF commands. However, each procedure might then INCLUDE itself or another procedure, creating a lower level of nesting. If the procedure continued to INCLUDE itself, the maximum nesting level would be reached. As a general rule in a complex set of procedures, keep IF commands at as high a nesting level as possible. The global string variables to be tested can be set at any level.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
==Using global string variables to tailor a request==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Global string variables can be used in conjunction with the FILE$ condition (see [[Record retrievals#FILE$ condition|FILE$ condition]]) to access a set of files in a group. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Example====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
In the following example, the value of the global string variable, FILES, can be changed to access an alternative set of files. This example consists of two requests. The first &amp;amp;mdash; BEGIN through END MORE &amp;amp;mdash; sets the global string variable during the execution phase; the second &amp;amp;mdash; MORE through END &amp;amp;mdash; is then compiled with the correct value.   &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;
           IF $SETG(&#039;FILES&#039;,&#039;FILEA OR FILE$ FILEC&#039;) THEN&lt;br /&gt;
               PRINT &#039;***REQUEST TOO LONG -- GTBL&#039;&lt;br /&gt;
               %IGNORE = $SETG(&#039;FILES&#039;, &amp;amp;apos;&amp;amp;apos;)&lt;br /&gt;
           END IF&lt;br /&gt;
END MORE&lt;br /&gt;
MORE&lt;br /&gt;
           IF $GETG(&#039;files&#039;) = &amp;amp;apos;&amp;amp;apos; THEN&lt;br /&gt;
               STOP&lt;br /&gt;
           END IF&lt;br /&gt;
 GET.A:    FIND ALL RECORDS FOR WHICH&lt;br /&gt;
              (FILE$ ?&amp;amp;amp;FILES) AND FIELDX = &#039;A&#039;&lt;br /&gt;
           END FIND&lt;br /&gt;
           FOR EACH RECORD IN GET.A&lt;br /&gt;
               PRINT ALL INFORMATION&lt;br /&gt;
           END FOR&lt;br /&gt;
END&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
==Global objects==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Global objects include found sets, images, lists, menus, positions, screens, and sorted sets. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===General rules for declarations===&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;You must declare global lists, found sets, and sorted sets in every request that references them; the &amp;lt;var&amp;gt;Declare&amp;lt;/var&amp;gt; statement must come before the reference. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;If a global object is used in multiple subroutines, or in both the main program and a subroutine, the label must be declared as global in the main program before the subroutine(s). The subroutine(s) must then declare the label as common. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;If you refer to a global object before a &amp;lt;var&amp;gt;Declare&amp;lt;/var&amp;gt; statement, the system issues a duplicate label compilation error. Such a reference implicitly makes the object non global. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Incompatibility===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The [[PQO]] product does not support global found sets, lists, positions, or sorted sets. These global objects cannot be used in conjunction with remote files or scattered groups. This limitation exists, because GTBL does not exist on the PQO server. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Clearing global objects from GTBL===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
For syntax, details and examples of clearing global objects, see [[#Clearing the GTBL work area|Clearing the GTBL work area]]. &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Using global found sets and lists==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can pass found sets and lists from request to request by declaring them as &amp;lt;var&amp;gt;Global&amp;lt;/var&amp;gt;. A global found set or list is stored in the internal work area GTBL for the duration of the terminal session unless it is intentionally cleared, or the file or group with which it is associated is closed. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Creating a global found set or sorted set====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can create a global found set using this syntax: &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;[Declare] Label &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;labelname&amp;lt;/span&amp;gt; [Global | Common] &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;labelname&amp;lt;/var&amp;gt; is a unique global object name.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Creating a global list====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can declare a global list using the following syntax:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;[Declare] List &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;listname&amp;lt;/span&amp;gt; &lt;br /&gt;
  [In [File [Perm | Temp] Group] &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;name&amp;lt;/span&amp;gt;]&lt;br /&gt;
  [Global | Common] &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
In both cases, the keyword &amp;lt;var&amp;gt;Global&amp;lt;/var&amp;gt; implies &amp;lt;var&amp;gt;Common&amp;lt;/var&amp;gt;. These two keywords are mutually exclusive in the declaration statement. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Because &amp;lt;var&amp;gt;Global&amp;lt;/var&amp;gt; implies &amp;lt;var&amp;gt;Common&amp;lt;/var&amp;gt;, a list or found set can be declared &amp;lt;var&amp;gt;Global&amp;lt;/var&amp;gt; at any scope. See [[Subroutines#Scope of elements|Scope of elements]] for a discussion. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;The global name, label name, or list name, must be unique across all global objects. For a discussion, see [[Subroutines#Sharing common elements|Sharing common elements]]. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Usage rules====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The following rules apply to global found sets and lists: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;You must declare each global list or global found set as &amp;lt;code&amp;gt;&amp;lt;i&amp;gt;labelname&amp;lt;/i&amp;gt; Global&amp;lt;/code&amp;gt; in each procedure that uses it. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;The file context in which a global list or found set is used must be the same as the file context in which it was created. &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; compiler does not currently enforce this rule; therefore, your code must maintain this requirement. Rocket Software recommends that you populate a global found set or list only once within the scope of these global objects. However, this is not a restriction as long as file context is maintained. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Global found sets and lists are invalid in ad hoc group context. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Each global object name must be unique. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Global found sets and lists are not supported in remote file or scattered group contexts. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Example 1: Referencing a global found set===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
In this example, Procedure 1 declares the global found set and then performs the find. Procedure 2 needs only to declare the global found set and then reference the global found set labeled F1. The &amp;lt;var&amp;gt;For&amp;lt;/var&amp;gt; loops in both procedures process records in the &amp;lt;code&amp;gt;VEHICLES&amp;lt;/code&amp;gt; file for which the value of the field &amp;lt;code&amp;gt;COLOR&amp;lt;/code&amp;gt; was equal to &amp;lt;code&amp;gt;BLUE&amp;lt;/code&amp;gt; at the time of the evaluation of the &amp;lt;var&amp;gt;Find&amp;lt;/var&amp;gt; statement in Procedure 1. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;b&amp;gt;Procedure 1&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;BEGIN&lt;br /&gt;
DECLARE LABEL F1 GLOBAL&lt;br /&gt;
F1: IN VEHICLES FIND ALL RECORDS WHERE COLOR = &#039;BLUE&#039;&lt;br /&gt;
    END FIND&lt;br /&gt;
    FOR EACH RECORD IN F1&lt;br /&gt;
       PAI&lt;br /&gt;
    END FOR&lt;br /&gt;
END&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;b&amp;gt;Procedure 2&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;BEGIN&lt;br /&gt;
DECLARE LABEL F1 GLOBAL&lt;br /&gt;
    FOR EACH RECORD IN F1&lt;br /&gt;
       PAI&lt;br /&gt;
    END FOR&lt;br /&gt;
END&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Example 2: Maintaining file context===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Example 2 illustrates repopulating a global found set across the scope of its usage, maintaining the same file context throughout. In this example, Procedure 1 is identical to Procedure 1 in Example 1 above, and Procedure 3 is identical to Procedure 2 in Example 1. The second procedure in this example, however, performs a different find than the first. Procedure 3 then processes the records found in Procedure 2. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
So in this example, Procedure 1 processes records in the &amp;lt;code&amp;gt;VEHICLES&amp;lt;/code&amp;gt; file for which the value of the field &amp;lt;code&amp;gt;COLOR&amp;lt;/code&amp;gt; is equal to &amp;lt;code&amp;gt;BLUE&amp;lt;/code&amp;gt;, while Procedures 2 and 3 process records for which &amp;lt;code&amp;gt;COLOR&amp;lt;/code&amp;gt; was equal to &amp;lt;code&amp;gt;RED&amp;lt;/code&amp;gt; at the time of the &amp;lt;var&amp;gt;Find&amp;lt;/var&amp;gt; statement evaluation in Procedure 2. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;b&amp;gt;Procedure 1&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;BEGIN&lt;br /&gt;
DECLARE LABEL F1 GLOBAL&lt;br /&gt;
F1: IN VEHICLES FIND ALL RECORDS WHERE COLOR = &#039;BLUE&#039;&lt;br /&gt;
    END FIND&lt;br /&gt;
    FOR EACH RECORD IN F1&lt;br /&gt;
       PAI&lt;br /&gt;
    END FOR&lt;br /&gt;
END&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;b&amp;gt;Procedure 2&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;BEGIN&lt;br /&gt;
DECLARE LABEL F1 GLOBAL&lt;br /&gt;
F1: IN VEHICLES FIND ALL RECORDS WHERE COLOR = &#039;RED&#039;&lt;br /&gt;
    END FIND&lt;br /&gt;
    FOR EACH RECORD IN F1&lt;br /&gt;
       PAI&lt;br /&gt;
    END FOR&lt;br /&gt;
END&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;b&amp;gt;Procedure 3&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;BEGIN&lt;br /&gt;
DECLARE LABEL F1 GLOBAL&lt;br /&gt;
    FOR EACH RECORD IN F1&lt;br /&gt;
       PAI&lt;br /&gt;
    END FOR&lt;br /&gt;
END&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
==Using global sorted sets==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
A global sorted set is created when a SORT RECORDS statement or a FOR EACH RECORD IN ORDER BY statement is preceded by a label that has been declared GLOBAL. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Limiting subsequent references===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
For example, in Procedure 1 below, MAKE is the only field referenced in the request. Therefore, MAKE is the only field that can be referenced in subsequent requests. Thus, in Procedure 2, because the field MODEL was not referenced in the previous request, a blank is printed each time through the FOR loop. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Procedure 1====&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;BEGIN&lt;br /&gt;
DECLARE LABEL S1 GLOBAL&lt;br /&gt;
F1: IN VEHICLES FIND ALL RECORDS&lt;br /&gt;
    END FIND&lt;br /&gt;
S1: SORT RECORDS IN F1 BY MAKE&lt;br /&gt;
    FOR EACH RECORD IN S1&lt;br /&gt;
       PRINT MAKE&lt;br /&gt;
    END FOR&lt;br /&gt;
END&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Procedure 2====&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;BEGIN&lt;br /&gt;
DECLARE LABEL S1 GLOBAL&lt;br /&gt;
    FOR EACH RECORD IN S1&lt;br /&gt;
       PRINT MODEL&lt;br /&gt;
    END FOR&lt;br /&gt;
END&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Keeping all fields accessible for subsequent references===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
To ensure that all fields are accessible to subsequent requests, use a PAI or field name variable with the statement that creates the found set.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The sort key field(s) used on the SORT statement cannot be referred to by a subsequent request unless referred to in the SORT statement FOR loop in the request creating the set. While this restriction applies to the use of the SORT RECORDS statement, it does not apply to the use of the SORT RECORD KEYS statement.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If you are not going to refer to the sorted set in the request that creates the sorted set, you can code a FOR loop, which is compiled but never executed, that refers to each field that you want to refer to in a subsequent request. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
==Saving and recalling a position in a For loop==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can include statements in a &amp;lt;var&amp;gt;For&amp;lt;/var&amp;gt; loop to provide for the possibility of terminating the loop before the set of records or values being processed is exhausted. For example, you might use a &amp;lt;var&amp;gt;Jump To&amp;lt;/var&amp;gt; or &amp;lt;var&amp;gt;Loop End&amp;lt;/var&amp;gt; statement in conjunction with an &amp;lt;var&amp;gt;If&amp;lt;/var&amp;gt; statement to test each record or value before processing, and terminating the loop if a certain condition is met. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The &amp;lt;var&amp;gt;Remember&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;Position&amp;lt;/var&amp;gt; statements let you store the current processing position in a &amp;lt;var&amp;gt;For&amp;lt;/var&amp;gt; loop, then recall it at a later time and resume &amp;lt;var&amp;gt;For&amp;lt;/var&amp;gt; processing where you left off earlier. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Remember statement===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The purpose of the &amp;lt;var&amp;gt;Remember&amp;lt;/var&amp;gt; statement is to store the processing position in a &amp;lt;var&amp;gt;For&amp;lt;/var&amp;gt; loop. Each &amp;lt;var&amp;gt;Remember&amp;lt;/var&amp;gt; statement creates a GTBL entry of variable length. See [[Large request considerations]] for detailed descriptions of GTBL entries. If you remember a position as &amp;lt;var&amp;gt;Global&amp;lt;/var&amp;gt;, the entry remains in GTBL after the current request ends. &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; clears non-global &amp;lt;var&amp;gt;Remember&amp;lt;/var&amp;gt; positions at the end of each request.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Syntax====&lt;br /&gt;
{{Template:Remember statement syntax}}&lt;br /&gt;
Where:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The &amp;lt;var&amp;gt;Global&amp;lt;/var&amp;gt; option implies &#039;&#039;&#039;PERM&#039;&#039;&#039; and the position is retained in GTBL after the current request terminates. If &amp;lt;var&amp;gt;Global&amp;lt;/var&amp;gt; is not specified, &#039;&#039;&#039;TEMP&#039;&#039;&#039; is implied and the position is cleared from GTBL after the current request terminates.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;b&amp;gt;NOTE:&amp;lt;/B&amp;gt; The use of GLOBAL here must be consistent with the CLEAR GLOBAL POSITION statement.  If the latter is specified with PERM:&amp;lt;/p&amp;gt; &lt;br /&gt;
&amp;lt;p&amp;gt;CLEAR GLOBAL POSITION &amp;lt;b&amp;gt;PERM&amp;lt;/b&amp;gt; &#039;position_name&#039;,&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;then the REMEMBER statement must specify GLOBAL because it implies PERM.&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;position_name&amp;lt;/var&amp;gt; is a unique object name you assign to the &amp;lt;var&amp;gt;Remember&amp;lt;/var&amp;gt; position. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;b&amp;gt;NOTE:&amp;lt;/b&amp;gt;If the &#039;position_name&#039; is mixed or lower case, be sure to enclose it here in single quotation marks.  Do the same when referring to that name in other statements; e.g. CLEAR or POSITION.&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;foundsortset_name&amp;lt;/var&amp;gt; or &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;list_name&amp;lt;/var&amp;gt; must be identical to the listname or label specified on the &amp;lt;var&amp;gt;For&amp;lt;/var&amp;gt; loop:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;If you are processing a found set or a sorted set, &amp;lt;code&amp;gt;In &amp;lt;i&amp;gt;foundsortset_name&amp;lt;/i&amp;gt;&amp;lt;/code&amp;gt; is the label of the &amp;lt;var&amp;gt;Find&amp;lt;/var&amp;gt; statement that generated it. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;If you are processing a list, &amp;lt;code&amp;gt;On &amp;lt;i&amp;gt;list_name&amp;lt;/i&amp;gt;&amp;lt;/code&amp;gt; is the name you gave to the list when you originally declared it. &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;
====Usage notes====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The following rules apply to the use of the &amp;lt;var&amp;gt;Remember&amp;lt;/var&amp;gt; statement:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Can appear only within a &amp;lt;var&amp;gt;For&amp;lt;/var&amp;gt; loop, but not a nested &amp;lt;var&amp;gt;For&amp;lt;/var&amp;gt; loop. The file context must be identical to the context of the &amp;lt;var&amp;gt;For&amp;lt;/var&amp;gt; loop. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Is invalid in ad hoc group context, if used with the &amp;lt;var&amp;gt;Global&amp;lt;/var&amp;gt; option. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;The &amp;lt;var&amp;gt;Remember&amp;lt;/var&amp;gt; statement is incompatible with &amp;lt;var&amp;gt;For Each Record In Order By&amp;lt;/var&amp;gt; clauses. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Position statement===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
A &amp;lt;var&amp;gt;Position&amp;lt;/var&amp;gt; statement recalls a remembered position, so you can resume &amp;lt;var&amp;gt;For&amp;lt;/var&amp;gt; processing in a list or found set that was terminated at an earlier time. For example, if you remembered the position at record number 5, then your foundset is positioned at record number 6 for further processing.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
This &amp;lt;var&amp;gt;Position&amp;lt;/var&amp;gt; statement is not to be confused with the &amp;lt;var&amp;gt;Position&amp;lt;/var&amp;gt; statement used to read records sequentially in an external VSAM KSDS file. See [[Images#Position statement|Position statement]]. &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;Position {Foundset &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;foundsortset_name&amp;lt;/span&amp;gt; | List &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;list_name&amp;lt;/span&amp;gt;} [At] &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;position_name&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
Where:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;foundsortset_name&amp;lt;/var&amp;gt; or &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;list_name&amp;lt;/var&amp;gt; must be identical to the list or label name used on a previous &amp;lt;var&amp;gt;Remember&amp;lt;/var&amp;gt; statement and in the &amp;lt;var&amp;gt;For&amp;lt;/var&amp;gt; statement that follows. &lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If you are about to resume the processing of a found set, &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;foundsortset_name&amp;lt;/var&amp;gt; is the label of the &amp;lt;var&amp;gt;Find&amp;lt;/var&amp;gt; statement that generated it. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If you are about to resume the processing of a list, &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;list_name&amp;lt;/var&amp;gt; is the name you gave to the list when you originally declared it.&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;position_name&amp;lt;/var&amp;gt; is a name that you assigned to the remembered position when you stored it on a previous &amp;lt;var&amp;gt;Remember&amp;lt;/var&amp;gt; statement. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;b&amp;gt;NOTE:&amp;lt;/b&amp;gt;If the &#039;position_name&#039; is mixed or lower case, be sure to enclose it here in single quotes.  Do the same when referring to that name in other statements; e.g. CLEAR or REMEMBER.&amp;lt;/p&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 following rules apply:&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;Position&amp;lt;/var&amp;gt; statement must appear outside, immediately before the &amp;lt;var&amp;gt;For&amp;lt;/var&amp;gt; loop to which it refers; it cannot be in the &amp;lt;var&amp;gt;For&amp;lt;/var&amp;gt; loop itself.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;The &amp;lt;var&amp;gt;For&amp;lt;/var&amp;gt; statement that follows the &amp;lt;var&amp;gt;Position&amp;lt;/var&amp;gt; statement must have an identical file context and list name or label name as the statement that initiated the &amp;lt;var&amp;gt;For&amp;lt;/var&amp;gt; loop of the remembered position.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;The &amp;lt;var&amp;gt;Position&amp;lt;/var&amp;gt; statement is incompatible with &amp;lt;var&amp;gt;For Each Record In Order By&amp;lt;/var&amp;gt; clauses. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
==Global images and screens==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can use global images and screens to pass image and screen data from one request to another and to efficiently manage more than one image or screen in one request. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can also declare global menus, because a menu is a special type of screen. In this section, the term &amp;quot;screen&amp;quot; applies to both screens and menus, unless otherwise noted. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Declaring global images and screens===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You make an image or screen global by specifying the keyword &amp;lt;var&amp;gt;Global&amp;lt;/var&amp;gt; in its declaration statement. You can declare global images and screens to be &amp;lt;var&amp;gt;Temporary&amp;lt;/var&amp;gt;, deleted at request termination, or &amp;lt;var&amp;gt;Permanent&amp;lt;/var&amp;gt;, persist across request termination. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===How images and screens are processed===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When you declare an image or screen as &amp;lt;var&amp;gt;Global&amp;lt;/var&amp;gt;, it is stored in GTBL. Nonglobal images and screens, declared as &amp;lt;var&amp;gt;Common&amp;lt;/var&amp;gt;, or neither &amp;lt;var&amp;gt;Common&amp;lt;/var&amp;gt; nor &amp;lt;var&amp;gt;Global&amp;lt;/var&amp;gt;, are stored in FSCB. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
This section provides some background information about how &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; processes images and screens, contrasting how global and nonglobal images and screens are processed. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Images and screen processing===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The figures in the following subsections represent how nonglobal and global objects are processed. Comparing the two types of processing highlights the I/O and storage savings associated with the global images and screens. &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Processing of nonglobal objects====&lt;br /&gt;
&amp;lt;p class=&amp;quot;figure&amp;quot;&amp;gt;[[File:Nonglobal_object_processing.png|550px]] &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The &amp;lt;b&amp;gt;Nonglobal object processing&amp;lt;/b&amp;gt; figure illustrates the process in the following steps:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The compiler loads a compiled version of the screen or image into FSCB in the user&#039;s server.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;A copy of the compiled object is stored in the buffer pool.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;A &amp;lt;var&amp;gt;Prepare&amp;lt;/var&amp;gt; statement acts on the compiled object in the buffer pool and copies it into FSCB.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Update statements act on the copy of the object in FSCB.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;The updated object is copied from FSCB to a working copy of the object in the buffer pool.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;If a user waits too long or the buffer pool fills up, the object is written to CCATEMP. When a user presses Enter for that object, the object is loaded back from CCATEMP to the buffer pool. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;amp;nbsp;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Processing of global objects==== &lt;br /&gt;
&amp;lt;p class=&amp;quot;figure&amp;quot;&amp;gt;[[File:Global_object_processing.png|550px]] &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The &amp;lt;b&amp;gt;Global object processing&amp;lt;/b&amp;gt; figure illustrates the process in the following steps: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The compiler loads a compiled version of the screen or image into FSCB in the user&#039;s server. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;A copy of the compiled object is stored in the buffer pool. This copy is called &#039;VIRGIN&#039;, as it is never updated. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;A &amp;lt;var&amp;gt;Prepare&amp;lt;/var&amp;gt; statement acts on the compiled object in the buffer pool and copies it into GTBL. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Update statements act on the copy in GTBL. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Using Prepare and Identify statements===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
To help you decide how to use the &amp;lt;var&amp;gt;Prepare&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;Identify&amp;lt;/var&amp;gt; statements, review the following:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[[#GTBL internal work area|GTBL internal work area]] &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;[[#Timing and placement of a CLEAR statement|Timing and placement of a CLEAR statement]] &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;For syntax and usage of the &amp;lt;var&amp;gt;Prepare&amp;lt;/var&amp;gt; statement, see [[Full-screen feature#PREPARE statement|Prepare statement]]&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;For syntax and usage of the &amp;lt;var&amp;gt;Identify&amp;lt;/var&amp;gt; statement, see [[Images#Identify statement|Identify statement]] &lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Also when using the &amp;lt;var&amp;gt;Identify&amp;lt;/var&amp;gt; statement, see [[#Consistency checks performed|Consistency checks performed]]. &amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Performance and efficiency benefits===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Global images and screens can simply and efficiently perform image-to-image processing and screen-to-image processing, eliminating the need to map screen items to image items when passing or preserving screens. Using global images and screens: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Reduces CPU resources required to pass data between requests in applications where a large number of global variables would have been necessary. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Reduces the FSCB I/O between multiple images and between images and screens. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Makes the declaration of global data explicit, thus traceable by using naming conventions and cross-reference tools. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Simplifies code, eliminating the need for &amp;lt;var&amp;gt;If $Setg() Then ...&amp;lt;/var&amp;gt; sequences to map request %variables into global variables and for &amp;lt;var&amp;gt;%xyz = $Getg()&amp;lt;/var&amp;gt; sequences to map global variables into request %variables. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Reduces I/O by swapping modified global screens to CCASERVR instead of paging them between the buffer pool and CCATEMP. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===When to use global images and screens===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You achieve the greatest benefit by declaring as &amp;lt;var&amp;gt;Global&amp;lt;/var&amp;gt; the most frequently used images and screens in an application. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Infrequently used images and screens declared as nonglobal do not put pressure on the buffer pool, because there would not be many copies in the buffer pool for many users, and little I/O with CCATEMP. If an application has many images and/or screens, GTBL might overflow if all the images and/or screens are defined as global. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Consistency checks performed===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When a global image or screen is first referred to in a request, GTBL is searched for the object. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If the object is&amp;lt;var&amp;gt; not&amp;lt;/var&amp;gt; already present in GTBL, the object is written into GTBL. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If the object is present, two consistency checks are performed:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Persistence &amp;amp;mdash; &amp;lt;var&amp;gt;Permanent&amp;lt;/var&amp;gt; or &amp;lt;var&amp;gt;Temporary&amp;lt;/var&amp;gt; status &amp;amp;mdash; of the new object must match the persistence of the object already in GTBL. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Definition &amp;amp;mdash; &amp;lt;var&amp;gt;Permanent&amp;lt;/var&amp;gt; or &amp;lt;var&amp;gt;Temporary&amp;lt;/var&amp;gt; &amp;amp;mdash; of the new object must match the definition of the object already in GTBL. &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; If a global image has an array that uses the &amp;lt;var&amp;gt;Depending On &amp;lt;i&amp;gt;%variable&amp;lt;/i&amp;gt;&amp;lt;/var&amp;gt; option, the names of the %variables are not compared when the definition check is performed. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If either of these consistency checks fails &amp;amp;mdash; for example, an image is declared as &amp;lt;var&amp;gt;Temporary&amp;lt;/var&amp;gt;, but the same image already exists in GTBL, declared as &amp;lt;var&amp;gt;Permanent&amp;lt;/var&amp;gt; &amp;amp;mdash; then the request is canceled and the [[M204.2158]] message is generated: &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;Global &amp;lt;i&amp;gt;object-type&amp;lt;/i&amp;gt; definition doesn&#039;t match value in GTBL​,​ &amp;lt;i&amp;gt;error-description&amp;lt;/i&amp;gt;, name hash=&amp;lt;i&amp;gt;hash-code&amp;lt;/i&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Using global images and screens==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The following example illustrates using global images and screens to pass screen and image data between User Language requests. The example consists of the following procedures:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SCREENDEF defines a global screen.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;IMAGEDEF defines a global image.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;PROCA sets the screen item value and an image item value.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;PROCB displays the updated image item and the original screen item. &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;PROCEDURE SCREENDEF&lt;br /&gt;
   * KEEP GLOBAL SCREENS AND IMAGES IN SEPARATE PROCEDURES&lt;br /&gt;
   * FOR CENTRAL DEFINITION&lt;br /&gt;
   SCREEN SCREEN1 GLOBAL&lt;br /&gt;
      PROMPT &#039;SCREEN1&#039;&lt;br /&gt;
      INPUT ITEM NUMERIC LEN 4 AT 10&lt;br /&gt;
   END SCREEN&lt;br /&gt;
END PROCEDURE&lt;br /&gt;
 &lt;br /&gt;
PROCEDURE IMAGEDEF&lt;br /&gt;
   * KEEP GLOBAL SCREENS AND IMAGES IN SEPARATE PROCEDURES&lt;br /&gt;
   * FOR CENTRAL DEFINITION&lt;br /&gt;
   IMAGE IMAGE1 GLOBAL&lt;br /&gt;
      ITEM IS FLOAT LEN 8&lt;br /&gt;
   END IMAGE&lt;br /&gt;
END PROCEDURE&lt;br /&gt;
 &lt;br /&gt;
PROCEDURE PROCA&lt;br /&gt;
   BEGIN&lt;br /&gt;
   INCLUDE SCREENDEF&lt;br /&gt;
   INCLUDE IMAGEDEF&lt;br /&gt;
   * INITIALIZE SCREEN1 AND IMAGE1&lt;br /&gt;
   PREPARE SCREEN SCREEN1&lt;br /&gt;
   PREPARE IMAGE IMAGE1&lt;br /&gt;
   * USER SEES SCREEN1 AND ENTERS A VALUE N (E.G., 10) AS INPUT&lt;br /&gt;
   READ SCREEN SCREEN1&lt;br /&gt;
   %IMAGE1:ITEM = %SCREEN1:ITEM + 3&lt;br /&gt;
   END&lt;br /&gt;
END PROCEDURE&lt;br /&gt;
 &lt;br /&gt;
PROCEDURE PROCB&lt;br /&gt;
   BEGIN&lt;br /&gt;
   INCLUDE SCREENDEF&lt;br /&gt;
   INCLUDE IMAGEDEF&lt;br /&gt;
   * DO NOT INITIALIZE, JUST IDENTIFY FOR SUBSEQUENT REFERRAL&lt;br /&gt;
   IDENTIFY IMAGE IMAGE1&lt;br /&gt;
      * USER SEES UPDATED IMAGE ITEM (N+3) IN NEW REQUEST&lt;br /&gt;
   PRINT &#039;IMAGE ITEM = &#039; WITH %IMAGE1:ITEM&lt;br /&gt;
   * USER SEES ORIGINAL SCREEN ITEM WITH DATA THAT USER ENTERED&lt;br /&gt;
   READ SCREEN SCREEN1&lt;br /&gt;
   END&lt;br /&gt;
END PROCEDURE&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; You can run several procedures between PROCA and PROCB with the same results as if you ran those two procedures sequentially, because the defined global objects persist.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===System administration issues===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
To review the implications of the global images and screens feature for system administrators, see the following topics:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;GTBL size &amp;amp;mdash; [[Large request considerations#GTBL (global variable table)|GTBL (global variable table)]], [[Defining the runtime environment (CCAIN)#Understanding the global variable table (GTBL)|Understanding the global variable table (GTBL)]], and [[GTBLHASH parameter]]&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;VTBL usage with COMMON images and screens &amp;amp;mdash; [[Large request considerations#VTBL (compiler variable table)|VTBL (compiler variable table)]] and [[Defining the runtime environment (CCAIN)#Compiler variable table (VTBL)|Compiler variable table (VTBL)]]&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;User since-last statistics &amp;amp;mdash; [[Using system statistics#User since-last statistics|User since-last statistics]] &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
==Clearing the GTBL work area==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When you log off, all global objects and global variables are cleared. If you want to clear some or all global objects or global variables from GTBL during your working session, prior to logging out, you can issue: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;CLEAR statement &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;CLEARG and/or CLEARGO commands&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;$DELG function to selectively delete global string variables&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;RESET command for the GTBLEHASH and GTBLPCT parameters&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;UTABLE command that changes the size of FTBL, XTBL, or GTBL clears all global objects of any type&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Using the CLEARG and CLEARGO commands===&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;Use this command &amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;To Remove...&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;[[CLEARG command|CLEARG]]&amp;lt;/var&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Only global string 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;&amp;lt;var&amp;gt;[[CLEARGO command|CLEARGO]]&amp;lt;/var&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;All global objects: images, screens, menus, found sets, lists, and temporary and permanent positions from GTBL; it does not clear global string variables. &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 &amp;lt;var&amp;gt;CLEARGO&amp;lt;/var&amp;gt; command takes no arguments.&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Using the $DELG function===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can use the &amp;lt;var&amp;gt;[[$Delg]]&amp;lt;/var&amp;gt; function to delete global string variables created by either &amp;lt;var&amp;gt;[[$Setg]]&amp;lt;/var&amp;gt; or &amp;lt;var&amp;gt;[[$Incrg]]&amp;lt;/var&amp;gt;. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The &amp;lt;var&amp;gt;[[$Delg]]&amp;lt;/var&amp;gt; function deletes a single or group of similar global string variables, releasing and compacting the GTBL space for reuse. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Using the CLEAR statement===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can use the &amp;lt;var&amp;gt;Clear&amp;lt;/var&amp;gt; statement to clear global objects of the same type, an individual global object, or all global string variables, as shown 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;The statement &amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Clears...&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td nowrap&amp;gt;&amp;lt;var&amp;gt;Clear &amp;lt;i&amp;gt;type-of-object&amp;lt;/i&amp;gt; Objects&amp;lt;/var&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;A class of global objects or all global objects. Global string variables are not cleared, because they are not objects. &amp;lt;/td&amp;gt;&lt;br /&gt;
&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;Clear Global&amp;lt;/var&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Individual global objects from GTBL. &amp;lt;/td&amp;gt;&lt;br /&gt;
&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;Clear Globals&amp;lt;/var&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;All global string variables. You cannot selectively clear individual global string variables with the &amp;lt;var&amp;gt;Clear&amp;lt;/var&amp;gt; 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;
====Syntax====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The format for the &amp;lt;var&amp;gt;Clear&amp;lt;/var&amp;gt; statement is:&amp;lt;/p&amp;gt;&lt;br /&gt;
{{Template:Clear statement syntax}}&lt;br /&gt;
Where:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;All&amp;lt;/var&amp;gt; clears all permanent and temporary global objects, including: found sets, lists, images, menus, positions, screens, and sorted sets from GTBL. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Temp&amp;lt;/var&amp;gt; clears only global objects explicitly declared as &amp;lt;var&amp;gt;Temp&amp;lt;/var&amp;gt; in your request, including images, menus, and screens from GTBL. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;ListFdst&amp;lt;/var&amp;gt; clears all global found sets, lists, and sorted sets from GTBL. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Position&amp;lt;/var&amp;gt; clears all permanent and temporary positions from GTBL. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Objects&amp;lt;/var&amp;gt; specifies that the &amp;lt;var&amp;gt;CLEAR&amp;lt;/var&amp;gt; command is operating on the object type you specified, or operating on all types of objects. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Global&amp;lt;/var&amp;gt; clears a specific global object from GTBL. You cannot clear a global string variable created with the &amp;lt;var&amp;gt;$Setg&amp;lt;/var&amp;gt; function using this form. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Position [Perm | Temp]&amp;lt;/var&amp;gt; The use of PERM or TEMP must be consistent with GLOBAL in the REMEMBER statement.  If GLOBAL is specified in the REMEMBER statement, then PERM is implied.  If GLOBAL is omitted from the REMEMBER statement, TEMP is implied.&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;objectname&amp;lt;/var&amp;gt; is the literal name of the specific global object to be cleared from GTBL. Enclose &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;objectname&amp;lt;/var&amp;gt; in single quotation marks.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;b&amp;gt;NOTE:&amp;lt;/b&amp;gt; If the &amp;lt;i&amp;gt;objectname&amp;lt;/i&amp;gt; is mixed case, be sure to use the same name, in single quotation marks, when referring to that name in other statements; e.g. REMEMBER or POSITION.&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;%variable&amp;lt;/var&amp;gt; contains a value that specifies the global object to be cleared from GTBL. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Globals&amp;lt;/var&amp;gt; clears all global string variables created with the &amp;lt;var&amp;gt;$Setg&amp;lt;/var&amp;gt; function from GTBL. This form does &amp;lt;em&amp;gt;not&amp;lt;/em&amp;gt; clear any global objects. &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 following statements clear all permanent and temporary global found sets, images, lists, menus, positions, screens, and sorted sets:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;Clear Objects&lt;br /&gt;
 &lt;br /&gt;
Clear All Objects&lt;br /&gt;
 &lt;br /&gt;
Clear All Global Objects&lt;br /&gt;
 &lt;br /&gt;
Clear Global Objects&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Clearing global found sets and lists===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can clear global found sets and lists in GTBL without logging off using the following examples: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Clear a specific global list or found set by issuing one of these statements:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;Clear Global List &#039;&amp;lt;i&amp;gt;objectname&amp;lt;/i&amp;gt;&#039;&lt;br /&gt;
 &lt;br /&gt;
Clear Global List &amp;lt;i&amp;gt;%variable&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
Clear Global Foundset &#039;&amp;lt;i&amp;gt;objectname&amp;lt;/i&amp;gt;&#039;&lt;br /&gt;
 &lt;br /&gt;
Clear Global Foundset &amp;lt;i&amp;gt;%variable&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;Clear all global found sets and lists with the statement: &lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;Clear ListFdst [Global] Objects &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
(Global found sets and lists are among the global objects cleared by the &amp;lt;var&amp;gt;CLEARGO&amp;lt;/var&amp;gt; command.) &amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Close a file or group with which a global list or found set is associated. This includes the file close processing done when exiting or stopping a subsystem. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Issue a &amp;lt;var&amp;gt;UTABLE&amp;lt;/var&amp;gt; command that changes the size of FTBL, XTBL, or GTBL. &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 you clear a global list or global found set, then any request that uses the global and does not have the &amp;lt;var&amp;gt;Find&amp;lt;/var&amp;gt; statement that creates the global object receives either of the following error messages:&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;M204.0301 Referenced statement label undefined&lt;br /&gt;
 &lt;br /&gt;
M204.0311 Unacceptable statement reference&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===RELEASE and COMMIT RELEASE statements with global foundsets and lists===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The &amp;lt;var&amp;gt;Release&amp;lt;/var&amp;gt; statements and the &amp;lt;var&amp;gt;Commit Release&amp;lt;/var&amp;gt; statements empty the contents of a global found set, global sort set, or global list. The label and positions associated with a found set, sort set, or the list is still considered global, but it is empty. Global positions are not cleared by &amp;lt;var&amp;gt;Release&amp;lt;/var&amp;gt; or &amp;lt;var&amp;gt;Commit Release&amp;lt;/var&amp;gt; statements, however, without records there is nothing to process.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Clearing remembered positions===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Each &amp;lt;var&amp;gt;Remember&amp;lt;/var&amp;gt; statement creates a GTBL entry, whether or not &amp;lt;var&amp;gt;Global&amp;lt;/var&amp;gt; is specified. If GLOBAL is not specified, the position is temporary and is cleared from GTBL at the end of request execution.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
All remembered positions, along with all other GTBL entries, are cleared when you log off. You can also clear remembered positions in the following ways:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;You can clear a specific temporary position by issuing one of these statements:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;Clear Global Position Temp &#039;&amp;lt;i&amp;gt;objectname&amp;lt;/i&amp;gt;&#039;&lt;br /&gt;
 &lt;br /&gt;
Clear Global Position Temp &amp;lt;i&amp;gt;%variable&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;You can clear a specific permanent position by issuing one of these statements: &lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;Clear Global Position Perm &#039;&amp;lt;i&amp;gt;objectname&amp;lt;/i&amp;gt;&#039;&lt;br /&gt;
 &lt;br /&gt;
Clear Global Position Perm &amp;lt;i&amp;gt;%variable&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;You clear all global found sets, lists, or sorted sets with which a remembered position is associated:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;Clear ListFdst [Global] Objects&lt;br /&gt;
&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;You clear all remembered positions by issuing the statement:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;Clear Position [Global] Objects&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;
====Usage notes====&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;When you are using the &amp;lt;var&amp;gt;Clear Global Position&amp;lt;/var&amp;gt; statement, &amp;lt;var&amp;gt;Perm&amp;lt;/var&amp;gt; is the default. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;The &amp;lt;var&amp;gt;CLEARGO&amp;lt;/var&amp;gt; command has the effect of clearing all remembered positions.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Any &amp;lt;var&amp;gt;UTABLE&amp;lt;/var&amp;gt; command that changes the size of FTBL, GTBL, or XTBL clears all remembered positions.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Timing and placement of a Clear statement===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The &amp;lt;var&amp;gt;Clear Global&amp;lt;/var&amp;gt; statement takes effect at evaluation time and its placement in a request can have significant consequences: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;If the global object being cleared is referenced in the same request, it is marked as pending clear. The global is then emptied (zero records), and all its record locks are removed. It is cleared and deleted from GTBL at the end of 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;/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>JDamon</name></author>
	</entry>
	<entry>
		<id>https://m204wiki.rocketsoftware.com/index.php?title=Global_features&amp;diff=120846</id>
		<title>Global features</title>
		<link rel="alternate" type="text/html" href="https://m204wiki.rocketsoftware.com/index.php?title=Global_features&amp;diff=120846"/>
		<updated>2026-04-23T17:38:03Z</updated>

		<summary type="html">&lt;p&gt;JDamon: /* Syntax */&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;
&amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; offers several global features to store information in memory so that it is not automatically cleared between requests. The memory area for storing global information is a &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; internal work area or server table called the &amp;lt;b&amp;gt;global table&amp;lt;/b&amp;gt; or GTBL. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The global features are:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Global string variables&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Global objects&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Global found sets and lists&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Global screens, images, and menus&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Global positions&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Global information is available only to the user who creates it. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===GTBL internal work area===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Each user&#039;s GTBL is empty when the user logs in. GTBL accumulates global information that is available for the duration of the terminal session, unless you intentionally clear it. You can clear GTBL information selectively. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
For a discussion of GTBL space requirements, see [[Large request considerations#GTBL (global variable table)|GTBL (global variable table)]].&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Global items are stored in a specific order in GTBL. As shown in [[#GTBL internal work area|GTBL internal work area]], the area that stores global string variables is at the beginning of the table, and is built from the top down. The area that stores global objects is at the end of the table and is built from the bottom up. The unused or free space is between these two areas. &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;caption&amp;quot; style=&amp;quot;width:450px&amp;quot;&amp;gt;Storage of global variables and global objects in GTBL &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;figure&amp;quot;&amp;gt;[[File:Storage_of_global_vars_in_GTBL.png|450px]] &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Global string variables==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can use global string variables to: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Pass information from one request to another request&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Include procedures conditionally at the &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; command level&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Tailor a request dynamically &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;
As of Version 5.1, you can increase the speed and reduce the CPU time to find and update a global string variable by setting the &amp;lt;var&amp;gt;[[GTBLHASH parameter|GTBLHASH]]&amp;lt;/var&amp;gt; parameter to a nonzero value. The &amp;lt;var&amp;gt;GTBLHASH&amp;lt;/var&amp;gt; parameter specifies the number of buckets allocated in the global string variable section of GTBL.&lt;br /&gt;
When &amp;lt;var&amp;gt;GTBLHASH&amp;lt;/var&amp;gt; is a nonzero value, and you set or get a global string variable, the global string variable name is hashed to determine the bucket in which the name is located. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
This reduces the overall amount of data that must be scanned to find a global string variable or must be moved when a value is deleted or changes in size. If &amp;lt;var&amp;gt;GTBLHASH&amp;lt;/var&amp;gt; is 0, global string variables are processed as in pre-5.1 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;
The &amp;lt;var&amp;gt;[[GTBLPCT parameter|GTBLPCT]]&amp;lt;/var&amp;gt; parameter determines the initial percentage of GTBL to allocate for global string variables. The default value of &amp;lt;var&amp;gt;GTBLPCT&amp;lt;/var&amp;gt; is 50, meaning 50 percent of GTBL is initially allocated for global variable strings. The remainder, in this case 50 percent, is the initial allocation for global objects. However, if &amp;lt;var&amp;gt;GTBLHASH&amp;lt;/var&amp;gt; is 0, a nonzero setting for &amp;lt;var&amp;gt;GTBLPCT&amp;lt;/var&amp;gt; has no effect. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When in effect, if either area of GTBL fills and there are still free pages in GTBL, then GTBL can be rearranged if more space is required in the full area of GTBL. Because these rearrangements can be CPU intensive, Rocket Software recommends that you determine an accurate setting for &amp;lt;var&amp;gt;GTBLPCT&amp;lt;/var&amp;gt; to avoid frequent rearrangements. You can monitor the performance of the hash GTBL feature using the &amp;lt;code&amp;gt;GTBLRU&amp;lt;/code&amp;gt; user statistic and the &amp;lt;code&amp;gt;GTBLRS&amp;lt;/code&amp;gt; since-last statistic.&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Rearranging GTBL and tracking the rearrangements====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The following statistics are available as system statistics, user statistics and since-last statistics to keep track of GTBL rearrangements required for the hashed GTBL feature: &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;Statistic &amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Tracking&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;GTBLRU &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Number of GTBL rearrangements required to add a string variable global.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;GTBLRS &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Number of GTBL rearrangements required to add a global object. &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;
After reviewing the GTBLRU and GTBLRS statistics, you can consider taking the following actions: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;If both of these values are high, increase the size of GTBL by increasing &amp;lt;var&amp;gt;LGTBL&amp;lt;/var&amp;gt;. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;If GTBLRU is high but GTBLRS is not, increase &amp;lt;var&amp;gt;GTBLPCT&amp;lt;/var&amp;gt; or decrease &amp;lt;var&amp;gt;GTBLHASH&amp;lt;/var&amp;gt;. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;If GTBLRS is high but GTBLRU is low, decrease &amp;lt;var&amp;gt;GTBLPCT&amp;lt;/var&amp;gt;. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Global found sets and lists===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can use global found sets and lists to make found sets and lists available across request boundaries. A global found set or list remains in GTBL until you: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Explicitly delete it&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Issue a &amp;lt;var&amp;gt;Release&amp;lt;/var&amp;gt; or &amp;lt;var&amp;gt;Commit Release&amp;lt;/var&amp;gt; statement &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;The file or group it refers to is closed, including the file close processing done when exiting a subsystem or stopping &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Log out &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Sorted sets are a subgroup of found sets; they are treated the same by the &amp;lt;var&amp;gt;Clear&amp;lt;/var&amp;gt; statement that is used to clear global found sets.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Faster global variable processing option====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When global lists or found sets are processed as part of the &amp;lt;var&amp;gt;Find&amp;lt;/var&amp;gt; or &amp;lt;var&amp;gt;Place Records On&amp;lt;/var&amp;gt; statement, it must be verified that a global variable representing the list or found set exists in GTBL. The &amp;lt;var&amp;gt;CLEARG&amp;lt;/var&amp;gt; command or &amp;lt;var&amp;gt;Clear&amp;lt;/var&amp;gt; statement may delete the global variable, so an internal routine is called to verify whether the global variable is in GTBL. The internal routine creates a new copy, if it was deleted. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The internal routine scans NTBL to find an entry that points to the required variable, then it uses its hash value to scan GTBL. Scanning a large NTBL may take considerable time. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The NTBL scan can be eliminated, if internal variables representing global lists and found sets contain a global name hash value. Thus, an internal variable with a length of eight bytes that contains an NTBL entry offset points to the internal variable representing a global list or found set. This method avoids an NTBL scan, if a global variable has been deleted from GTBL. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
This faster global variable processing requires larger VTBL, because every global list or found set needs eight more bytes. If you want the benefit of this increased processing speed and can accommodate the increased VTBL requirement, set &amp;lt;var&amp;gt;FASTGLOB&amp;lt;/var&amp;gt; to 1. To maintain existing processing you can let &amp;lt;var&amp;gt;[[FASTGLOB parameter|FASTGLOB]]&amp;lt;/var&amp;gt; default to 0, or you can explicitly set &amp;lt;var&amp;gt;FASTGLOB&amp;lt;/var&amp;gt; to 0.&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Global positions===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can use &amp;lt;var&amp;gt;Remember&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;Position&amp;lt;/var&amp;gt; statements to save and recall a place in a &amp;lt;var&amp;gt;For&amp;lt;/var&amp;gt; loop, either globally or non-globally. This lets you suspend processing in a &amp;lt;var&amp;gt;For&amp;lt;/var&amp;gt; loop and resume it later, within the same request or in a subsequent request. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Global images and screens===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can use global images and screens to:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Pass image and screen data from one request to another&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Manage more than one image or screen in one request&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Manage menus, which are a special type of screen&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Reduce I/O by swapping modified global screens to CCASERVR instead of paging them between the buffer pool and CCATEMP &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Global string variables===&lt;br /&gt;
 &lt;br /&gt;
===Global string variable names and values===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Entries in the GTBL consist of global name=value pairs. The names and values of the global string variables are created with the &amp;lt;var&amp;gt;$Setg&amp;lt;/var&amp;gt; function from within a request. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;A global string variable name can consist of up to 255 characters and follows the naming conventions for variables (see [[Using variables and values in computation#%Variable names|%Variable names]]). Global string variables that contain special characters, other than a period (&amp;lt;tt&amp;gt;.&amp;lt;/tt&amp;gt;) cannot be used as &amp;lt;code&amp;gt;?&amp;amp;amp;&amp;lt;/code&amp;gt; dummy strings. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;A value can be 0, the null string, or up to 255 characters. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Clearing global string variables===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When a new value for an existing name is stored, the old entry is first deleted. Entries remain in the table until you delete them by issuing a &amp;lt;var&amp;gt;CLEARG&amp;lt;/var&amp;gt; command, execute a &amp;lt;var&amp;gt;Clear&amp;lt;/var&amp;gt; statement, execute a &amp;lt;var&amp;gt;$Delg&amp;lt;/var&amp;gt; function call, or you log out. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If you define a large number of global string variables, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; performance can be adversely affected. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
For details and examples of clearing global string variables, see [[#Clearing the GTBL work area|Clearing the GTBL work area]].&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Global variable functions and commands===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The following functions, statements, commands, and facilities manipulate entries in the global variable table: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Use the functions &amp;lt;var&amp;gt;[[$Setg]]&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;[[$Getg]]&amp;lt;/var&amp;gt; within a request to store and retrieve global string variables. Use &amp;lt;var&amp;gt;[[$Incrg]]&amp;lt;/var&amp;gt; to perform simple arithmetic on global string variables with numeric values. Use the &amp;lt;var&amp;gt;[[$Delg]]&amp;lt;/var&amp;gt; function to delete global string variables created by &amp;lt;var&amp;gt;$Setg&amp;lt;/var&amp;gt; or &amp;lt;var&amp;gt;$Incrg&amp;lt;/var&amp;gt;. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Use the &amp;lt;code&amp;gt;?&amp;amp;amp;&amp;lt;/code&amp;gt; dummy string within a request to read a variable in the GTBL. Refer to [[Procedures]] for more information about dummy strings. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Use the conditional &amp;lt;var&amp;gt;INCLUDE&amp;lt;/var&amp;gt; command (&amp;lt;code&amp;gt;IF A=B,&amp;lt;i&amp;gt;name&amp;lt;/i&amp;gt;&amp;lt;/code&amp;gt;) to search the global variable table for an entry whose name is A and whose value is &amp;lt;code&amp;gt;B&amp;lt;/code&amp;gt;. If the entry is found, the named procedure is included. The &amp;lt;var&amp;gt;IF&amp;lt;/var&amp;gt; command is discussed on [[#Conditional and unconditional INCLUDEs|Conditional and unconditional INCLUDEs]]. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Using global string variables in application subsystems===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
In addition to the above facilities, an application subsystem can designate specific global string variables in the subsystem definition. For more information about subsystem global string variables, refer to: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[[Application Subsystem development#Command line global variable|Command line global variable]] &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;[[Application Subsystem development#Communication global variable|Communication global variable]] &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;[[Application Subsystem development#Error global variable|Error global variable]] &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
==Passing string values from one request to another==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
It is often necessary to generate data in one request and to save the data for use in other independent requests to be run later in the terminal session. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Example 1====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Suppose that you want to store the current date in every record created during a session in YYMMDD format, a modified form of the value returned by the &amp;lt;var&amp;gt;$Date&amp;lt;/var&amp;gt; function. You can derive the date once at the beginning of the day and hold it for use throughout the day. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
At the beginning of the terminal session, you enter:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;BEGIN&lt;br /&gt;
    %DATE = $DATE&lt;br /&gt;
    %DATE = $SUBSTR(%DATE, 1, 2) -&lt;br /&gt;
         WITH $SUBSTR(%DATE, 4, 2) WITH -&lt;br /&gt;
         $SUBSTR(%DATE, 7, 2)&lt;br /&gt;
     IF $SETG(&#039;DATE&#039;, %DATE) THEN&lt;br /&gt;
          PRINT &#039;*** REQUEST TOO LONG - GTBL&#039;&lt;br /&gt;
          STOP&lt;br /&gt;
     END IF&lt;br /&gt;
END&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Later in the terminal session, you can use the specially formatted date: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;BEGIN&lt;br /&gt;
    %DATE = $GETG(&#039;DATE&#039;)&lt;br /&gt;
    STORE RECORD&lt;br /&gt;
        FIELD = VALUE&lt;br /&gt;
        FIELDB = VALUE&lt;br /&gt;
        DATE = %DATE&lt;br /&gt;
            .&lt;br /&gt;
            .&lt;br /&gt;
            .&lt;br /&gt;
    END STORE&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;
Assume that different sets of records are processed and the results are used to produce a final report. Because of compiler table limitations, you have to process requests that cannot be continued with the MORE command (see [[Large request considerations]]). You can store intermediate results in GTBL and produce the final report exclusively from the table.   &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;BEGIN&lt;br /&gt;
          .&lt;br /&gt;
          .&lt;br /&gt;
          .&lt;br /&gt;
      process hourly workers&#039; wages&lt;br /&gt;
          .&lt;br /&gt;
          .&lt;br /&gt;
          .&lt;br /&gt;
      IF $SETG(&#039;HOURLY TOTAL&#039;, %TOTAL) THEN&lt;br /&gt;
          PRINT &#039;*** REQUEST TOO LONG - GTBL&#039;&lt;br /&gt;
          STOP&lt;br /&gt;
      END IF&lt;br /&gt;
 &lt;br /&gt;
END&lt;br /&gt;
 &lt;br /&gt;
BEGIN&lt;br /&gt;
          .&lt;br /&gt;
          .&lt;br /&gt;
          .&lt;br /&gt;
      process monthly workers&#039; wages&lt;br /&gt;
          .&lt;br /&gt;
          .&lt;br /&gt;
          .&lt;br /&gt;
      IF $SETG(&#039;MONTHLY TOTAL&#039;, %TOTAL) THEN&lt;br /&gt;
          PRINT &#039;*** REQUEST TOO LONG - GTBL&#039;&lt;br /&gt;
          STOP&lt;br /&gt;
      END IF&lt;br /&gt;
END&lt;br /&gt;
 &lt;br /&gt;
BEGIN&lt;br /&gt;
      %HOURLY = $GETG(&#039;HOURLY TOTAL&#039;)&lt;br /&gt;
      %MONTHLY = $GETG(&#039;MONTHLY TOTAL&#039;)&lt;br /&gt;
           .&lt;br /&gt;
           .&lt;br /&gt;
           .&lt;br /&gt;
      format report&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;
==Using global string variables with a conditional INCLUDE command==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can use global string variables to create a modular programming environment in which you select procedures to perform a particular function without compiling and evaluating procedures designed for other related functions. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
To use global string variables effectively in creating such an environment, it is useful to review the differences between commands and User Language statements and between conditional and unconditional includes, as described in the following sections.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Differences between commands and User Language statements===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Commands and User Language statements have different effects and are used in different ways: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;System control commands can be issued only outside a request &amp;amp;mdash; at command level. They are acted upon immediately. User Language statements can be used only within a request. They are compiled on a line-by-line basis, but the entire request is not executed until &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; receives an END statement. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;INCLUDE is both a command and a User Language statement. In either context, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; is directed to take the next input line from an appropriate stored procedure. When the procedure lines are exhausted, the next input line is taken from the command or User Language statement immediately following the INCLUDE. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;IF has two formats: &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Conditional INCLUDE command&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;User Language statement &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;
===Conditional and unconditional INCLUDEs===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
A conditional include can be coded within an IF statement using the INCLUDE statement or with an INCLUDE command.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
An unconditional include can be coded with a standalone INCLUDE statement or command.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
This section describes conditional INCLUDE commands by providing examples and discussing how each example is processed.&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 request illustrates the conditional INCLUDE command:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;BEGIN&lt;br /&gt;
ALL: FIND ALL RECORDS&lt;br /&gt;
     END FIND&lt;br /&gt;
     FOR EACH RECORD IN ALL&lt;br /&gt;
         IF AGE GT &#039;10&#039; THEN&lt;br /&gt;
             IF $SETG(&#039;AGE&#039;, &#039;YES&#039;) THEN&lt;br /&gt;
                 PRINT &#039;*** REQUEST TOO LONG - GTBL&#039;&lt;br /&gt;
                 STOP&lt;br /&gt;
             END IF&lt;br /&gt;
         END IF&lt;br /&gt;
     END FOR&lt;br /&gt;
END&lt;br /&gt;
IF AGE = YES, COUNT&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====How Example 1 is processed====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The statements between the BEGIN and END are compiled and evaluated. If the AGE condition is true, a global string variable is set. &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; then processes the IF command. Statements in the COUNT procedure are compiled and executed only if the condition is true. Otherwise, the statements are never compiled.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Example 2====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Suppose that you enter record selection criteria and then select one of three reports to be generated. A set of four procedures can be created.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
For example, procedure A might contain the prompts for record selection and report type. Procedures B, C, and D might contain statements to produce the individual reports. Only procedure A and one of the other three procedures is compiled and evaluated. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;PROCEDURE A&lt;br /&gt;
BEGIN&lt;br /&gt;
FIND.RECS: FIND ALL RECORDS FOR WHICH&lt;br /&gt;
               ??SELECT.RECORDS&lt;br /&gt;
           END FIND&lt;br /&gt;
           IF $SETG(&#039;REPORTNUM&#039;, $READ(&#039;ENTER REPORT NO&#039;))&lt;br /&gt;
               THEN PRINT &#039;*** REQUEST TOO LONG - GTBL&#039;&lt;br /&gt;
               STOP&lt;br /&gt;
           END IF&lt;br /&gt;
END MORE&lt;br /&gt;
IF REPORTNUM = 1, B&lt;br /&gt;
IF REPORTNUM = 2, C&lt;br /&gt;
IF REPORTNUM = 3, D&lt;br /&gt;
END PROCEDURE&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Procedures B, C, and D have the same basic format, but variations in processing are applied to each record.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;PROCEDURE B&lt;br /&gt;
MORE&lt;br /&gt;
PROCESS: FOR EACH RECORD IN FIND.RECS&lt;br /&gt;
             .&lt;br /&gt;
             .&lt;br /&gt;
             .&lt;br /&gt;
         processing&lt;br /&gt;
             .&lt;br /&gt;
             .&lt;br /&gt;
             .&lt;br /&gt;
         END FOR PROCESS&lt;br /&gt;
END&lt;br /&gt;
END PROCEDURE&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====How Example 2 is processed====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The dialog produced by these procedures is shown below, with user input in boldface: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;b&amp;gt;INCLUDE A&amp;lt;/b&amp;gt;&lt;br /&gt;
??SELECT.RECORDS&lt;br /&gt;
&amp;lt;b&amp;gt;REGION = SOUTH OR WEST&amp;lt;/b&amp;gt;&lt;br /&gt;
$$ENTER REPORT NO&lt;br /&gt;
&amp;lt;b&amp;gt;2&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;i&amp;gt;output from Procedure C &amp;lt;/i&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Keep IF commands at as high a nesting level as possible====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
An alternate method of writing procedures is to follow each report&#039;s END MORE statement with IF commands. However, each procedure might then INCLUDE itself or another procedure, creating a lower level of nesting. If the procedure continued to INCLUDE itself, the maximum nesting level would be reached. As a general rule in a complex set of procedures, keep IF commands at as high a nesting level as possible. The global string variables to be tested can be set at any level.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
==Using global string variables to tailor a request==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Global string variables can be used in conjunction with the FILE$ condition (see [[Record retrievals#FILE$ condition|FILE$ condition]]) to access a set of files in a group. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Example====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
In the following example, the value of the global string variable, FILES, can be changed to access an alternative set of files. This example consists of two requests. The first &amp;amp;mdash; BEGIN through END MORE &amp;amp;mdash; sets the global string variable during the execution phase; the second &amp;amp;mdash; MORE through END &amp;amp;mdash; is then compiled with the correct value.   &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;
           IF $SETG(&#039;FILES&#039;,&#039;FILEA OR FILE$ FILEC&#039;) THEN&lt;br /&gt;
               PRINT &#039;***REQUEST TOO LONG -- GTBL&#039;&lt;br /&gt;
               %IGNORE = $SETG(&#039;FILES&#039;, &amp;amp;apos;&amp;amp;apos;)&lt;br /&gt;
           END IF&lt;br /&gt;
END MORE&lt;br /&gt;
MORE&lt;br /&gt;
           IF $GETG(&#039;files&#039;) = &amp;amp;apos;&amp;amp;apos; THEN&lt;br /&gt;
               STOP&lt;br /&gt;
           END IF&lt;br /&gt;
 GET.A:    FIND ALL RECORDS FOR WHICH&lt;br /&gt;
              (FILE$ ?&amp;amp;amp;FILES) AND FIELDX = &#039;A&#039;&lt;br /&gt;
           END FIND&lt;br /&gt;
           FOR EACH RECORD IN GET.A&lt;br /&gt;
               PRINT ALL INFORMATION&lt;br /&gt;
           END FOR&lt;br /&gt;
END&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
==Global objects==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Global objects include found sets, images, lists, menus, positions, screens, and sorted sets. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===General rules for declarations===&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;You must declare global lists, found sets, and sorted sets in every request that references them; the &amp;lt;var&amp;gt;Declare&amp;lt;/var&amp;gt; statement must come before the reference. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;If a global object is used in multiple subroutines, or in both the main program and a subroutine, the label must be declared as global in the main program before the subroutine(s). The subroutine(s) must then declare the label as common. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;If you refer to a global object before a &amp;lt;var&amp;gt;Declare&amp;lt;/var&amp;gt; statement, the system issues a duplicate label compilation error. Such a reference implicitly makes the object non global. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Incompatibility===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The [[PQO]] product does not support global found sets, lists, positions, or sorted sets. These global objects cannot be used in conjunction with remote files or scattered groups. This limitation exists, because GTBL does not exist on the PQO server. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Clearing global objects from GTBL===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
For syntax, details and examples of clearing global objects, see [[#Clearing the GTBL work area|Clearing the GTBL work area]]. &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Using global found sets and lists==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can pass found sets and lists from request to request by declaring them as &amp;lt;var&amp;gt;Global&amp;lt;/var&amp;gt;. A global found set or list is stored in the internal work area GTBL for the duration of the terminal session unless it is intentionally cleared, or the file or group with which it is associated is closed. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Creating a global found set or sorted set====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can create a global found set using this syntax: &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;[Declare] Label &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;labelname&amp;lt;/span&amp;gt; [Global | Common] &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;labelname&amp;lt;/var&amp;gt; is a unique global object name.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Creating a global list====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can declare a global list using the following syntax:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;[Declare] List &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;listname&amp;lt;/span&amp;gt; &lt;br /&gt;
  [In [File [Perm | Temp] Group] &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;name&amp;lt;/span&amp;gt;]&lt;br /&gt;
  [Global | Common] &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
In both cases, the keyword &amp;lt;var&amp;gt;Global&amp;lt;/var&amp;gt; implies &amp;lt;var&amp;gt;Common&amp;lt;/var&amp;gt;. These two keywords are mutually exclusive in the declaration statement. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Because &amp;lt;var&amp;gt;Global&amp;lt;/var&amp;gt; implies &amp;lt;var&amp;gt;Common&amp;lt;/var&amp;gt;, a list or found set can be declared &amp;lt;var&amp;gt;Global&amp;lt;/var&amp;gt; at any scope. See [[Subroutines#Scope of elements|Scope of elements]] for a discussion. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;The global name, label name, or list name, must be unique across all global objects. For a discussion, see [[Subroutines#Sharing common elements|Sharing common elements]]. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Usage rules====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The following rules apply to global found sets and lists: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;You must declare each global list or global found set as &amp;lt;code&amp;gt;&amp;lt;i&amp;gt;labelname&amp;lt;/i&amp;gt; Global&amp;lt;/code&amp;gt; in each procedure that uses it. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;The file context in which a global list or found set is used must be the same as the file context in which it was created. &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; compiler does not currently enforce this rule; therefore, your code must maintain this requirement. Rocket Software recommends that you populate a global found set or list only once within the scope of these global objects. However, this is not a restriction as long as file context is maintained. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Global found sets and lists are invalid in ad hoc group context. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Each global object name must be unique. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Global found sets and lists are not supported in remote file or scattered group contexts. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Example 1: Referencing a global found set===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
In this example, Procedure 1 declares the global found set and then performs the find. Procedure 2 needs only to declare the global found set and then reference the global found set labeled F1. The &amp;lt;var&amp;gt;For&amp;lt;/var&amp;gt; loops in both procedures process records in the &amp;lt;code&amp;gt;VEHICLES&amp;lt;/code&amp;gt; file for which the value of the field &amp;lt;code&amp;gt;COLOR&amp;lt;/code&amp;gt; was equal to &amp;lt;code&amp;gt;BLUE&amp;lt;/code&amp;gt; at the time of the evaluation of the &amp;lt;var&amp;gt;Find&amp;lt;/var&amp;gt; statement in Procedure 1. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;b&amp;gt;Procedure 1&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;BEGIN&lt;br /&gt;
DECLARE LABEL F1 GLOBAL&lt;br /&gt;
F1: IN VEHICLES FIND ALL RECORDS WHERE COLOR = &#039;BLUE&#039;&lt;br /&gt;
    END FIND&lt;br /&gt;
    FOR EACH RECORD IN F1&lt;br /&gt;
       PAI&lt;br /&gt;
    END FOR&lt;br /&gt;
END&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;b&amp;gt;Procedure 2&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;BEGIN&lt;br /&gt;
DECLARE LABEL F1 GLOBAL&lt;br /&gt;
    FOR EACH RECORD IN F1&lt;br /&gt;
       PAI&lt;br /&gt;
    END FOR&lt;br /&gt;
END&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Example 2: Maintaining file context===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Example 2 illustrates repopulating a global found set across the scope of its usage, maintaining the same file context throughout. In this example, Procedure 1 is identical to Procedure 1 in Example 1 above, and Procedure 3 is identical to Procedure 2 in Example 1. The second procedure in this example, however, performs a different find than the first. Procedure 3 then processes the records found in Procedure 2. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
So in this example, Procedure 1 processes records in the &amp;lt;code&amp;gt;VEHICLES&amp;lt;/code&amp;gt; file for which the value of the field &amp;lt;code&amp;gt;COLOR&amp;lt;/code&amp;gt; is equal to &amp;lt;code&amp;gt;BLUE&amp;lt;/code&amp;gt;, while Procedures 2 and 3 process records for which &amp;lt;code&amp;gt;COLOR&amp;lt;/code&amp;gt; was equal to &amp;lt;code&amp;gt;RED&amp;lt;/code&amp;gt; at the time of the &amp;lt;var&amp;gt;Find&amp;lt;/var&amp;gt; statement evaluation in Procedure 2. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;b&amp;gt;Procedure 1&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;BEGIN&lt;br /&gt;
DECLARE LABEL F1 GLOBAL&lt;br /&gt;
F1: IN VEHICLES FIND ALL RECORDS WHERE COLOR = &#039;BLUE&#039;&lt;br /&gt;
    END FIND&lt;br /&gt;
    FOR EACH RECORD IN F1&lt;br /&gt;
       PAI&lt;br /&gt;
    END FOR&lt;br /&gt;
END&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;b&amp;gt;Procedure 2&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;BEGIN&lt;br /&gt;
DECLARE LABEL F1 GLOBAL&lt;br /&gt;
F1: IN VEHICLES FIND ALL RECORDS WHERE COLOR = &#039;RED&#039;&lt;br /&gt;
    END FIND&lt;br /&gt;
    FOR EACH RECORD IN F1&lt;br /&gt;
       PAI&lt;br /&gt;
    END FOR&lt;br /&gt;
END&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;b&amp;gt;Procedure 3&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;BEGIN&lt;br /&gt;
DECLARE LABEL F1 GLOBAL&lt;br /&gt;
    FOR EACH RECORD IN F1&lt;br /&gt;
       PAI&lt;br /&gt;
    END FOR&lt;br /&gt;
END&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
==Using global sorted sets==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
A global sorted set is created when a SORT RECORDS statement or a FOR EACH RECORD IN ORDER BY statement is preceded by a label that has been declared GLOBAL. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Limiting subsequent references===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
For example, in Procedure 1 below, MAKE is the only field referenced in the request. Therefore, MAKE is the only field that can be referenced in subsequent requests. Thus, in Procedure 2, because the field MODEL was not referenced in the previous request, a blank is printed each time through the FOR loop. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Procedure 1====&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;BEGIN&lt;br /&gt;
DECLARE LABEL S1 GLOBAL&lt;br /&gt;
F1: IN VEHICLES FIND ALL RECORDS&lt;br /&gt;
    END FIND&lt;br /&gt;
S1: SORT RECORDS IN F1 BY MAKE&lt;br /&gt;
    FOR EACH RECORD IN S1&lt;br /&gt;
       PRINT MAKE&lt;br /&gt;
    END FOR&lt;br /&gt;
END&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Procedure 2====&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;BEGIN&lt;br /&gt;
DECLARE LABEL S1 GLOBAL&lt;br /&gt;
    FOR EACH RECORD IN S1&lt;br /&gt;
       PRINT MODEL&lt;br /&gt;
    END FOR&lt;br /&gt;
END&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Keeping all fields accessible for subsequent references===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
To ensure that all fields are accessible to subsequent requests, use a PAI or field name variable with the statement that creates the found set.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The sort key field(s) used on the SORT statement cannot be referred to by a subsequent request unless referred to in the SORT statement FOR loop in the request creating the set. While this restriction applies to the use of the SORT RECORDS statement, it does not apply to the use of the SORT RECORD KEYS statement.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If you are not going to refer to the sorted set in the request that creates the sorted set, you can code a FOR loop, which is compiled but never executed, that refers to each field that you want to refer to in a subsequent request. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
==Saving and recalling a position in a For loop==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can include statements in a &amp;lt;var&amp;gt;For&amp;lt;/var&amp;gt; loop to provide for the possibility of terminating the loop before the set of records or values being processed is exhausted. For example, you might use a &amp;lt;var&amp;gt;Jump To&amp;lt;/var&amp;gt; or &amp;lt;var&amp;gt;Loop End&amp;lt;/var&amp;gt; statement in conjunction with an &amp;lt;var&amp;gt;If&amp;lt;/var&amp;gt; statement to test each record or value before processing, and terminating the loop if a certain condition is met. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The &amp;lt;var&amp;gt;Remember&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;Position&amp;lt;/var&amp;gt; statements let you store the current processing position in a &amp;lt;var&amp;gt;For&amp;lt;/var&amp;gt; loop, then recall it at a later time and resume &amp;lt;var&amp;gt;For&amp;lt;/var&amp;gt; processing where you left off earlier. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Remember statement===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The purpose of the &amp;lt;var&amp;gt;Remember&amp;lt;/var&amp;gt; statement is to store the processing position in a &amp;lt;var&amp;gt;For&amp;lt;/var&amp;gt; loop. Each &amp;lt;var&amp;gt;Remember&amp;lt;/var&amp;gt; statement creates a GTBL entry of variable length. See [[Large request considerations]] for detailed descriptions of GTBL entries. If you remember a position as &amp;lt;var&amp;gt;Global&amp;lt;/var&amp;gt;, the entry remains in GTBL after the current request ends. &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; clears non-global &amp;lt;var&amp;gt;Remember&amp;lt;/var&amp;gt; positions at the end of each request.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Syntax====&lt;br /&gt;
{{Template:Remember statement syntax}}&lt;br /&gt;
Where:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The &amp;lt;var&amp;gt;Global&amp;lt;/var&amp;gt; option implies &#039;&#039;&#039;PERM&#039;&#039;&#039; and the position is retained in GTBL after the current request terminates. If &amp;lt;var&amp;gt;Global&amp;lt;/var&amp;gt; is not specified, &#039;&#039;&#039;TEMP&#039;&#039;&#039; is implied and the position is cleared from GTBL after the current request terminates.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;b&amp;gt;NOTE:&amp;lt;/B&amp;gt; The use of GLOBAL here must be consistent with the CLEAR GLOBAL POSITION statement.  If the latter is specified with PERM:&amp;lt;/p&amp;gt; &lt;br /&gt;
&amp;lt;p&amp;gt;CLEAR GLOBAL POSITION &amp;lt;b&amp;gt;PERM&amp;lt;/b&amp;gt; &#039;position_name&#039;,&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;then the REMEMBER statement must specify GLOBAL because it implies PERM.&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;position_name&amp;lt;/var&amp;gt; is a unique object name you assign to the &amp;lt;var&amp;gt;Remember&amp;lt;/var&amp;gt; position. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;b&amp;gt;NOTE:&amp;lt;/b&amp;gt;If the &#039;position_name&#039; is mixed or lower case, be sure to use the same name, in single quotation marks, when referring to that name in other statements; e.g. CLEAR or POSITION.&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;foundsortset_name&amp;lt;/var&amp;gt; or &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;list_name&amp;lt;/var&amp;gt; must be identical to the listname or label specified on the &amp;lt;var&amp;gt;For&amp;lt;/var&amp;gt; loop:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;If you are processing a found set or a sorted set, &amp;lt;code&amp;gt;In &amp;lt;i&amp;gt;foundsortset_name&amp;lt;/i&amp;gt;&amp;lt;/code&amp;gt; is the label of the &amp;lt;var&amp;gt;Find&amp;lt;/var&amp;gt; statement that generated it. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;If you are processing a list, &amp;lt;code&amp;gt;On &amp;lt;i&amp;gt;list_name&amp;lt;/i&amp;gt;&amp;lt;/code&amp;gt; is the name you gave to the list when you originally declared it. &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;
====Usage notes====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The following rules apply to the use of the &amp;lt;var&amp;gt;Remember&amp;lt;/var&amp;gt; statement:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Can appear only within a &amp;lt;var&amp;gt;For&amp;lt;/var&amp;gt; loop, but not a nested &amp;lt;var&amp;gt;For&amp;lt;/var&amp;gt; loop. The file context must be identical to the context of the &amp;lt;var&amp;gt;For&amp;lt;/var&amp;gt; loop. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Is invalid in ad hoc group context, if used with the &amp;lt;var&amp;gt;Global&amp;lt;/var&amp;gt; option. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;The &amp;lt;var&amp;gt;Remember&amp;lt;/var&amp;gt; statement is incompatible with &amp;lt;var&amp;gt;For Each Record In Order By&amp;lt;/var&amp;gt; clauses. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Position statement===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
A &amp;lt;var&amp;gt;Position&amp;lt;/var&amp;gt; statement recalls a remembered position, so you can resume &amp;lt;var&amp;gt;For&amp;lt;/var&amp;gt; processing in a list or found set that was terminated at an earlier time. For example, if you remembered the position at record number 5, then your foundset is positioned at record number 6 for further processing.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
This &amp;lt;var&amp;gt;Position&amp;lt;/var&amp;gt; statement is not to be confused with the &amp;lt;var&amp;gt;Position&amp;lt;/var&amp;gt; statement used to read records sequentially in an external VSAM KSDS file. See [[Images#Position statement|Position statement]]. &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;Position {Foundset &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;foundsortset_name&amp;lt;/span&amp;gt; | List &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;list_name&amp;lt;/span&amp;gt;} [At] &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;position_name&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
Where:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;foundsortset_name&amp;lt;/var&amp;gt; or &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;list_name&amp;lt;/var&amp;gt; must be identical to the list or label name used on a previous &amp;lt;var&amp;gt;Remember&amp;lt;/var&amp;gt; statement and in the &amp;lt;var&amp;gt;For&amp;lt;/var&amp;gt; statement that follows. &lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If you are about to resume the processing of a found set, &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;foundsortset_name&amp;lt;/var&amp;gt; is the label of the &amp;lt;var&amp;gt;Find&amp;lt;/var&amp;gt; statement that generated it. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If you are about to resume the processing of a list, &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;list_name&amp;lt;/var&amp;gt; is the name you gave to the list when you originally declared it.&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;position_name&amp;lt;/var&amp;gt; is a name that you assigned to the remembered position when you stored it on a previous &amp;lt;var&amp;gt;Remember&amp;lt;/var&amp;gt; statement. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;b&amp;gt;NOTE:&amp;lt;/b&amp;gt;If the &#039;position_name&#039; is mixed or lower case, be sure to enclose it here in single quotes.  Do the same when referring to that name in other statements; e.g. CLEAR or REMEMBER.&amp;lt;/p&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 following rules apply:&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;Position&amp;lt;/var&amp;gt; statement must appear outside, immediately before the &amp;lt;var&amp;gt;For&amp;lt;/var&amp;gt; loop to which it refers; it cannot be in the &amp;lt;var&amp;gt;For&amp;lt;/var&amp;gt; loop itself.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;The &amp;lt;var&amp;gt;For&amp;lt;/var&amp;gt; statement that follows the &amp;lt;var&amp;gt;Position&amp;lt;/var&amp;gt; statement must have an identical file context and list name or label name as the statement that initiated the &amp;lt;var&amp;gt;For&amp;lt;/var&amp;gt; loop of the remembered position.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;The &amp;lt;var&amp;gt;Position&amp;lt;/var&amp;gt; statement is incompatible with &amp;lt;var&amp;gt;For Each Record In Order By&amp;lt;/var&amp;gt; clauses. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
==Global images and screens==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can use global images and screens to pass image and screen data from one request to another and to efficiently manage more than one image or screen in one request. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can also declare global menus, because a menu is a special type of screen. In this section, the term &amp;quot;screen&amp;quot; applies to both screens and menus, unless otherwise noted. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Declaring global images and screens===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You make an image or screen global by specifying the keyword &amp;lt;var&amp;gt;Global&amp;lt;/var&amp;gt; in its declaration statement. You can declare global images and screens to be &amp;lt;var&amp;gt;Temporary&amp;lt;/var&amp;gt;, deleted at request termination, or &amp;lt;var&amp;gt;Permanent&amp;lt;/var&amp;gt;, persist across request termination. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===How images and screens are processed===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When you declare an image or screen as &amp;lt;var&amp;gt;Global&amp;lt;/var&amp;gt;, it is stored in GTBL. Nonglobal images and screens, declared as &amp;lt;var&amp;gt;Common&amp;lt;/var&amp;gt;, or neither &amp;lt;var&amp;gt;Common&amp;lt;/var&amp;gt; nor &amp;lt;var&amp;gt;Global&amp;lt;/var&amp;gt;, are stored in FSCB. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
This section provides some background information about how &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; processes images and screens, contrasting how global and nonglobal images and screens are processed. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Images and screen processing===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The figures in the following subsections represent how nonglobal and global objects are processed. Comparing the two types of processing highlights the I/O and storage savings associated with the global images and screens. &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Processing of nonglobal objects====&lt;br /&gt;
&amp;lt;p class=&amp;quot;figure&amp;quot;&amp;gt;[[File:Nonglobal_object_processing.png|550px]] &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The &amp;lt;b&amp;gt;Nonglobal object processing&amp;lt;/b&amp;gt; figure illustrates the process in the following steps:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The compiler loads a compiled version of the screen or image into FSCB in the user&#039;s server.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;A copy of the compiled object is stored in the buffer pool.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;A &amp;lt;var&amp;gt;Prepare&amp;lt;/var&amp;gt; statement acts on the compiled object in the buffer pool and copies it into FSCB.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Update statements act on the copy of the object in FSCB.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;The updated object is copied from FSCB to a working copy of the object in the buffer pool.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;If a user waits too long or the buffer pool fills up, the object is written to CCATEMP. When a user presses Enter for that object, the object is loaded back from CCATEMP to the buffer pool. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;amp;nbsp;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Processing of global objects==== &lt;br /&gt;
&amp;lt;p class=&amp;quot;figure&amp;quot;&amp;gt;[[File:Global_object_processing.png|550px]] &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The &amp;lt;b&amp;gt;Global object processing&amp;lt;/b&amp;gt; figure illustrates the process in the following steps: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The compiler loads a compiled version of the screen or image into FSCB in the user&#039;s server. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;A copy of the compiled object is stored in the buffer pool. This copy is called &#039;VIRGIN&#039;, as it is never updated. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;A &amp;lt;var&amp;gt;Prepare&amp;lt;/var&amp;gt; statement acts on the compiled object in the buffer pool and copies it into GTBL. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Update statements act on the copy in GTBL. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Using Prepare and Identify statements===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
To help you decide how to use the &amp;lt;var&amp;gt;Prepare&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;Identify&amp;lt;/var&amp;gt; statements, review the following:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[[#GTBL internal work area|GTBL internal work area]] &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;[[#Timing and placement of a CLEAR statement|Timing and placement of a CLEAR statement]] &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;For syntax and usage of the &amp;lt;var&amp;gt;Prepare&amp;lt;/var&amp;gt; statement, see [[Full-screen feature#PREPARE statement|Prepare statement]]&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;For syntax and usage of the &amp;lt;var&amp;gt;Identify&amp;lt;/var&amp;gt; statement, see [[Images#Identify statement|Identify statement]] &lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Also when using the &amp;lt;var&amp;gt;Identify&amp;lt;/var&amp;gt; statement, see [[#Consistency checks performed|Consistency checks performed]]. &amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Performance and efficiency benefits===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Global images and screens can simply and efficiently perform image-to-image processing and screen-to-image processing, eliminating the need to map screen items to image items when passing or preserving screens. Using global images and screens: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Reduces CPU resources required to pass data between requests in applications where a large number of global variables would have been necessary. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Reduces the FSCB I/O between multiple images and between images and screens. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Makes the declaration of global data explicit, thus traceable by using naming conventions and cross-reference tools. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Simplifies code, eliminating the need for &amp;lt;var&amp;gt;If $Setg() Then ...&amp;lt;/var&amp;gt; sequences to map request %variables into global variables and for &amp;lt;var&amp;gt;%xyz = $Getg()&amp;lt;/var&amp;gt; sequences to map global variables into request %variables. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Reduces I/O by swapping modified global screens to CCASERVR instead of paging them between the buffer pool and CCATEMP. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===When to use global images and screens===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You achieve the greatest benefit by declaring as &amp;lt;var&amp;gt;Global&amp;lt;/var&amp;gt; the most frequently used images and screens in an application. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Infrequently used images and screens declared as nonglobal do not put pressure on the buffer pool, because there would not be many copies in the buffer pool for many users, and little I/O with CCATEMP. If an application has many images and/or screens, GTBL might overflow if all the images and/or screens are defined as global. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Consistency checks performed===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When a global image or screen is first referred to in a request, GTBL is searched for the object. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If the object is&amp;lt;var&amp;gt; not&amp;lt;/var&amp;gt; already present in GTBL, the object is written into GTBL. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If the object is present, two consistency checks are performed:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Persistence &amp;amp;mdash; &amp;lt;var&amp;gt;Permanent&amp;lt;/var&amp;gt; or &amp;lt;var&amp;gt;Temporary&amp;lt;/var&amp;gt; status &amp;amp;mdash; of the new object must match the persistence of the object already in GTBL. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Definition &amp;amp;mdash; &amp;lt;var&amp;gt;Permanent&amp;lt;/var&amp;gt; or &amp;lt;var&amp;gt;Temporary&amp;lt;/var&amp;gt; &amp;amp;mdash; of the new object must match the definition of the object already in GTBL. &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; If a global image has an array that uses the &amp;lt;var&amp;gt;Depending On &amp;lt;i&amp;gt;%variable&amp;lt;/i&amp;gt;&amp;lt;/var&amp;gt; option, the names of the %variables are not compared when the definition check is performed. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If either of these consistency checks fails &amp;amp;mdash; for example, an image is declared as &amp;lt;var&amp;gt;Temporary&amp;lt;/var&amp;gt;, but the same image already exists in GTBL, declared as &amp;lt;var&amp;gt;Permanent&amp;lt;/var&amp;gt; &amp;amp;mdash; then the request is canceled and the [[M204.2158]] message is generated: &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;Global &amp;lt;i&amp;gt;object-type&amp;lt;/i&amp;gt; definition doesn&#039;t match value in GTBL​,​ &amp;lt;i&amp;gt;error-description&amp;lt;/i&amp;gt;, name hash=&amp;lt;i&amp;gt;hash-code&amp;lt;/i&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Using global images and screens==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The following example illustrates using global images and screens to pass screen and image data between User Language requests. The example consists of the following procedures:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SCREENDEF defines a global screen.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;IMAGEDEF defines a global image.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;PROCA sets the screen item value and an image item value.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;PROCB displays the updated image item and the original screen item. &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;PROCEDURE SCREENDEF&lt;br /&gt;
   * KEEP GLOBAL SCREENS AND IMAGES IN SEPARATE PROCEDURES&lt;br /&gt;
   * FOR CENTRAL DEFINITION&lt;br /&gt;
   SCREEN SCREEN1 GLOBAL&lt;br /&gt;
      PROMPT &#039;SCREEN1&#039;&lt;br /&gt;
      INPUT ITEM NUMERIC LEN 4 AT 10&lt;br /&gt;
   END SCREEN&lt;br /&gt;
END PROCEDURE&lt;br /&gt;
 &lt;br /&gt;
PROCEDURE IMAGEDEF&lt;br /&gt;
   * KEEP GLOBAL SCREENS AND IMAGES IN SEPARATE PROCEDURES&lt;br /&gt;
   * FOR CENTRAL DEFINITION&lt;br /&gt;
   IMAGE IMAGE1 GLOBAL&lt;br /&gt;
      ITEM IS FLOAT LEN 8&lt;br /&gt;
   END IMAGE&lt;br /&gt;
END PROCEDURE&lt;br /&gt;
 &lt;br /&gt;
PROCEDURE PROCA&lt;br /&gt;
   BEGIN&lt;br /&gt;
   INCLUDE SCREENDEF&lt;br /&gt;
   INCLUDE IMAGEDEF&lt;br /&gt;
   * INITIALIZE SCREEN1 AND IMAGE1&lt;br /&gt;
   PREPARE SCREEN SCREEN1&lt;br /&gt;
   PREPARE IMAGE IMAGE1&lt;br /&gt;
   * USER SEES SCREEN1 AND ENTERS A VALUE N (E.G., 10) AS INPUT&lt;br /&gt;
   READ SCREEN SCREEN1&lt;br /&gt;
   %IMAGE1:ITEM = %SCREEN1:ITEM + 3&lt;br /&gt;
   END&lt;br /&gt;
END PROCEDURE&lt;br /&gt;
 &lt;br /&gt;
PROCEDURE PROCB&lt;br /&gt;
   BEGIN&lt;br /&gt;
   INCLUDE SCREENDEF&lt;br /&gt;
   INCLUDE IMAGEDEF&lt;br /&gt;
   * DO NOT INITIALIZE, JUST IDENTIFY FOR SUBSEQUENT REFERRAL&lt;br /&gt;
   IDENTIFY IMAGE IMAGE1&lt;br /&gt;
      * USER SEES UPDATED IMAGE ITEM (N+3) IN NEW REQUEST&lt;br /&gt;
   PRINT &#039;IMAGE ITEM = &#039; WITH %IMAGE1:ITEM&lt;br /&gt;
   * USER SEES ORIGINAL SCREEN ITEM WITH DATA THAT USER ENTERED&lt;br /&gt;
   READ SCREEN SCREEN1&lt;br /&gt;
   END&lt;br /&gt;
END PROCEDURE&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; You can run several procedures between PROCA and PROCB with the same results as if you ran those two procedures sequentially, because the defined global objects persist.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===System administration issues===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
To review the implications of the global images and screens feature for system administrators, see the following topics:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;GTBL size &amp;amp;mdash; [[Large request considerations#GTBL (global variable table)|GTBL (global variable table)]], [[Defining the runtime environment (CCAIN)#Understanding the global variable table (GTBL)|Understanding the global variable table (GTBL)]], and [[GTBLHASH parameter]]&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;VTBL usage with COMMON images and screens &amp;amp;mdash; [[Large request considerations#VTBL (compiler variable table)|VTBL (compiler variable table)]] and [[Defining the runtime environment (CCAIN)#Compiler variable table (VTBL)|Compiler variable table (VTBL)]]&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;User since-last statistics &amp;amp;mdash; [[Using system statistics#User since-last statistics|User since-last statistics]] &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
==Clearing the GTBL work area==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When you log off, all global objects and global variables are cleared. If you want to clear some or all global objects or global variables from GTBL during your working session, prior to logging out, you can issue: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;CLEAR statement &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;CLEARG and/or CLEARGO commands&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;$DELG function to selectively delete global string variables&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;RESET command for the GTBLEHASH and GTBLPCT parameters&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;UTABLE command that changes the size of FTBL, XTBL, or GTBL clears all global objects of any type&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Using the CLEARG and CLEARGO commands===&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;Use this command &amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;To Remove...&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;[[CLEARG command|CLEARG]]&amp;lt;/var&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Only global string 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;&amp;lt;var&amp;gt;[[CLEARGO command|CLEARGO]]&amp;lt;/var&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;All global objects: images, screens, menus, found sets, lists, and temporary and permanent positions from GTBL; it does not clear global string variables. &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 &amp;lt;var&amp;gt;CLEARGO&amp;lt;/var&amp;gt; command takes no arguments.&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Using the $DELG function===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can use the &amp;lt;var&amp;gt;[[$Delg]]&amp;lt;/var&amp;gt; function to delete global string variables created by either &amp;lt;var&amp;gt;[[$Setg]]&amp;lt;/var&amp;gt; or &amp;lt;var&amp;gt;[[$Incrg]]&amp;lt;/var&amp;gt;. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The &amp;lt;var&amp;gt;[[$Delg]]&amp;lt;/var&amp;gt; function deletes a single or group of similar global string variables, releasing and compacting the GTBL space for reuse. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Using the CLEAR statement===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can use the &amp;lt;var&amp;gt;Clear&amp;lt;/var&amp;gt; statement to clear global objects of the same type, an individual global object, or all global string variables, as shown 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;The statement &amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Clears...&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td nowrap&amp;gt;&amp;lt;var&amp;gt;Clear &amp;lt;i&amp;gt;type-of-object&amp;lt;/i&amp;gt; Objects&amp;lt;/var&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;A class of global objects or all global objects. Global string variables are not cleared, because they are not objects. &amp;lt;/td&amp;gt;&lt;br /&gt;
&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;Clear Global&amp;lt;/var&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Individual global objects from GTBL. &amp;lt;/td&amp;gt;&lt;br /&gt;
&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;Clear Globals&amp;lt;/var&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;All global string variables. You cannot selectively clear individual global string variables with the &amp;lt;var&amp;gt;Clear&amp;lt;/var&amp;gt; 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;
====Syntax====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The format for the &amp;lt;var&amp;gt;Clear&amp;lt;/var&amp;gt; statement is:&amp;lt;/p&amp;gt;&lt;br /&gt;
{{Template:Clear statement syntax}}&lt;br /&gt;
Where:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;All&amp;lt;/var&amp;gt; clears all permanent and temporary global objects, including: found sets, lists, images, menus, positions, screens, and sorted sets from GTBL. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Temp&amp;lt;/var&amp;gt; clears only global objects explicitly declared as &amp;lt;var&amp;gt;Temp&amp;lt;/var&amp;gt; in your request, including images, menus, and screens from GTBL. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;ListFdst&amp;lt;/var&amp;gt; clears all global found sets, lists, and sorted sets from GTBL. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Position&amp;lt;/var&amp;gt; clears all permanent and temporary positions from GTBL. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Objects&amp;lt;/var&amp;gt; specifies that the &amp;lt;var&amp;gt;CLEAR&amp;lt;/var&amp;gt; command is operating on the object type you specified, or operating on all types of objects. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Global&amp;lt;/var&amp;gt; clears a specific global object from GTBL. You cannot clear a global string variable created with the &amp;lt;var&amp;gt;$Setg&amp;lt;/var&amp;gt; function using this form. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Position [Perm | Temp]&amp;lt;/var&amp;gt; The use of PERM or TEMP must be consistent with GLOBAL in the REMEMBER statement.  If GLOBAL is specified in the REMEMBER statement, then PERM is implied.  If GLOBAL is omitted from the REMEMBER statement, TEMP is implied.&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;objectname&amp;lt;/var&amp;gt; is the literal name of the specific global object to be cleared from GTBL. Enclose &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;objectname&amp;lt;/var&amp;gt; in single quotation marks.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;b&amp;gt;NOTE:&amp;lt;/b&amp;gt; If the &amp;lt;i&amp;gt;objectname&amp;lt;/i&amp;gt; is mixed case, be sure to use the same name, in single quotation marks, when referring to that name in other statements; e.g. REMEMBER or POSITION.&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;%variable&amp;lt;/var&amp;gt; contains a value that specifies the global object to be cleared from GTBL. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Globals&amp;lt;/var&amp;gt; clears all global string variables created with the &amp;lt;var&amp;gt;$Setg&amp;lt;/var&amp;gt; function from GTBL. This form does &amp;lt;em&amp;gt;not&amp;lt;/em&amp;gt; clear any global objects. &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 following statements clear all permanent and temporary global found sets, images, lists, menus, positions, screens, and sorted sets:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;Clear Objects&lt;br /&gt;
 &lt;br /&gt;
Clear All Objects&lt;br /&gt;
 &lt;br /&gt;
Clear All Global Objects&lt;br /&gt;
 &lt;br /&gt;
Clear Global Objects&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Clearing global found sets and lists===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can clear global found sets and lists in GTBL without logging off using the following examples: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Clear a specific global list or found set by issuing one of these statements:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;Clear Global List &#039;&amp;lt;i&amp;gt;objectname&amp;lt;/i&amp;gt;&#039;&lt;br /&gt;
 &lt;br /&gt;
Clear Global List &amp;lt;i&amp;gt;%variable&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
Clear Global Foundset &#039;&amp;lt;i&amp;gt;objectname&amp;lt;/i&amp;gt;&#039;&lt;br /&gt;
 &lt;br /&gt;
Clear Global Foundset &amp;lt;i&amp;gt;%variable&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;Clear all global found sets and lists with the statement: &lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;Clear ListFdst [Global] Objects &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
(Global found sets and lists are among the global objects cleared by the &amp;lt;var&amp;gt;CLEARGO&amp;lt;/var&amp;gt; command.) &amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Close a file or group with which a global list or found set is associated. This includes the file close processing done when exiting or stopping a subsystem. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Issue a &amp;lt;var&amp;gt;UTABLE&amp;lt;/var&amp;gt; command that changes the size of FTBL, XTBL, or GTBL. &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 you clear a global list or global found set, then any request that uses the global and does not have the &amp;lt;var&amp;gt;Find&amp;lt;/var&amp;gt; statement that creates the global object receives either of the following error messages:&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;M204.0301 Referenced statement label undefined&lt;br /&gt;
 &lt;br /&gt;
M204.0311 Unacceptable statement reference&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===RELEASE and COMMIT RELEASE statements with global foundsets and lists===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The &amp;lt;var&amp;gt;Release&amp;lt;/var&amp;gt; statements and the &amp;lt;var&amp;gt;Commit Release&amp;lt;/var&amp;gt; statements empty the contents of a global found set, global sort set, or global list. The label and positions associated with a found set, sort set, or the list is still considered global, but it is empty. Global positions are not cleared by &amp;lt;var&amp;gt;Release&amp;lt;/var&amp;gt; or &amp;lt;var&amp;gt;Commit Release&amp;lt;/var&amp;gt; statements, however, without records there is nothing to process.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Clearing remembered positions===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Each &amp;lt;var&amp;gt;Remember&amp;lt;/var&amp;gt; statement creates a GTBL entry, whether or not &amp;lt;var&amp;gt;Global&amp;lt;/var&amp;gt; is specified. If GLOBAL is not specified, the position is temporary and is cleared from GTBL at the end of request execution.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
All remembered positions, along with all other GTBL entries, are cleared when you log off. You can also clear remembered positions in the following ways:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;You can clear a specific temporary position by issuing one of these statements:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;Clear Global Position Temp &#039;&amp;lt;i&amp;gt;objectname&amp;lt;/i&amp;gt;&#039;&lt;br /&gt;
 &lt;br /&gt;
Clear Global Position Temp &amp;lt;i&amp;gt;%variable&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;You can clear a specific permanent position by issuing one of these statements: &lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;Clear Global Position Perm &#039;&amp;lt;i&amp;gt;objectname&amp;lt;/i&amp;gt;&#039;&lt;br /&gt;
 &lt;br /&gt;
Clear Global Position Perm &amp;lt;i&amp;gt;%variable&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;You clear all global found sets, lists, or sorted sets with which a remembered position is associated:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;Clear ListFdst [Global] Objects&lt;br /&gt;
&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;You clear all remembered positions by issuing the statement:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;Clear Position [Global] Objects&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;
====Usage notes====&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;When you are using the &amp;lt;var&amp;gt;Clear Global Position&amp;lt;/var&amp;gt; statement, &amp;lt;var&amp;gt;Perm&amp;lt;/var&amp;gt; is the default. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;The &amp;lt;var&amp;gt;CLEARGO&amp;lt;/var&amp;gt; command has the effect of clearing all remembered positions.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Any &amp;lt;var&amp;gt;UTABLE&amp;lt;/var&amp;gt; command that changes the size of FTBL, GTBL, or XTBL clears all remembered positions.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Timing and placement of a Clear statement===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The &amp;lt;var&amp;gt;Clear Global&amp;lt;/var&amp;gt; statement takes effect at evaluation time and its placement in a request can have significant consequences: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;If the global object being cleared is referenced in the same request, it is marked as pending clear. The global is then emptied (zero records), and all its record locks are removed. It is cleared and deleted from GTBL at the end of 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;/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>JDamon</name></author>
	</entry>
	<entry>
		<id>https://m204wiki.rocketsoftware.com/index.php?title=Global_features&amp;diff=120845</id>
		<title>Global features</title>
		<link rel="alternate" type="text/html" href="https://m204wiki.rocketsoftware.com/index.php?title=Global_features&amp;diff=120845"/>
		<updated>2026-04-23T17:31:03Z</updated>

		<summary type="html">&lt;p&gt;JDamon: /* Syntax */&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;
&amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; offers several global features to store information in memory so that it is not automatically cleared between requests. The memory area for storing global information is a &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; internal work area or server table called the &amp;lt;b&amp;gt;global table&amp;lt;/b&amp;gt; or GTBL. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The global features are:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Global string variables&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Global objects&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Global found sets and lists&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Global screens, images, and menus&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Global positions&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Global information is available only to the user who creates it. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===GTBL internal work area===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Each user&#039;s GTBL is empty when the user logs in. GTBL accumulates global information that is available for the duration of the terminal session, unless you intentionally clear it. You can clear GTBL information selectively. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
For a discussion of GTBL space requirements, see [[Large request considerations#GTBL (global variable table)|GTBL (global variable table)]].&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Global items are stored in a specific order in GTBL. As shown in [[#GTBL internal work area|GTBL internal work area]], the area that stores global string variables is at the beginning of the table, and is built from the top down. The area that stores global objects is at the end of the table and is built from the bottom up. The unused or free space is between these two areas. &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;caption&amp;quot; style=&amp;quot;width:450px&amp;quot;&amp;gt;Storage of global variables and global objects in GTBL &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;figure&amp;quot;&amp;gt;[[File:Storage_of_global_vars_in_GTBL.png|450px]] &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Global string variables==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can use global string variables to: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Pass information from one request to another request&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Include procedures conditionally at the &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; command level&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Tailor a request dynamically &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;
As of Version 5.1, you can increase the speed and reduce the CPU time to find and update a global string variable by setting the &amp;lt;var&amp;gt;[[GTBLHASH parameter|GTBLHASH]]&amp;lt;/var&amp;gt; parameter to a nonzero value. The &amp;lt;var&amp;gt;GTBLHASH&amp;lt;/var&amp;gt; parameter specifies the number of buckets allocated in the global string variable section of GTBL.&lt;br /&gt;
When &amp;lt;var&amp;gt;GTBLHASH&amp;lt;/var&amp;gt; is a nonzero value, and you set or get a global string variable, the global string variable name is hashed to determine the bucket in which the name is located. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
This reduces the overall amount of data that must be scanned to find a global string variable or must be moved when a value is deleted or changes in size. If &amp;lt;var&amp;gt;GTBLHASH&amp;lt;/var&amp;gt; is 0, global string variables are processed as in pre-5.1 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;
The &amp;lt;var&amp;gt;[[GTBLPCT parameter|GTBLPCT]]&amp;lt;/var&amp;gt; parameter determines the initial percentage of GTBL to allocate for global string variables. The default value of &amp;lt;var&amp;gt;GTBLPCT&amp;lt;/var&amp;gt; is 50, meaning 50 percent of GTBL is initially allocated for global variable strings. The remainder, in this case 50 percent, is the initial allocation for global objects. However, if &amp;lt;var&amp;gt;GTBLHASH&amp;lt;/var&amp;gt; is 0, a nonzero setting for &amp;lt;var&amp;gt;GTBLPCT&amp;lt;/var&amp;gt; has no effect. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When in effect, if either area of GTBL fills and there are still free pages in GTBL, then GTBL can be rearranged if more space is required in the full area of GTBL. Because these rearrangements can be CPU intensive, Rocket Software recommends that you determine an accurate setting for &amp;lt;var&amp;gt;GTBLPCT&amp;lt;/var&amp;gt; to avoid frequent rearrangements. You can monitor the performance of the hash GTBL feature using the &amp;lt;code&amp;gt;GTBLRU&amp;lt;/code&amp;gt; user statistic and the &amp;lt;code&amp;gt;GTBLRS&amp;lt;/code&amp;gt; since-last statistic.&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Rearranging GTBL and tracking the rearrangements====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The following statistics are available as system statistics, user statistics and since-last statistics to keep track of GTBL rearrangements required for the hashed GTBL feature: &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;Statistic &amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Tracking&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;GTBLRU &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Number of GTBL rearrangements required to add a string variable global.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;GTBLRS &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Number of GTBL rearrangements required to add a global object. &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;
After reviewing the GTBLRU and GTBLRS statistics, you can consider taking the following actions: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;If both of these values are high, increase the size of GTBL by increasing &amp;lt;var&amp;gt;LGTBL&amp;lt;/var&amp;gt;. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;If GTBLRU is high but GTBLRS is not, increase &amp;lt;var&amp;gt;GTBLPCT&amp;lt;/var&amp;gt; or decrease &amp;lt;var&amp;gt;GTBLHASH&amp;lt;/var&amp;gt;. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;If GTBLRS is high but GTBLRU is low, decrease &amp;lt;var&amp;gt;GTBLPCT&amp;lt;/var&amp;gt;. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Global found sets and lists===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can use global found sets and lists to make found sets and lists available across request boundaries. A global found set or list remains in GTBL until you: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Explicitly delete it&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Issue a &amp;lt;var&amp;gt;Release&amp;lt;/var&amp;gt; or &amp;lt;var&amp;gt;Commit Release&amp;lt;/var&amp;gt; statement &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;The file or group it refers to is closed, including the file close processing done when exiting a subsystem or stopping &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Log out &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Sorted sets are a subgroup of found sets; they are treated the same by the &amp;lt;var&amp;gt;Clear&amp;lt;/var&amp;gt; statement that is used to clear global found sets.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Faster global variable processing option====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When global lists or found sets are processed as part of the &amp;lt;var&amp;gt;Find&amp;lt;/var&amp;gt; or &amp;lt;var&amp;gt;Place Records On&amp;lt;/var&amp;gt; statement, it must be verified that a global variable representing the list or found set exists in GTBL. The &amp;lt;var&amp;gt;CLEARG&amp;lt;/var&amp;gt; command or &amp;lt;var&amp;gt;Clear&amp;lt;/var&amp;gt; statement may delete the global variable, so an internal routine is called to verify whether the global variable is in GTBL. The internal routine creates a new copy, if it was deleted. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The internal routine scans NTBL to find an entry that points to the required variable, then it uses its hash value to scan GTBL. Scanning a large NTBL may take considerable time. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The NTBL scan can be eliminated, if internal variables representing global lists and found sets contain a global name hash value. Thus, an internal variable with a length of eight bytes that contains an NTBL entry offset points to the internal variable representing a global list or found set. This method avoids an NTBL scan, if a global variable has been deleted from GTBL. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
This faster global variable processing requires larger VTBL, because every global list or found set needs eight more bytes. If you want the benefit of this increased processing speed and can accommodate the increased VTBL requirement, set &amp;lt;var&amp;gt;FASTGLOB&amp;lt;/var&amp;gt; to 1. To maintain existing processing you can let &amp;lt;var&amp;gt;[[FASTGLOB parameter|FASTGLOB]]&amp;lt;/var&amp;gt; default to 0, or you can explicitly set &amp;lt;var&amp;gt;FASTGLOB&amp;lt;/var&amp;gt; to 0.&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Global positions===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can use &amp;lt;var&amp;gt;Remember&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;Position&amp;lt;/var&amp;gt; statements to save and recall a place in a &amp;lt;var&amp;gt;For&amp;lt;/var&amp;gt; loop, either globally or non-globally. This lets you suspend processing in a &amp;lt;var&amp;gt;For&amp;lt;/var&amp;gt; loop and resume it later, within the same request or in a subsequent request. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Global images and screens===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can use global images and screens to:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Pass image and screen data from one request to another&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Manage more than one image or screen in one request&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Manage menus, which are a special type of screen&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Reduce I/O by swapping modified global screens to CCASERVR instead of paging them between the buffer pool and CCATEMP &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Global string variables===&lt;br /&gt;
 &lt;br /&gt;
===Global string variable names and values===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Entries in the GTBL consist of global name=value pairs. The names and values of the global string variables are created with the &amp;lt;var&amp;gt;$Setg&amp;lt;/var&amp;gt; function from within a request. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;A global string variable name can consist of up to 255 characters and follows the naming conventions for variables (see [[Using variables and values in computation#%Variable names|%Variable names]]). Global string variables that contain special characters, other than a period (&amp;lt;tt&amp;gt;.&amp;lt;/tt&amp;gt;) cannot be used as &amp;lt;code&amp;gt;?&amp;amp;amp;&amp;lt;/code&amp;gt; dummy strings. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;A value can be 0, the null string, or up to 255 characters. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Clearing global string variables===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When a new value for an existing name is stored, the old entry is first deleted. Entries remain in the table until you delete them by issuing a &amp;lt;var&amp;gt;CLEARG&amp;lt;/var&amp;gt; command, execute a &amp;lt;var&amp;gt;Clear&amp;lt;/var&amp;gt; statement, execute a &amp;lt;var&amp;gt;$Delg&amp;lt;/var&amp;gt; function call, or you log out. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If you define a large number of global string variables, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; performance can be adversely affected. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
For details and examples of clearing global string variables, see [[#Clearing the GTBL work area|Clearing the GTBL work area]].&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Global variable functions and commands===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The following functions, statements, commands, and facilities manipulate entries in the global variable table: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Use the functions &amp;lt;var&amp;gt;[[$Setg]]&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;[[$Getg]]&amp;lt;/var&amp;gt; within a request to store and retrieve global string variables. Use &amp;lt;var&amp;gt;[[$Incrg]]&amp;lt;/var&amp;gt; to perform simple arithmetic on global string variables with numeric values. Use the &amp;lt;var&amp;gt;[[$Delg]]&amp;lt;/var&amp;gt; function to delete global string variables created by &amp;lt;var&amp;gt;$Setg&amp;lt;/var&amp;gt; or &amp;lt;var&amp;gt;$Incrg&amp;lt;/var&amp;gt;. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Use the &amp;lt;code&amp;gt;?&amp;amp;amp;&amp;lt;/code&amp;gt; dummy string within a request to read a variable in the GTBL. Refer to [[Procedures]] for more information about dummy strings. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Use the conditional &amp;lt;var&amp;gt;INCLUDE&amp;lt;/var&amp;gt; command (&amp;lt;code&amp;gt;IF A=B,&amp;lt;i&amp;gt;name&amp;lt;/i&amp;gt;&amp;lt;/code&amp;gt;) to search the global variable table for an entry whose name is A and whose value is &amp;lt;code&amp;gt;B&amp;lt;/code&amp;gt;. If the entry is found, the named procedure is included. The &amp;lt;var&amp;gt;IF&amp;lt;/var&amp;gt; command is discussed on [[#Conditional and unconditional INCLUDEs|Conditional and unconditional INCLUDEs]]. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Using global string variables in application subsystems===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
In addition to the above facilities, an application subsystem can designate specific global string variables in the subsystem definition. For more information about subsystem global string variables, refer to: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[[Application Subsystem development#Command line global variable|Command line global variable]] &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;[[Application Subsystem development#Communication global variable|Communication global variable]] &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;[[Application Subsystem development#Error global variable|Error global variable]] &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
==Passing string values from one request to another==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
It is often necessary to generate data in one request and to save the data for use in other independent requests to be run later in the terminal session. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Example 1====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Suppose that you want to store the current date in every record created during a session in YYMMDD format, a modified form of the value returned by the &amp;lt;var&amp;gt;$Date&amp;lt;/var&amp;gt; function. You can derive the date once at the beginning of the day and hold it for use throughout the day. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
At the beginning of the terminal session, you enter:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;BEGIN&lt;br /&gt;
    %DATE = $DATE&lt;br /&gt;
    %DATE = $SUBSTR(%DATE, 1, 2) -&lt;br /&gt;
         WITH $SUBSTR(%DATE, 4, 2) WITH -&lt;br /&gt;
         $SUBSTR(%DATE, 7, 2)&lt;br /&gt;
     IF $SETG(&#039;DATE&#039;, %DATE) THEN&lt;br /&gt;
          PRINT &#039;*** REQUEST TOO LONG - GTBL&#039;&lt;br /&gt;
          STOP&lt;br /&gt;
     END IF&lt;br /&gt;
END&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Later in the terminal session, you can use the specially formatted date: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;BEGIN&lt;br /&gt;
    %DATE = $GETG(&#039;DATE&#039;)&lt;br /&gt;
    STORE RECORD&lt;br /&gt;
        FIELD = VALUE&lt;br /&gt;
        FIELDB = VALUE&lt;br /&gt;
        DATE = %DATE&lt;br /&gt;
            .&lt;br /&gt;
            .&lt;br /&gt;
            .&lt;br /&gt;
    END STORE&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;
Assume that different sets of records are processed and the results are used to produce a final report. Because of compiler table limitations, you have to process requests that cannot be continued with the MORE command (see [[Large request considerations]]). You can store intermediate results in GTBL and produce the final report exclusively from the table.   &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;BEGIN&lt;br /&gt;
          .&lt;br /&gt;
          .&lt;br /&gt;
          .&lt;br /&gt;
      process hourly workers&#039; wages&lt;br /&gt;
          .&lt;br /&gt;
          .&lt;br /&gt;
          .&lt;br /&gt;
      IF $SETG(&#039;HOURLY TOTAL&#039;, %TOTAL) THEN&lt;br /&gt;
          PRINT &#039;*** REQUEST TOO LONG - GTBL&#039;&lt;br /&gt;
          STOP&lt;br /&gt;
      END IF&lt;br /&gt;
 &lt;br /&gt;
END&lt;br /&gt;
 &lt;br /&gt;
BEGIN&lt;br /&gt;
          .&lt;br /&gt;
          .&lt;br /&gt;
          .&lt;br /&gt;
      process monthly workers&#039; wages&lt;br /&gt;
          .&lt;br /&gt;
          .&lt;br /&gt;
          .&lt;br /&gt;
      IF $SETG(&#039;MONTHLY TOTAL&#039;, %TOTAL) THEN&lt;br /&gt;
          PRINT &#039;*** REQUEST TOO LONG - GTBL&#039;&lt;br /&gt;
          STOP&lt;br /&gt;
      END IF&lt;br /&gt;
END&lt;br /&gt;
 &lt;br /&gt;
BEGIN&lt;br /&gt;
      %HOURLY = $GETG(&#039;HOURLY TOTAL&#039;)&lt;br /&gt;
      %MONTHLY = $GETG(&#039;MONTHLY TOTAL&#039;)&lt;br /&gt;
           .&lt;br /&gt;
           .&lt;br /&gt;
           .&lt;br /&gt;
      format report&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;
==Using global string variables with a conditional INCLUDE command==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can use global string variables to create a modular programming environment in which you select procedures to perform a particular function without compiling and evaluating procedures designed for other related functions. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
To use global string variables effectively in creating such an environment, it is useful to review the differences between commands and User Language statements and between conditional and unconditional includes, as described in the following sections.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Differences between commands and User Language statements===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Commands and User Language statements have different effects and are used in different ways: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;System control commands can be issued only outside a request &amp;amp;mdash; at command level. They are acted upon immediately. User Language statements can be used only within a request. They are compiled on a line-by-line basis, but the entire request is not executed until &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; receives an END statement. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;INCLUDE is both a command and a User Language statement. In either context, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; is directed to take the next input line from an appropriate stored procedure. When the procedure lines are exhausted, the next input line is taken from the command or User Language statement immediately following the INCLUDE. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;IF has two formats: &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Conditional INCLUDE command&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;User Language statement &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;
===Conditional and unconditional INCLUDEs===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
A conditional include can be coded within an IF statement using the INCLUDE statement or with an INCLUDE command.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
An unconditional include can be coded with a standalone INCLUDE statement or command.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
This section describes conditional INCLUDE commands by providing examples and discussing how each example is processed.&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 request illustrates the conditional INCLUDE command:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;BEGIN&lt;br /&gt;
ALL: FIND ALL RECORDS&lt;br /&gt;
     END FIND&lt;br /&gt;
     FOR EACH RECORD IN ALL&lt;br /&gt;
         IF AGE GT &#039;10&#039; THEN&lt;br /&gt;
             IF $SETG(&#039;AGE&#039;, &#039;YES&#039;) THEN&lt;br /&gt;
                 PRINT &#039;*** REQUEST TOO LONG - GTBL&#039;&lt;br /&gt;
                 STOP&lt;br /&gt;
             END IF&lt;br /&gt;
         END IF&lt;br /&gt;
     END FOR&lt;br /&gt;
END&lt;br /&gt;
IF AGE = YES, COUNT&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====How Example 1 is processed====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The statements between the BEGIN and END are compiled and evaluated. If the AGE condition is true, a global string variable is set. &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; then processes the IF command. Statements in the COUNT procedure are compiled and executed only if the condition is true. Otherwise, the statements are never compiled.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Example 2====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Suppose that you enter record selection criteria and then select one of three reports to be generated. A set of four procedures can be created.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
For example, procedure A might contain the prompts for record selection and report type. Procedures B, C, and D might contain statements to produce the individual reports. Only procedure A and one of the other three procedures is compiled and evaluated. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;PROCEDURE A&lt;br /&gt;
BEGIN&lt;br /&gt;
FIND.RECS: FIND ALL RECORDS FOR WHICH&lt;br /&gt;
               ??SELECT.RECORDS&lt;br /&gt;
           END FIND&lt;br /&gt;
           IF $SETG(&#039;REPORTNUM&#039;, $READ(&#039;ENTER REPORT NO&#039;))&lt;br /&gt;
               THEN PRINT &#039;*** REQUEST TOO LONG - GTBL&#039;&lt;br /&gt;
               STOP&lt;br /&gt;
           END IF&lt;br /&gt;
END MORE&lt;br /&gt;
IF REPORTNUM = 1, B&lt;br /&gt;
IF REPORTNUM = 2, C&lt;br /&gt;
IF REPORTNUM = 3, D&lt;br /&gt;
END PROCEDURE&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Procedures B, C, and D have the same basic format, but variations in processing are applied to each record.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;PROCEDURE B&lt;br /&gt;
MORE&lt;br /&gt;
PROCESS: FOR EACH RECORD IN FIND.RECS&lt;br /&gt;
             .&lt;br /&gt;
             .&lt;br /&gt;
             .&lt;br /&gt;
         processing&lt;br /&gt;
             .&lt;br /&gt;
             .&lt;br /&gt;
             .&lt;br /&gt;
         END FOR PROCESS&lt;br /&gt;
END&lt;br /&gt;
END PROCEDURE&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====How Example 2 is processed====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The dialog produced by these procedures is shown below, with user input in boldface: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;b&amp;gt;INCLUDE A&amp;lt;/b&amp;gt;&lt;br /&gt;
??SELECT.RECORDS&lt;br /&gt;
&amp;lt;b&amp;gt;REGION = SOUTH OR WEST&amp;lt;/b&amp;gt;&lt;br /&gt;
$$ENTER REPORT NO&lt;br /&gt;
&amp;lt;b&amp;gt;2&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;i&amp;gt;output from Procedure C &amp;lt;/i&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Keep IF commands at as high a nesting level as possible====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
An alternate method of writing procedures is to follow each report&#039;s END MORE statement with IF commands. However, each procedure might then INCLUDE itself or another procedure, creating a lower level of nesting. If the procedure continued to INCLUDE itself, the maximum nesting level would be reached. As a general rule in a complex set of procedures, keep IF commands at as high a nesting level as possible. The global string variables to be tested can be set at any level.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
==Using global string variables to tailor a request==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Global string variables can be used in conjunction with the FILE$ condition (see [[Record retrievals#FILE$ condition|FILE$ condition]]) to access a set of files in a group. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Example====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
In the following example, the value of the global string variable, FILES, can be changed to access an alternative set of files. This example consists of two requests. The first &amp;amp;mdash; BEGIN through END MORE &amp;amp;mdash; sets the global string variable during the execution phase; the second &amp;amp;mdash; MORE through END &amp;amp;mdash; is then compiled with the correct value.   &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;
           IF $SETG(&#039;FILES&#039;,&#039;FILEA OR FILE$ FILEC&#039;) THEN&lt;br /&gt;
               PRINT &#039;***REQUEST TOO LONG -- GTBL&#039;&lt;br /&gt;
               %IGNORE = $SETG(&#039;FILES&#039;, &amp;amp;apos;&amp;amp;apos;)&lt;br /&gt;
           END IF&lt;br /&gt;
END MORE&lt;br /&gt;
MORE&lt;br /&gt;
           IF $GETG(&#039;files&#039;) = &amp;amp;apos;&amp;amp;apos; THEN&lt;br /&gt;
               STOP&lt;br /&gt;
           END IF&lt;br /&gt;
 GET.A:    FIND ALL RECORDS FOR WHICH&lt;br /&gt;
              (FILE$ ?&amp;amp;amp;FILES) AND FIELDX = &#039;A&#039;&lt;br /&gt;
           END FIND&lt;br /&gt;
           FOR EACH RECORD IN GET.A&lt;br /&gt;
               PRINT ALL INFORMATION&lt;br /&gt;
           END FOR&lt;br /&gt;
END&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
==Global objects==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Global objects include found sets, images, lists, menus, positions, screens, and sorted sets. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===General rules for declarations===&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;You must declare global lists, found sets, and sorted sets in every request that references them; the &amp;lt;var&amp;gt;Declare&amp;lt;/var&amp;gt; statement must come before the reference. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;If a global object is used in multiple subroutines, or in both the main program and a subroutine, the label must be declared as global in the main program before the subroutine(s). The subroutine(s) must then declare the label as common. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;If you refer to a global object before a &amp;lt;var&amp;gt;Declare&amp;lt;/var&amp;gt; statement, the system issues a duplicate label compilation error. Such a reference implicitly makes the object non global. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Incompatibility===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The [[PQO]] product does not support global found sets, lists, positions, or sorted sets. These global objects cannot be used in conjunction with remote files or scattered groups. This limitation exists, because GTBL does not exist on the PQO server. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Clearing global objects from GTBL===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
For syntax, details and examples of clearing global objects, see [[#Clearing the GTBL work area|Clearing the GTBL work area]]. &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Using global found sets and lists==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can pass found sets and lists from request to request by declaring them as &amp;lt;var&amp;gt;Global&amp;lt;/var&amp;gt;. A global found set or list is stored in the internal work area GTBL for the duration of the terminal session unless it is intentionally cleared, or the file or group with which it is associated is closed. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Creating a global found set or sorted set====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can create a global found set using this syntax: &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;[Declare] Label &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;labelname&amp;lt;/span&amp;gt; [Global | Common] &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;labelname&amp;lt;/var&amp;gt; is a unique global object name.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Creating a global list====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can declare a global list using the following syntax:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;[Declare] List &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;listname&amp;lt;/span&amp;gt; &lt;br /&gt;
  [In [File [Perm | Temp] Group] &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;name&amp;lt;/span&amp;gt;]&lt;br /&gt;
  [Global | Common] &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
In both cases, the keyword &amp;lt;var&amp;gt;Global&amp;lt;/var&amp;gt; implies &amp;lt;var&amp;gt;Common&amp;lt;/var&amp;gt;. These two keywords are mutually exclusive in the declaration statement. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Because &amp;lt;var&amp;gt;Global&amp;lt;/var&amp;gt; implies &amp;lt;var&amp;gt;Common&amp;lt;/var&amp;gt;, a list or found set can be declared &amp;lt;var&amp;gt;Global&amp;lt;/var&amp;gt; at any scope. See [[Subroutines#Scope of elements|Scope of elements]] for a discussion. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;The global name, label name, or list name, must be unique across all global objects. For a discussion, see [[Subroutines#Sharing common elements|Sharing common elements]]. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Usage rules====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The following rules apply to global found sets and lists: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;You must declare each global list or global found set as &amp;lt;code&amp;gt;&amp;lt;i&amp;gt;labelname&amp;lt;/i&amp;gt; Global&amp;lt;/code&amp;gt; in each procedure that uses it. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;The file context in which a global list or found set is used must be the same as the file context in which it was created. &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; compiler does not currently enforce this rule; therefore, your code must maintain this requirement. Rocket Software recommends that you populate a global found set or list only once within the scope of these global objects. However, this is not a restriction as long as file context is maintained. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Global found sets and lists are invalid in ad hoc group context. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Each global object name must be unique. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Global found sets and lists are not supported in remote file or scattered group contexts. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Example 1: Referencing a global found set===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
In this example, Procedure 1 declares the global found set and then performs the find. Procedure 2 needs only to declare the global found set and then reference the global found set labeled F1. The &amp;lt;var&amp;gt;For&amp;lt;/var&amp;gt; loops in both procedures process records in the &amp;lt;code&amp;gt;VEHICLES&amp;lt;/code&amp;gt; file for which the value of the field &amp;lt;code&amp;gt;COLOR&amp;lt;/code&amp;gt; was equal to &amp;lt;code&amp;gt;BLUE&amp;lt;/code&amp;gt; at the time of the evaluation of the &amp;lt;var&amp;gt;Find&amp;lt;/var&amp;gt; statement in Procedure 1. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;b&amp;gt;Procedure 1&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;BEGIN&lt;br /&gt;
DECLARE LABEL F1 GLOBAL&lt;br /&gt;
F1: IN VEHICLES FIND ALL RECORDS WHERE COLOR = &#039;BLUE&#039;&lt;br /&gt;
    END FIND&lt;br /&gt;
    FOR EACH RECORD IN F1&lt;br /&gt;
       PAI&lt;br /&gt;
    END FOR&lt;br /&gt;
END&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;b&amp;gt;Procedure 2&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;BEGIN&lt;br /&gt;
DECLARE LABEL F1 GLOBAL&lt;br /&gt;
    FOR EACH RECORD IN F1&lt;br /&gt;
       PAI&lt;br /&gt;
    END FOR&lt;br /&gt;
END&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Example 2: Maintaining file context===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Example 2 illustrates repopulating a global found set across the scope of its usage, maintaining the same file context throughout. In this example, Procedure 1 is identical to Procedure 1 in Example 1 above, and Procedure 3 is identical to Procedure 2 in Example 1. The second procedure in this example, however, performs a different find than the first. Procedure 3 then processes the records found in Procedure 2. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
So in this example, Procedure 1 processes records in the &amp;lt;code&amp;gt;VEHICLES&amp;lt;/code&amp;gt; file for which the value of the field &amp;lt;code&amp;gt;COLOR&amp;lt;/code&amp;gt; is equal to &amp;lt;code&amp;gt;BLUE&amp;lt;/code&amp;gt;, while Procedures 2 and 3 process records for which &amp;lt;code&amp;gt;COLOR&amp;lt;/code&amp;gt; was equal to &amp;lt;code&amp;gt;RED&amp;lt;/code&amp;gt; at the time of the &amp;lt;var&amp;gt;Find&amp;lt;/var&amp;gt; statement evaluation in Procedure 2. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;b&amp;gt;Procedure 1&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;BEGIN&lt;br /&gt;
DECLARE LABEL F1 GLOBAL&lt;br /&gt;
F1: IN VEHICLES FIND ALL RECORDS WHERE COLOR = &#039;BLUE&#039;&lt;br /&gt;
    END FIND&lt;br /&gt;
    FOR EACH RECORD IN F1&lt;br /&gt;
       PAI&lt;br /&gt;
    END FOR&lt;br /&gt;
END&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;b&amp;gt;Procedure 2&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;BEGIN&lt;br /&gt;
DECLARE LABEL F1 GLOBAL&lt;br /&gt;
F1: IN VEHICLES FIND ALL RECORDS WHERE COLOR = &#039;RED&#039;&lt;br /&gt;
    END FIND&lt;br /&gt;
    FOR EACH RECORD IN F1&lt;br /&gt;
       PAI&lt;br /&gt;
    END FOR&lt;br /&gt;
END&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;b&amp;gt;Procedure 3&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;BEGIN&lt;br /&gt;
DECLARE LABEL F1 GLOBAL&lt;br /&gt;
    FOR EACH RECORD IN F1&lt;br /&gt;
       PAI&lt;br /&gt;
    END FOR&lt;br /&gt;
END&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
==Using global sorted sets==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
A global sorted set is created when a SORT RECORDS statement or a FOR EACH RECORD IN ORDER BY statement is preceded by a label that has been declared GLOBAL. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Limiting subsequent references===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
For example, in Procedure 1 below, MAKE is the only field referenced in the request. Therefore, MAKE is the only field that can be referenced in subsequent requests. Thus, in Procedure 2, because the field MODEL was not referenced in the previous request, a blank is printed each time through the FOR loop. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Procedure 1====&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;BEGIN&lt;br /&gt;
DECLARE LABEL S1 GLOBAL&lt;br /&gt;
F1: IN VEHICLES FIND ALL RECORDS&lt;br /&gt;
    END FIND&lt;br /&gt;
S1: SORT RECORDS IN F1 BY MAKE&lt;br /&gt;
    FOR EACH RECORD IN S1&lt;br /&gt;
       PRINT MAKE&lt;br /&gt;
    END FOR&lt;br /&gt;
END&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Procedure 2====&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;BEGIN&lt;br /&gt;
DECLARE LABEL S1 GLOBAL&lt;br /&gt;
    FOR EACH RECORD IN S1&lt;br /&gt;
       PRINT MODEL&lt;br /&gt;
    END FOR&lt;br /&gt;
END&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Keeping all fields accessible for subsequent references===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
To ensure that all fields are accessible to subsequent requests, use a PAI or field name variable with the statement that creates the found set.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The sort key field(s) used on the SORT statement cannot be referred to by a subsequent request unless referred to in the SORT statement FOR loop in the request creating the set. While this restriction applies to the use of the SORT RECORDS statement, it does not apply to the use of the SORT RECORD KEYS statement.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If you are not going to refer to the sorted set in the request that creates the sorted set, you can code a FOR loop, which is compiled but never executed, that refers to each field that you want to refer to in a subsequent request. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
==Saving and recalling a position in a For loop==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can include statements in a &amp;lt;var&amp;gt;For&amp;lt;/var&amp;gt; loop to provide for the possibility of terminating the loop before the set of records or values being processed is exhausted. For example, you might use a &amp;lt;var&amp;gt;Jump To&amp;lt;/var&amp;gt; or &amp;lt;var&amp;gt;Loop End&amp;lt;/var&amp;gt; statement in conjunction with an &amp;lt;var&amp;gt;If&amp;lt;/var&amp;gt; statement to test each record or value before processing, and terminating the loop if a certain condition is met. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The &amp;lt;var&amp;gt;Remember&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;Position&amp;lt;/var&amp;gt; statements let you store the current processing position in a &amp;lt;var&amp;gt;For&amp;lt;/var&amp;gt; loop, then recall it at a later time and resume &amp;lt;var&amp;gt;For&amp;lt;/var&amp;gt; processing where you left off earlier. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Remember statement===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The purpose of the &amp;lt;var&amp;gt;Remember&amp;lt;/var&amp;gt; statement is to store the processing position in a &amp;lt;var&amp;gt;For&amp;lt;/var&amp;gt; loop. Each &amp;lt;var&amp;gt;Remember&amp;lt;/var&amp;gt; statement creates a GTBL entry of variable length. See [[Large request considerations]] for detailed descriptions of GTBL entries. If you remember a position as &amp;lt;var&amp;gt;Global&amp;lt;/var&amp;gt;, the entry remains in GTBL after the current request ends. &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; clears non-global &amp;lt;var&amp;gt;Remember&amp;lt;/var&amp;gt; positions at the end of each request.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Syntax====&lt;br /&gt;
{{Template:Remember statement syntax}}&lt;br /&gt;
Where:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The &amp;lt;var&amp;gt;Global&amp;lt;/var&amp;gt; option implies &#039;&#039;&#039;PERM&#039;&#039;&#039; and the position is retained in GTBL after the current request terminates. If &amp;lt;var&amp;gt;Global&amp;lt;/var&amp;gt; is not specified, &#039;&#039;&#039;TEMP&#039;&#039;&#039; is implied and the position is cleared from GTBL after the current request terminates.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;b&amp;gt;NOTE:&amp;lt;/B&amp;gt; The use of GLOBAL here must be consistent with the CLEAR GLOBAL POSITION statement.  If the latter is specified with PERM:&amp;lt;/p&amp;gt; &lt;br /&gt;
&amp;lt;p&amp;gt;CLEAR GLOBAL POSITION &amp;lt;b&amp;gt;PERM&amp;lt;/b&amp;gt; &#039;position_name&#039;,&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;then the REMEMBER statement must specify GLOBAL because it implies PERM.&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;position_name&amp;lt;/var&amp;gt; is a unique object name you assign to the &amp;lt;var&amp;gt;Remember&amp;lt;/var&amp;gt; position. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;b&amp;gt;NOTE:&amp;lt;/b&amp;gt;If the &#039;position_name&#039; is mixed or lower case, be sure to use the same name, in single quotation marks, when referring to that name in other statements; e.g. CLEAR or POSITION.&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;foundsortset_name&amp;lt;/var&amp;gt; or &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;list_name&amp;lt;/var&amp;gt; must be identical to the listname or label specified on the &amp;lt;var&amp;gt;For&amp;lt;/var&amp;gt; loop:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;If you are processing a found set or a sorted set, &amp;lt;code&amp;gt;In &amp;lt;i&amp;gt;foundsortset_name&amp;lt;/i&amp;gt;&amp;lt;/code&amp;gt; is the label of the &amp;lt;var&amp;gt;Find&amp;lt;/var&amp;gt; statement that generated it. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;If you are processing a list, &amp;lt;code&amp;gt;On &amp;lt;i&amp;gt;list_name&amp;lt;/i&amp;gt;&amp;lt;/code&amp;gt; is the name you gave to the list when you originally declared it. &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;
====Usage notes====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The following rules apply to the use of the &amp;lt;var&amp;gt;Remember&amp;lt;/var&amp;gt; statement:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Can appear only within a &amp;lt;var&amp;gt;For&amp;lt;/var&amp;gt; loop, but not a nested &amp;lt;var&amp;gt;For&amp;lt;/var&amp;gt; loop. The file context must be identical to the context of the &amp;lt;var&amp;gt;For&amp;lt;/var&amp;gt; loop. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Is invalid in ad hoc group context, if used with the &amp;lt;var&amp;gt;Global&amp;lt;/var&amp;gt; option. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;The &amp;lt;var&amp;gt;Remember&amp;lt;/var&amp;gt; statement is incompatible with &amp;lt;var&amp;gt;For Each Record In Order By&amp;lt;/var&amp;gt; clauses. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Position statement===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
A &amp;lt;var&amp;gt;Position&amp;lt;/var&amp;gt; statement recalls a remembered position, so you can resume &amp;lt;var&amp;gt;For&amp;lt;/var&amp;gt; processing in a list or found set that was terminated at an earlier time. For example, if you remembered the position at record number 5, then your foundset is positioned at record number 6 for further processing.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
This &amp;lt;var&amp;gt;Position&amp;lt;/var&amp;gt; statement is not to be confused with the &amp;lt;var&amp;gt;Position&amp;lt;/var&amp;gt; statement used to read records sequentially in an external VSAM KSDS file. See [[Images#Position statement|Position statement]]. &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;Position {Foundset &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;foundsortset_name&amp;lt;/span&amp;gt; | List &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;list_name&amp;lt;/span&amp;gt;} [At] &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;position_name&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
Where:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;foundsortset_name&amp;lt;/var&amp;gt; or &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;list_name&amp;lt;/var&amp;gt; must be identical to the list or label name used on a previous &amp;lt;var&amp;gt;Remember&amp;lt;/var&amp;gt; statement and in the &amp;lt;var&amp;gt;For&amp;lt;/var&amp;gt; statement that follows. &lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If you are about to resume the processing of a found set, &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;foundsortset_name&amp;lt;/var&amp;gt; is the label of the &amp;lt;var&amp;gt;Find&amp;lt;/var&amp;gt; statement that generated it. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If you are about to resume the processing of a list, &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;list_name&amp;lt;/var&amp;gt; is the name you gave to the list when you originally declared it.&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;position_name&amp;lt;/var&amp;gt; is a name that you assigned to the remembered position when you stored it on a previous &amp;lt;var&amp;gt;Remember&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;
====Usage notes====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
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;The &amp;lt;var&amp;gt;Position&amp;lt;/var&amp;gt; statement must appear outside, immediately before the &amp;lt;var&amp;gt;For&amp;lt;/var&amp;gt; loop to which it refers; it cannot be in the &amp;lt;var&amp;gt;For&amp;lt;/var&amp;gt; loop itself.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;The &amp;lt;var&amp;gt;For&amp;lt;/var&amp;gt; statement that follows the &amp;lt;var&amp;gt;Position&amp;lt;/var&amp;gt; statement must have an identical file context and list name or label name as the statement that initiated the &amp;lt;var&amp;gt;For&amp;lt;/var&amp;gt; loop of the remembered position.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;The &amp;lt;var&amp;gt;Position&amp;lt;/var&amp;gt; statement is incompatible with &amp;lt;var&amp;gt;For Each Record In Order By&amp;lt;/var&amp;gt; clauses. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
==Global images and screens==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can use global images and screens to pass image and screen data from one request to another and to efficiently manage more than one image or screen in one request. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can also declare global menus, because a menu is a special type of screen. In this section, the term &amp;quot;screen&amp;quot; applies to both screens and menus, unless otherwise noted. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Declaring global images and screens===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You make an image or screen global by specifying the keyword &amp;lt;var&amp;gt;Global&amp;lt;/var&amp;gt; in its declaration statement. You can declare global images and screens to be &amp;lt;var&amp;gt;Temporary&amp;lt;/var&amp;gt;, deleted at request termination, or &amp;lt;var&amp;gt;Permanent&amp;lt;/var&amp;gt;, persist across request termination. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===How images and screens are processed===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When you declare an image or screen as &amp;lt;var&amp;gt;Global&amp;lt;/var&amp;gt;, it is stored in GTBL. Nonglobal images and screens, declared as &amp;lt;var&amp;gt;Common&amp;lt;/var&amp;gt;, or neither &amp;lt;var&amp;gt;Common&amp;lt;/var&amp;gt; nor &amp;lt;var&amp;gt;Global&amp;lt;/var&amp;gt;, are stored in FSCB. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
This section provides some background information about how &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; processes images and screens, contrasting how global and nonglobal images and screens are processed. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Images and screen processing===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The figures in the following subsections represent how nonglobal and global objects are processed. Comparing the two types of processing highlights the I/O and storage savings associated with the global images and screens. &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Processing of nonglobal objects====&lt;br /&gt;
&amp;lt;p class=&amp;quot;figure&amp;quot;&amp;gt;[[File:Nonglobal_object_processing.png|550px]] &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The &amp;lt;b&amp;gt;Nonglobal object processing&amp;lt;/b&amp;gt; figure illustrates the process in the following steps:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The compiler loads a compiled version of the screen or image into FSCB in the user&#039;s server.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;A copy of the compiled object is stored in the buffer pool.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;A &amp;lt;var&amp;gt;Prepare&amp;lt;/var&amp;gt; statement acts on the compiled object in the buffer pool and copies it into FSCB.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Update statements act on the copy of the object in FSCB.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;The updated object is copied from FSCB to a working copy of the object in the buffer pool.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;If a user waits too long or the buffer pool fills up, the object is written to CCATEMP. When a user presses Enter for that object, the object is loaded back from CCATEMP to the buffer pool. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;amp;nbsp;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Processing of global objects==== &lt;br /&gt;
&amp;lt;p class=&amp;quot;figure&amp;quot;&amp;gt;[[File:Global_object_processing.png|550px]] &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The &amp;lt;b&amp;gt;Global object processing&amp;lt;/b&amp;gt; figure illustrates the process in the following steps: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The compiler loads a compiled version of the screen or image into FSCB in the user&#039;s server. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;A copy of the compiled object is stored in the buffer pool. This copy is called &#039;VIRGIN&#039;, as it is never updated. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;A &amp;lt;var&amp;gt;Prepare&amp;lt;/var&amp;gt; statement acts on the compiled object in the buffer pool and copies it into GTBL. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Update statements act on the copy in GTBL. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Using Prepare and Identify statements===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
To help you decide how to use the &amp;lt;var&amp;gt;Prepare&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;Identify&amp;lt;/var&amp;gt; statements, review the following:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[[#GTBL internal work area|GTBL internal work area]] &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;[[#Timing and placement of a CLEAR statement|Timing and placement of a CLEAR statement]] &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;For syntax and usage of the &amp;lt;var&amp;gt;Prepare&amp;lt;/var&amp;gt; statement, see [[Full-screen feature#PREPARE statement|Prepare statement]]&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;For syntax and usage of the &amp;lt;var&amp;gt;Identify&amp;lt;/var&amp;gt; statement, see [[Images#Identify statement|Identify statement]] &lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Also when using the &amp;lt;var&amp;gt;Identify&amp;lt;/var&amp;gt; statement, see [[#Consistency checks performed|Consistency checks performed]]. &amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Performance and efficiency benefits===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Global images and screens can simply and efficiently perform image-to-image processing and screen-to-image processing, eliminating the need to map screen items to image items when passing or preserving screens. Using global images and screens: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Reduces CPU resources required to pass data between requests in applications where a large number of global variables would have been necessary. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Reduces the FSCB I/O between multiple images and between images and screens. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Makes the declaration of global data explicit, thus traceable by using naming conventions and cross-reference tools. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Simplifies code, eliminating the need for &amp;lt;var&amp;gt;If $Setg() Then ...&amp;lt;/var&amp;gt; sequences to map request %variables into global variables and for &amp;lt;var&amp;gt;%xyz = $Getg()&amp;lt;/var&amp;gt; sequences to map global variables into request %variables. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Reduces I/O by swapping modified global screens to CCASERVR instead of paging them between the buffer pool and CCATEMP. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===When to use global images and screens===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You achieve the greatest benefit by declaring as &amp;lt;var&amp;gt;Global&amp;lt;/var&amp;gt; the most frequently used images and screens in an application. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Infrequently used images and screens declared as nonglobal do not put pressure on the buffer pool, because there would not be many copies in the buffer pool for many users, and little I/O with CCATEMP. If an application has many images and/or screens, GTBL might overflow if all the images and/or screens are defined as global. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Consistency checks performed===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When a global image or screen is first referred to in a request, GTBL is searched for the object. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If the object is&amp;lt;var&amp;gt; not&amp;lt;/var&amp;gt; already present in GTBL, the object is written into GTBL. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If the object is present, two consistency checks are performed:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Persistence &amp;amp;mdash; &amp;lt;var&amp;gt;Permanent&amp;lt;/var&amp;gt; or &amp;lt;var&amp;gt;Temporary&amp;lt;/var&amp;gt; status &amp;amp;mdash; of the new object must match the persistence of the object already in GTBL. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Definition &amp;amp;mdash; &amp;lt;var&amp;gt;Permanent&amp;lt;/var&amp;gt; or &amp;lt;var&amp;gt;Temporary&amp;lt;/var&amp;gt; &amp;amp;mdash; of the new object must match the definition of the object already in GTBL. &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; If a global image has an array that uses the &amp;lt;var&amp;gt;Depending On &amp;lt;i&amp;gt;%variable&amp;lt;/i&amp;gt;&amp;lt;/var&amp;gt; option, the names of the %variables are not compared when the definition check is performed. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If either of these consistency checks fails &amp;amp;mdash; for example, an image is declared as &amp;lt;var&amp;gt;Temporary&amp;lt;/var&amp;gt;, but the same image already exists in GTBL, declared as &amp;lt;var&amp;gt;Permanent&amp;lt;/var&amp;gt; &amp;amp;mdash; then the request is canceled and the [[M204.2158]] message is generated: &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;Global &amp;lt;i&amp;gt;object-type&amp;lt;/i&amp;gt; definition doesn&#039;t match value in GTBL​,​ &amp;lt;i&amp;gt;error-description&amp;lt;/i&amp;gt;, name hash=&amp;lt;i&amp;gt;hash-code&amp;lt;/i&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Using global images and screens==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The following example illustrates using global images and screens to pass screen and image data between User Language requests. The example consists of the following procedures:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SCREENDEF defines a global screen.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;IMAGEDEF defines a global image.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;PROCA sets the screen item value and an image item value.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;PROCB displays the updated image item and the original screen item. &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;PROCEDURE SCREENDEF&lt;br /&gt;
   * KEEP GLOBAL SCREENS AND IMAGES IN SEPARATE PROCEDURES&lt;br /&gt;
   * FOR CENTRAL DEFINITION&lt;br /&gt;
   SCREEN SCREEN1 GLOBAL&lt;br /&gt;
      PROMPT &#039;SCREEN1&#039;&lt;br /&gt;
      INPUT ITEM NUMERIC LEN 4 AT 10&lt;br /&gt;
   END SCREEN&lt;br /&gt;
END PROCEDURE&lt;br /&gt;
 &lt;br /&gt;
PROCEDURE IMAGEDEF&lt;br /&gt;
   * KEEP GLOBAL SCREENS AND IMAGES IN SEPARATE PROCEDURES&lt;br /&gt;
   * FOR CENTRAL DEFINITION&lt;br /&gt;
   IMAGE IMAGE1 GLOBAL&lt;br /&gt;
      ITEM IS FLOAT LEN 8&lt;br /&gt;
   END IMAGE&lt;br /&gt;
END PROCEDURE&lt;br /&gt;
 &lt;br /&gt;
PROCEDURE PROCA&lt;br /&gt;
   BEGIN&lt;br /&gt;
   INCLUDE SCREENDEF&lt;br /&gt;
   INCLUDE IMAGEDEF&lt;br /&gt;
   * INITIALIZE SCREEN1 AND IMAGE1&lt;br /&gt;
   PREPARE SCREEN SCREEN1&lt;br /&gt;
   PREPARE IMAGE IMAGE1&lt;br /&gt;
   * USER SEES SCREEN1 AND ENTERS A VALUE N (E.G., 10) AS INPUT&lt;br /&gt;
   READ SCREEN SCREEN1&lt;br /&gt;
   %IMAGE1:ITEM = %SCREEN1:ITEM + 3&lt;br /&gt;
   END&lt;br /&gt;
END PROCEDURE&lt;br /&gt;
 &lt;br /&gt;
PROCEDURE PROCB&lt;br /&gt;
   BEGIN&lt;br /&gt;
   INCLUDE SCREENDEF&lt;br /&gt;
   INCLUDE IMAGEDEF&lt;br /&gt;
   * DO NOT INITIALIZE, JUST IDENTIFY FOR SUBSEQUENT REFERRAL&lt;br /&gt;
   IDENTIFY IMAGE IMAGE1&lt;br /&gt;
      * USER SEES UPDATED IMAGE ITEM (N+3) IN NEW REQUEST&lt;br /&gt;
   PRINT &#039;IMAGE ITEM = &#039; WITH %IMAGE1:ITEM&lt;br /&gt;
   * USER SEES ORIGINAL SCREEN ITEM WITH DATA THAT USER ENTERED&lt;br /&gt;
   READ SCREEN SCREEN1&lt;br /&gt;
   END&lt;br /&gt;
END PROCEDURE&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; You can run several procedures between PROCA and PROCB with the same results as if you ran those two procedures sequentially, because the defined global objects persist.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===System administration issues===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
To review the implications of the global images and screens feature for system administrators, see the following topics:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;GTBL size &amp;amp;mdash; [[Large request considerations#GTBL (global variable table)|GTBL (global variable table)]], [[Defining the runtime environment (CCAIN)#Understanding the global variable table (GTBL)|Understanding the global variable table (GTBL)]], and [[GTBLHASH parameter]]&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;VTBL usage with COMMON images and screens &amp;amp;mdash; [[Large request considerations#VTBL (compiler variable table)|VTBL (compiler variable table)]] and [[Defining the runtime environment (CCAIN)#Compiler variable table (VTBL)|Compiler variable table (VTBL)]]&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;User since-last statistics &amp;amp;mdash; [[Using system statistics#User since-last statistics|User since-last statistics]] &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
==Clearing the GTBL work area==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When you log off, all global objects and global variables are cleared. If you want to clear some or all global objects or global variables from GTBL during your working session, prior to logging out, you can issue: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;CLEAR statement &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;CLEARG and/or CLEARGO commands&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;$DELG function to selectively delete global string variables&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;RESET command for the GTBLEHASH and GTBLPCT parameters&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;UTABLE command that changes the size of FTBL, XTBL, or GTBL clears all global objects of any type&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Using the CLEARG and CLEARGO commands===&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;Use this command &amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;To Remove...&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;[[CLEARG command|CLEARG]]&amp;lt;/var&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Only global string 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;&amp;lt;var&amp;gt;[[CLEARGO command|CLEARGO]]&amp;lt;/var&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;All global objects: images, screens, menus, found sets, lists, and temporary and permanent positions from GTBL; it does not clear global string variables. &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 &amp;lt;var&amp;gt;CLEARGO&amp;lt;/var&amp;gt; command takes no arguments.&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Using the $DELG function===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can use the &amp;lt;var&amp;gt;[[$Delg]]&amp;lt;/var&amp;gt; function to delete global string variables created by either &amp;lt;var&amp;gt;[[$Setg]]&amp;lt;/var&amp;gt; or &amp;lt;var&amp;gt;[[$Incrg]]&amp;lt;/var&amp;gt;. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The &amp;lt;var&amp;gt;[[$Delg]]&amp;lt;/var&amp;gt; function deletes a single or group of similar global string variables, releasing and compacting the GTBL space for reuse. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Using the CLEAR statement===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can use the &amp;lt;var&amp;gt;Clear&amp;lt;/var&amp;gt; statement to clear global objects of the same type, an individual global object, or all global string variables, as shown 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;The statement &amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Clears...&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td nowrap&amp;gt;&amp;lt;var&amp;gt;Clear &amp;lt;i&amp;gt;type-of-object&amp;lt;/i&amp;gt; Objects&amp;lt;/var&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;A class of global objects or all global objects. Global string variables are not cleared, because they are not objects. &amp;lt;/td&amp;gt;&lt;br /&gt;
&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;Clear Global&amp;lt;/var&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Individual global objects from GTBL. &amp;lt;/td&amp;gt;&lt;br /&gt;
&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;Clear Globals&amp;lt;/var&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;All global string variables. You cannot selectively clear individual global string variables with the &amp;lt;var&amp;gt;Clear&amp;lt;/var&amp;gt; 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;
====Syntax====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The format for the &amp;lt;var&amp;gt;Clear&amp;lt;/var&amp;gt; statement is:&amp;lt;/p&amp;gt;&lt;br /&gt;
{{Template:Clear statement syntax}}&lt;br /&gt;
Where:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;All&amp;lt;/var&amp;gt; clears all permanent and temporary global objects, including: found sets, lists, images, menus, positions, screens, and sorted sets from GTBL. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Temp&amp;lt;/var&amp;gt; clears only global objects explicitly declared as &amp;lt;var&amp;gt;Temp&amp;lt;/var&amp;gt; in your request, including images, menus, and screens from GTBL. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;ListFdst&amp;lt;/var&amp;gt; clears all global found sets, lists, and sorted sets from GTBL. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Position&amp;lt;/var&amp;gt; clears all permanent and temporary positions from GTBL. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Objects&amp;lt;/var&amp;gt; specifies that the &amp;lt;var&amp;gt;CLEAR&amp;lt;/var&amp;gt; command is operating on the object type you specified, or operating on all types of objects. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Global&amp;lt;/var&amp;gt; clears a specific global object from GTBL. You cannot clear a global string variable created with the &amp;lt;var&amp;gt;$Setg&amp;lt;/var&amp;gt; function using this form. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Position [Perm | Temp]&amp;lt;/var&amp;gt; The use of PERM or TEMP must be consistent with GLOBAL in the REMEMBER statement.  If GLOBAL is specified in the REMEMBER statement, then PERM is implied.  If GLOBAL is omitted from the REMEMBER statement, TEMP is implied.&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;objectname&amp;lt;/var&amp;gt; is the literal name of the specific global object to be cleared from GTBL. Enclose &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;objectname&amp;lt;/var&amp;gt; in single quotation marks.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;b&amp;gt;NOTE:&amp;lt;/b&amp;gt; If the &amp;lt;i&amp;gt;objectname&amp;lt;/i&amp;gt; is mixed case, be sure to use the same name, in single quotation marks, when referring to that name in other statements; e.g. REMEMBER or POSITION.&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;%variable&amp;lt;/var&amp;gt; contains a value that specifies the global object to be cleared from GTBL. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Globals&amp;lt;/var&amp;gt; clears all global string variables created with the &amp;lt;var&amp;gt;$Setg&amp;lt;/var&amp;gt; function from GTBL. This form does &amp;lt;em&amp;gt;not&amp;lt;/em&amp;gt; clear any global objects. &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 following statements clear all permanent and temporary global found sets, images, lists, menus, positions, screens, and sorted sets:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;Clear Objects&lt;br /&gt;
 &lt;br /&gt;
Clear All Objects&lt;br /&gt;
 &lt;br /&gt;
Clear All Global Objects&lt;br /&gt;
 &lt;br /&gt;
Clear Global Objects&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Clearing global found sets and lists===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can clear global found sets and lists in GTBL without logging off using the following examples: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Clear a specific global list or found set by issuing one of these statements:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;Clear Global List &#039;&amp;lt;i&amp;gt;objectname&amp;lt;/i&amp;gt;&#039;&lt;br /&gt;
 &lt;br /&gt;
Clear Global List &amp;lt;i&amp;gt;%variable&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
Clear Global Foundset &#039;&amp;lt;i&amp;gt;objectname&amp;lt;/i&amp;gt;&#039;&lt;br /&gt;
 &lt;br /&gt;
Clear Global Foundset &amp;lt;i&amp;gt;%variable&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;Clear all global found sets and lists with the statement: &lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;Clear ListFdst [Global] Objects &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
(Global found sets and lists are among the global objects cleared by the &amp;lt;var&amp;gt;CLEARGO&amp;lt;/var&amp;gt; command.) &amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Close a file or group with which a global list or found set is associated. This includes the file close processing done when exiting or stopping a subsystem. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Issue a &amp;lt;var&amp;gt;UTABLE&amp;lt;/var&amp;gt; command that changes the size of FTBL, XTBL, or GTBL. &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 you clear a global list or global found set, then any request that uses the global and does not have the &amp;lt;var&amp;gt;Find&amp;lt;/var&amp;gt; statement that creates the global object receives either of the following error messages:&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;M204.0301 Referenced statement label undefined&lt;br /&gt;
 &lt;br /&gt;
M204.0311 Unacceptable statement reference&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===RELEASE and COMMIT RELEASE statements with global foundsets and lists===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The &amp;lt;var&amp;gt;Release&amp;lt;/var&amp;gt; statements and the &amp;lt;var&amp;gt;Commit Release&amp;lt;/var&amp;gt; statements empty the contents of a global found set, global sort set, or global list. The label and positions associated with a found set, sort set, or the list is still considered global, but it is empty. Global positions are not cleared by &amp;lt;var&amp;gt;Release&amp;lt;/var&amp;gt; or &amp;lt;var&amp;gt;Commit Release&amp;lt;/var&amp;gt; statements, however, without records there is nothing to process.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Clearing remembered positions===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Each &amp;lt;var&amp;gt;Remember&amp;lt;/var&amp;gt; statement creates a GTBL entry, whether or not &amp;lt;var&amp;gt;Global&amp;lt;/var&amp;gt; is specified. If GLOBAL is not specified, the position is temporary and is cleared from GTBL at the end of request execution.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
All remembered positions, along with all other GTBL entries, are cleared when you log off. You can also clear remembered positions in the following ways:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;You can clear a specific temporary position by issuing one of these statements:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;Clear Global Position Temp &#039;&amp;lt;i&amp;gt;objectname&amp;lt;/i&amp;gt;&#039;&lt;br /&gt;
 &lt;br /&gt;
Clear Global Position Temp &amp;lt;i&amp;gt;%variable&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;You can clear a specific permanent position by issuing one of these statements: &lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;Clear Global Position Perm &#039;&amp;lt;i&amp;gt;objectname&amp;lt;/i&amp;gt;&#039;&lt;br /&gt;
 &lt;br /&gt;
Clear Global Position Perm &amp;lt;i&amp;gt;%variable&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;You clear all global found sets, lists, or sorted sets with which a remembered position is associated:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;Clear ListFdst [Global] Objects&lt;br /&gt;
&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;You clear all remembered positions by issuing the statement:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;Clear Position [Global] Objects&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;
====Usage notes====&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;When you are using the &amp;lt;var&amp;gt;Clear Global Position&amp;lt;/var&amp;gt; statement, &amp;lt;var&amp;gt;Perm&amp;lt;/var&amp;gt; is the default. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;The &amp;lt;var&amp;gt;CLEARGO&amp;lt;/var&amp;gt; command has the effect of clearing all remembered positions.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Any &amp;lt;var&amp;gt;UTABLE&amp;lt;/var&amp;gt; command that changes the size of FTBL, GTBL, or XTBL clears all remembered positions.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Timing and placement of a Clear statement===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The &amp;lt;var&amp;gt;Clear Global&amp;lt;/var&amp;gt; statement takes effect at evaluation time and its placement in a request can have significant consequences: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;If the global object being cleared is referenced in the same request, it is marked as pending clear. The global is then emptied (zero records), and all its record locks are removed. It is cleared and deleted from GTBL at the end of 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;/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>JDamon</name></author>
	</entry>
	<entry>
		<id>https://m204wiki.rocketsoftware.com/index.php?title=Global_features&amp;diff=120844</id>
		<title>Global features</title>
		<link rel="alternate" type="text/html" href="https://m204wiki.rocketsoftware.com/index.php?title=Global_features&amp;diff=120844"/>
		<updated>2026-04-23T17:07:37Z</updated>

		<summary type="html">&lt;p&gt;JDamon: /* Remember statement */&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;
&amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; offers several global features to store information in memory so that it is not automatically cleared between requests. The memory area for storing global information is a &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; internal work area or server table called the &amp;lt;b&amp;gt;global table&amp;lt;/b&amp;gt; or GTBL. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The global features are:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Global string variables&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Global objects&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Global found sets and lists&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Global screens, images, and menus&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Global positions&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Global information is available only to the user who creates it. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===GTBL internal work area===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Each user&#039;s GTBL is empty when the user logs in. GTBL accumulates global information that is available for the duration of the terminal session, unless you intentionally clear it. You can clear GTBL information selectively. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
For a discussion of GTBL space requirements, see [[Large request considerations#GTBL (global variable table)|GTBL (global variable table)]].&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Global items are stored in a specific order in GTBL. As shown in [[#GTBL internal work area|GTBL internal work area]], the area that stores global string variables is at the beginning of the table, and is built from the top down. The area that stores global objects is at the end of the table and is built from the bottom up. The unused or free space is between these two areas. &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;caption&amp;quot; style=&amp;quot;width:450px&amp;quot;&amp;gt;Storage of global variables and global objects in GTBL &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;figure&amp;quot;&amp;gt;[[File:Storage_of_global_vars_in_GTBL.png|450px]] &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Global string variables==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can use global string variables to: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Pass information from one request to another request&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Include procedures conditionally at the &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; command level&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Tailor a request dynamically &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;
As of Version 5.1, you can increase the speed and reduce the CPU time to find and update a global string variable by setting the &amp;lt;var&amp;gt;[[GTBLHASH parameter|GTBLHASH]]&amp;lt;/var&amp;gt; parameter to a nonzero value. The &amp;lt;var&amp;gt;GTBLHASH&amp;lt;/var&amp;gt; parameter specifies the number of buckets allocated in the global string variable section of GTBL.&lt;br /&gt;
When &amp;lt;var&amp;gt;GTBLHASH&amp;lt;/var&amp;gt; is a nonzero value, and you set or get a global string variable, the global string variable name is hashed to determine the bucket in which the name is located. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
This reduces the overall amount of data that must be scanned to find a global string variable or must be moved when a value is deleted or changes in size. If &amp;lt;var&amp;gt;GTBLHASH&amp;lt;/var&amp;gt; is 0, global string variables are processed as in pre-5.1 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;
The &amp;lt;var&amp;gt;[[GTBLPCT parameter|GTBLPCT]]&amp;lt;/var&amp;gt; parameter determines the initial percentage of GTBL to allocate for global string variables. The default value of &amp;lt;var&amp;gt;GTBLPCT&amp;lt;/var&amp;gt; is 50, meaning 50 percent of GTBL is initially allocated for global variable strings. The remainder, in this case 50 percent, is the initial allocation for global objects. However, if &amp;lt;var&amp;gt;GTBLHASH&amp;lt;/var&amp;gt; is 0, a nonzero setting for &amp;lt;var&amp;gt;GTBLPCT&amp;lt;/var&amp;gt; has no effect. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When in effect, if either area of GTBL fills and there are still free pages in GTBL, then GTBL can be rearranged if more space is required in the full area of GTBL. Because these rearrangements can be CPU intensive, Rocket Software recommends that you determine an accurate setting for &amp;lt;var&amp;gt;GTBLPCT&amp;lt;/var&amp;gt; to avoid frequent rearrangements. You can monitor the performance of the hash GTBL feature using the &amp;lt;code&amp;gt;GTBLRU&amp;lt;/code&amp;gt; user statistic and the &amp;lt;code&amp;gt;GTBLRS&amp;lt;/code&amp;gt; since-last statistic.&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Rearranging GTBL and tracking the rearrangements====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The following statistics are available as system statistics, user statistics and since-last statistics to keep track of GTBL rearrangements required for the hashed GTBL feature: &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;Statistic &amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Tracking&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;GTBLRU &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Number of GTBL rearrangements required to add a string variable global.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;GTBLRS &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Number of GTBL rearrangements required to add a global object. &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;
After reviewing the GTBLRU and GTBLRS statistics, you can consider taking the following actions: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;If both of these values are high, increase the size of GTBL by increasing &amp;lt;var&amp;gt;LGTBL&amp;lt;/var&amp;gt;. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;If GTBLRU is high but GTBLRS is not, increase &amp;lt;var&amp;gt;GTBLPCT&amp;lt;/var&amp;gt; or decrease &amp;lt;var&amp;gt;GTBLHASH&amp;lt;/var&amp;gt;. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;If GTBLRS is high but GTBLRU is low, decrease &amp;lt;var&amp;gt;GTBLPCT&amp;lt;/var&amp;gt;. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Global found sets and lists===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can use global found sets and lists to make found sets and lists available across request boundaries. A global found set or list remains in GTBL until you: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Explicitly delete it&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Issue a &amp;lt;var&amp;gt;Release&amp;lt;/var&amp;gt; or &amp;lt;var&amp;gt;Commit Release&amp;lt;/var&amp;gt; statement &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;The file or group it refers to is closed, including the file close processing done when exiting a subsystem or stopping &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Log out &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Sorted sets are a subgroup of found sets; they are treated the same by the &amp;lt;var&amp;gt;Clear&amp;lt;/var&amp;gt; statement that is used to clear global found sets.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Faster global variable processing option====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When global lists or found sets are processed as part of the &amp;lt;var&amp;gt;Find&amp;lt;/var&amp;gt; or &amp;lt;var&amp;gt;Place Records On&amp;lt;/var&amp;gt; statement, it must be verified that a global variable representing the list or found set exists in GTBL. The &amp;lt;var&amp;gt;CLEARG&amp;lt;/var&amp;gt; command or &amp;lt;var&amp;gt;Clear&amp;lt;/var&amp;gt; statement may delete the global variable, so an internal routine is called to verify whether the global variable is in GTBL. The internal routine creates a new copy, if it was deleted. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The internal routine scans NTBL to find an entry that points to the required variable, then it uses its hash value to scan GTBL. Scanning a large NTBL may take considerable time. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The NTBL scan can be eliminated, if internal variables representing global lists and found sets contain a global name hash value. Thus, an internal variable with a length of eight bytes that contains an NTBL entry offset points to the internal variable representing a global list or found set. This method avoids an NTBL scan, if a global variable has been deleted from GTBL. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
This faster global variable processing requires larger VTBL, because every global list or found set needs eight more bytes. If you want the benefit of this increased processing speed and can accommodate the increased VTBL requirement, set &amp;lt;var&amp;gt;FASTGLOB&amp;lt;/var&amp;gt; to 1. To maintain existing processing you can let &amp;lt;var&amp;gt;[[FASTGLOB parameter|FASTGLOB]]&amp;lt;/var&amp;gt; default to 0, or you can explicitly set &amp;lt;var&amp;gt;FASTGLOB&amp;lt;/var&amp;gt; to 0.&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Global positions===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can use &amp;lt;var&amp;gt;Remember&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;Position&amp;lt;/var&amp;gt; statements to save and recall a place in a &amp;lt;var&amp;gt;For&amp;lt;/var&amp;gt; loop, either globally or non-globally. This lets you suspend processing in a &amp;lt;var&amp;gt;For&amp;lt;/var&amp;gt; loop and resume it later, within the same request or in a subsequent request. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Global images and screens===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can use global images and screens to:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Pass image and screen data from one request to another&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Manage more than one image or screen in one request&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Manage menus, which are a special type of screen&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Reduce I/O by swapping modified global screens to CCASERVR instead of paging them between the buffer pool and CCATEMP &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Global string variables===&lt;br /&gt;
 &lt;br /&gt;
===Global string variable names and values===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Entries in the GTBL consist of global name=value pairs. The names and values of the global string variables are created with the &amp;lt;var&amp;gt;$Setg&amp;lt;/var&amp;gt; function from within a request. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;A global string variable name can consist of up to 255 characters and follows the naming conventions for variables (see [[Using variables and values in computation#%Variable names|%Variable names]]). Global string variables that contain special characters, other than a period (&amp;lt;tt&amp;gt;.&amp;lt;/tt&amp;gt;) cannot be used as &amp;lt;code&amp;gt;?&amp;amp;amp;&amp;lt;/code&amp;gt; dummy strings. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;A value can be 0, the null string, or up to 255 characters. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Clearing global string variables===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When a new value for an existing name is stored, the old entry is first deleted. Entries remain in the table until you delete them by issuing a &amp;lt;var&amp;gt;CLEARG&amp;lt;/var&amp;gt; command, execute a &amp;lt;var&amp;gt;Clear&amp;lt;/var&amp;gt; statement, execute a &amp;lt;var&amp;gt;$Delg&amp;lt;/var&amp;gt; function call, or you log out. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If you define a large number of global string variables, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; performance can be adversely affected. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
For details and examples of clearing global string variables, see [[#Clearing the GTBL work area|Clearing the GTBL work area]].&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Global variable functions and commands===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The following functions, statements, commands, and facilities manipulate entries in the global variable table: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Use the functions &amp;lt;var&amp;gt;[[$Setg]]&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;[[$Getg]]&amp;lt;/var&amp;gt; within a request to store and retrieve global string variables. Use &amp;lt;var&amp;gt;[[$Incrg]]&amp;lt;/var&amp;gt; to perform simple arithmetic on global string variables with numeric values. Use the &amp;lt;var&amp;gt;[[$Delg]]&amp;lt;/var&amp;gt; function to delete global string variables created by &amp;lt;var&amp;gt;$Setg&amp;lt;/var&amp;gt; or &amp;lt;var&amp;gt;$Incrg&amp;lt;/var&amp;gt;. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Use the &amp;lt;code&amp;gt;?&amp;amp;amp;&amp;lt;/code&amp;gt; dummy string within a request to read a variable in the GTBL. Refer to [[Procedures]] for more information about dummy strings. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Use the conditional &amp;lt;var&amp;gt;INCLUDE&amp;lt;/var&amp;gt; command (&amp;lt;code&amp;gt;IF A=B,&amp;lt;i&amp;gt;name&amp;lt;/i&amp;gt;&amp;lt;/code&amp;gt;) to search the global variable table for an entry whose name is A and whose value is &amp;lt;code&amp;gt;B&amp;lt;/code&amp;gt;. If the entry is found, the named procedure is included. The &amp;lt;var&amp;gt;IF&amp;lt;/var&amp;gt; command is discussed on [[#Conditional and unconditional INCLUDEs|Conditional and unconditional INCLUDEs]]. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Using global string variables in application subsystems===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
In addition to the above facilities, an application subsystem can designate specific global string variables in the subsystem definition. For more information about subsystem global string variables, refer to: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[[Application Subsystem development#Command line global variable|Command line global variable]] &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;[[Application Subsystem development#Communication global variable|Communication global variable]] &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;[[Application Subsystem development#Error global variable|Error global variable]] &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
==Passing string values from one request to another==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
It is often necessary to generate data in one request and to save the data for use in other independent requests to be run later in the terminal session. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Example 1====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Suppose that you want to store the current date in every record created during a session in YYMMDD format, a modified form of the value returned by the &amp;lt;var&amp;gt;$Date&amp;lt;/var&amp;gt; function. You can derive the date once at the beginning of the day and hold it for use throughout the day. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
At the beginning of the terminal session, you enter:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;BEGIN&lt;br /&gt;
    %DATE = $DATE&lt;br /&gt;
    %DATE = $SUBSTR(%DATE, 1, 2) -&lt;br /&gt;
         WITH $SUBSTR(%DATE, 4, 2) WITH -&lt;br /&gt;
         $SUBSTR(%DATE, 7, 2)&lt;br /&gt;
     IF $SETG(&#039;DATE&#039;, %DATE) THEN&lt;br /&gt;
          PRINT &#039;*** REQUEST TOO LONG - GTBL&#039;&lt;br /&gt;
          STOP&lt;br /&gt;
     END IF&lt;br /&gt;
END&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Later in the terminal session, you can use the specially formatted date: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;BEGIN&lt;br /&gt;
    %DATE = $GETG(&#039;DATE&#039;)&lt;br /&gt;
    STORE RECORD&lt;br /&gt;
        FIELD = VALUE&lt;br /&gt;
        FIELDB = VALUE&lt;br /&gt;
        DATE = %DATE&lt;br /&gt;
            .&lt;br /&gt;
            .&lt;br /&gt;
            .&lt;br /&gt;
    END STORE&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;
Assume that different sets of records are processed and the results are used to produce a final report. Because of compiler table limitations, you have to process requests that cannot be continued with the MORE command (see [[Large request considerations]]). You can store intermediate results in GTBL and produce the final report exclusively from the table.   &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;BEGIN&lt;br /&gt;
          .&lt;br /&gt;
          .&lt;br /&gt;
          .&lt;br /&gt;
      process hourly workers&#039; wages&lt;br /&gt;
          .&lt;br /&gt;
          .&lt;br /&gt;
          .&lt;br /&gt;
      IF $SETG(&#039;HOURLY TOTAL&#039;, %TOTAL) THEN&lt;br /&gt;
          PRINT &#039;*** REQUEST TOO LONG - GTBL&#039;&lt;br /&gt;
          STOP&lt;br /&gt;
      END IF&lt;br /&gt;
 &lt;br /&gt;
END&lt;br /&gt;
 &lt;br /&gt;
BEGIN&lt;br /&gt;
          .&lt;br /&gt;
          .&lt;br /&gt;
          .&lt;br /&gt;
      process monthly workers&#039; wages&lt;br /&gt;
          .&lt;br /&gt;
          .&lt;br /&gt;
          .&lt;br /&gt;
      IF $SETG(&#039;MONTHLY TOTAL&#039;, %TOTAL) THEN&lt;br /&gt;
          PRINT &#039;*** REQUEST TOO LONG - GTBL&#039;&lt;br /&gt;
          STOP&lt;br /&gt;
      END IF&lt;br /&gt;
END&lt;br /&gt;
 &lt;br /&gt;
BEGIN&lt;br /&gt;
      %HOURLY = $GETG(&#039;HOURLY TOTAL&#039;)&lt;br /&gt;
      %MONTHLY = $GETG(&#039;MONTHLY TOTAL&#039;)&lt;br /&gt;
           .&lt;br /&gt;
           .&lt;br /&gt;
           .&lt;br /&gt;
      format report&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;
==Using global string variables with a conditional INCLUDE command==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can use global string variables to create a modular programming environment in which you select procedures to perform a particular function without compiling and evaluating procedures designed for other related functions. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
To use global string variables effectively in creating such an environment, it is useful to review the differences between commands and User Language statements and between conditional and unconditional includes, as described in the following sections.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Differences between commands and User Language statements===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Commands and User Language statements have different effects and are used in different ways: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;System control commands can be issued only outside a request &amp;amp;mdash; at command level. They are acted upon immediately. User Language statements can be used only within a request. They are compiled on a line-by-line basis, but the entire request is not executed until &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; receives an END statement. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;INCLUDE is both a command and a User Language statement. In either context, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; is directed to take the next input line from an appropriate stored procedure. When the procedure lines are exhausted, the next input line is taken from the command or User Language statement immediately following the INCLUDE. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;IF has two formats: &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Conditional INCLUDE command&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;User Language statement &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;
===Conditional and unconditional INCLUDEs===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
A conditional include can be coded within an IF statement using the INCLUDE statement or with an INCLUDE command.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
An unconditional include can be coded with a standalone INCLUDE statement or command.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
This section describes conditional INCLUDE commands by providing examples and discussing how each example is processed.&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 request illustrates the conditional INCLUDE command:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;BEGIN&lt;br /&gt;
ALL: FIND ALL RECORDS&lt;br /&gt;
     END FIND&lt;br /&gt;
     FOR EACH RECORD IN ALL&lt;br /&gt;
         IF AGE GT &#039;10&#039; THEN&lt;br /&gt;
             IF $SETG(&#039;AGE&#039;, &#039;YES&#039;) THEN&lt;br /&gt;
                 PRINT &#039;*** REQUEST TOO LONG - GTBL&#039;&lt;br /&gt;
                 STOP&lt;br /&gt;
             END IF&lt;br /&gt;
         END IF&lt;br /&gt;
     END FOR&lt;br /&gt;
END&lt;br /&gt;
IF AGE = YES, COUNT&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====How Example 1 is processed====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The statements between the BEGIN and END are compiled and evaluated. If the AGE condition is true, a global string variable is set. &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; then processes the IF command. Statements in the COUNT procedure are compiled and executed only if the condition is true. Otherwise, the statements are never compiled.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Example 2====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Suppose that you enter record selection criteria and then select one of three reports to be generated. A set of four procedures can be created.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
For example, procedure A might contain the prompts for record selection and report type. Procedures B, C, and D might contain statements to produce the individual reports. Only procedure A and one of the other three procedures is compiled and evaluated. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;PROCEDURE A&lt;br /&gt;
BEGIN&lt;br /&gt;
FIND.RECS: FIND ALL RECORDS FOR WHICH&lt;br /&gt;
               ??SELECT.RECORDS&lt;br /&gt;
           END FIND&lt;br /&gt;
           IF $SETG(&#039;REPORTNUM&#039;, $READ(&#039;ENTER REPORT NO&#039;))&lt;br /&gt;
               THEN PRINT &#039;*** REQUEST TOO LONG - GTBL&#039;&lt;br /&gt;
               STOP&lt;br /&gt;
           END IF&lt;br /&gt;
END MORE&lt;br /&gt;
IF REPORTNUM = 1, B&lt;br /&gt;
IF REPORTNUM = 2, C&lt;br /&gt;
IF REPORTNUM = 3, D&lt;br /&gt;
END PROCEDURE&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Procedures B, C, and D have the same basic format, but variations in processing are applied to each record.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;PROCEDURE B&lt;br /&gt;
MORE&lt;br /&gt;
PROCESS: FOR EACH RECORD IN FIND.RECS&lt;br /&gt;
             .&lt;br /&gt;
             .&lt;br /&gt;
             .&lt;br /&gt;
         processing&lt;br /&gt;
             .&lt;br /&gt;
             .&lt;br /&gt;
             .&lt;br /&gt;
         END FOR PROCESS&lt;br /&gt;
END&lt;br /&gt;
END PROCEDURE&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====How Example 2 is processed====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The dialog produced by these procedures is shown below, with user input in boldface: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;b&amp;gt;INCLUDE A&amp;lt;/b&amp;gt;&lt;br /&gt;
??SELECT.RECORDS&lt;br /&gt;
&amp;lt;b&amp;gt;REGION = SOUTH OR WEST&amp;lt;/b&amp;gt;&lt;br /&gt;
$$ENTER REPORT NO&lt;br /&gt;
&amp;lt;b&amp;gt;2&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;i&amp;gt;output from Procedure C &amp;lt;/i&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Keep IF commands at as high a nesting level as possible====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
An alternate method of writing procedures is to follow each report&#039;s END MORE statement with IF commands. However, each procedure might then INCLUDE itself or another procedure, creating a lower level of nesting. If the procedure continued to INCLUDE itself, the maximum nesting level would be reached. As a general rule in a complex set of procedures, keep IF commands at as high a nesting level as possible. The global string variables to be tested can be set at any level.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
==Using global string variables to tailor a request==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Global string variables can be used in conjunction with the FILE$ condition (see [[Record retrievals#FILE$ condition|FILE$ condition]]) to access a set of files in a group. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Example====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
In the following example, the value of the global string variable, FILES, can be changed to access an alternative set of files. This example consists of two requests. The first &amp;amp;mdash; BEGIN through END MORE &amp;amp;mdash; sets the global string variable during the execution phase; the second &amp;amp;mdash; MORE through END &amp;amp;mdash; is then compiled with the correct value.   &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;
           IF $SETG(&#039;FILES&#039;,&#039;FILEA OR FILE$ FILEC&#039;) THEN&lt;br /&gt;
               PRINT &#039;***REQUEST TOO LONG -- GTBL&#039;&lt;br /&gt;
               %IGNORE = $SETG(&#039;FILES&#039;, &amp;amp;apos;&amp;amp;apos;)&lt;br /&gt;
           END IF&lt;br /&gt;
END MORE&lt;br /&gt;
MORE&lt;br /&gt;
           IF $GETG(&#039;files&#039;) = &amp;amp;apos;&amp;amp;apos; THEN&lt;br /&gt;
               STOP&lt;br /&gt;
           END IF&lt;br /&gt;
 GET.A:    FIND ALL RECORDS FOR WHICH&lt;br /&gt;
              (FILE$ ?&amp;amp;amp;FILES) AND FIELDX = &#039;A&#039;&lt;br /&gt;
           END FIND&lt;br /&gt;
           FOR EACH RECORD IN GET.A&lt;br /&gt;
               PRINT ALL INFORMATION&lt;br /&gt;
           END FOR&lt;br /&gt;
END&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
==Global objects==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Global objects include found sets, images, lists, menus, positions, screens, and sorted sets. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===General rules for declarations===&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;You must declare global lists, found sets, and sorted sets in every request that references them; the &amp;lt;var&amp;gt;Declare&amp;lt;/var&amp;gt; statement must come before the reference. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;If a global object is used in multiple subroutines, or in both the main program and a subroutine, the label must be declared as global in the main program before the subroutine(s). The subroutine(s) must then declare the label as common. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;If you refer to a global object before a &amp;lt;var&amp;gt;Declare&amp;lt;/var&amp;gt; statement, the system issues a duplicate label compilation error. Such a reference implicitly makes the object non global. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Incompatibility===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The [[PQO]] product does not support global found sets, lists, positions, or sorted sets. These global objects cannot be used in conjunction with remote files or scattered groups. This limitation exists, because GTBL does not exist on the PQO server. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Clearing global objects from GTBL===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
For syntax, details and examples of clearing global objects, see [[#Clearing the GTBL work area|Clearing the GTBL work area]]. &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Using global found sets and lists==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can pass found sets and lists from request to request by declaring them as &amp;lt;var&amp;gt;Global&amp;lt;/var&amp;gt;. A global found set or list is stored in the internal work area GTBL for the duration of the terminal session unless it is intentionally cleared, or the file or group with which it is associated is closed. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Creating a global found set or sorted set====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can create a global found set using this syntax: &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;[Declare] Label &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;labelname&amp;lt;/span&amp;gt; [Global | Common] &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;labelname&amp;lt;/var&amp;gt; is a unique global object name.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Creating a global list====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can declare a global list using the following syntax:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;[Declare] List &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;listname&amp;lt;/span&amp;gt; &lt;br /&gt;
  [In [File [Perm | Temp] Group] &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;name&amp;lt;/span&amp;gt;]&lt;br /&gt;
  [Global | Common] &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
In both cases, the keyword &amp;lt;var&amp;gt;Global&amp;lt;/var&amp;gt; implies &amp;lt;var&amp;gt;Common&amp;lt;/var&amp;gt;. These two keywords are mutually exclusive in the declaration statement. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Because &amp;lt;var&amp;gt;Global&amp;lt;/var&amp;gt; implies &amp;lt;var&amp;gt;Common&amp;lt;/var&amp;gt;, a list or found set can be declared &amp;lt;var&amp;gt;Global&amp;lt;/var&amp;gt; at any scope. See [[Subroutines#Scope of elements|Scope of elements]] for a discussion. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;The global name, label name, or list name, must be unique across all global objects. For a discussion, see [[Subroutines#Sharing common elements|Sharing common elements]]. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Usage rules====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The following rules apply to global found sets and lists: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;You must declare each global list or global found set as &amp;lt;code&amp;gt;&amp;lt;i&amp;gt;labelname&amp;lt;/i&amp;gt; Global&amp;lt;/code&amp;gt; in each procedure that uses it. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;The file context in which a global list or found set is used must be the same as the file context in which it was created. &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; compiler does not currently enforce this rule; therefore, your code must maintain this requirement. Rocket Software recommends that you populate a global found set or list only once within the scope of these global objects. However, this is not a restriction as long as file context is maintained. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Global found sets and lists are invalid in ad hoc group context. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Each global object name must be unique. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Global found sets and lists are not supported in remote file or scattered group contexts. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Example 1: Referencing a global found set===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
In this example, Procedure 1 declares the global found set and then performs the find. Procedure 2 needs only to declare the global found set and then reference the global found set labeled F1. The &amp;lt;var&amp;gt;For&amp;lt;/var&amp;gt; loops in both procedures process records in the &amp;lt;code&amp;gt;VEHICLES&amp;lt;/code&amp;gt; file for which the value of the field &amp;lt;code&amp;gt;COLOR&amp;lt;/code&amp;gt; was equal to &amp;lt;code&amp;gt;BLUE&amp;lt;/code&amp;gt; at the time of the evaluation of the &amp;lt;var&amp;gt;Find&amp;lt;/var&amp;gt; statement in Procedure 1. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;b&amp;gt;Procedure 1&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;BEGIN&lt;br /&gt;
DECLARE LABEL F1 GLOBAL&lt;br /&gt;
F1: IN VEHICLES FIND ALL RECORDS WHERE COLOR = &#039;BLUE&#039;&lt;br /&gt;
    END FIND&lt;br /&gt;
    FOR EACH RECORD IN F1&lt;br /&gt;
       PAI&lt;br /&gt;
    END FOR&lt;br /&gt;
END&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;b&amp;gt;Procedure 2&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;BEGIN&lt;br /&gt;
DECLARE LABEL F1 GLOBAL&lt;br /&gt;
    FOR EACH RECORD IN F1&lt;br /&gt;
       PAI&lt;br /&gt;
    END FOR&lt;br /&gt;
END&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Example 2: Maintaining file context===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Example 2 illustrates repopulating a global found set across the scope of its usage, maintaining the same file context throughout. In this example, Procedure 1 is identical to Procedure 1 in Example 1 above, and Procedure 3 is identical to Procedure 2 in Example 1. The second procedure in this example, however, performs a different find than the first. Procedure 3 then processes the records found in Procedure 2. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
So in this example, Procedure 1 processes records in the &amp;lt;code&amp;gt;VEHICLES&amp;lt;/code&amp;gt; file for which the value of the field &amp;lt;code&amp;gt;COLOR&amp;lt;/code&amp;gt; is equal to &amp;lt;code&amp;gt;BLUE&amp;lt;/code&amp;gt;, while Procedures 2 and 3 process records for which &amp;lt;code&amp;gt;COLOR&amp;lt;/code&amp;gt; was equal to &amp;lt;code&amp;gt;RED&amp;lt;/code&amp;gt; at the time of the &amp;lt;var&amp;gt;Find&amp;lt;/var&amp;gt; statement evaluation in Procedure 2. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;b&amp;gt;Procedure 1&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;BEGIN&lt;br /&gt;
DECLARE LABEL F1 GLOBAL&lt;br /&gt;
F1: IN VEHICLES FIND ALL RECORDS WHERE COLOR = &#039;BLUE&#039;&lt;br /&gt;
    END FIND&lt;br /&gt;
    FOR EACH RECORD IN F1&lt;br /&gt;
       PAI&lt;br /&gt;
    END FOR&lt;br /&gt;
END&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;b&amp;gt;Procedure 2&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;BEGIN&lt;br /&gt;
DECLARE LABEL F1 GLOBAL&lt;br /&gt;
F1: IN VEHICLES FIND ALL RECORDS WHERE COLOR = &#039;RED&#039;&lt;br /&gt;
    END FIND&lt;br /&gt;
    FOR EACH RECORD IN F1&lt;br /&gt;
       PAI&lt;br /&gt;
    END FOR&lt;br /&gt;
END&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;b&amp;gt;Procedure 3&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;BEGIN&lt;br /&gt;
DECLARE LABEL F1 GLOBAL&lt;br /&gt;
    FOR EACH RECORD IN F1&lt;br /&gt;
       PAI&lt;br /&gt;
    END FOR&lt;br /&gt;
END&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
==Using global sorted sets==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
A global sorted set is created when a SORT RECORDS statement or a FOR EACH RECORD IN ORDER BY statement is preceded by a label that has been declared GLOBAL. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Limiting subsequent references===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
For example, in Procedure 1 below, MAKE is the only field referenced in the request. Therefore, MAKE is the only field that can be referenced in subsequent requests. Thus, in Procedure 2, because the field MODEL was not referenced in the previous request, a blank is printed each time through the FOR loop. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Procedure 1====&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;BEGIN&lt;br /&gt;
DECLARE LABEL S1 GLOBAL&lt;br /&gt;
F1: IN VEHICLES FIND ALL RECORDS&lt;br /&gt;
    END FIND&lt;br /&gt;
S1: SORT RECORDS IN F1 BY MAKE&lt;br /&gt;
    FOR EACH RECORD IN S1&lt;br /&gt;
       PRINT MAKE&lt;br /&gt;
    END FOR&lt;br /&gt;
END&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Procedure 2====&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;BEGIN&lt;br /&gt;
DECLARE LABEL S1 GLOBAL&lt;br /&gt;
    FOR EACH RECORD IN S1&lt;br /&gt;
       PRINT MODEL&lt;br /&gt;
    END FOR&lt;br /&gt;
END&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Keeping all fields accessible for subsequent references===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
To ensure that all fields are accessible to subsequent requests, use a PAI or field name variable with the statement that creates the found set.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The sort key field(s) used on the SORT statement cannot be referred to by a subsequent request unless referred to in the SORT statement FOR loop in the request creating the set. While this restriction applies to the use of the SORT RECORDS statement, it does not apply to the use of the SORT RECORD KEYS statement.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If you are not going to refer to the sorted set in the request that creates the sorted set, you can code a FOR loop, which is compiled but never executed, that refers to each field that you want to refer to in a subsequent request. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
==Saving and recalling a position in a For loop==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can include statements in a &amp;lt;var&amp;gt;For&amp;lt;/var&amp;gt; loop to provide for the possibility of terminating the loop before the set of records or values being processed is exhausted. For example, you might use a &amp;lt;var&amp;gt;Jump To&amp;lt;/var&amp;gt; or &amp;lt;var&amp;gt;Loop End&amp;lt;/var&amp;gt; statement in conjunction with an &amp;lt;var&amp;gt;If&amp;lt;/var&amp;gt; statement to test each record or value before processing, and terminating the loop if a certain condition is met. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The &amp;lt;var&amp;gt;Remember&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;Position&amp;lt;/var&amp;gt; statements let you store the current processing position in a &amp;lt;var&amp;gt;For&amp;lt;/var&amp;gt; loop, then recall it at a later time and resume &amp;lt;var&amp;gt;For&amp;lt;/var&amp;gt; processing where you left off earlier. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Remember statement===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The purpose of the &amp;lt;var&amp;gt;Remember&amp;lt;/var&amp;gt; statement is to store the processing position in a &amp;lt;var&amp;gt;For&amp;lt;/var&amp;gt; loop. Each &amp;lt;var&amp;gt;Remember&amp;lt;/var&amp;gt; statement creates a GTBL entry of variable length. See [[Large request considerations]] for detailed descriptions of GTBL entries. If you remember a position as &amp;lt;var&amp;gt;Global&amp;lt;/var&amp;gt;, the entry remains in GTBL after the current request ends. &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; clears non-global &amp;lt;var&amp;gt;Remember&amp;lt;/var&amp;gt; positions at the end of each request.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Syntax====&lt;br /&gt;
{{Template:Remember statement syntax}}&lt;br /&gt;
Where:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The &amp;lt;var&amp;gt;Global&amp;lt;/var&amp;gt; option implies Perm and the position is retained in GTBL after the current request terminates. If &amp;lt;var&amp;gt;Global&amp;lt;/var&amp;gt; is not specified, TEMP is implied and the position is cleared from GTBL after the current request terminates.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;b&amp;gt;NOTE:&amp;lt;/B&amp;gt; The use of GLOBAL here must be consistent with the CLEAR GLOBAL POSITION statement.  If the latter is specified with PERM:&amp;lt;/p&amp;gt; &lt;br /&gt;
&amp;lt;p&amp;gt;CLEAR GLOBAL POSITION &amp;lt;b&amp;gt;PERM&amp;lt;/b&amp;gt; &#039;position_name&#039;,&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;then the REMEMBER statement must specify GLOBAL because it implies PERM.&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;position_name&amp;lt;/var&amp;gt; is a unique object name you assign to the &amp;lt;var&amp;gt;Remember&amp;lt;/var&amp;gt; position. &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;foundsortset_name&amp;lt;/var&amp;gt; or &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;list_name&amp;lt;/var&amp;gt; must be identical to the listname or label specified on the &amp;lt;var&amp;gt;For&amp;lt;/var&amp;gt; loop:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;If you are processing a found set or a sorted set, &amp;lt;code&amp;gt;In &amp;lt;i&amp;gt;foundsortset_name&amp;lt;/i&amp;gt;&amp;lt;/code&amp;gt; is the label of the &amp;lt;var&amp;gt;Find&amp;lt;/var&amp;gt; statement that generated it. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;If you are processing a list, &amp;lt;code&amp;gt;On &amp;lt;i&amp;gt;list_name&amp;lt;/i&amp;gt;&amp;lt;/code&amp;gt; is the name you gave to the list when you originally declared it. &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;
====Usage notes====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The following rules apply to the use of the &amp;lt;var&amp;gt;Remember&amp;lt;/var&amp;gt; statement:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Can appear only within a &amp;lt;var&amp;gt;For&amp;lt;/var&amp;gt; loop, but not a nested &amp;lt;var&amp;gt;For&amp;lt;/var&amp;gt; loop. The file context must be identical to the context of the &amp;lt;var&amp;gt;For&amp;lt;/var&amp;gt; loop. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Is invalid in ad hoc group context, if used with the &amp;lt;var&amp;gt;Global&amp;lt;/var&amp;gt; option. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;The &amp;lt;var&amp;gt;Remember&amp;lt;/var&amp;gt; statement is incompatible with &amp;lt;var&amp;gt;For Each Record In Order By&amp;lt;/var&amp;gt; clauses. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Position statement===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
A &amp;lt;var&amp;gt;Position&amp;lt;/var&amp;gt; statement recalls a remembered position, so you can resume &amp;lt;var&amp;gt;For&amp;lt;/var&amp;gt; processing in a list or found set that was terminated at an earlier time. For example, if you remembered the position at record number 5, then your foundset is positioned at record number 6 for further processing.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
This &amp;lt;var&amp;gt;Position&amp;lt;/var&amp;gt; statement is not to be confused with the &amp;lt;var&amp;gt;Position&amp;lt;/var&amp;gt; statement used to read records sequentially in an external VSAM KSDS file. See [[Images#Position statement|Position statement]]. &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;Position {Foundset &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;foundsortset_name&amp;lt;/span&amp;gt; | List &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;list_name&amp;lt;/span&amp;gt;} [At] &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;position_name&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
Where:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;foundsortset_name&amp;lt;/var&amp;gt; or &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;list_name&amp;lt;/var&amp;gt; must be identical to the list or label name used on a previous &amp;lt;var&amp;gt;Remember&amp;lt;/var&amp;gt; statement and in the &amp;lt;var&amp;gt;For&amp;lt;/var&amp;gt; statement that follows. &lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If you are about to resume the processing of a found set, &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;foundsortset_name&amp;lt;/var&amp;gt; is the label of the &amp;lt;var&amp;gt;Find&amp;lt;/var&amp;gt; statement that generated it. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If you are about to resume the processing of a list, &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;list_name&amp;lt;/var&amp;gt; is the name you gave to the list when you originally declared it.&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;position_name&amp;lt;/var&amp;gt; is a name that you assigned to the remembered position when you stored it on a previous &amp;lt;var&amp;gt;Remember&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;
====Usage notes====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
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;The &amp;lt;var&amp;gt;Position&amp;lt;/var&amp;gt; statement must appear outside, immediately before the &amp;lt;var&amp;gt;For&amp;lt;/var&amp;gt; loop to which it refers; it cannot be in the &amp;lt;var&amp;gt;For&amp;lt;/var&amp;gt; loop itself.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;The &amp;lt;var&amp;gt;For&amp;lt;/var&amp;gt; statement that follows the &amp;lt;var&amp;gt;Position&amp;lt;/var&amp;gt; statement must have an identical file context and list name or label name as the statement that initiated the &amp;lt;var&amp;gt;For&amp;lt;/var&amp;gt; loop of the remembered position.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;The &amp;lt;var&amp;gt;Position&amp;lt;/var&amp;gt; statement is incompatible with &amp;lt;var&amp;gt;For Each Record In Order By&amp;lt;/var&amp;gt; clauses. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
==Global images and screens==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can use global images and screens to pass image and screen data from one request to another and to efficiently manage more than one image or screen in one request. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can also declare global menus, because a menu is a special type of screen. In this section, the term &amp;quot;screen&amp;quot; applies to both screens and menus, unless otherwise noted. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Declaring global images and screens===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You make an image or screen global by specifying the keyword &amp;lt;var&amp;gt;Global&amp;lt;/var&amp;gt; in its declaration statement. You can declare global images and screens to be &amp;lt;var&amp;gt;Temporary&amp;lt;/var&amp;gt;, deleted at request termination, or &amp;lt;var&amp;gt;Permanent&amp;lt;/var&amp;gt;, persist across request termination. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===How images and screens are processed===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When you declare an image or screen as &amp;lt;var&amp;gt;Global&amp;lt;/var&amp;gt;, it is stored in GTBL. Nonglobal images and screens, declared as &amp;lt;var&amp;gt;Common&amp;lt;/var&amp;gt;, or neither &amp;lt;var&amp;gt;Common&amp;lt;/var&amp;gt; nor &amp;lt;var&amp;gt;Global&amp;lt;/var&amp;gt;, are stored in FSCB. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
This section provides some background information about how &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; processes images and screens, contrasting how global and nonglobal images and screens are processed. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Images and screen processing===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The figures in the following subsections represent how nonglobal and global objects are processed. Comparing the two types of processing highlights the I/O and storage savings associated with the global images and screens. &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Processing of nonglobal objects====&lt;br /&gt;
&amp;lt;p class=&amp;quot;figure&amp;quot;&amp;gt;[[File:Nonglobal_object_processing.png|550px]] &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The &amp;lt;b&amp;gt;Nonglobal object processing&amp;lt;/b&amp;gt; figure illustrates the process in the following steps:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The compiler loads a compiled version of the screen or image into FSCB in the user&#039;s server.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;A copy of the compiled object is stored in the buffer pool.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;A &amp;lt;var&amp;gt;Prepare&amp;lt;/var&amp;gt; statement acts on the compiled object in the buffer pool and copies it into FSCB.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Update statements act on the copy of the object in FSCB.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;The updated object is copied from FSCB to a working copy of the object in the buffer pool.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;If a user waits too long or the buffer pool fills up, the object is written to CCATEMP. When a user presses Enter for that object, the object is loaded back from CCATEMP to the buffer pool. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;amp;nbsp;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Processing of global objects==== &lt;br /&gt;
&amp;lt;p class=&amp;quot;figure&amp;quot;&amp;gt;[[File:Global_object_processing.png|550px]] &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The &amp;lt;b&amp;gt;Global object processing&amp;lt;/b&amp;gt; figure illustrates the process in the following steps: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The compiler loads a compiled version of the screen or image into FSCB in the user&#039;s server. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;A copy of the compiled object is stored in the buffer pool. This copy is called &#039;VIRGIN&#039;, as it is never updated. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;A &amp;lt;var&amp;gt;Prepare&amp;lt;/var&amp;gt; statement acts on the compiled object in the buffer pool and copies it into GTBL. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Update statements act on the copy in GTBL. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Using Prepare and Identify statements===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
To help you decide how to use the &amp;lt;var&amp;gt;Prepare&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;Identify&amp;lt;/var&amp;gt; statements, review the following:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[[#GTBL internal work area|GTBL internal work area]] &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;[[#Timing and placement of a CLEAR statement|Timing and placement of a CLEAR statement]] &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;For syntax and usage of the &amp;lt;var&amp;gt;Prepare&amp;lt;/var&amp;gt; statement, see [[Full-screen feature#PREPARE statement|Prepare statement]]&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;For syntax and usage of the &amp;lt;var&amp;gt;Identify&amp;lt;/var&amp;gt; statement, see [[Images#Identify statement|Identify statement]] &lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Also when using the &amp;lt;var&amp;gt;Identify&amp;lt;/var&amp;gt; statement, see [[#Consistency checks performed|Consistency checks performed]]. &amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Performance and efficiency benefits===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Global images and screens can simply and efficiently perform image-to-image processing and screen-to-image processing, eliminating the need to map screen items to image items when passing or preserving screens. Using global images and screens: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Reduces CPU resources required to pass data between requests in applications where a large number of global variables would have been necessary. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Reduces the FSCB I/O between multiple images and between images and screens. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Makes the declaration of global data explicit, thus traceable by using naming conventions and cross-reference tools. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Simplifies code, eliminating the need for &amp;lt;var&amp;gt;If $Setg() Then ...&amp;lt;/var&amp;gt; sequences to map request %variables into global variables and for &amp;lt;var&amp;gt;%xyz = $Getg()&amp;lt;/var&amp;gt; sequences to map global variables into request %variables. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Reduces I/O by swapping modified global screens to CCASERVR instead of paging them between the buffer pool and CCATEMP. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===When to use global images and screens===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You achieve the greatest benefit by declaring as &amp;lt;var&amp;gt;Global&amp;lt;/var&amp;gt; the most frequently used images and screens in an application. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Infrequently used images and screens declared as nonglobal do not put pressure on the buffer pool, because there would not be many copies in the buffer pool for many users, and little I/O with CCATEMP. If an application has many images and/or screens, GTBL might overflow if all the images and/or screens are defined as global. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Consistency checks performed===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When a global image or screen is first referred to in a request, GTBL is searched for the object. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If the object is&amp;lt;var&amp;gt; not&amp;lt;/var&amp;gt; already present in GTBL, the object is written into GTBL. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If the object is present, two consistency checks are performed:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Persistence &amp;amp;mdash; &amp;lt;var&amp;gt;Permanent&amp;lt;/var&amp;gt; or &amp;lt;var&amp;gt;Temporary&amp;lt;/var&amp;gt; status &amp;amp;mdash; of the new object must match the persistence of the object already in GTBL. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Definition &amp;amp;mdash; &amp;lt;var&amp;gt;Permanent&amp;lt;/var&amp;gt; or &amp;lt;var&amp;gt;Temporary&amp;lt;/var&amp;gt; &amp;amp;mdash; of the new object must match the definition of the object already in GTBL. &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; If a global image has an array that uses the &amp;lt;var&amp;gt;Depending On &amp;lt;i&amp;gt;%variable&amp;lt;/i&amp;gt;&amp;lt;/var&amp;gt; option, the names of the %variables are not compared when the definition check is performed. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If either of these consistency checks fails &amp;amp;mdash; for example, an image is declared as &amp;lt;var&amp;gt;Temporary&amp;lt;/var&amp;gt;, but the same image already exists in GTBL, declared as &amp;lt;var&amp;gt;Permanent&amp;lt;/var&amp;gt; &amp;amp;mdash; then the request is canceled and the [[M204.2158]] message is generated: &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;Global &amp;lt;i&amp;gt;object-type&amp;lt;/i&amp;gt; definition doesn&#039;t match value in GTBL​,​ &amp;lt;i&amp;gt;error-description&amp;lt;/i&amp;gt;, name hash=&amp;lt;i&amp;gt;hash-code&amp;lt;/i&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Using global images and screens==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The following example illustrates using global images and screens to pass screen and image data between User Language requests. The example consists of the following procedures:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SCREENDEF defines a global screen.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;IMAGEDEF defines a global image.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;PROCA sets the screen item value and an image item value.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;PROCB displays the updated image item and the original screen item. &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;PROCEDURE SCREENDEF&lt;br /&gt;
   * KEEP GLOBAL SCREENS AND IMAGES IN SEPARATE PROCEDURES&lt;br /&gt;
   * FOR CENTRAL DEFINITION&lt;br /&gt;
   SCREEN SCREEN1 GLOBAL&lt;br /&gt;
      PROMPT &#039;SCREEN1&#039;&lt;br /&gt;
      INPUT ITEM NUMERIC LEN 4 AT 10&lt;br /&gt;
   END SCREEN&lt;br /&gt;
END PROCEDURE&lt;br /&gt;
 &lt;br /&gt;
PROCEDURE IMAGEDEF&lt;br /&gt;
   * KEEP GLOBAL SCREENS AND IMAGES IN SEPARATE PROCEDURES&lt;br /&gt;
   * FOR CENTRAL DEFINITION&lt;br /&gt;
   IMAGE IMAGE1 GLOBAL&lt;br /&gt;
      ITEM IS FLOAT LEN 8&lt;br /&gt;
   END IMAGE&lt;br /&gt;
END PROCEDURE&lt;br /&gt;
 &lt;br /&gt;
PROCEDURE PROCA&lt;br /&gt;
   BEGIN&lt;br /&gt;
   INCLUDE SCREENDEF&lt;br /&gt;
   INCLUDE IMAGEDEF&lt;br /&gt;
   * INITIALIZE SCREEN1 AND IMAGE1&lt;br /&gt;
   PREPARE SCREEN SCREEN1&lt;br /&gt;
   PREPARE IMAGE IMAGE1&lt;br /&gt;
   * USER SEES SCREEN1 AND ENTERS A VALUE N (E.G., 10) AS INPUT&lt;br /&gt;
   READ SCREEN SCREEN1&lt;br /&gt;
   %IMAGE1:ITEM = %SCREEN1:ITEM + 3&lt;br /&gt;
   END&lt;br /&gt;
END PROCEDURE&lt;br /&gt;
 &lt;br /&gt;
PROCEDURE PROCB&lt;br /&gt;
   BEGIN&lt;br /&gt;
   INCLUDE SCREENDEF&lt;br /&gt;
   INCLUDE IMAGEDEF&lt;br /&gt;
   * DO NOT INITIALIZE, JUST IDENTIFY FOR SUBSEQUENT REFERRAL&lt;br /&gt;
   IDENTIFY IMAGE IMAGE1&lt;br /&gt;
      * USER SEES UPDATED IMAGE ITEM (N+3) IN NEW REQUEST&lt;br /&gt;
   PRINT &#039;IMAGE ITEM = &#039; WITH %IMAGE1:ITEM&lt;br /&gt;
   * USER SEES ORIGINAL SCREEN ITEM WITH DATA THAT USER ENTERED&lt;br /&gt;
   READ SCREEN SCREEN1&lt;br /&gt;
   END&lt;br /&gt;
END PROCEDURE&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; You can run several procedures between PROCA and PROCB with the same results as if you ran those two procedures sequentially, because the defined global objects persist.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===System administration issues===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
To review the implications of the global images and screens feature for system administrators, see the following topics:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;GTBL size &amp;amp;mdash; [[Large request considerations#GTBL (global variable table)|GTBL (global variable table)]], [[Defining the runtime environment (CCAIN)#Understanding the global variable table (GTBL)|Understanding the global variable table (GTBL)]], and [[GTBLHASH parameter]]&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;VTBL usage with COMMON images and screens &amp;amp;mdash; [[Large request considerations#VTBL (compiler variable table)|VTBL (compiler variable table)]] and [[Defining the runtime environment (CCAIN)#Compiler variable table (VTBL)|Compiler variable table (VTBL)]]&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;User since-last statistics &amp;amp;mdash; [[Using system statistics#User since-last statistics|User since-last statistics]] &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
==Clearing the GTBL work area==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When you log off, all global objects and global variables are cleared. If you want to clear some or all global objects or global variables from GTBL during your working session, prior to logging out, you can issue: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;CLEAR statement &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;CLEARG and/or CLEARGO commands&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;$DELG function to selectively delete global string variables&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;RESET command for the GTBLEHASH and GTBLPCT parameters&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;UTABLE command that changes the size of FTBL, XTBL, or GTBL clears all global objects of any type&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Using the CLEARG and CLEARGO commands===&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;Use this command &amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;To Remove...&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;[[CLEARG command|CLEARG]]&amp;lt;/var&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Only global string 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;&amp;lt;var&amp;gt;[[CLEARGO command|CLEARGO]]&amp;lt;/var&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;All global objects: images, screens, menus, found sets, lists, and temporary and permanent positions from GTBL; it does not clear global string variables. &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 &amp;lt;var&amp;gt;CLEARGO&amp;lt;/var&amp;gt; command takes no arguments.&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Using the $DELG function===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can use the &amp;lt;var&amp;gt;[[$Delg]]&amp;lt;/var&amp;gt; function to delete global string variables created by either &amp;lt;var&amp;gt;[[$Setg]]&amp;lt;/var&amp;gt; or &amp;lt;var&amp;gt;[[$Incrg]]&amp;lt;/var&amp;gt;. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The &amp;lt;var&amp;gt;[[$Delg]]&amp;lt;/var&amp;gt; function deletes a single or group of similar global string variables, releasing and compacting the GTBL space for reuse. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Using the CLEAR statement===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can use the &amp;lt;var&amp;gt;Clear&amp;lt;/var&amp;gt; statement to clear global objects of the same type, an individual global object, or all global string variables, as shown 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;The statement &amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Clears...&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td nowrap&amp;gt;&amp;lt;var&amp;gt;Clear &amp;lt;i&amp;gt;type-of-object&amp;lt;/i&amp;gt; Objects&amp;lt;/var&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;A class of global objects or all global objects. Global string variables are not cleared, because they are not objects. &amp;lt;/td&amp;gt;&lt;br /&gt;
&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;Clear Global&amp;lt;/var&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Individual global objects from GTBL. &amp;lt;/td&amp;gt;&lt;br /&gt;
&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;Clear Globals&amp;lt;/var&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;All global string variables. You cannot selectively clear individual global string variables with the &amp;lt;var&amp;gt;Clear&amp;lt;/var&amp;gt; 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;
====Syntax====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The format for the &amp;lt;var&amp;gt;Clear&amp;lt;/var&amp;gt; statement is:&amp;lt;/p&amp;gt;&lt;br /&gt;
{{Template:Clear statement syntax}}&lt;br /&gt;
Where:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;All&amp;lt;/var&amp;gt; clears all permanent and temporary global objects, including: found sets, lists, images, menus, positions, screens, and sorted sets from GTBL. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Temp&amp;lt;/var&amp;gt; clears only global objects explicitly declared as &amp;lt;var&amp;gt;Temp&amp;lt;/var&amp;gt; in your request, including images, menus, and screens from GTBL. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;ListFdst&amp;lt;/var&amp;gt; clears all global found sets, lists, and sorted sets from GTBL. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Position&amp;lt;/var&amp;gt; clears all permanent and temporary positions from GTBL. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Objects&amp;lt;/var&amp;gt; specifies that the &amp;lt;var&amp;gt;CLEAR&amp;lt;/var&amp;gt; command is operating on the object type you specified, or operating on all types of objects. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Global&amp;lt;/var&amp;gt; clears a specific global object from GTBL. You cannot clear a global string variable created with the &amp;lt;var&amp;gt;$Setg&amp;lt;/var&amp;gt; function using this form. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Position [Perm | Temp]&amp;lt;/var&amp;gt; The use of PERM or TEMP must be consistent with GLOBAL in the REMEMBER statement.  If GLOBAL is specified in the REMEMBER statement, then PERM is implied.  If GLOBAL is omitted from the REMEMBER statement, TEMP is implied.&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;objectname&amp;lt;/var&amp;gt; is the literal name of the specific global object to be cleared from GTBL. Enclose &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;objectname&amp;lt;/var&amp;gt; in single quotation marks.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;b&amp;gt;NOTE:&amp;lt;/b&amp;gt; If the &amp;lt;i&amp;gt;objectname&amp;lt;/i&amp;gt; is mixed case, be sure to use the same name, in single quotation marks, when referring to that name in other statements; e.g. REMEMBER or POSITION.&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;%variable&amp;lt;/var&amp;gt; contains a value that specifies the global object to be cleared from GTBL. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Globals&amp;lt;/var&amp;gt; clears all global string variables created with the &amp;lt;var&amp;gt;$Setg&amp;lt;/var&amp;gt; function from GTBL. This form does &amp;lt;em&amp;gt;not&amp;lt;/em&amp;gt; clear any global objects. &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 following statements clear all permanent and temporary global found sets, images, lists, menus, positions, screens, and sorted sets:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;Clear Objects&lt;br /&gt;
 &lt;br /&gt;
Clear All Objects&lt;br /&gt;
 &lt;br /&gt;
Clear All Global Objects&lt;br /&gt;
 &lt;br /&gt;
Clear Global Objects&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Clearing global found sets and lists===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can clear global found sets and lists in GTBL without logging off using the following examples: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Clear a specific global list or found set by issuing one of these statements:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;Clear Global List &#039;&amp;lt;i&amp;gt;objectname&amp;lt;/i&amp;gt;&#039;&lt;br /&gt;
 &lt;br /&gt;
Clear Global List &amp;lt;i&amp;gt;%variable&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
Clear Global Foundset &#039;&amp;lt;i&amp;gt;objectname&amp;lt;/i&amp;gt;&#039;&lt;br /&gt;
 &lt;br /&gt;
Clear Global Foundset &amp;lt;i&amp;gt;%variable&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;Clear all global found sets and lists with the statement: &lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;Clear ListFdst [Global] Objects &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
(Global found sets and lists are among the global objects cleared by the &amp;lt;var&amp;gt;CLEARGO&amp;lt;/var&amp;gt; command.) &amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Close a file or group with which a global list or found set is associated. This includes the file close processing done when exiting or stopping a subsystem. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Issue a &amp;lt;var&amp;gt;UTABLE&amp;lt;/var&amp;gt; command that changes the size of FTBL, XTBL, or GTBL. &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 you clear a global list or global found set, then any request that uses the global and does not have the &amp;lt;var&amp;gt;Find&amp;lt;/var&amp;gt; statement that creates the global object receives either of the following error messages:&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;M204.0301 Referenced statement label undefined&lt;br /&gt;
 &lt;br /&gt;
M204.0311 Unacceptable statement reference&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===RELEASE and COMMIT RELEASE statements with global foundsets and lists===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The &amp;lt;var&amp;gt;Release&amp;lt;/var&amp;gt; statements and the &amp;lt;var&amp;gt;Commit Release&amp;lt;/var&amp;gt; statements empty the contents of a global found set, global sort set, or global list. The label and positions associated with a found set, sort set, or the list is still considered global, but it is empty. Global positions are not cleared by &amp;lt;var&amp;gt;Release&amp;lt;/var&amp;gt; or &amp;lt;var&amp;gt;Commit Release&amp;lt;/var&amp;gt; statements, however, without records there is nothing to process.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Clearing remembered positions===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Each &amp;lt;var&amp;gt;Remember&amp;lt;/var&amp;gt; statement creates a GTBL entry, whether or not &amp;lt;var&amp;gt;Global&amp;lt;/var&amp;gt; is specified. If GLOBAL is not specified, the position is temporary and is cleared from GTBL at the end of request execution.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
All remembered positions, along with all other GTBL entries, are cleared when you log off. You can also clear remembered positions in the following ways:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;You can clear a specific temporary position by issuing one of these statements:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;Clear Global Position Temp &#039;&amp;lt;i&amp;gt;objectname&amp;lt;/i&amp;gt;&#039;&lt;br /&gt;
 &lt;br /&gt;
Clear Global Position Temp &amp;lt;i&amp;gt;%variable&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;You can clear a specific permanent position by issuing one of these statements: &lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;Clear Global Position Perm &#039;&amp;lt;i&amp;gt;objectname&amp;lt;/i&amp;gt;&#039;&lt;br /&gt;
 &lt;br /&gt;
Clear Global Position Perm &amp;lt;i&amp;gt;%variable&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;You clear all global found sets, lists, or sorted sets with which a remembered position is associated:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;Clear ListFdst [Global] Objects&lt;br /&gt;
&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;You clear all remembered positions by issuing the statement:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;Clear Position [Global] Objects&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;
====Usage notes====&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;When you are using the &amp;lt;var&amp;gt;Clear Global Position&amp;lt;/var&amp;gt; statement, &amp;lt;var&amp;gt;Perm&amp;lt;/var&amp;gt; is the default. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;The &amp;lt;var&amp;gt;CLEARGO&amp;lt;/var&amp;gt; command has the effect of clearing all remembered positions.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Any &amp;lt;var&amp;gt;UTABLE&amp;lt;/var&amp;gt; command that changes the size of FTBL, GTBL, or XTBL clears all remembered positions.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Timing and placement of a Clear statement===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The &amp;lt;var&amp;gt;Clear Global&amp;lt;/var&amp;gt; statement takes effect at evaluation time and its placement in a request can have significant consequences: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;If the global object being cleared is referenced in the same request, it is marked as pending clear. The global is then emptied (zero records), and all its record locks are removed. It is cleared and deleted from GTBL at the end of 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;/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>JDamon</name></author>
	</entry>
	<entry>
		<id>https://m204wiki.rocketsoftware.com/index.php?title=Global_features&amp;diff=120817</id>
		<title>Global features</title>
		<link rel="alternate" type="text/html" href="https://m204wiki.rocketsoftware.com/index.php?title=Global_features&amp;diff=120817"/>
		<updated>2026-04-13T20:08:20Z</updated>

		<summary type="html">&lt;p&gt;JDamon: /* Syntax */&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;
&amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; offers several global features to store information in memory so that it is not automatically cleared between requests. The memory area for storing global information is a &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; internal work area or server table called the &amp;lt;b&amp;gt;global table&amp;lt;/b&amp;gt; or GTBL. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The global features are:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Global string variables&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Global objects&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Global found sets and lists&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Global screens, images, and menus&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Global positions&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Global information is available only to the user who creates it. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===GTBL internal work area===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Each user&#039;s GTBL is empty when the user logs in. GTBL accumulates global information that is available for the duration of the terminal session, unless you intentionally clear it. You can clear GTBL information selectively. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
For a discussion of GTBL space requirements, see [[Large request considerations#GTBL (global variable table)|GTBL (global variable table)]].&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Global items are stored in a specific order in GTBL. As shown in [[#GTBL internal work area|GTBL internal work area]], the area that stores global string variables is at the beginning of the table, and is built from the top down. The area that stores global objects is at the end of the table and is built from the bottom up. The unused or free space is between these two areas. &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;caption&amp;quot; style=&amp;quot;width:450px&amp;quot;&amp;gt;Storage of global variables and global objects in GTBL &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;figure&amp;quot;&amp;gt;[[File:Storage_of_global_vars_in_GTBL.png|450px]] &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Global string variables==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can use global string variables to: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Pass information from one request to another request&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Include procedures conditionally at the &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; command level&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Tailor a request dynamically &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;
As of Version 5.1, you can increase the speed and reduce the CPU time to find and update a global string variable by setting the &amp;lt;var&amp;gt;[[GTBLHASH parameter|GTBLHASH]]&amp;lt;/var&amp;gt; parameter to a nonzero value. The &amp;lt;var&amp;gt;GTBLHASH&amp;lt;/var&amp;gt; parameter specifies the number of buckets allocated in the global string variable section of GTBL.&lt;br /&gt;
When &amp;lt;var&amp;gt;GTBLHASH&amp;lt;/var&amp;gt; is a nonzero value, and you set or get a global string variable, the global string variable name is hashed to determine the bucket in which the name is located. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
This reduces the overall amount of data that must be scanned to find a global string variable or must be moved when a value is deleted or changes in size. If &amp;lt;var&amp;gt;GTBLHASH&amp;lt;/var&amp;gt; is 0, global string variables are processed as in pre-5.1 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;
The &amp;lt;var&amp;gt;[[GTBLPCT parameter|GTBLPCT]]&amp;lt;/var&amp;gt; parameter determines the initial percentage of GTBL to allocate for global string variables. The default value of &amp;lt;var&amp;gt;GTBLPCT&amp;lt;/var&amp;gt; is 50, meaning 50 percent of GTBL is initially allocated for global variable strings. The remainder, in this case 50 percent, is the initial allocation for global objects. However, if &amp;lt;var&amp;gt;GTBLHASH&amp;lt;/var&amp;gt; is 0, a nonzero setting for &amp;lt;var&amp;gt;GTBLPCT&amp;lt;/var&amp;gt; has no effect. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When in effect, if either area of GTBL fills and there are still free pages in GTBL, then GTBL can be rearranged if more space is required in the full area of GTBL. Because these rearrangements can be CPU intensive, Rocket Software recommends that you determine an accurate setting for &amp;lt;var&amp;gt;GTBLPCT&amp;lt;/var&amp;gt; to avoid frequent rearrangements. You can monitor the performance of the hash GTBL feature using the &amp;lt;code&amp;gt;GTBLRU&amp;lt;/code&amp;gt; user statistic and the &amp;lt;code&amp;gt;GTBLRS&amp;lt;/code&amp;gt; since-last statistic.&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Rearranging GTBL and tracking the rearrangements====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The following statistics are available as system statistics, user statistics and since-last statistics to keep track of GTBL rearrangements required for the hashed GTBL feature: &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;Statistic &amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Tracking&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;GTBLRU &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Number of GTBL rearrangements required to add a string variable global.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;GTBLRS &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Number of GTBL rearrangements required to add a global object. &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;
After reviewing the GTBLRU and GTBLRS statistics, you can consider taking the following actions: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;If both of these values are high, increase the size of GTBL by increasing &amp;lt;var&amp;gt;LGTBL&amp;lt;/var&amp;gt;. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;If GTBLRU is high but GTBLRS is not, increase &amp;lt;var&amp;gt;GTBLPCT&amp;lt;/var&amp;gt; or decrease &amp;lt;var&amp;gt;GTBLHASH&amp;lt;/var&amp;gt;. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;If GTBLRS is high but GTBLRU is low, decrease &amp;lt;var&amp;gt;GTBLPCT&amp;lt;/var&amp;gt;. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Global found sets and lists===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can use global found sets and lists to make found sets and lists available across request boundaries. A global found set or list remains in GTBL until you: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Explicitly delete it&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Issue a &amp;lt;var&amp;gt;Release&amp;lt;/var&amp;gt; or &amp;lt;var&amp;gt;Commit Release&amp;lt;/var&amp;gt; statement &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;The file or group it refers to is closed, including the file close processing done when exiting a subsystem or stopping &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Log out &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Sorted sets are a subgroup of found sets; they are treated the same by the &amp;lt;var&amp;gt;Clear&amp;lt;/var&amp;gt; statement that is used to clear global found sets.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Faster global variable processing option====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When global lists or found sets are processed as part of the &amp;lt;var&amp;gt;Find&amp;lt;/var&amp;gt; or &amp;lt;var&amp;gt;Place Records On&amp;lt;/var&amp;gt; statement, it must be verified that a global variable representing the list or found set exists in GTBL. The &amp;lt;var&amp;gt;CLEARG&amp;lt;/var&amp;gt; command or &amp;lt;var&amp;gt;Clear&amp;lt;/var&amp;gt; statement may delete the global variable, so an internal routine is called to verify whether the global variable is in GTBL. The internal routine creates a new copy, if it was deleted. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The internal routine scans NTBL to find an entry that points to the required variable, then it uses its hash value to scan GTBL. Scanning a large NTBL may take considerable time. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The NTBL scan can be eliminated, if internal variables representing global lists and found sets contain a global name hash value. Thus, an internal variable with a length of eight bytes that contains an NTBL entry offset points to the internal variable representing a global list or found set. This method avoids an NTBL scan, if a global variable has been deleted from GTBL. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
This faster global variable processing requires larger VTBL, because every global list or found set needs eight more bytes. If you want the benefit of this increased processing speed and can accommodate the increased VTBL requirement, set &amp;lt;var&amp;gt;FASTGLOB&amp;lt;/var&amp;gt; to 1. To maintain existing processing you can let &amp;lt;var&amp;gt;[[FASTGLOB parameter|FASTGLOB]]&amp;lt;/var&amp;gt; default to 0, or you can explicitly set &amp;lt;var&amp;gt;FASTGLOB&amp;lt;/var&amp;gt; to 0.&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Global positions===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can use &amp;lt;var&amp;gt;Remember&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;Position&amp;lt;/var&amp;gt; statements to save and recall a place in a &amp;lt;var&amp;gt;For&amp;lt;/var&amp;gt; loop, either globally or non-globally. This lets you suspend processing in a &amp;lt;var&amp;gt;For&amp;lt;/var&amp;gt; loop and resume it later, within the same request or in a subsequent request. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Global images and screens===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can use global images and screens to:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Pass image and screen data from one request to another&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Manage more than one image or screen in one request&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Manage menus, which are a special type of screen&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Reduce I/O by swapping modified global screens to CCASERVR instead of paging them between the buffer pool and CCATEMP &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Global string variables===&lt;br /&gt;
 &lt;br /&gt;
===Global string variable names and values===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Entries in the GTBL consist of global name=value pairs. The names and values of the global string variables are created with the &amp;lt;var&amp;gt;$Setg&amp;lt;/var&amp;gt; function from within a request. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;A global string variable name can consist of up to 255 characters and follows the naming conventions for variables (see [[Using variables and values in computation#%Variable names|%Variable names]]). Global string variables that contain special characters, other than a period (&amp;lt;tt&amp;gt;.&amp;lt;/tt&amp;gt;) cannot be used as &amp;lt;code&amp;gt;?&amp;amp;amp;&amp;lt;/code&amp;gt; dummy strings. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;A value can be 0, the null string, or up to 255 characters. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Clearing global string variables===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When a new value for an existing name is stored, the old entry is first deleted. Entries remain in the table until you delete them by issuing a &amp;lt;var&amp;gt;CLEARG&amp;lt;/var&amp;gt; command, execute a &amp;lt;var&amp;gt;Clear&amp;lt;/var&amp;gt; statement, execute a &amp;lt;var&amp;gt;$Delg&amp;lt;/var&amp;gt; function call, or you log out. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If you define a large number of global string variables, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; performance can be adversely affected. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
For details and examples of clearing global string variables, see [[#Clearing the GTBL work area|Clearing the GTBL work area]].&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Global variable functions and commands===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The following functions, statements, commands, and facilities manipulate entries in the global variable table: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Use the functions &amp;lt;var&amp;gt;[[$Setg]]&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;[[$Getg]]&amp;lt;/var&amp;gt; within a request to store and retrieve global string variables. Use &amp;lt;var&amp;gt;[[$Incrg]]&amp;lt;/var&amp;gt; to perform simple arithmetic on global string variables with numeric values. Use the &amp;lt;var&amp;gt;[[$Delg]]&amp;lt;/var&amp;gt; function to delete global string variables created by &amp;lt;var&amp;gt;$Setg&amp;lt;/var&amp;gt; or &amp;lt;var&amp;gt;$Incrg&amp;lt;/var&amp;gt;. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Use the &amp;lt;code&amp;gt;?&amp;amp;amp;&amp;lt;/code&amp;gt; dummy string within a request to read a variable in the GTBL. Refer to [[Procedures]] for more information about dummy strings. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Use the conditional &amp;lt;var&amp;gt;INCLUDE&amp;lt;/var&amp;gt; command (&amp;lt;code&amp;gt;IF A=B,&amp;lt;i&amp;gt;name&amp;lt;/i&amp;gt;&amp;lt;/code&amp;gt;) to search the global variable table for an entry whose name is A and whose value is &amp;lt;code&amp;gt;B&amp;lt;/code&amp;gt;. If the entry is found, the named procedure is included. The &amp;lt;var&amp;gt;IF&amp;lt;/var&amp;gt; command is discussed on [[#Conditional and unconditional INCLUDEs|Conditional and unconditional INCLUDEs]]. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Using global string variables in application subsystems===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
In addition to the above facilities, an application subsystem can designate specific global string variables in the subsystem definition. For more information about subsystem global string variables, refer to: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[[Application Subsystem development#Command line global variable|Command line global variable]] &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;[[Application Subsystem development#Communication global variable|Communication global variable]] &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;[[Application Subsystem development#Error global variable|Error global variable]] &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
==Passing string values from one request to another==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
It is often necessary to generate data in one request and to save the data for use in other independent requests to be run later in the terminal session. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Example 1====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Suppose that you want to store the current date in every record created during a session in YYMMDD format, a modified form of the value returned by the &amp;lt;var&amp;gt;$Date&amp;lt;/var&amp;gt; function. You can derive the date once at the beginning of the day and hold it for use throughout the day. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
At the beginning of the terminal session, you enter:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;BEGIN&lt;br /&gt;
    %DATE = $DATE&lt;br /&gt;
    %DATE = $SUBSTR(%DATE, 1, 2) -&lt;br /&gt;
         WITH $SUBSTR(%DATE, 4, 2) WITH -&lt;br /&gt;
         $SUBSTR(%DATE, 7, 2)&lt;br /&gt;
     IF $SETG(&#039;DATE&#039;, %DATE) THEN&lt;br /&gt;
          PRINT &#039;*** REQUEST TOO LONG - GTBL&#039;&lt;br /&gt;
          STOP&lt;br /&gt;
     END IF&lt;br /&gt;
END&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Later in the terminal session, you can use the specially formatted date: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;BEGIN&lt;br /&gt;
    %DATE = $GETG(&#039;DATE&#039;)&lt;br /&gt;
    STORE RECORD&lt;br /&gt;
        FIELD = VALUE&lt;br /&gt;
        FIELDB = VALUE&lt;br /&gt;
        DATE = %DATE&lt;br /&gt;
            .&lt;br /&gt;
            .&lt;br /&gt;
            .&lt;br /&gt;
    END STORE&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;
Assume that different sets of records are processed and the results are used to produce a final report. Because of compiler table limitations, you have to process requests that cannot be continued with the MORE command (see [[Large request considerations]]). You can store intermediate results in GTBL and produce the final report exclusively from the table.   &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;BEGIN&lt;br /&gt;
          .&lt;br /&gt;
          .&lt;br /&gt;
          .&lt;br /&gt;
      process hourly workers&#039; wages&lt;br /&gt;
          .&lt;br /&gt;
          .&lt;br /&gt;
          .&lt;br /&gt;
      IF $SETG(&#039;HOURLY TOTAL&#039;, %TOTAL) THEN&lt;br /&gt;
          PRINT &#039;*** REQUEST TOO LONG - GTBL&#039;&lt;br /&gt;
          STOP&lt;br /&gt;
      END IF&lt;br /&gt;
 &lt;br /&gt;
END&lt;br /&gt;
 &lt;br /&gt;
BEGIN&lt;br /&gt;
          .&lt;br /&gt;
          .&lt;br /&gt;
          .&lt;br /&gt;
      process monthly workers&#039; wages&lt;br /&gt;
          .&lt;br /&gt;
          .&lt;br /&gt;
          .&lt;br /&gt;
      IF $SETG(&#039;MONTHLY TOTAL&#039;, %TOTAL) THEN&lt;br /&gt;
          PRINT &#039;*** REQUEST TOO LONG - GTBL&#039;&lt;br /&gt;
          STOP&lt;br /&gt;
      END IF&lt;br /&gt;
END&lt;br /&gt;
 &lt;br /&gt;
BEGIN&lt;br /&gt;
      %HOURLY = $GETG(&#039;HOURLY TOTAL&#039;)&lt;br /&gt;
      %MONTHLY = $GETG(&#039;MONTHLY TOTAL&#039;)&lt;br /&gt;
           .&lt;br /&gt;
           .&lt;br /&gt;
           .&lt;br /&gt;
      format report&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;
==Using global string variables with a conditional INCLUDE command==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can use global string variables to create a modular programming environment in which you select procedures to perform a particular function without compiling and evaluating procedures designed for other related functions. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
To use global string variables effectively in creating such an environment, it is useful to review the differences between commands and User Language statements and between conditional and unconditional includes, as described in the following sections.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Differences between commands and User Language statements===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Commands and User Language statements have different effects and are used in different ways: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;System control commands can be issued only outside a request &amp;amp;mdash; at command level. They are acted upon immediately. User Language statements can be used only within a request. They are compiled on a line-by-line basis, but the entire request is not executed until &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; receives an END statement. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;INCLUDE is both a command and a User Language statement. In either context, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; is directed to take the next input line from an appropriate stored procedure. When the procedure lines are exhausted, the next input line is taken from the command or User Language statement immediately following the INCLUDE. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;IF has two formats: &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Conditional INCLUDE command&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;User Language statement &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;
===Conditional and unconditional INCLUDEs===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
A conditional include can be coded within an IF statement using the INCLUDE statement or with an INCLUDE command.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
An unconditional include can be coded with a standalone INCLUDE statement or command.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
This section describes conditional INCLUDE commands by providing examples and discussing how each example is processed.&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 request illustrates the conditional INCLUDE command:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;BEGIN&lt;br /&gt;
ALL: FIND ALL RECORDS&lt;br /&gt;
     END FIND&lt;br /&gt;
     FOR EACH RECORD IN ALL&lt;br /&gt;
         IF AGE GT &#039;10&#039; THEN&lt;br /&gt;
             IF $SETG(&#039;AGE&#039;, &#039;YES&#039;) THEN&lt;br /&gt;
                 PRINT &#039;*** REQUEST TOO LONG - GTBL&#039;&lt;br /&gt;
                 STOP&lt;br /&gt;
             END IF&lt;br /&gt;
         END IF&lt;br /&gt;
     END FOR&lt;br /&gt;
END&lt;br /&gt;
IF AGE = YES, COUNT&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====How Example 1 is processed====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The statements between the BEGIN and END are compiled and evaluated. If the AGE condition is true, a global string variable is set. &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; then processes the IF command. Statements in the COUNT procedure are compiled and executed only if the condition is true. Otherwise, the statements are never compiled.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Example 2====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Suppose that you enter record selection criteria and then select one of three reports to be generated. A set of four procedures can be created.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
For example, procedure A might contain the prompts for record selection and report type. Procedures B, C, and D might contain statements to produce the individual reports. Only procedure A and one of the other three procedures is compiled and evaluated. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;PROCEDURE A&lt;br /&gt;
BEGIN&lt;br /&gt;
FIND.RECS: FIND ALL RECORDS FOR WHICH&lt;br /&gt;
               ??SELECT.RECORDS&lt;br /&gt;
           END FIND&lt;br /&gt;
           IF $SETG(&#039;REPORTNUM&#039;, $READ(&#039;ENTER REPORT NO&#039;))&lt;br /&gt;
               THEN PRINT &#039;*** REQUEST TOO LONG - GTBL&#039;&lt;br /&gt;
               STOP&lt;br /&gt;
           END IF&lt;br /&gt;
END MORE&lt;br /&gt;
IF REPORTNUM = 1, B&lt;br /&gt;
IF REPORTNUM = 2, C&lt;br /&gt;
IF REPORTNUM = 3, D&lt;br /&gt;
END PROCEDURE&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Procedures B, C, and D have the same basic format, but variations in processing are applied to each record.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;PROCEDURE B&lt;br /&gt;
MORE&lt;br /&gt;
PROCESS: FOR EACH RECORD IN FIND.RECS&lt;br /&gt;
             .&lt;br /&gt;
             .&lt;br /&gt;
             .&lt;br /&gt;
         processing&lt;br /&gt;
             .&lt;br /&gt;
             .&lt;br /&gt;
             .&lt;br /&gt;
         END FOR PROCESS&lt;br /&gt;
END&lt;br /&gt;
END PROCEDURE&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====How Example 2 is processed====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The dialog produced by these procedures is shown below, with user input in boldface: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;b&amp;gt;INCLUDE A&amp;lt;/b&amp;gt;&lt;br /&gt;
??SELECT.RECORDS&lt;br /&gt;
&amp;lt;b&amp;gt;REGION = SOUTH OR WEST&amp;lt;/b&amp;gt;&lt;br /&gt;
$$ENTER REPORT NO&lt;br /&gt;
&amp;lt;b&amp;gt;2&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;i&amp;gt;output from Procedure C &amp;lt;/i&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Keep IF commands at as high a nesting level as possible====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
An alternate method of writing procedures is to follow each report&#039;s END MORE statement with IF commands. However, each procedure might then INCLUDE itself or another procedure, creating a lower level of nesting. If the procedure continued to INCLUDE itself, the maximum nesting level would be reached. As a general rule in a complex set of procedures, keep IF commands at as high a nesting level as possible. The global string variables to be tested can be set at any level.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
==Using global string variables to tailor a request==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Global string variables can be used in conjunction with the FILE$ condition (see [[Record retrievals#FILE$ condition|FILE$ condition]]) to access a set of files in a group. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Example====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
In the following example, the value of the global string variable, FILES, can be changed to access an alternative set of files. This example consists of two requests. The first &amp;amp;mdash; BEGIN through END MORE &amp;amp;mdash; sets the global string variable during the execution phase; the second &amp;amp;mdash; MORE through END &amp;amp;mdash; is then compiled with the correct value.   &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;
           IF $SETG(&#039;FILES&#039;,&#039;FILEA OR FILE$ FILEC&#039;) THEN&lt;br /&gt;
               PRINT &#039;***REQUEST TOO LONG -- GTBL&#039;&lt;br /&gt;
               %IGNORE = $SETG(&#039;FILES&#039;, &amp;amp;apos;&amp;amp;apos;)&lt;br /&gt;
           END IF&lt;br /&gt;
END MORE&lt;br /&gt;
MORE&lt;br /&gt;
           IF $GETG(&#039;files&#039;) = &amp;amp;apos;&amp;amp;apos; THEN&lt;br /&gt;
               STOP&lt;br /&gt;
           END IF&lt;br /&gt;
 GET.A:    FIND ALL RECORDS FOR WHICH&lt;br /&gt;
              (FILE$ ?&amp;amp;amp;FILES) AND FIELDX = &#039;A&#039;&lt;br /&gt;
           END FIND&lt;br /&gt;
           FOR EACH RECORD IN GET.A&lt;br /&gt;
               PRINT ALL INFORMATION&lt;br /&gt;
           END FOR&lt;br /&gt;
END&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
==Global objects==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Global objects include found sets, images, lists, menus, positions, screens, and sorted sets. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===General rules for declarations===&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;You must declare global lists, found sets, and sorted sets in every request that references them; the &amp;lt;var&amp;gt;Declare&amp;lt;/var&amp;gt; statement must come before the reference. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;If a global object is used in multiple subroutines, or in both the main program and a subroutine, the label must be declared as global in the main program before the subroutine(s). The subroutine(s) must then declare the label as common. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;If you refer to a global object before a &amp;lt;var&amp;gt;Declare&amp;lt;/var&amp;gt; statement, the system issues a duplicate label compilation error. Such a reference implicitly makes the object non global. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Incompatibility===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The [[PQO]] product does not support global found sets, lists, positions, or sorted sets. These global objects cannot be used in conjunction with remote files or scattered groups. This limitation exists, because GTBL does not exist on the PQO server. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Clearing global objects from GTBL===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
For syntax, details and examples of clearing global objects, see [[#Clearing the GTBL work area|Clearing the GTBL work area]]. &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Using global found sets and lists==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can pass found sets and lists from request to request by declaring them as &amp;lt;var&amp;gt;Global&amp;lt;/var&amp;gt;. A global found set or list is stored in the internal work area GTBL for the duration of the terminal session unless it is intentionally cleared, or the file or group with which it is associated is closed. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Creating a global found set or sorted set====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can create a global found set using this syntax: &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;[Declare] Label &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;labelname&amp;lt;/span&amp;gt; [Global | Common] &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;labelname&amp;lt;/var&amp;gt; is a unique global object name.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Creating a global list====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can declare a global list using the following syntax:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;[Declare] List &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;listname&amp;lt;/span&amp;gt; &lt;br /&gt;
  [In [File [Perm | Temp] Group] &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;name&amp;lt;/span&amp;gt;]&lt;br /&gt;
  [Global | Common] &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
In both cases, the keyword &amp;lt;var&amp;gt;Global&amp;lt;/var&amp;gt; implies &amp;lt;var&amp;gt;Common&amp;lt;/var&amp;gt;. These two keywords are mutually exclusive in the declaration statement. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Because &amp;lt;var&amp;gt;Global&amp;lt;/var&amp;gt; implies &amp;lt;var&amp;gt;Common&amp;lt;/var&amp;gt;, a list or found set can be declared &amp;lt;var&amp;gt;Global&amp;lt;/var&amp;gt; at any scope. See [[Subroutines#Scope of elements|Scope of elements]] for a discussion. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;The global name, label name, or list name, must be unique across all global objects. For a discussion, see [[Subroutines#Sharing common elements|Sharing common elements]]. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Usage rules====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The following rules apply to global found sets and lists: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;You must declare each global list or global found set as &amp;lt;code&amp;gt;&amp;lt;i&amp;gt;labelname&amp;lt;/i&amp;gt; Global&amp;lt;/code&amp;gt; in each procedure that uses it. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;The file context in which a global list or found set is used must be the same as the file context in which it was created. &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; compiler does not currently enforce this rule; therefore, your code must maintain this requirement. Rocket Software recommends that you populate a global found set or list only once within the scope of these global objects. However, this is not a restriction as long as file context is maintained. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Global found sets and lists are invalid in ad hoc group context. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Each global object name must be unique. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Global found sets and lists are not supported in remote file or scattered group contexts. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Example 1: Referencing a global found set===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
In this example, Procedure 1 declares the global found set and then performs the find. Procedure 2 needs only to declare the global found set and then reference the global found set labeled F1. The &amp;lt;var&amp;gt;For&amp;lt;/var&amp;gt; loops in both procedures process records in the &amp;lt;code&amp;gt;VEHICLES&amp;lt;/code&amp;gt; file for which the value of the field &amp;lt;code&amp;gt;COLOR&amp;lt;/code&amp;gt; was equal to &amp;lt;code&amp;gt;BLUE&amp;lt;/code&amp;gt; at the time of the evaluation of the &amp;lt;var&amp;gt;Find&amp;lt;/var&amp;gt; statement in Procedure 1. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;b&amp;gt;Procedure 1&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;BEGIN&lt;br /&gt;
DECLARE LABEL F1 GLOBAL&lt;br /&gt;
F1: IN VEHICLES FIND ALL RECORDS WHERE COLOR = &#039;BLUE&#039;&lt;br /&gt;
    END FIND&lt;br /&gt;
    FOR EACH RECORD IN F1&lt;br /&gt;
       PAI&lt;br /&gt;
    END FOR&lt;br /&gt;
END&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;b&amp;gt;Procedure 2&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;BEGIN&lt;br /&gt;
DECLARE LABEL F1 GLOBAL&lt;br /&gt;
    FOR EACH RECORD IN F1&lt;br /&gt;
       PAI&lt;br /&gt;
    END FOR&lt;br /&gt;
END&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Example 2: Maintaining file context===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Example 2 illustrates repopulating a global found set across the scope of its usage, maintaining the same file context throughout. In this example, Procedure 1 is identical to Procedure 1 in Example 1 above, and Procedure 3 is identical to Procedure 2 in Example 1. The second procedure in this example, however, performs a different find than the first. Procedure 3 then processes the records found in Procedure 2. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
So in this example, Procedure 1 processes records in the &amp;lt;code&amp;gt;VEHICLES&amp;lt;/code&amp;gt; file for which the value of the field &amp;lt;code&amp;gt;COLOR&amp;lt;/code&amp;gt; is equal to &amp;lt;code&amp;gt;BLUE&amp;lt;/code&amp;gt;, while Procedures 2 and 3 process records for which &amp;lt;code&amp;gt;COLOR&amp;lt;/code&amp;gt; was equal to &amp;lt;code&amp;gt;RED&amp;lt;/code&amp;gt; at the time of the &amp;lt;var&amp;gt;Find&amp;lt;/var&amp;gt; statement evaluation in Procedure 2. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;b&amp;gt;Procedure 1&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;BEGIN&lt;br /&gt;
DECLARE LABEL F1 GLOBAL&lt;br /&gt;
F1: IN VEHICLES FIND ALL RECORDS WHERE COLOR = &#039;BLUE&#039;&lt;br /&gt;
    END FIND&lt;br /&gt;
    FOR EACH RECORD IN F1&lt;br /&gt;
       PAI&lt;br /&gt;
    END FOR&lt;br /&gt;
END&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;b&amp;gt;Procedure 2&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;BEGIN&lt;br /&gt;
DECLARE LABEL F1 GLOBAL&lt;br /&gt;
F1: IN VEHICLES FIND ALL RECORDS WHERE COLOR = &#039;RED&#039;&lt;br /&gt;
    END FIND&lt;br /&gt;
    FOR EACH RECORD IN F1&lt;br /&gt;
       PAI&lt;br /&gt;
    END FOR&lt;br /&gt;
END&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;b&amp;gt;Procedure 3&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;BEGIN&lt;br /&gt;
DECLARE LABEL F1 GLOBAL&lt;br /&gt;
    FOR EACH RECORD IN F1&lt;br /&gt;
       PAI&lt;br /&gt;
    END FOR&lt;br /&gt;
END&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
==Using global sorted sets==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
A global sorted set is created when a SORT RECORDS statement or a FOR EACH RECORD IN ORDER BY statement is preceded by a label that has been declared GLOBAL. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Limiting subsequent references===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
For example, in Procedure 1 below, MAKE is the only field referenced in the request. Therefore, MAKE is the only field that can be referenced in subsequent requests. Thus, in Procedure 2, because the field MODEL was not referenced in the previous request, a blank is printed each time through the FOR loop. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Procedure 1====&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;BEGIN&lt;br /&gt;
DECLARE LABEL S1 GLOBAL&lt;br /&gt;
F1: IN VEHICLES FIND ALL RECORDS&lt;br /&gt;
    END FIND&lt;br /&gt;
S1: SORT RECORDS IN F1 BY MAKE&lt;br /&gt;
    FOR EACH RECORD IN S1&lt;br /&gt;
       PRINT MAKE&lt;br /&gt;
    END FOR&lt;br /&gt;
END&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Procedure 2====&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;BEGIN&lt;br /&gt;
DECLARE LABEL S1 GLOBAL&lt;br /&gt;
    FOR EACH RECORD IN S1&lt;br /&gt;
       PRINT MODEL&lt;br /&gt;
    END FOR&lt;br /&gt;
END&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Keeping all fields accessible for subsequent references===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
To ensure that all fields are accessible to subsequent requests, use a PAI or field name variable with the statement that creates the found set.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The sort key field(s) used on the SORT statement cannot be referred to by a subsequent request unless referred to in the SORT statement FOR loop in the request creating the set. While this restriction applies to the use of the SORT RECORDS statement, it does not apply to the use of the SORT RECORD KEYS statement.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If you are not going to refer to the sorted set in the request that creates the sorted set, you can code a FOR loop, which is compiled but never executed, that refers to each field that you want to refer to in a subsequent request. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
==Saving and recalling a position in a For loop==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can include statements in a &amp;lt;var&amp;gt;For&amp;lt;/var&amp;gt; loop to provide for the possibility of terminating the loop before the set of records or values being processed is exhausted. For example, you might use a &amp;lt;var&amp;gt;Jump To&amp;lt;/var&amp;gt; or &amp;lt;var&amp;gt;Loop End&amp;lt;/var&amp;gt; statement in conjunction with an &amp;lt;var&amp;gt;If&amp;lt;/var&amp;gt; statement to test each record or value before processing, and terminating the loop if a certain condition is met. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The &amp;lt;var&amp;gt;Remember&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;Position&amp;lt;/var&amp;gt; statements let you store the current processing position in a &amp;lt;var&amp;gt;For&amp;lt;/var&amp;gt; loop, then recall it at a later time and resume &amp;lt;var&amp;gt;For&amp;lt;/var&amp;gt; processing where you left off earlier. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Remember statement===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The purpose of the &amp;lt;var&amp;gt;Remember&amp;lt;/var&amp;gt; statement is to store the processing position in a &amp;lt;var&amp;gt;For&amp;lt;/var&amp;gt; loop. Each &amp;lt;var&amp;gt;Remember&amp;lt;/var&amp;gt; statement creates a GTBL entry of variable length. See [[Large request considerations]] for detailed descriptions of GTBL entries. If you remember a position as &amp;lt;var&amp;gt;Global&amp;lt;/var&amp;gt;, the entry remains in GTBL after the current request ends. &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; clears non-global &amp;lt;var&amp;gt;Remember&amp;lt;/var&amp;gt; positions at the end of each request.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Syntax====&lt;br /&gt;
{{Template:Remember statement syntax}}&lt;br /&gt;
Where:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The &amp;lt;var&amp;gt;Global&amp;lt;/var&amp;gt; option implies Perm and the position is retained in GTBL after the current request terminates. If &amp;lt;var&amp;gt;Global&amp;lt;/var&amp;gt; is not specified, TEMP is implied and the position is cleared from GTBL after the current request terminates.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;b&amp;gt;NOTE:&amp;lt;/B&amp;gt; The use of GLOBAL here must be consistent with the CLEAR GLOBAL POSITION statement.  If the latter is specified with PERM:&amp;lt;/p&amp;gt; &lt;br /&gt;
&amp;lt;p&amp;gt;CLEAR GLOBAL POSITION &amp;lt;b&amp;gt;PERM&amp;lt;/b&amp;gt; &#039;objectname&#039;,&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;then the REMEMBER statement must specify GLOBAL because it implies PERM.&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;position_name&amp;lt;/var&amp;gt; is a unique object name you assign to the &amp;lt;var&amp;gt;Remember&amp;lt;/var&amp;gt; position. &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;foundsortset_name&amp;lt;/var&amp;gt; or &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;list_name&amp;lt;/var&amp;gt; must be identical to the listname or label specified on the &amp;lt;var&amp;gt;For&amp;lt;/var&amp;gt; loop:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;If you are processing a found set or a sorted set, &amp;lt;code&amp;gt;In &amp;lt;i&amp;gt;foundsortset_name&amp;lt;/i&amp;gt;&amp;lt;/code&amp;gt; is the label of the &amp;lt;var&amp;gt;Find&amp;lt;/var&amp;gt; statement that generated it. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;If you are processing a list, &amp;lt;code&amp;gt;On &amp;lt;i&amp;gt;list_name&amp;lt;/i&amp;gt;&amp;lt;/code&amp;gt; is the name you gave to the list when you originally declared it. &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;
====Usage notes====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The following rules apply to the use of the &amp;lt;var&amp;gt;Remember&amp;lt;/var&amp;gt; statement:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Can appear only within a &amp;lt;var&amp;gt;For&amp;lt;/var&amp;gt; loop, but not a nested &amp;lt;var&amp;gt;For&amp;lt;/var&amp;gt; loop. The file context must be identical to the context of the &amp;lt;var&amp;gt;For&amp;lt;/var&amp;gt; loop. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Is invalid in ad hoc group context, if used with the &amp;lt;var&amp;gt;Global&amp;lt;/var&amp;gt; option. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;The &amp;lt;var&amp;gt;Remember&amp;lt;/var&amp;gt; statement is incompatible with &amp;lt;var&amp;gt;For Each Record In Order By&amp;lt;/var&amp;gt; clauses. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Position statement===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
A &amp;lt;var&amp;gt;Position&amp;lt;/var&amp;gt; statement recalls a remembered position, so you can resume &amp;lt;var&amp;gt;For&amp;lt;/var&amp;gt; processing in a list or found set that was terminated at an earlier time. For example, if you remembered the position at record number 5, then your foundset is positioned at record number 6 for further processing.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
This &amp;lt;var&amp;gt;Position&amp;lt;/var&amp;gt; statement is not to be confused with the &amp;lt;var&amp;gt;Position&amp;lt;/var&amp;gt; statement used to read records sequentially in an external VSAM KSDS file. See [[Images#Position statement|Position statement]]. &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;Position {Foundset &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;foundsortset_name&amp;lt;/span&amp;gt; | List &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;list_name&amp;lt;/span&amp;gt;} [At] &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;position_name&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
Where:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;foundsortset_name&amp;lt;/var&amp;gt; or &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;list_name&amp;lt;/var&amp;gt; must be identical to the list or label name used on a previous &amp;lt;var&amp;gt;Remember&amp;lt;/var&amp;gt; statement and in the &amp;lt;var&amp;gt;For&amp;lt;/var&amp;gt; statement that follows. &lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If you are about to resume the processing of a found set, &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;foundsortset_name&amp;lt;/var&amp;gt; is the label of the &amp;lt;var&amp;gt;Find&amp;lt;/var&amp;gt; statement that generated it. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If you are about to resume the processing of a list, &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;list_name&amp;lt;/var&amp;gt; is the name you gave to the list when you originally declared it.&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;position_name&amp;lt;/var&amp;gt; is a name that you assigned to the remembered position when you stored it on a previous &amp;lt;var&amp;gt;Remember&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;
====Usage notes====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
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;The &amp;lt;var&amp;gt;Position&amp;lt;/var&amp;gt; statement must appear outside, immediately before the &amp;lt;var&amp;gt;For&amp;lt;/var&amp;gt; loop to which it refers; it cannot be in the &amp;lt;var&amp;gt;For&amp;lt;/var&amp;gt; loop itself.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;The &amp;lt;var&amp;gt;For&amp;lt;/var&amp;gt; statement that follows the &amp;lt;var&amp;gt;Position&amp;lt;/var&amp;gt; statement must have an identical file context and list name or label name as the statement that initiated the &amp;lt;var&amp;gt;For&amp;lt;/var&amp;gt; loop of the remembered position.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;The &amp;lt;var&amp;gt;Position&amp;lt;/var&amp;gt; statement is incompatible with &amp;lt;var&amp;gt;For Each Record In Order By&amp;lt;/var&amp;gt; clauses. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
==Global images and screens==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can use global images and screens to pass image and screen data from one request to another and to efficiently manage more than one image or screen in one request. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can also declare global menus, because a menu is a special type of screen. In this section, the term &amp;quot;screen&amp;quot; applies to both screens and menus, unless otherwise noted. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Declaring global images and screens===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You make an image or screen global by specifying the keyword &amp;lt;var&amp;gt;Global&amp;lt;/var&amp;gt; in its declaration statement. You can declare global images and screens to be &amp;lt;var&amp;gt;Temporary&amp;lt;/var&amp;gt;, deleted at request termination, or &amp;lt;var&amp;gt;Permanent&amp;lt;/var&amp;gt;, persist across request termination. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===How images and screens are processed===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When you declare an image or screen as &amp;lt;var&amp;gt;Global&amp;lt;/var&amp;gt;, it is stored in GTBL. Nonglobal images and screens, declared as &amp;lt;var&amp;gt;Common&amp;lt;/var&amp;gt;, or neither &amp;lt;var&amp;gt;Common&amp;lt;/var&amp;gt; nor &amp;lt;var&amp;gt;Global&amp;lt;/var&amp;gt;, are stored in FSCB. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
This section provides some background information about how &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; processes images and screens, contrasting how global and nonglobal images and screens are processed. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Images and screen processing===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The figures in the following subsections represent how nonglobal and global objects are processed. Comparing the two types of processing highlights the I/O and storage savings associated with the global images and screens. &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Processing of nonglobal objects====&lt;br /&gt;
&amp;lt;p class=&amp;quot;figure&amp;quot;&amp;gt;[[File:Nonglobal_object_processing.png|550px]] &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The &amp;lt;b&amp;gt;Nonglobal object processing&amp;lt;/b&amp;gt; figure illustrates the process in the following steps:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The compiler loads a compiled version of the screen or image into FSCB in the user&#039;s server.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;A copy of the compiled object is stored in the buffer pool.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;A &amp;lt;var&amp;gt;Prepare&amp;lt;/var&amp;gt; statement acts on the compiled object in the buffer pool and copies it into FSCB.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Update statements act on the copy of the object in FSCB.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;The updated object is copied from FSCB to a working copy of the object in the buffer pool.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;If a user waits too long or the buffer pool fills up, the object is written to CCATEMP. When a user presses Enter for that object, the object is loaded back from CCATEMP to the buffer pool. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;amp;nbsp;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Processing of global objects==== &lt;br /&gt;
&amp;lt;p class=&amp;quot;figure&amp;quot;&amp;gt;[[File:Global_object_processing.png|550px]] &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The &amp;lt;b&amp;gt;Global object processing&amp;lt;/b&amp;gt; figure illustrates the process in the following steps: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The compiler loads a compiled version of the screen or image into FSCB in the user&#039;s server. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;A copy of the compiled object is stored in the buffer pool. This copy is called &#039;VIRGIN&#039;, as it is never updated. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;A &amp;lt;var&amp;gt;Prepare&amp;lt;/var&amp;gt; statement acts on the compiled object in the buffer pool and copies it into GTBL. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Update statements act on the copy in GTBL. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Using Prepare and Identify statements===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
To help you decide how to use the &amp;lt;var&amp;gt;Prepare&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;Identify&amp;lt;/var&amp;gt; statements, review the following:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[[#GTBL internal work area|GTBL internal work area]] &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;[[#Timing and placement of a CLEAR statement|Timing and placement of a CLEAR statement]] &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;For syntax and usage of the &amp;lt;var&amp;gt;Prepare&amp;lt;/var&amp;gt; statement, see [[Full-screen feature#PREPARE statement|Prepare statement]]&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;For syntax and usage of the &amp;lt;var&amp;gt;Identify&amp;lt;/var&amp;gt; statement, see [[Images#Identify statement|Identify statement]] &lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Also when using the &amp;lt;var&amp;gt;Identify&amp;lt;/var&amp;gt; statement, see [[#Consistency checks performed|Consistency checks performed]]. &amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Performance and efficiency benefits===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Global images and screens can simply and efficiently perform image-to-image processing and screen-to-image processing, eliminating the need to map screen items to image items when passing or preserving screens. Using global images and screens: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Reduces CPU resources required to pass data between requests in applications where a large number of global variables would have been necessary. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Reduces the FSCB I/O between multiple images and between images and screens. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Makes the declaration of global data explicit, thus traceable by using naming conventions and cross-reference tools. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Simplifies code, eliminating the need for &amp;lt;var&amp;gt;If $Setg() Then ...&amp;lt;/var&amp;gt; sequences to map request %variables into global variables and for &amp;lt;var&amp;gt;%xyz = $Getg()&amp;lt;/var&amp;gt; sequences to map global variables into request %variables. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Reduces I/O by swapping modified global screens to CCASERVR instead of paging them between the buffer pool and CCATEMP. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===When to use global images and screens===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You achieve the greatest benefit by declaring as &amp;lt;var&amp;gt;Global&amp;lt;/var&amp;gt; the most frequently used images and screens in an application. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Infrequently used images and screens declared as nonglobal do not put pressure on the buffer pool, because there would not be many copies in the buffer pool for many users, and little I/O with CCATEMP. If an application has many images and/or screens, GTBL might overflow if all the images and/or screens are defined as global. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Consistency checks performed===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When a global image or screen is first referred to in a request, GTBL is searched for the object. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If the object is&amp;lt;var&amp;gt; not&amp;lt;/var&amp;gt; already present in GTBL, the object is written into GTBL. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If the object is present, two consistency checks are performed:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Persistence &amp;amp;mdash; &amp;lt;var&amp;gt;Permanent&amp;lt;/var&amp;gt; or &amp;lt;var&amp;gt;Temporary&amp;lt;/var&amp;gt; status &amp;amp;mdash; of the new object must match the persistence of the object already in GTBL. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Definition &amp;amp;mdash; &amp;lt;var&amp;gt;Permanent&amp;lt;/var&amp;gt; or &amp;lt;var&amp;gt;Temporary&amp;lt;/var&amp;gt; &amp;amp;mdash; of the new object must match the definition of the object already in GTBL. &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; If a global image has an array that uses the &amp;lt;var&amp;gt;Depending On &amp;lt;i&amp;gt;%variable&amp;lt;/i&amp;gt;&amp;lt;/var&amp;gt; option, the names of the %variables are not compared when the definition check is performed. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If either of these consistency checks fails &amp;amp;mdash; for example, an image is declared as &amp;lt;var&amp;gt;Temporary&amp;lt;/var&amp;gt;, but the same image already exists in GTBL, declared as &amp;lt;var&amp;gt;Permanent&amp;lt;/var&amp;gt; &amp;amp;mdash; then the request is canceled and the [[M204.2158]] message is generated: &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;Global &amp;lt;i&amp;gt;object-type&amp;lt;/i&amp;gt; definition doesn&#039;t match value in GTBL​,​ &amp;lt;i&amp;gt;error-description&amp;lt;/i&amp;gt;, name hash=&amp;lt;i&amp;gt;hash-code&amp;lt;/i&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Using global images and screens==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The following example illustrates using global images and screens to pass screen and image data between User Language requests. The example consists of the following procedures:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SCREENDEF defines a global screen.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;IMAGEDEF defines a global image.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;PROCA sets the screen item value and an image item value.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;PROCB displays the updated image item and the original screen item. &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;PROCEDURE SCREENDEF&lt;br /&gt;
   * KEEP GLOBAL SCREENS AND IMAGES IN SEPARATE PROCEDURES&lt;br /&gt;
   * FOR CENTRAL DEFINITION&lt;br /&gt;
   SCREEN SCREEN1 GLOBAL&lt;br /&gt;
      PROMPT &#039;SCREEN1&#039;&lt;br /&gt;
      INPUT ITEM NUMERIC LEN 4 AT 10&lt;br /&gt;
   END SCREEN&lt;br /&gt;
END PROCEDURE&lt;br /&gt;
 &lt;br /&gt;
PROCEDURE IMAGEDEF&lt;br /&gt;
   * KEEP GLOBAL SCREENS AND IMAGES IN SEPARATE PROCEDURES&lt;br /&gt;
   * FOR CENTRAL DEFINITION&lt;br /&gt;
   IMAGE IMAGE1 GLOBAL&lt;br /&gt;
      ITEM IS FLOAT LEN 8&lt;br /&gt;
   END IMAGE&lt;br /&gt;
END PROCEDURE&lt;br /&gt;
 &lt;br /&gt;
PROCEDURE PROCA&lt;br /&gt;
   BEGIN&lt;br /&gt;
   INCLUDE SCREENDEF&lt;br /&gt;
   INCLUDE IMAGEDEF&lt;br /&gt;
   * INITIALIZE SCREEN1 AND IMAGE1&lt;br /&gt;
   PREPARE SCREEN SCREEN1&lt;br /&gt;
   PREPARE IMAGE IMAGE1&lt;br /&gt;
   * USER SEES SCREEN1 AND ENTERS A VALUE N (E.G., 10) AS INPUT&lt;br /&gt;
   READ SCREEN SCREEN1&lt;br /&gt;
   %IMAGE1:ITEM = %SCREEN1:ITEM + 3&lt;br /&gt;
   END&lt;br /&gt;
END PROCEDURE&lt;br /&gt;
 &lt;br /&gt;
PROCEDURE PROCB&lt;br /&gt;
   BEGIN&lt;br /&gt;
   INCLUDE SCREENDEF&lt;br /&gt;
   INCLUDE IMAGEDEF&lt;br /&gt;
   * DO NOT INITIALIZE, JUST IDENTIFY FOR SUBSEQUENT REFERRAL&lt;br /&gt;
   IDENTIFY IMAGE IMAGE1&lt;br /&gt;
      * USER SEES UPDATED IMAGE ITEM (N+3) IN NEW REQUEST&lt;br /&gt;
   PRINT &#039;IMAGE ITEM = &#039; WITH %IMAGE1:ITEM&lt;br /&gt;
   * USER SEES ORIGINAL SCREEN ITEM WITH DATA THAT USER ENTERED&lt;br /&gt;
   READ SCREEN SCREEN1&lt;br /&gt;
   END&lt;br /&gt;
END PROCEDURE&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; You can run several procedures between PROCA and PROCB with the same results as if you ran those two procedures sequentially, because the defined global objects persist.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===System administration issues===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
To review the implications of the global images and screens feature for system administrators, see the following topics:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;GTBL size &amp;amp;mdash; [[Large request considerations#GTBL (global variable table)|GTBL (global variable table)]], [[Defining the runtime environment (CCAIN)#Understanding the global variable table (GTBL)|Understanding the global variable table (GTBL)]], and [[GTBLHASH parameter]]&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;VTBL usage with COMMON images and screens &amp;amp;mdash; [[Large request considerations#VTBL (compiler variable table)|VTBL (compiler variable table)]] and [[Defining the runtime environment (CCAIN)#Compiler variable table (VTBL)|Compiler variable table (VTBL)]]&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;User since-last statistics &amp;amp;mdash; [[Using system statistics#User since-last statistics|User since-last statistics]] &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
==Clearing the GTBL work area==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When you log off, all global objects and global variables are cleared. If you want to clear some or all global objects or global variables from GTBL during your working session, prior to logging out, you can issue: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;CLEAR statement &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;CLEARG and/or CLEARGO commands&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;$DELG function to selectively delete global string variables&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;RESET command for the GTBLEHASH and GTBLPCT parameters&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;UTABLE command that changes the size of FTBL, XTBL, or GTBL clears all global objects of any type&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Using the CLEARG and CLEARGO commands===&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;Use this command &amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;To Remove...&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;[[CLEARG command|CLEARG]]&amp;lt;/var&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Only global string 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;&amp;lt;var&amp;gt;[[CLEARGO command|CLEARGO]]&amp;lt;/var&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;All global objects: images, screens, menus, found sets, lists, and temporary and permanent positions from GTBL; it does not clear global string variables. &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 &amp;lt;var&amp;gt;CLEARGO&amp;lt;/var&amp;gt; command takes no arguments.&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Using the $DELG function===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can use the &amp;lt;var&amp;gt;[[$Delg]]&amp;lt;/var&amp;gt; function to delete global string variables created by either &amp;lt;var&amp;gt;[[$Setg]]&amp;lt;/var&amp;gt; or &amp;lt;var&amp;gt;[[$Incrg]]&amp;lt;/var&amp;gt;. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The &amp;lt;var&amp;gt;[[$Delg]]&amp;lt;/var&amp;gt; function deletes a single or group of similar global string variables, releasing and compacting the GTBL space for reuse. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Using the CLEAR statement===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can use the &amp;lt;var&amp;gt;Clear&amp;lt;/var&amp;gt; statement to clear global objects of the same type, an individual global object, or all global string variables, as shown 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;The statement &amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Clears...&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td nowrap&amp;gt;&amp;lt;var&amp;gt;Clear &amp;lt;i&amp;gt;type-of-object&amp;lt;/i&amp;gt; Objects&amp;lt;/var&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;A class of global objects or all global objects. Global string variables are not cleared, because they are not objects. &amp;lt;/td&amp;gt;&lt;br /&gt;
&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;Clear Global&amp;lt;/var&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Individual global objects from GTBL. &amp;lt;/td&amp;gt;&lt;br /&gt;
&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;Clear Globals&amp;lt;/var&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;All global string variables. You cannot selectively clear individual global string variables with the &amp;lt;var&amp;gt;Clear&amp;lt;/var&amp;gt; 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;
====Syntax====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The format for the &amp;lt;var&amp;gt;Clear&amp;lt;/var&amp;gt; statement is:&amp;lt;/p&amp;gt;&lt;br /&gt;
{{Template:Clear statement syntax}}&lt;br /&gt;
Where:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;All&amp;lt;/var&amp;gt; clears all permanent and temporary global objects, including: found sets, lists, images, menus, positions, screens, and sorted sets from GTBL. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Temp&amp;lt;/var&amp;gt; clears only global objects explicitly declared as &amp;lt;var&amp;gt;Temp&amp;lt;/var&amp;gt; in your request, including images, menus, and screens from GTBL. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;ListFdst&amp;lt;/var&amp;gt; clears all global found sets, lists, and sorted sets from GTBL. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Position&amp;lt;/var&amp;gt; clears all permanent and temporary positions from GTBL. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Objects&amp;lt;/var&amp;gt; specifies that the &amp;lt;var&amp;gt;CLEAR&amp;lt;/var&amp;gt; command is operating on the object type you specified, or operating on all types of objects. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Global&amp;lt;/var&amp;gt; clears a specific global object from GTBL. You cannot clear a global string variable created with the &amp;lt;var&amp;gt;$Setg&amp;lt;/var&amp;gt; function using this form. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Position [Perm | Temp]&amp;lt;/var&amp;gt; The use of PERM or TEMP must be consistent with GLOBAL in the REMEMBER statement.  If GLOBAL is specified in the REMEMBER statement, then PERM is implied.  If GLOBAL is omitted from the REMEMBER statement, TEMP is implied.&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;objectname&amp;lt;/var&amp;gt; is the literal name of the specific global object to be cleared from GTBL. Enclose &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;objectname&amp;lt;/var&amp;gt; in single quotation marks.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;b&amp;gt;NOTE:&amp;lt;/b&amp;gt; If the &amp;lt;i&amp;gt;objectname&amp;lt;/i&amp;gt; is mixed case, be sure to use the same name, in single quotation marks, when referring to that name in other statements; e.g. REMEMBER or POSITION.&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;%variable&amp;lt;/var&amp;gt; contains a value that specifies the global object to be cleared from GTBL. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Globals&amp;lt;/var&amp;gt; clears all global string variables created with the &amp;lt;var&amp;gt;$Setg&amp;lt;/var&amp;gt; function from GTBL. This form does &amp;lt;em&amp;gt;not&amp;lt;/em&amp;gt; clear any global objects. &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 following statements clear all permanent and temporary global found sets, images, lists, menus, positions, screens, and sorted sets:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;Clear Objects&lt;br /&gt;
 &lt;br /&gt;
Clear All Objects&lt;br /&gt;
 &lt;br /&gt;
Clear All Global Objects&lt;br /&gt;
 &lt;br /&gt;
Clear Global Objects&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Clearing global found sets and lists===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can clear global found sets and lists in GTBL without logging off using the following examples: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Clear a specific global list or found set by issuing one of these statements:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;Clear Global List &#039;&amp;lt;i&amp;gt;objectname&amp;lt;/i&amp;gt;&#039;&lt;br /&gt;
 &lt;br /&gt;
Clear Global List &amp;lt;i&amp;gt;%variable&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
Clear Global Foundset &#039;&amp;lt;i&amp;gt;objectname&amp;lt;/i&amp;gt;&#039;&lt;br /&gt;
 &lt;br /&gt;
Clear Global Foundset &amp;lt;i&amp;gt;%variable&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;Clear all global found sets and lists with the statement: &lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;Clear ListFdst [Global] Objects &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
(Global found sets and lists are among the global objects cleared by the &amp;lt;var&amp;gt;CLEARGO&amp;lt;/var&amp;gt; command.) &amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Close a file or group with which a global list or found set is associated. This includes the file close processing done when exiting or stopping a subsystem. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Issue a &amp;lt;var&amp;gt;UTABLE&amp;lt;/var&amp;gt; command that changes the size of FTBL, XTBL, or GTBL. &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 you clear a global list or global found set, then any request that uses the global and does not have the &amp;lt;var&amp;gt;Find&amp;lt;/var&amp;gt; statement that creates the global object receives either of the following error messages:&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;M204.0301 Referenced statement label undefined&lt;br /&gt;
 &lt;br /&gt;
M204.0311 Unacceptable statement reference&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===RELEASE and COMMIT RELEASE statements with global foundsets and lists===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The &amp;lt;var&amp;gt;Release&amp;lt;/var&amp;gt; statements and the &amp;lt;var&amp;gt;Commit Release&amp;lt;/var&amp;gt; statements empty the contents of a global found set, global sort set, or global list. The label and positions associated with a found set, sort set, or the list is still considered global, but it is empty. Global positions are not cleared by &amp;lt;var&amp;gt;Release&amp;lt;/var&amp;gt; or &amp;lt;var&amp;gt;Commit Release&amp;lt;/var&amp;gt; statements, however, without records there is nothing to process.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Clearing remembered positions===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Each &amp;lt;var&amp;gt;Remember&amp;lt;/var&amp;gt; statement creates a GTBL entry, whether or not &amp;lt;var&amp;gt;Global&amp;lt;/var&amp;gt; is specified. If GLOBAL is not specified, the position is temporary and is cleared from GTBL at the end of request execution.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
All remembered positions, along with all other GTBL entries, are cleared when you log off. You can also clear remembered positions in the following ways:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;You can clear a specific temporary position by issuing one of these statements:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;Clear Global Position Temp &#039;&amp;lt;i&amp;gt;objectname&amp;lt;/i&amp;gt;&#039;&lt;br /&gt;
 &lt;br /&gt;
Clear Global Position Temp &amp;lt;i&amp;gt;%variable&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;You can clear a specific permanent position by issuing one of these statements: &lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;Clear Global Position Perm &#039;&amp;lt;i&amp;gt;objectname&amp;lt;/i&amp;gt;&#039;&lt;br /&gt;
 &lt;br /&gt;
Clear Global Position Perm &amp;lt;i&amp;gt;%variable&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;You clear all global found sets, lists, or sorted sets with which a remembered position is associated:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;Clear ListFdst [Global] Objects&lt;br /&gt;
&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;You clear all remembered positions by issuing the statement:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;Clear Position [Global] Objects&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;
====Usage notes====&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;When you are using the &amp;lt;var&amp;gt;Clear Global Position&amp;lt;/var&amp;gt; statement, &amp;lt;var&amp;gt;Perm&amp;lt;/var&amp;gt; is the default. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;The &amp;lt;var&amp;gt;CLEARGO&amp;lt;/var&amp;gt; command has the effect of clearing all remembered positions.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Any &amp;lt;var&amp;gt;UTABLE&amp;lt;/var&amp;gt; command that changes the size of FTBL, GTBL, or XTBL clears all remembered positions.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Timing and placement of a Clear statement===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The &amp;lt;var&amp;gt;Clear Global&amp;lt;/var&amp;gt; statement takes effect at evaluation time and its placement in a request can have significant consequences: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;If the global object being cleared is referenced in the same request, it is marked as pending clear. The global is then emptied (zero records), and all its record locks are removed. It is cleared and deleted from GTBL at the end of 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;/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>JDamon</name></author>
	</entry>
	<entry>
		<id>https://m204wiki.rocketsoftware.com/index.php?title=Global_features&amp;diff=120816</id>
		<title>Global features</title>
		<link rel="alternate" type="text/html" href="https://m204wiki.rocketsoftware.com/index.php?title=Global_features&amp;diff=120816"/>
		<updated>2026-04-13T19:29:24Z</updated>

		<summary type="html">&lt;p&gt;JDamon: /* Syntax */&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;
&amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; offers several global features to store information in memory so that it is not automatically cleared between requests. The memory area for storing global information is a &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; internal work area or server table called the &amp;lt;b&amp;gt;global table&amp;lt;/b&amp;gt; or GTBL. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The global features are:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Global string variables&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Global objects&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Global found sets and lists&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Global screens, images, and menus&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Global positions&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Global information is available only to the user who creates it. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===GTBL internal work area===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Each user&#039;s GTBL is empty when the user logs in. GTBL accumulates global information that is available for the duration of the terminal session, unless you intentionally clear it. You can clear GTBL information selectively. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
For a discussion of GTBL space requirements, see [[Large request considerations#GTBL (global variable table)|GTBL (global variable table)]].&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Global items are stored in a specific order in GTBL. As shown in [[#GTBL internal work area|GTBL internal work area]], the area that stores global string variables is at the beginning of the table, and is built from the top down. The area that stores global objects is at the end of the table and is built from the bottom up. The unused or free space is between these two areas. &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;caption&amp;quot; style=&amp;quot;width:450px&amp;quot;&amp;gt;Storage of global variables and global objects in GTBL &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;figure&amp;quot;&amp;gt;[[File:Storage_of_global_vars_in_GTBL.png|450px]] &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Global string variables==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can use global string variables to: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Pass information from one request to another request&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Include procedures conditionally at the &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; command level&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Tailor a request dynamically &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;
As of Version 5.1, you can increase the speed and reduce the CPU time to find and update a global string variable by setting the &amp;lt;var&amp;gt;[[GTBLHASH parameter|GTBLHASH]]&amp;lt;/var&amp;gt; parameter to a nonzero value. The &amp;lt;var&amp;gt;GTBLHASH&amp;lt;/var&amp;gt; parameter specifies the number of buckets allocated in the global string variable section of GTBL.&lt;br /&gt;
When &amp;lt;var&amp;gt;GTBLHASH&amp;lt;/var&amp;gt; is a nonzero value, and you set or get a global string variable, the global string variable name is hashed to determine the bucket in which the name is located. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
This reduces the overall amount of data that must be scanned to find a global string variable or must be moved when a value is deleted or changes in size. If &amp;lt;var&amp;gt;GTBLHASH&amp;lt;/var&amp;gt; is 0, global string variables are processed as in pre-5.1 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;
The &amp;lt;var&amp;gt;[[GTBLPCT parameter|GTBLPCT]]&amp;lt;/var&amp;gt; parameter determines the initial percentage of GTBL to allocate for global string variables. The default value of &amp;lt;var&amp;gt;GTBLPCT&amp;lt;/var&amp;gt; is 50, meaning 50 percent of GTBL is initially allocated for global variable strings. The remainder, in this case 50 percent, is the initial allocation for global objects. However, if &amp;lt;var&amp;gt;GTBLHASH&amp;lt;/var&amp;gt; is 0, a nonzero setting for &amp;lt;var&amp;gt;GTBLPCT&amp;lt;/var&amp;gt; has no effect. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When in effect, if either area of GTBL fills and there are still free pages in GTBL, then GTBL can be rearranged if more space is required in the full area of GTBL. Because these rearrangements can be CPU intensive, Rocket Software recommends that you determine an accurate setting for &amp;lt;var&amp;gt;GTBLPCT&amp;lt;/var&amp;gt; to avoid frequent rearrangements. You can monitor the performance of the hash GTBL feature using the &amp;lt;code&amp;gt;GTBLRU&amp;lt;/code&amp;gt; user statistic and the &amp;lt;code&amp;gt;GTBLRS&amp;lt;/code&amp;gt; since-last statistic.&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Rearranging GTBL and tracking the rearrangements====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The following statistics are available as system statistics, user statistics and since-last statistics to keep track of GTBL rearrangements required for the hashed GTBL feature: &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;Statistic &amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Tracking&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;GTBLRU &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Number of GTBL rearrangements required to add a string variable global.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;GTBLRS &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Number of GTBL rearrangements required to add a global object. &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;
After reviewing the GTBLRU and GTBLRS statistics, you can consider taking the following actions: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;If both of these values are high, increase the size of GTBL by increasing &amp;lt;var&amp;gt;LGTBL&amp;lt;/var&amp;gt;. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;If GTBLRU is high but GTBLRS is not, increase &amp;lt;var&amp;gt;GTBLPCT&amp;lt;/var&amp;gt; or decrease &amp;lt;var&amp;gt;GTBLHASH&amp;lt;/var&amp;gt;. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;If GTBLRS is high but GTBLRU is low, decrease &amp;lt;var&amp;gt;GTBLPCT&amp;lt;/var&amp;gt;. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Global found sets and lists===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can use global found sets and lists to make found sets and lists available across request boundaries. A global found set or list remains in GTBL until you: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Explicitly delete it&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Issue a &amp;lt;var&amp;gt;Release&amp;lt;/var&amp;gt; or &amp;lt;var&amp;gt;Commit Release&amp;lt;/var&amp;gt; statement &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;The file or group it refers to is closed, including the file close processing done when exiting a subsystem or stopping &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Log out &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Sorted sets are a subgroup of found sets; they are treated the same by the &amp;lt;var&amp;gt;Clear&amp;lt;/var&amp;gt; statement that is used to clear global found sets.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Faster global variable processing option====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When global lists or found sets are processed as part of the &amp;lt;var&amp;gt;Find&amp;lt;/var&amp;gt; or &amp;lt;var&amp;gt;Place Records On&amp;lt;/var&amp;gt; statement, it must be verified that a global variable representing the list or found set exists in GTBL. The &amp;lt;var&amp;gt;CLEARG&amp;lt;/var&amp;gt; command or &amp;lt;var&amp;gt;Clear&amp;lt;/var&amp;gt; statement may delete the global variable, so an internal routine is called to verify whether the global variable is in GTBL. The internal routine creates a new copy, if it was deleted. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The internal routine scans NTBL to find an entry that points to the required variable, then it uses its hash value to scan GTBL. Scanning a large NTBL may take considerable time. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The NTBL scan can be eliminated, if internal variables representing global lists and found sets contain a global name hash value. Thus, an internal variable with a length of eight bytes that contains an NTBL entry offset points to the internal variable representing a global list or found set. This method avoids an NTBL scan, if a global variable has been deleted from GTBL. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
This faster global variable processing requires larger VTBL, because every global list or found set needs eight more bytes. If you want the benefit of this increased processing speed and can accommodate the increased VTBL requirement, set &amp;lt;var&amp;gt;FASTGLOB&amp;lt;/var&amp;gt; to 1. To maintain existing processing you can let &amp;lt;var&amp;gt;[[FASTGLOB parameter|FASTGLOB]]&amp;lt;/var&amp;gt; default to 0, or you can explicitly set &amp;lt;var&amp;gt;FASTGLOB&amp;lt;/var&amp;gt; to 0.&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Global positions===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can use &amp;lt;var&amp;gt;Remember&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;Position&amp;lt;/var&amp;gt; statements to save and recall a place in a &amp;lt;var&amp;gt;For&amp;lt;/var&amp;gt; loop, either globally or non-globally. This lets you suspend processing in a &amp;lt;var&amp;gt;For&amp;lt;/var&amp;gt; loop and resume it later, within the same request or in a subsequent request. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Global images and screens===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can use global images and screens to:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Pass image and screen data from one request to another&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Manage more than one image or screen in one request&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Manage menus, which are a special type of screen&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Reduce I/O by swapping modified global screens to CCASERVR instead of paging them between the buffer pool and CCATEMP &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Global string variables===&lt;br /&gt;
 &lt;br /&gt;
===Global string variable names and values===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Entries in the GTBL consist of global name=value pairs. The names and values of the global string variables are created with the &amp;lt;var&amp;gt;$Setg&amp;lt;/var&amp;gt; function from within a request. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;A global string variable name can consist of up to 255 characters and follows the naming conventions for variables (see [[Using variables and values in computation#%Variable names|%Variable names]]). Global string variables that contain special characters, other than a period (&amp;lt;tt&amp;gt;.&amp;lt;/tt&amp;gt;) cannot be used as &amp;lt;code&amp;gt;?&amp;amp;amp;&amp;lt;/code&amp;gt; dummy strings. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;A value can be 0, the null string, or up to 255 characters. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Clearing global string variables===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When a new value for an existing name is stored, the old entry is first deleted. Entries remain in the table until you delete them by issuing a &amp;lt;var&amp;gt;CLEARG&amp;lt;/var&amp;gt; command, execute a &amp;lt;var&amp;gt;Clear&amp;lt;/var&amp;gt; statement, execute a &amp;lt;var&amp;gt;$Delg&amp;lt;/var&amp;gt; function call, or you log out. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If you define a large number of global string variables, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; performance can be adversely affected. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
For details and examples of clearing global string variables, see [[#Clearing the GTBL work area|Clearing the GTBL work area]].&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Global variable functions and commands===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The following functions, statements, commands, and facilities manipulate entries in the global variable table: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Use the functions &amp;lt;var&amp;gt;[[$Setg]]&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;[[$Getg]]&amp;lt;/var&amp;gt; within a request to store and retrieve global string variables. Use &amp;lt;var&amp;gt;[[$Incrg]]&amp;lt;/var&amp;gt; to perform simple arithmetic on global string variables with numeric values. Use the &amp;lt;var&amp;gt;[[$Delg]]&amp;lt;/var&amp;gt; function to delete global string variables created by &amp;lt;var&amp;gt;$Setg&amp;lt;/var&amp;gt; or &amp;lt;var&amp;gt;$Incrg&amp;lt;/var&amp;gt;. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Use the &amp;lt;code&amp;gt;?&amp;amp;amp;&amp;lt;/code&amp;gt; dummy string within a request to read a variable in the GTBL. Refer to [[Procedures]] for more information about dummy strings. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Use the conditional &amp;lt;var&amp;gt;INCLUDE&amp;lt;/var&amp;gt; command (&amp;lt;code&amp;gt;IF A=B,&amp;lt;i&amp;gt;name&amp;lt;/i&amp;gt;&amp;lt;/code&amp;gt;) to search the global variable table for an entry whose name is A and whose value is &amp;lt;code&amp;gt;B&amp;lt;/code&amp;gt;. If the entry is found, the named procedure is included. The &amp;lt;var&amp;gt;IF&amp;lt;/var&amp;gt; command is discussed on [[#Conditional and unconditional INCLUDEs|Conditional and unconditional INCLUDEs]]. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Using global string variables in application subsystems===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
In addition to the above facilities, an application subsystem can designate specific global string variables in the subsystem definition. For more information about subsystem global string variables, refer to: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[[Application Subsystem development#Command line global variable|Command line global variable]] &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;[[Application Subsystem development#Communication global variable|Communication global variable]] &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;[[Application Subsystem development#Error global variable|Error global variable]] &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
==Passing string values from one request to another==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
It is often necessary to generate data in one request and to save the data for use in other independent requests to be run later in the terminal session. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Example 1====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Suppose that you want to store the current date in every record created during a session in YYMMDD format, a modified form of the value returned by the &amp;lt;var&amp;gt;$Date&amp;lt;/var&amp;gt; function. You can derive the date once at the beginning of the day and hold it for use throughout the day. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
At the beginning of the terminal session, you enter:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;BEGIN&lt;br /&gt;
    %DATE = $DATE&lt;br /&gt;
    %DATE = $SUBSTR(%DATE, 1, 2) -&lt;br /&gt;
         WITH $SUBSTR(%DATE, 4, 2) WITH -&lt;br /&gt;
         $SUBSTR(%DATE, 7, 2)&lt;br /&gt;
     IF $SETG(&#039;DATE&#039;, %DATE) THEN&lt;br /&gt;
          PRINT &#039;*** REQUEST TOO LONG - GTBL&#039;&lt;br /&gt;
          STOP&lt;br /&gt;
     END IF&lt;br /&gt;
END&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Later in the terminal session, you can use the specially formatted date: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;BEGIN&lt;br /&gt;
    %DATE = $GETG(&#039;DATE&#039;)&lt;br /&gt;
    STORE RECORD&lt;br /&gt;
        FIELD = VALUE&lt;br /&gt;
        FIELDB = VALUE&lt;br /&gt;
        DATE = %DATE&lt;br /&gt;
            .&lt;br /&gt;
            .&lt;br /&gt;
            .&lt;br /&gt;
    END STORE&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;
Assume that different sets of records are processed and the results are used to produce a final report. Because of compiler table limitations, you have to process requests that cannot be continued with the MORE command (see [[Large request considerations]]). You can store intermediate results in GTBL and produce the final report exclusively from the table.   &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;BEGIN&lt;br /&gt;
          .&lt;br /&gt;
          .&lt;br /&gt;
          .&lt;br /&gt;
      process hourly workers&#039; wages&lt;br /&gt;
          .&lt;br /&gt;
          .&lt;br /&gt;
          .&lt;br /&gt;
      IF $SETG(&#039;HOURLY TOTAL&#039;, %TOTAL) THEN&lt;br /&gt;
          PRINT &#039;*** REQUEST TOO LONG - GTBL&#039;&lt;br /&gt;
          STOP&lt;br /&gt;
      END IF&lt;br /&gt;
 &lt;br /&gt;
END&lt;br /&gt;
 &lt;br /&gt;
BEGIN&lt;br /&gt;
          .&lt;br /&gt;
          .&lt;br /&gt;
          .&lt;br /&gt;
      process monthly workers&#039; wages&lt;br /&gt;
          .&lt;br /&gt;
          .&lt;br /&gt;
          .&lt;br /&gt;
      IF $SETG(&#039;MONTHLY TOTAL&#039;, %TOTAL) THEN&lt;br /&gt;
          PRINT &#039;*** REQUEST TOO LONG - GTBL&#039;&lt;br /&gt;
          STOP&lt;br /&gt;
      END IF&lt;br /&gt;
END&lt;br /&gt;
 &lt;br /&gt;
BEGIN&lt;br /&gt;
      %HOURLY = $GETG(&#039;HOURLY TOTAL&#039;)&lt;br /&gt;
      %MONTHLY = $GETG(&#039;MONTHLY TOTAL&#039;)&lt;br /&gt;
           .&lt;br /&gt;
           .&lt;br /&gt;
           .&lt;br /&gt;
      format report&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;
==Using global string variables with a conditional INCLUDE command==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can use global string variables to create a modular programming environment in which you select procedures to perform a particular function without compiling and evaluating procedures designed for other related functions. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
To use global string variables effectively in creating such an environment, it is useful to review the differences between commands and User Language statements and between conditional and unconditional includes, as described in the following sections.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Differences between commands and User Language statements===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Commands and User Language statements have different effects and are used in different ways: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;System control commands can be issued only outside a request &amp;amp;mdash; at command level. They are acted upon immediately. User Language statements can be used only within a request. They are compiled on a line-by-line basis, but the entire request is not executed until &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; receives an END statement. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;INCLUDE is both a command and a User Language statement. In either context, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; is directed to take the next input line from an appropriate stored procedure. When the procedure lines are exhausted, the next input line is taken from the command or User Language statement immediately following the INCLUDE. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;IF has two formats: &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Conditional INCLUDE command&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;User Language statement &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;
===Conditional and unconditional INCLUDEs===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
A conditional include can be coded within an IF statement using the INCLUDE statement or with an INCLUDE command.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
An unconditional include can be coded with a standalone INCLUDE statement or command.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
This section describes conditional INCLUDE commands by providing examples and discussing how each example is processed.&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 request illustrates the conditional INCLUDE command:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;BEGIN&lt;br /&gt;
ALL: FIND ALL RECORDS&lt;br /&gt;
     END FIND&lt;br /&gt;
     FOR EACH RECORD IN ALL&lt;br /&gt;
         IF AGE GT &#039;10&#039; THEN&lt;br /&gt;
             IF $SETG(&#039;AGE&#039;, &#039;YES&#039;) THEN&lt;br /&gt;
                 PRINT &#039;*** REQUEST TOO LONG - GTBL&#039;&lt;br /&gt;
                 STOP&lt;br /&gt;
             END IF&lt;br /&gt;
         END IF&lt;br /&gt;
     END FOR&lt;br /&gt;
END&lt;br /&gt;
IF AGE = YES, COUNT&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====How Example 1 is processed====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The statements between the BEGIN and END are compiled and evaluated. If the AGE condition is true, a global string variable is set. &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; then processes the IF command. Statements in the COUNT procedure are compiled and executed only if the condition is true. Otherwise, the statements are never compiled.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Example 2====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Suppose that you enter record selection criteria and then select one of three reports to be generated. A set of four procedures can be created.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
For example, procedure A might contain the prompts for record selection and report type. Procedures B, C, and D might contain statements to produce the individual reports. Only procedure A and one of the other three procedures is compiled and evaluated. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;PROCEDURE A&lt;br /&gt;
BEGIN&lt;br /&gt;
FIND.RECS: FIND ALL RECORDS FOR WHICH&lt;br /&gt;
               ??SELECT.RECORDS&lt;br /&gt;
           END FIND&lt;br /&gt;
           IF $SETG(&#039;REPORTNUM&#039;, $READ(&#039;ENTER REPORT NO&#039;))&lt;br /&gt;
               THEN PRINT &#039;*** REQUEST TOO LONG - GTBL&#039;&lt;br /&gt;
               STOP&lt;br /&gt;
           END IF&lt;br /&gt;
END MORE&lt;br /&gt;
IF REPORTNUM = 1, B&lt;br /&gt;
IF REPORTNUM = 2, C&lt;br /&gt;
IF REPORTNUM = 3, D&lt;br /&gt;
END PROCEDURE&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Procedures B, C, and D have the same basic format, but variations in processing are applied to each record.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;PROCEDURE B&lt;br /&gt;
MORE&lt;br /&gt;
PROCESS: FOR EACH RECORD IN FIND.RECS&lt;br /&gt;
             .&lt;br /&gt;
             .&lt;br /&gt;
             .&lt;br /&gt;
         processing&lt;br /&gt;
             .&lt;br /&gt;
             .&lt;br /&gt;
             .&lt;br /&gt;
         END FOR PROCESS&lt;br /&gt;
END&lt;br /&gt;
END PROCEDURE&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====How Example 2 is processed====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The dialog produced by these procedures is shown below, with user input in boldface: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;b&amp;gt;INCLUDE A&amp;lt;/b&amp;gt;&lt;br /&gt;
??SELECT.RECORDS&lt;br /&gt;
&amp;lt;b&amp;gt;REGION = SOUTH OR WEST&amp;lt;/b&amp;gt;&lt;br /&gt;
$$ENTER REPORT NO&lt;br /&gt;
&amp;lt;b&amp;gt;2&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;i&amp;gt;output from Procedure C &amp;lt;/i&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Keep IF commands at as high a nesting level as possible====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
An alternate method of writing procedures is to follow each report&#039;s END MORE statement with IF commands. However, each procedure might then INCLUDE itself or another procedure, creating a lower level of nesting. If the procedure continued to INCLUDE itself, the maximum nesting level would be reached. As a general rule in a complex set of procedures, keep IF commands at as high a nesting level as possible. The global string variables to be tested can be set at any level.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
==Using global string variables to tailor a request==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Global string variables can be used in conjunction with the FILE$ condition (see [[Record retrievals#FILE$ condition|FILE$ condition]]) to access a set of files in a group. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Example====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
In the following example, the value of the global string variable, FILES, can be changed to access an alternative set of files. This example consists of two requests. The first &amp;amp;mdash; BEGIN through END MORE &amp;amp;mdash; sets the global string variable during the execution phase; the second &amp;amp;mdash; MORE through END &amp;amp;mdash; is then compiled with the correct value.   &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;
           IF $SETG(&#039;FILES&#039;,&#039;FILEA OR FILE$ FILEC&#039;) THEN&lt;br /&gt;
               PRINT &#039;***REQUEST TOO LONG -- GTBL&#039;&lt;br /&gt;
               %IGNORE = $SETG(&#039;FILES&#039;, &amp;amp;apos;&amp;amp;apos;)&lt;br /&gt;
           END IF&lt;br /&gt;
END MORE&lt;br /&gt;
MORE&lt;br /&gt;
           IF $GETG(&#039;files&#039;) = &amp;amp;apos;&amp;amp;apos; THEN&lt;br /&gt;
               STOP&lt;br /&gt;
           END IF&lt;br /&gt;
 GET.A:    FIND ALL RECORDS FOR WHICH&lt;br /&gt;
              (FILE$ ?&amp;amp;amp;FILES) AND FIELDX = &#039;A&#039;&lt;br /&gt;
           END FIND&lt;br /&gt;
           FOR EACH RECORD IN GET.A&lt;br /&gt;
               PRINT ALL INFORMATION&lt;br /&gt;
           END FOR&lt;br /&gt;
END&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
==Global objects==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Global objects include found sets, images, lists, menus, positions, screens, and sorted sets. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===General rules for declarations===&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;You must declare global lists, found sets, and sorted sets in every request that references them; the &amp;lt;var&amp;gt;Declare&amp;lt;/var&amp;gt; statement must come before the reference. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;If a global object is used in multiple subroutines, or in both the main program and a subroutine, the label must be declared as global in the main program before the subroutine(s). The subroutine(s) must then declare the label as common. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;If you refer to a global object before a &amp;lt;var&amp;gt;Declare&amp;lt;/var&amp;gt; statement, the system issues a duplicate label compilation error. Such a reference implicitly makes the object non global. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Incompatibility===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The [[PQO]] product does not support global found sets, lists, positions, or sorted sets. These global objects cannot be used in conjunction with remote files or scattered groups. This limitation exists, because GTBL does not exist on the PQO server. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Clearing global objects from GTBL===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
For syntax, details and examples of clearing global objects, see [[#Clearing the GTBL work area|Clearing the GTBL work area]]. &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Using global found sets and lists==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can pass found sets and lists from request to request by declaring them as &amp;lt;var&amp;gt;Global&amp;lt;/var&amp;gt;. A global found set or list is stored in the internal work area GTBL for the duration of the terminal session unless it is intentionally cleared, or the file or group with which it is associated is closed. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Creating a global found set or sorted set====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can create a global found set using this syntax: &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;[Declare] Label &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;labelname&amp;lt;/span&amp;gt; [Global | Common] &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;labelname&amp;lt;/var&amp;gt; is a unique global object name.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Creating a global list====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can declare a global list using the following syntax:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;[Declare] List &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;listname&amp;lt;/span&amp;gt; &lt;br /&gt;
  [In [File [Perm | Temp] Group] &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;name&amp;lt;/span&amp;gt;]&lt;br /&gt;
  [Global | Common] &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
In both cases, the keyword &amp;lt;var&amp;gt;Global&amp;lt;/var&amp;gt; implies &amp;lt;var&amp;gt;Common&amp;lt;/var&amp;gt;. These two keywords are mutually exclusive in the declaration statement. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Because &amp;lt;var&amp;gt;Global&amp;lt;/var&amp;gt; implies &amp;lt;var&amp;gt;Common&amp;lt;/var&amp;gt;, a list or found set can be declared &amp;lt;var&amp;gt;Global&amp;lt;/var&amp;gt; at any scope. See [[Subroutines#Scope of elements|Scope of elements]] for a discussion. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;The global name, label name, or list name, must be unique across all global objects. For a discussion, see [[Subroutines#Sharing common elements|Sharing common elements]]. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Usage rules====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The following rules apply to global found sets and lists: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;You must declare each global list or global found set as &amp;lt;code&amp;gt;&amp;lt;i&amp;gt;labelname&amp;lt;/i&amp;gt; Global&amp;lt;/code&amp;gt; in each procedure that uses it. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;The file context in which a global list or found set is used must be the same as the file context in which it was created. &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; compiler does not currently enforce this rule; therefore, your code must maintain this requirement. Rocket Software recommends that you populate a global found set or list only once within the scope of these global objects. However, this is not a restriction as long as file context is maintained. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Global found sets and lists are invalid in ad hoc group context. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Each global object name must be unique. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Global found sets and lists are not supported in remote file or scattered group contexts. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Example 1: Referencing a global found set===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
In this example, Procedure 1 declares the global found set and then performs the find. Procedure 2 needs only to declare the global found set and then reference the global found set labeled F1. The &amp;lt;var&amp;gt;For&amp;lt;/var&amp;gt; loops in both procedures process records in the &amp;lt;code&amp;gt;VEHICLES&amp;lt;/code&amp;gt; file for which the value of the field &amp;lt;code&amp;gt;COLOR&amp;lt;/code&amp;gt; was equal to &amp;lt;code&amp;gt;BLUE&amp;lt;/code&amp;gt; at the time of the evaluation of the &amp;lt;var&amp;gt;Find&amp;lt;/var&amp;gt; statement in Procedure 1. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;b&amp;gt;Procedure 1&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;BEGIN&lt;br /&gt;
DECLARE LABEL F1 GLOBAL&lt;br /&gt;
F1: IN VEHICLES FIND ALL RECORDS WHERE COLOR = &#039;BLUE&#039;&lt;br /&gt;
    END FIND&lt;br /&gt;
    FOR EACH RECORD IN F1&lt;br /&gt;
       PAI&lt;br /&gt;
    END FOR&lt;br /&gt;
END&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;b&amp;gt;Procedure 2&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;BEGIN&lt;br /&gt;
DECLARE LABEL F1 GLOBAL&lt;br /&gt;
    FOR EACH RECORD IN F1&lt;br /&gt;
       PAI&lt;br /&gt;
    END FOR&lt;br /&gt;
END&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Example 2: Maintaining file context===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Example 2 illustrates repopulating a global found set across the scope of its usage, maintaining the same file context throughout. In this example, Procedure 1 is identical to Procedure 1 in Example 1 above, and Procedure 3 is identical to Procedure 2 in Example 1. The second procedure in this example, however, performs a different find than the first. Procedure 3 then processes the records found in Procedure 2. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
So in this example, Procedure 1 processes records in the &amp;lt;code&amp;gt;VEHICLES&amp;lt;/code&amp;gt; file for which the value of the field &amp;lt;code&amp;gt;COLOR&amp;lt;/code&amp;gt; is equal to &amp;lt;code&amp;gt;BLUE&amp;lt;/code&amp;gt;, while Procedures 2 and 3 process records for which &amp;lt;code&amp;gt;COLOR&amp;lt;/code&amp;gt; was equal to &amp;lt;code&amp;gt;RED&amp;lt;/code&amp;gt; at the time of the &amp;lt;var&amp;gt;Find&amp;lt;/var&amp;gt; statement evaluation in Procedure 2. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;b&amp;gt;Procedure 1&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;BEGIN&lt;br /&gt;
DECLARE LABEL F1 GLOBAL&lt;br /&gt;
F1: IN VEHICLES FIND ALL RECORDS WHERE COLOR = &#039;BLUE&#039;&lt;br /&gt;
    END FIND&lt;br /&gt;
    FOR EACH RECORD IN F1&lt;br /&gt;
       PAI&lt;br /&gt;
    END FOR&lt;br /&gt;
END&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;b&amp;gt;Procedure 2&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;BEGIN&lt;br /&gt;
DECLARE LABEL F1 GLOBAL&lt;br /&gt;
F1: IN VEHICLES FIND ALL RECORDS WHERE COLOR = &#039;RED&#039;&lt;br /&gt;
    END FIND&lt;br /&gt;
    FOR EACH RECORD IN F1&lt;br /&gt;
       PAI&lt;br /&gt;
    END FOR&lt;br /&gt;
END&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;b&amp;gt;Procedure 3&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;BEGIN&lt;br /&gt;
DECLARE LABEL F1 GLOBAL&lt;br /&gt;
    FOR EACH RECORD IN F1&lt;br /&gt;
       PAI&lt;br /&gt;
    END FOR&lt;br /&gt;
END&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
==Using global sorted sets==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
A global sorted set is created when a SORT RECORDS statement or a FOR EACH RECORD IN ORDER BY statement is preceded by a label that has been declared GLOBAL. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Limiting subsequent references===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
For example, in Procedure 1 below, MAKE is the only field referenced in the request. Therefore, MAKE is the only field that can be referenced in subsequent requests. Thus, in Procedure 2, because the field MODEL was not referenced in the previous request, a blank is printed each time through the FOR loop. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Procedure 1====&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;BEGIN&lt;br /&gt;
DECLARE LABEL S1 GLOBAL&lt;br /&gt;
F1: IN VEHICLES FIND ALL RECORDS&lt;br /&gt;
    END FIND&lt;br /&gt;
S1: SORT RECORDS IN F1 BY MAKE&lt;br /&gt;
    FOR EACH RECORD IN S1&lt;br /&gt;
       PRINT MAKE&lt;br /&gt;
    END FOR&lt;br /&gt;
END&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Procedure 2====&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;BEGIN&lt;br /&gt;
DECLARE LABEL S1 GLOBAL&lt;br /&gt;
    FOR EACH RECORD IN S1&lt;br /&gt;
       PRINT MODEL&lt;br /&gt;
    END FOR&lt;br /&gt;
END&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Keeping all fields accessible for subsequent references===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
To ensure that all fields are accessible to subsequent requests, use a PAI or field name variable with the statement that creates the found set.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The sort key field(s) used on the SORT statement cannot be referred to by a subsequent request unless referred to in the SORT statement FOR loop in the request creating the set. While this restriction applies to the use of the SORT RECORDS statement, it does not apply to the use of the SORT RECORD KEYS statement.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If you are not going to refer to the sorted set in the request that creates the sorted set, you can code a FOR loop, which is compiled but never executed, that refers to each field that you want to refer to in a subsequent request. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
==Saving and recalling a position in a For loop==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can include statements in a &amp;lt;var&amp;gt;For&amp;lt;/var&amp;gt; loop to provide for the possibility of terminating the loop before the set of records or values being processed is exhausted. For example, you might use a &amp;lt;var&amp;gt;Jump To&amp;lt;/var&amp;gt; or &amp;lt;var&amp;gt;Loop End&amp;lt;/var&amp;gt; statement in conjunction with an &amp;lt;var&amp;gt;If&amp;lt;/var&amp;gt; statement to test each record or value before processing, and terminating the loop if a certain condition is met. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The &amp;lt;var&amp;gt;Remember&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;Position&amp;lt;/var&amp;gt; statements let you store the current processing position in a &amp;lt;var&amp;gt;For&amp;lt;/var&amp;gt; loop, then recall it at a later time and resume &amp;lt;var&amp;gt;For&amp;lt;/var&amp;gt; processing where you left off earlier. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Remember statement===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The purpose of the &amp;lt;var&amp;gt;Remember&amp;lt;/var&amp;gt; statement is to store the processing position in a &amp;lt;var&amp;gt;For&amp;lt;/var&amp;gt; loop. Each &amp;lt;var&amp;gt;Remember&amp;lt;/var&amp;gt; statement creates a GTBL entry of variable length. See [[Large request considerations]] for detailed descriptions of GTBL entries. If you remember a position as &amp;lt;var&amp;gt;Global&amp;lt;/var&amp;gt;, the entry remains in GTBL after the current request ends. &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; clears non-global &amp;lt;var&amp;gt;Remember&amp;lt;/var&amp;gt; positions at the end of each request.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Syntax====&lt;br /&gt;
{{Template:Remember statement syntax}}&lt;br /&gt;
Where:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The &amp;lt;var&amp;gt;Global&amp;lt;/var&amp;gt; option retains the &amp;lt;var&amp;gt;Remember&amp;lt;/var&amp;gt; position after the current request terminates. If &amp;lt;var&amp;gt;Global&amp;lt;/var&amp;gt; is not specified, the position is temporary, and it is cleared from GTBL after the current request terminates. &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;position_name&amp;lt;/var&amp;gt; is a unique object name you assign to the &amp;lt;var&amp;gt;Remember&amp;lt;/var&amp;gt; position. &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;foundsortset_name&amp;lt;/var&amp;gt; or &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;list_name&amp;lt;/var&amp;gt; must be identical to the listname or label specified on the &amp;lt;var&amp;gt;For&amp;lt;/var&amp;gt; loop:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;If you are processing a found set or a sorted set, &amp;lt;code&amp;gt;In &amp;lt;i&amp;gt;foundsortset_name&amp;lt;/i&amp;gt;&amp;lt;/code&amp;gt; is the label of the &amp;lt;var&amp;gt;Find&amp;lt;/var&amp;gt; statement that generated it. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;If you are processing a list, &amp;lt;code&amp;gt;On &amp;lt;i&amp;gt;list_name&amp;lt;/i&amp;gt;&amp;lt;/code&amp;gt; is the name you gave to the list when you originally declared it. &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;
====Usage notes====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The following rules apply to the use of the &amp;lt;var&amp;gt;Remember&amp;lt;/var&amp;gt; statement:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Can appear only within a &amp;lt;var&amp;gt;For&amp;lt;/var&amp;gt; loop, but not a nested &amp;lt;var&amp;gt;For&amp;lt;/var&amp;gt; loop. The file context must be identical to the context of the &amp;lt;var&amp;gt;For&amp;lt;/var&amp;gt; loop. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Is invalid in ad hoc group context, if used with the &amp;lt;var&amp;gt;Global&amp;lt;/var&amp;gt; option. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;The &amp;lt;var&amp;gt;Remember&amp;lt;/var&amp;gt; statement is incompatible with &amp;lt;var&amp;gt;For Each Record In Order By&amp;lt;/var&amp;gt; clauses. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Position statement===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
A &amp;lt;var&amp;gt;Position&amp;lt;/var&amp;gt; statement recalls a remembered position, so you can resume &amp;lt;var&amp;gt;For&amp;lt;/var&amp;gt; processing in a list or found set that was terminated at an earlier time. For example, if you remembered the position at record number 5, then your foundset is positioned at record number 6 for further processing.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
This &amp;lt;var&amp;gt;Position&amp;lt;/var&amp;gt; statement is not to be confused with the &amp;lt;var&amp;gt;Position&amp;lt;/var&amp;gt; statement used to read records sequentially in an external VSAM KSDS file. See [[Images#Position statement|Position statement]]. &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;Position {Foundset &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;foundsortset_name&amp;lt;/span&amp;gt; | List &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;list_name&amp;lt;/span&amp;gt;} [At] &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;position_name&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
Where:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;foundsortset_name&amp;lt;/var&amp;gt; or &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;list_name&amp;lt;/var&amp;gt; must be identical to the list or label name used on a previous &amp;lt;var&amp;gt;Remember&amp;lt;/var&amp;gt; statement and in the &amp;lt;var&amp;gt;For&amp;lt;/var&amp;gt; statement that follows. &lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If you are about to resume the processing of a found set, &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;foundsortset_name&amp;lt;/var&amp;gt; is the label of the &amp;lt;var&amp;gt;Find&amp;lt;/var&amp;gt; statement that generated it. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If you are about to resume the processing of a list, &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;list_name&amp;lt;/var&amp;gt; is the name you gave to the list when you originally declared it.&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;position_name&amp;lt;/var&amp;gt; is a name that you assigned to the remembered position when you stored it on a previous &amp;lt;var&amp;gt;Remember&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;
====Usage notes====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
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;The &amp;lt;var&amp;gt;Position&amp;lt;/var&amp;gt; statement must appear outside, immediately before the &amp;lt;var&amp;gt;For&amp;lt;/var&amp;gt; loop to which it refers; it cannot be in the &amp;lt;var&amp;gt;For&amp;lt;/var&amp;gt; loop itself.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;The &amp;lt;var&amp;gt;For&amp;lt;/var&amp;gt; statement that follows the &amp;lt;var&amp;gt;Position&amp;lt;/var&amp;gt; statement must have an identical file context and list name or label name as the statement that initiated the &amp;lt;var&amp;gt;For&amp;lt;/var&amp;gt; loop of the remembered position.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;The &amp;lt;var&amp;gt;Position&amp;lt;/var&amp;gt; statement is incompatible with &amp;lt;var&amp;gt;For Each Record In Order By&amp;lt;/var&amp;gt; clauses. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
==Global images and screens==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can use global images and screens to pass image and screen data from one request to another and to efficiently manage more than one image or screen in one request. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can also declare global menus, because a menu is a special type of screen. In this section, the term &amp;quot;screen&amp;quot; applies to both screens and menus, unless otherwise noted. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Declaring global images and screens===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You make an image or screen global by specifying the keyword &amp;lt;var&amp;gt;Global&amp;lt;/var&amp;gt; in its declaration statement. You can declare global images and screens to be &amp;lt;var&amp;gt;Temporary&amp;lt;/var&amp;gt;, deleted at request termination, or &amp;lt;var&amp;gt;Permanent&amp;lt;/var&amp;gt;, persist across request termination. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===How images and screens are processed===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When you declare an image or screen as &amp;lt;var&amp;gt;Global&amp;lt;/var&amp;gt;, it is stored in GTBL. Nonglobal images and screens, declared as &amp;lt;var&amp;gt;Common&amp;lt;/var&amp;gt;, or neither &amp;lt;var&amp;gt;Common&amp;lt;/var&amp;gt; nor &amp;lt;var&amp;gt;Global&amp;lt;/var&amp;gt;, are stored in FSCB. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
This section provides some background information about how &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; processes images and screens, contrasting how global and nonglobal images and screens are processed. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Images and screen processing===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The figures in the following subsections represent how nonglobal and global objects are processed. Comparing the two types of processing highlights the I/O and storage savings associated with the global images and screens. &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Processing of nonglobal objects====&lt;br /&gt;
&amp;lt;p class=&amp;quot;figure&amp;quot;&amp;gt;[[File:Nonglobal_object_processing.png|550px]] &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The &amp;lt;b&amp;gt;Nonglobal object processing&amp;lt;/b&amp;gt; figure illustrates the process in the following steps:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The compiler loads a compiled version of the screen or image into FSCB in the user&#039;s server.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;A copy of the compiled object is stored in the buffer pool.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;A &amp;lt;var&amp;gt;Prepare&amp;lt;/var&amp;gt; statement acts on the compiled object in the buffer pool and copies it into FSCB.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Update statements act on the copy of the object in FSCB.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;The updated object is copied from FSCB to a working copy of the object in the buffer pool.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;If a user waits too long or the buffer pool fills up, the object is written to CCATEMP. When a user presses Enter for that object, the object is loaded back from CCATEMP to the buffer pool. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;amp;nbsp;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Processing of global objects==== &lt;br /&gt;
&amp;lt;p class=&amp;quot;figure&amp;quot;&amp;gt;[[File:Global_object_processing.png|550px]] &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The &amp;lt;b&amp;gt;Global object processing&amp;lt;/b&amp;gt; figure illustrates the process in the following steps: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The compiler loads a compiled version of the screen or image into FSCB in the user&#039;s server. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;A copy of the compiled object is stored in the buffer pool. This copy is called &#039;VIRGIN&#039;, as it is never updated. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;A &amp;lt;var&amp;gt;Prepare&amp;lt;/var&amp;gt; statement acts on the compiled object in the buffer pool and copies it into GTBL. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Update statements act on the copy in GTBL. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Using Prepare and Identify statements===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
To help you decide how to use the &amp;lt;var&amp;gt;Prepare&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;Identify&amp;lt;/var&amp;gt; statements, review the following:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[[#GTBL internal work area|GTBL internal work area]] &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;[[#Timing and placement of a CLEAR statement|Timing and placement of a CLEAR statement]] &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;For syntax and usage of the &amp;lt;var&amp;gt;Prepare&amp;lt;/var&amp;gt; statement, see [[Full-screen feature#PREPARE statement|Prepare statement]]&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;For syntax and usage of the &amp;lt;var&amp;gt;Identify&amp;lt;/var&amp;gt; statement, see [[Images#Identify statement|Identify statement]] &lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Also when using the &amp;lt;var&amp;gt;Identify&amp;lt;/var&amp;gt; statement, see [[#Consistency checks performed|Consistency checks performed]]. &amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Performance and efficiency benefits===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Global images and screens can simply and efficiently perform image-to-image processing and screen-to-image processing, eliminating the need to map screen items to image items when passing or preserving screens. Using global images and screens: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Reduces CPU resources required to pass data between requests in applications where a large number of global variables would have been necessary. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Reduces the FSCB I/O between multiple images and between images and screens. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Makes the declaration of global data explicit, thus traceable by using naming conventions and cross-reference tools. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Simplifies code, eliminating the need for &amp;lt;var&amp;gt;If $Setg() Then ...&amp;lt;/var&amp;gt; sequences to map request %variables into global variables and for &amp;lt;var&amp;gt;%xyz = $Getg()&amp;lt;/var&amp;gt; sequences to map global variables into request %variables. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Reduces I/O by swapping modified global screens to CCASERVR instead of paging them between the buffer pool and CCATEMP. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===When to use global images and screens===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You achieve the greatest benefit by declaring as &amp;lt;var&amp;gt;Global&amp;lt;/var&amp;gt; the most frequently used images and screens in an application. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Infrequently used images and screens declared as nonglobal do not put pressure on the buffer pool, because there would not be many copies in the buffer pool for many users, and little I/O with CCATEMP. If an application has many images and/or screens, GTBL might overflow if all the images and/or screens are defined as global. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Consistency checks performed===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When a global image or screen is first referred to in a request, GTBL is searched for the object. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If the object is&amp;lt;var&amp;gt; not&amp;lt;/var&amp;gt; already present in GTBL, the object is written into GTBL. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If the object is present, two consistency checks are performed:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Persistence &amp;amp;mdash; &amp;lt;var&amp;gt;Permanent&amp;lt;/var&amp;gt; or &amp;lt;var&amp;gt;Temporary&amp;lt;/var&amp;gt; status &amp;amp;mdash; of the new object must match the persistence of the object already in GTBL. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Definition &amp;amp;mdash; &amp;lt;var&amp;gt;Permanent&amp;lt;/var&amp;gt; or &amp;lt;var&amp;gt;Temporary&amp;lt;/var&amp;gt; &amp;amp;mdash; of the new object must match the definition of the object already in GTBL. &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; If a global image has an array that uses the &amp;lt;var&amp;gt;Depending On &amp;lt;i&amp;gt;%variable&amp;lt;/i&amp;gt;&amp;lt;/var&amp;gt; option, the names of the %variables are not compared when the definition check is performed. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If either of these consistency checks fails &amp;amp;mdash; for example, an image is declared as &amp;lt;var&amp;gt;Temporary&amp;lt;/var&amp;gt;, but the same image already exists in GTBL, declared as &amp;lt;var&amp;gt;Permanent&amp;lt;/var&amp;gt; &amp;amp;mdash; then the request is canceled and the [[M204.2158]] message is generated: &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;Global &amp;lt;i&amp;gt;object-type&amp;lt;/i&amp;gt; definition doesn&#039;t match value in GTBL​,​ &amp;lt;i&amp;gt;error-description&amp;lt;/i&amp;gt;, name hash=&amp;lt;i&amp;gt;hash-code&amp;lt;/i&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Using global images and screens==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The following example illustrates using global images and screens to pass screen and image data between User Language requests. The example consists of the following procedures:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SCREENDEF defines a global screen.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;IMAGEDEF defines a global image.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;PROCA sets the screen item value and an image item value.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;PROCB displays the updated image item and the original screen item. &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;PROCEDURE SCREENDEF&lt;br /&gt;
   * KEEP GLOBAL SCREENS AND IMAGES IN SEPARATE PROCEDURES&lt;br /&gt;
   * FOR CENTRAL DEFINITION&lt;br /&gt;
   SCREEN SCREEN1 GLOBAL&lt;br /&gt;
      PROMPT &#039;SCREEN1&#039;&lt;br /&gt;
      INPUT ITEM NUMERIC LEN 4 AT 10&lt;br /&gt;
   END SCREEN&lt;br /&gt;
END PROCEDURE&lt;br /&gt;
 &lt;br /&gt;
PROCEDURE IMAGEDEF&lt;br /&gt;
   * KEEP GLOBAL SCREENS AND IMAGES IN SEPARATE PROCEDURES&lt;br /&gt;
   * FOR CENTRAL DEFINITION&lt;br /&gt;
   IMAGE IMAGE1 GLOBAL&lt;br /&gt;
      ITEM IS FLOAT LEN 8&lt;br /&gt;
   END IMAGE&lt;br /&gt;
END PROCEDURE&lt;br /&gt;
 &lt;br /&gt;
PROCEDURE PROCA&lt;br /&gt;
   BEGIN&lt;br /&gt;
   INCLUDE SCREENDEF&lt;br /&gt;
   INCLUDE IMAGEDEF&lt;br /&gt;
   * INITIALIZE SCREEN1 AND IMAGE1&lt;br /&gt;
   PREPARE SCREEN SCREEN1&lt;br /&gt;
   PREPARE IMAGE IMAGE1&lt;br /&gt;
   * USER SEES SCREEN1 AND ENTERS A VALUE N (E.G., 10) AS INPUT&lt;br /&gt;
   READ SCREEN SCREEN1&lt;br /&gt;
   %IMAGE1:ITEM = %SCREEN1:ITEM + 3&lt;br /&gt;
   END&lt;br /&gt;
END PROCEDURE&lt;br /&gt;
 &lt;br /&gt;
PROCEDURE PROCB&lt;br /&gt;
   BEGIN&lt;br /&gt;
   INCLUDE SCREENDEF&lt;br /&gt;
   INCLUDE IMAGEDEF&lt;br /&gt;
   * DO NOT INITIALIZE, JUST IDENTIFY FOR SUBSEQUENT REFERRAL&lt;br /&gt;
   IDENTIFY IMAGE IMAGE1&lt;br /&gt;
      * USER SEES UPDATED IMAGE ITEM (N+3) IN NEW REQUEST&lt;br /&gt;
   PRINT &#039;IMAGE ITEM = &#039; WITH %IMAGE1:ITEM&lt;br /&gt;
   * USER SEES ORIGINAL SCREEN ITEM WITH DATA THAT USER ENTERED&lt;br /&gt;
   READ SCREEN SCREEN1&lt;br /&gt;
   END&lt;br /&gt;
END PROCEDURE&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; You can run several procedures between PROCA and PROCB with the same results as if you ran those two procedures sequentially, because the defined global objects persist.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===System administration issues===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
To review the implications of the global images and screens feature for system administrators, see the following topics:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;GTBL size &amp;amp;mdash; [[Large request considerations#GTBL (global variable table)|GTBL (global variable table)]], [[Defining the runtime environment (CCAIN)#Understanding the global variable table (GTBL)|Understanding the global variable table (GTBL)]], and [[GTBLHASH parameter]]&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;VTBL usage with COMMON images and screens &amp;amp;mdash; [[Large request considerations#VTBL (compiler variable table)|VTBL (compiler variable table)]] and [[Defining the runtime environment (CCAIN)#Compiler variable table (VTBL)|Compiler variable table (VTBL)]]&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;User since-last statistics &amp;amp;mdash; [[Using system statistics#User since-last statistics|User since-last statistics]] &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
==Clearing the GTBL work area==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When you log off, all global objects and global variables are cleared. If you want to clear some or all global objects or global variables from GTBL during your working session, prior to logging out, you can issue: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;CLEAR statement &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;CLEARG and/or CLEARGO commands&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;$DELG function to selectively delete global string variables&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;RESET command for the GTBLEHASH and GTBLPCT parameters&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;UTABLE command that changes the size of FTBL, XTBL, or GTBL clears all global objects of any type&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Using the CLEARG and CLEARGO commands===&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;Use this command &amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;To Remove...&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;[[CLEARG command|CLEARG]]&amp;lt;/var&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Only global string 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;&amp;lt;var&amp;gt;[[CLEARGO command|CLEARGO]]&amp;lt;/var&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;All global objects: images, screens, menus, found sets, lists, and temporary and permanent positions from GTBL; it does not clear global string variables. &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 &amp;lt;var&amp;gt;CLEARGO&amp;lt;/var&amp;gt; command takes no arguments.&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Using the $DELG function===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can use the &amp;lt;var&amp;gt;[[$Delg]]&amp;lt;/var&amp;gt; function to delete global string variables created by either &amp;lt;var&amp;gt;[[$Setg]]&amp;lt;/var&amp;gt; or &amp;lt;var&amp;gt;[[$Incrg]]&amp;lt;/var&amp;gt;. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The &amp;lt;var&amp;gt;[[$Delg]]&amp;lt;/var&amp;gt; function deletes a single or group of similar global string variables, releasing and compacting the GTBL space for reuse. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Using the CLEAR statement===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can use the &amp;lt;var&amp;gt;Clear&amp;lt;/var&amp;gt; statement to clear global objects of the same type, an individual global object, or all global string variables, as shown 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;The statement &amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Clears...&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td nowrap&amp;gt;&amp;lt;var&amp;gt;Clear &amp;lt;i&amp;gt;type-of-object&amp;lt;/i&amp;gt; Objects&amp;lt;/var&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;A class of global objects or all global objects. Global string variables are not cleared, because they are not objects. &amp;lt;/td&amp;gt;&lt;br /&gt;
&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;Clear Global&amp;lt;/var&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Individual global objects from GTBL. &amp;lt;/td&amp;gt;&lt;br /&gt;
&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;Clear Globals&amp;lt;/var&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;All global string variables. You cannot selectively clear individual global string variables with the &amp;lt;var&amp;gt;Clear&amp;lt;/var&amp;gt; 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;
====Syntax====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The format for the &amp;lt;var&amp;gt;Clear&amp;lt;/var&amp;gt; statement is:&amp;lt;/p&amp;gt;&lt;br /&gt;
{{Template:Clear statement syntax}}&lt;br /&gt;
Where:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;All&amp;lt;/var&amp;gt; clears all permanent and temporary global objects, including: found sets, lists, images, menus, positions, screens, and sorted sets from GTBL. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Temp&amp;lt;/var&amp;gt; clears only global objects explicitly declared as &amp;lt;var&amp;gt;Temp&amp;lt;/var&amp;gt; in your request, including images, menus, and screens from GTBL. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;ListFdst&amp;lt;/var&amp;gt; clears all global found sets, lists, and sorted sets from GTBL. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Position&amp;lt;/var&amp;gt; clears all permanent and temporary positions from GTBL. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Objects&amp;lt;/var&amp;gt; specifies that the &amp;lt;var&amp;gt;CLEAR&amp;lt;/var&amp;gt; command is operating on the object type you specified, or operating on all types of objects. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Global&amp;lt;/var&amp;gt; clears a specific global object from GTBL. You cannot clear a global string variable created with the &amp;lt;var&amp;gt;$Setg&amp;lt;/var&amp;gt; function using this form. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Position [Perm | Temp]&amp;lt;/var&amp;gt; The use of PERM or TEMP must be consistent with GLOBAL in the REMEMBER statement.  If GLOBAL is specified in the REMEMBER statement, then PERM is implied.  If GLOBAL is omitted from the REMEMBER statement, TEMP is implied.&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;objectname&amp;lt;/var&amp;gt; is the literal name of the specific global object to be cleared from GTBL. Enclose &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;objectname&amp;lt;/var&amp;gt; in single quotation marks.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;b&amp;gt;NOTE:&amp;lt;/b&amp;gt; If the &amp;lt;i&amp;gt;objectname&amp;lt;/i&amp;gt; is mixed case, be sure to use the same name, in single quotation marks, when referring to that name in other statements; e.g. REMEMBER or POSITION.&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;%variable&amp;lt;/var&amp;gt; contains a value that specifies the global object to be cleared from GTBL. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;Globals&amp;lt;/var&amp;gt; clears all global string variables created with the &amp;lt;var&amp;gt;$Setg&amp;lt;/var&amp;gt; function from GTBL. This form does &amp;lt;em&amp;gt;not&amp;lt;/em&amp;gt; clear any global objects. &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 following statements clear all permanent and temporary global found sets, images, lists, menus, positions, screens, and sorted sets:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;Clear Objects&lt;br /&gt;
 &lt;br /&gt;
Clear All Objects&lt;br /&gt;
 &lt;br /&gt;
Clear All Global Objects&lt;br /&gt;
 &lt;br /&gt;
Clear Global Objects&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Clearing global found sets and lists===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can clear global found sets and lists in GTBL without logging off using the following examples: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Clear a specific global list or found set by issuing one of these statements:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;Clear Global List &#039;&amp;lt;i&amp;gt;objectname&amp;lt;/i&amp;gt;&#039;&lt;br /&gt;
 &lt;br /&gt;
Clear Global List &amp;lt;i&amp;gt;%variable&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
Clear Global Foundset &#039;&amp;lt;i&amp;gt;objectname&amp;lt;/i&amp;gt;&#039;&lt;br /&gt;
 &lt;br /&gt;
Clear Global Foundset &amp;lt;i&amp;gt;%variable&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;Clear all global found sets and lists with the statement: &lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;Clear ListFdst [Global] Objects &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
(Global found sets and lists are among the global objects cleared by the &amp;lt;var&amp;gt;CLEARGO&amp;lt;/var&amp;gt; command.) &amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Close a file or group with which a global list or found set is associated. This includes the file close processing done when exiting or stopping a subsystem. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Issue a &amp;lt;var&amp;gt;UTABLE&amp;lt;/var&amp;gt; command that changes the size of FTBL, XTBL, or GTBL. &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 you clear a global list or global found set, then any request that uses the global and does not have the &amp;lt;var&amp;gt;Find&amp;lt;/var&amp;gt; statement that creates the global object receives either of the following error messages:&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;M204.0301 Referenced statement label undefined&lt;br /&gt;
 &lt;br /&gt;
M204.0311 Unacceptable statement reference&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===RELEASE and COMMIT RELEASE statements with global foundsets and lists===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The &amp;lt;var&amp;gt;Release&amp;lt;/var&amp;gt; statements and the &amp;lt;var&amp;gt;Commit Release&amp;lt;/var&amp;gt; statements empty the contents of a global found set, global sort set, or global list. The label and positions associated with a found set, sort set, or the list is still considered global, but it is empty. Global positions are not cleared by &amp;lt;var&amp;gt;Release&amp;lt;/var&amp;gt; or &amp;lt;var&amp;gt;Commit Release&amp;lt;/var&amp;gt; statements, however, without records there is nothing to process.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Clearing remembered positions===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Each &amp;lt;var&amp;gt;Remember&amp;lt;/var&amp;gt; statement creates a GTBL entry, whether or not &amp;lt;var&amp;gt;Global&amp;lt;/var&amp;gt; is specified. If GLOBAL is not specified, the position is temporary and is cleared from GTBL at the end of request execution.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
All remembered positions, along with all other GTBL entries, are cleared when you log off. You can also clear remembered positions in the following ways:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;You can clear a specific temporary position by issuing one of these statements:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;Clear Global Position Temp &#039;&amp;lt;i&amp;gt;objectname&amp;lt;/i&amp;gt;&#039;&lt;br /&gt;
 &lt;br /&gt;
Clear Global Position Temp &amp;lt;i&amp;gt;%variable&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;You can clear a specific permanent position by issuing one of these statements: &lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;Clear Global Position Perm &#039;&amp;lt;i&amp;gt;objectname&amp;lt;/i&amp;gt;&#039;&lt;br /&gt;
 &lt;br /&gt;
Clear Global Position Perm &amp;lt;i&amp;gt;%variable&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;You clear all global found sets, lists, or sorted sets with which a remembered position is associated:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;Clear ListFdst [Global] Objects&lt;br /&gt;
&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;You clear all remembered positions by issuing the statement:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;Clear Position [Global] Objects&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;
====Usage notes====&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;When you are using the &amp;lt;var&amp;gt;Clear Global Position&amp;lt;/var&amp;gt; statement, &amp;lt;var&amp;gt;Perm&amp;lt;/var&amp;gt; is the default. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;The &amp;lt;var&amp;gt;CLEARGO&amp;lt;/var&amp;gt; command has the effect of clearing all remembered positions.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Any &amp;lt;var&amp;gt;UTABLE&amp;lt;/var&amp;gt; command that changes the size of FTBL, GTBL, or XTBL clears all remembered positions.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Timing and placement of a Clear statement===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The &amp;lt;var&amp;gt;Clear Global&amp;lt;/var&amp;gt; statement takes effect at evaluation time and its placement in a request can have significant consequences: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;If the global object being cleared is referenced in the same request, it is marked as pending clear. The global is then emptied (zero records), and all its record locks are removed. It is cleared and deleted from GTBL at the end of 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;/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>JDamon</name></author>
	</entry>
	<entry>
		<id>https://m204wiki.rocketsoftware.com/index.php?title=SIRPRMPT_parameter&amp;diff=120631</id>
		<title>SIRPRMPT parameter</title>
		<link rel="alternate" type="text/html" href="https://m204wiki.rocketsoftware.com/index.php?title=SIRPRMPT_parameter&amp;diff=120631"/>
		<updated>2025-09-24T00:39:48Z</updated>

		<summary type="html">&lt;p&gt;JDamon: /* Description */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:SIRPRMPT 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;X&#039;00&#039;&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;System manager resettable&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;Before &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Sirius Mods&amp;lt;/var&amp;gt; 6.7&lt;br /&gt;
&amp;lt;/dl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
This parameter is a bitmask parameter that affects the command mode prompt in an Online.&lt;br /&gt;
The meaning of the bits in &amp;lt;var&amp;gt;SIRPRMPT&amp;lt;/var&amp;gt; are:&lt;br /&gt;
&amp;lt;dl&amp;gt;&lt;br /&gt;
&amp;lt;dt&amp;gt;X&#039;01&#039;&lt;br /&gt;
&amp;lt;dd&amp;gt;Add the [[JOBNM parameter|jobname]] (or the VM&#039;s user ID under CMS) to the command mode prompt.&lt;br /&gt;
This makes it easy to determine which Online one is connected to in command&lt;br /&gt;
mode, possibly averting accidents like someone typing &amp;lt;var&amp;gt;[[EOJ command|EOJ]]&amp;lt;/var&amp;gt; in a production Online when she means to be terminating a test Online.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;dt&amp;gt;X&#039;02&#039;&lt;br /&gt;
&amp;lt;dd&amp;gt;Add the name of the [[STEPNM parameter|job step]] to the command mode prompt.&lt;br /&gt;
Note that if the X&#039;01&#039; bit is on, the X&#039;02&#039; bit is ignored.&lt;br /&gt;
The X&#039;02&#039; bit should not be used under CMS.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;dt&amp;gt;X&#039;04&#039;&lt;br /&gt;
&amp;lt;dd&amp;gt;When the &amp;lt;var&amp;gt;[[EOJ command|EOJ]]&amp;lt;/var&amp;gt; command is issued from a full screen thread &lt;br /&gt;
&amp;lt;var&amp;gt;[[IODEV parameter|(IODEV=7,11 or 41)]]&amp;lt;/var&amp;gt;, the user is prompted for the name of the Online (rather than for &amp;lt;code&amp;gt;Yes&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;No&amp;lt;/code&amp;gt;) to confirm that the run is to be ended. &lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
&amp;lt;var&amp;gt;[[CUSTOM parameter|CUSTOM=37]]&amp;lt;/var&amp;gt; must also be set to use this value.&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The X&#039;04&#039; setting was made available in version 7.5 of Model&amp;amp;nbsp;204.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;dt&amp;gt;X&#039;08&#039;&lt;br /&gt;
&amp;lt;dd&amp;gt;When the &amp;lt;var&amp;gt;EOJ&amp;lt;/var&amp;gt; command is issued from a line-at-a-time thread, &lt;br /&gt;
the user is prompted for the name of the Online (rather than for &amp;lt;code&amp;gt;Yes&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;No&amp;lt;/code&amp;gt;) to confirm that the run is to be ended. &lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
&amp;lt;var&amp;gt;[[CUSTOM parameter|CUSTOM=37]]&amp;lt;/var&amp;gt; must also be set to use this value.&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
A line-at-a-time thread has one of the following &amp;lt;var&amp;gt;[[IODEV parameter|IODEV]]&amp;lt;/var&amp;gt; values: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;29 or 39 (a [[BATCH2 (CRAM)#BATCH2|BATCH2]] thread), 37 (see Note), 45, or: &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;[[SDAEMDEV parameter|SDAEMDEV]]&amp;lt;/var&amp;gt; parameter (a [[Sdaemons|Daemon thread]]).&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; The &amp;lt;var&amp;gt;[[IODEV parameter|IODEV=37]]&amp;lt;/var&amp;gt; setting is no longer supported as of Model&amp;amp;nbsp;204 version 7.6.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The X&#039;08&#039; setting was made available in version 7.5 of Model&amp;amp;nbsp;204 and of the &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Sirius Mods&amp;lt;/var&amp;gt;.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/dl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:System parameters]]&lt;br /&gt;
[[Category:Parameters]]&lt;/div&gt;</summary>
		<author><name>JDamon</name></author>
	</entry>
	<entry>
		<id>https://m204wiki.rocketsoftware.com/index.php?title=SIRPRMPT_parameter&amp;diff=120630</id>
		<title>SIRPRMPT parameter</title>
		<link rel="alternate" type="text/html" href="https://m204wiki.rocketsoftware.com/index.php?title=SIRPRMPT_parameter&amp;diff=120630"/>
		<updated>2025-09-24T00:37:41Z</updated>

		<summary type="html">&lt;p&gt;JDamon: /* Description */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:SIRPRMPT 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;X&#039;00&#039;&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;System manager resettable&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;Before &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Sirius Mods&amp;lt;/var&amp;gt; 6.7&lt;br /&gt;
&amp;lt;/dl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
This parameter is a bitmask parameter that affects the command mode prompt in an Online.&lt;br /&gt;
The meaning of the bits in &amp;lt;var&amp;gt;SIRPRMPT&amp;lt;/var&amp;gt; are:&lt;br /&gt;
&amp;lt;dl&amp;gt;&lt;br /&gt;
&amp;lt;dt&amp;gt;X&#039;01&#039;&lt;br /&gt;
&amp;lt;dd&amp;gt;Add the [[JOBNM parameter|jobname]] (or the VM&#039;s user ID under CMS) to the command mode prompt.&lt;br /&gt;
This makes it easy to determine which Online one is connected to in command&lt;br /&gt;
mode, possibly averting accidents like someone typing &amp;lt;var&amp;gt;[[EOJ command|EOJ]]&amp;lt;/var&amp;gt; in a production Online when she means to be terminating a test Online.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;dt&amp;gt;X&#039;02&#039;&lt;br /&gt;
&amp;lt;dd&amp;gt;Add the name of the [[STEPNM parameter|job step]] to the command mode prompt.&lt;br /&gt;
Note that if the X&#039;01&#039; bit is on, the X&#039;02&#039; bit is ignored.&lt;br /&gt;
The X&#039;02&#039; bit should not be used under CMS.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;dt&amp;gt;X&#039;04&#039;&lt;br /&gt;
&amp;lt;dd&amp;gt;When the &amp;lt;var&amp;gt;[[EOJ command|EOJ]]&amp;lt;/var&amp;gt; command is issued from a full screen thread &lt;br /&gt;
(&amp;lt;var&amp;gt;[[IODEV parameter|IODEV=7,11 or 41]]&amp;lt;/var&amp;gt;), the user is prompted for the name of the Online (rather than for &amp;lt;code&amp;gt;Yes&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;No&amp;lt;/code&amp;gt;) to confirm that the run is to be ended. &lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
&amp;lt;var&amp;gt;[[CUSTOM parameter|CUSTOM=37]]&amp;lt;/var&amp;gt; must also be set to use this value.&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The X&#039;04&#039; setting was made available in version 7.5 of Model&amp;amp;nbsp;204.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;dt&amp;gt;X&#039;08&#039;&lt;br /&gt;
&amp;lt;dd&amp;gt;When the &amp;lt;var&amp;gt;EOJ&amp;lt;/var&amp;gt; command is issued from a line-at-a-time thread, &lt;br /&gt;
the user is prompted for the name of the Online (rather than for &amp;lt;code&amp;gt;Yes&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;No&amp;lt;/code&amp;gt;) to confirm that the run is to be ended. &lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
&amp;lt;var&amp;gt;[[CUSTOM parameter|CUSTOM=37]]&amp;lt;/var&amp;gt; must also be set to use this value.&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
A line-at-a-time thread has one of the following &amp;lt;var&amp;gt;[[IODEV parameter|IODEV]]&amp;lt;/var&amp;gt; values: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;29 or 39 (a [[BATCH2 (CRAM)#BATCH2|BATCH2]] thread), 37 (see Note), 45, or: &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;[[SDAEMDEV parameter|SDAEMDEV]]&amp;lt;/var&amp;gt; parameter (a [[Sdaemons|Daemon thread]]).&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; The &amp;lt;var&amp;gt;[[IODEV parameter|IODEV=37]]&amp;lt;/var&amp;gt; setting is no longer supported as of Model&amp;amp;nbsp;204 version 7.6.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The X&#039;08&#039; setting was made available in version 7.5 of Model&amp;amp;nbsp;204 and of the &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Sirius Mods&amp;lt;/var&amp;gt;.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/dl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:System parameters]]&lt;br /&gt;
[[Category:Parameters]]&lt;/div&gt;</summary>
		<author><name>JDamon</name></author>
	</entry>
	<entry>
		<id>https://m204wiki.rocketsoftware.com/index.php?title=SIRPRMPT_parameter&amp;diff=120629</id>
		<title>SIRPRMPT parameter</title>
		<link rel="alternate" type="text/html" href="https://m204wiki.rocketsoftware.com/index.php?title=SIRPRMPT_parameter&amp;diff=120629"/>
		<updated>2025-09-24T00:27:52Z</updated>

		<summary type="html">&lt;p&gt;JDamon: /* Description */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:SIRPRMPT 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;X&#039;00&#039;&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;System manager resettable&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;Before &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Sirius Mods&amp;lt;/var&amp;gt; 6.7&lt;br /&gt;
&amp;lt;/dl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
This parameter is a bitmask parameter that affects the command mode prompt in an Online.&lt;br /&gt;
The meaning of the bits in &amp;lt;var&amp;gt;SIRPRMPT&amp;lt;/var&amp;gt; are:&lt;br /&gt;
&amp;lt;dl&amp;gt;&lt;br /&gt;
&amp;lt;dt&amp;gt;X&#039;01&#039;&lt;br /&gt;
&amp;lt;dd&amp;gt;Add the [[JOBNM parameter|jobname]] (or the VM&#039;s user ID under CMS) to the command mode prompt.&lt;br /&gt;
This makes it easy to determine which Online one is connected to in command&lt;br /&gt;
mode, possibly averting accidents like someone typing &amp;lt;var&amp;gt;[[EOJ command|EOJ]]&amp;lt;/var&amp;gt; in a production Online when she means to be terminating a test Online.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;dt&amp;gt;X&#039;02&#039;&lt;br /&gt;
&amp;lt;dd&amp;gt;Add the name of the [[STEPNM parameter|job step]] to the command mode prompt.&lt;br /&gt;
Note that if the X&#039;01&#039; bit is on, the X&#039;02&#039; bit is ignored.&lt;br /&gt;
The X&#039;02&#039; bit should not be used under CMS.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;dt&amp;gt;X&#039;04&#039;&lt;br /&gt;
&amp;lt;dd&amp;gt;When the &amp;lt;var&amp;gt;[[EOJ command|EOJ]]&amp;lt;/var&amp;gt; command is issued from a full screen thread &lt;br /&gt;
(&amp;lt;var&amp;gt;[[IODEV parameter|IODEV=7,11 or 41]]&amp;lt;/var&amp;gt;), the user is prompted for the name of the Online (rather than for &amp;lt;code&amp;gt;Yes&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;No&amp;lt;/code&amp;gt;) to confirm that the run is to be ended. &lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
&amp;lt;var&amp;gt;[[CUSTOM parameter|CUSTOM=37]]&amp;lt;/var&amp;gt; must also be set to use this value.&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The X&#039;04&#039; setting was made available in version 7.5 of Model&amp;amp;nbsp;204.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;dt&amp;gt;X&#039;08&#039;&lt;br /&gt;
&amp;lt;dd&amp;gt;When the &amp;lt;var&amp;gt;EOJ&amp;lt;/var&amp;gt; command is issued from a line-at-a-time thread, &lt;br /&gt;
the user is prompted for the name of the Online (rather than for &amp;lt;code&amp;gt;Yes&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;No&amp;lt;/code&amp;gt;) to confirm that the run is to be ended. &lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
&amp;lt;var&amp;gt;[[CUSTOM parameter|CUSTOM=37]]&amp;lt;/var&amp;gt; must also be set to use this value.&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
A line-at-a-time thread has one of the following &amp;lt;var&amp;gt;[[IODEV parameter|IODEV]]&amp;lt;/var&amp;gt; values: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;29 or 39 (a [[BATCH2 (CRAM)#BATCH2|BATCH2]] thread), 37 (see Note), 45, or: &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;[[SDAEMDEV parameter|SDAEMDEV]]&amp;lt;/var&amp;gt; parameter (a [[Sdaemons|Daemon thread]]).&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; The &amp;lt;code&amp;gt;IODEV=37&amp;lt;/code&amp;gt; setting is no longer supported as of Model&amp;amp;nbsp;204 version 7.6.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The X&#039;08&#039; setting was made available in version 7.5 of Model&amp;amp;nbsp;204 and of the &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Sirius Mods&amp;lt;/var&amp;gt;.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/dl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:System parameters]]&lt;br /&gt;
[[Category:Parameters]]&lt;/div&gt;</summary>
		<author><name>JDamon</name></author>
	</entry>
	<entry>
		<id>https://m204wiki.rocketsoftware.com/index.php?title=M204.0583&amp;diff=120597</id>
		<title>M204.0583</title>
		<link rel="alternate" type="text/html" href="https://m204wiki.rocketsoftware.com/index.php?title=M204.0583&amp;diff=120597"/>
		<updated>2025-07-16T23:09:46Z</updated>

		<summary type="html">&lt;p&gt;JDamon: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:M204.0583 skeleton}}&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Example:&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;M204.0583: Waiting for exclusive access to file K100HILO M2Q999.ROCKET.K100HILO.M204&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Where:&amp;lt;/b&amp;gt;&lt;br /&gt;
ENQTYPE=exclusive&lt;br /&gt;
VOLSER=M2Q999&lt;br /&gt;
DSN=ROCKET.K100HILO.M204&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;P&amp;gt;&lt;br /&gt;
A batch Model 204 run is attempting to establish an exclusive enqueue on a Model&amp;amp;nbsp;204 file, but another job already has an exclusive or share enqueue outstanding for the file. Model&amp;amp;nbsp;204 retries the enqueue and waits for the&lt;br /&gt;
file to become available. This message is usually preceded by message [[M204.0582]]. Refer to that message for more information. &amp;lt;/P&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Response:&amp;lt;/b&amp;gt; Notify your system manager if you suspect the run of Model&amp;amp;nbsp;204 that had the enqueue has crashed. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;System manager response:&amp;lt;/b&amp;gt; The message indicates that a job is waiting for an enqueued file to become available, and is tying up system resources. You have the options of waiting for the enqueued file to be dequeued, closing the file in the job&lt;br /&gt;
which has the enqueue on the file, or holding the job until the required file is available. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Operator response:&amp;lt;/b&amp;gt; Notify the system manager if there are multiple occurrences of this message. &amp;lt;/p&amp;gt;&lt;br /&gt;
{{Template:M204.0583 footer}}&lt;br /&gt;
&amp;lt;!-- skeleton as it was in pdf/WAITING FOR EXCLUSIVE ACCESS TO FILE dataset name /--&amp;gt;&lt;/div&gt;</summary>
		<author><name>JDamon</name></author>
	</entry>
	<entry>
		<id>https://m204wiki.rocketsoftware.com/index.php?title=M204.0582&amp;diff=120596</id>
		<title>M204.0582</title>
		<link rel="alternate" type="text/html" href="https://m204wiki.rocketsoftware.com/index.php?title=M204.0582&amp;diff=120596"/>
		<updated>2025-07-11T21:43:02Z</updated>

		<summary type="html">&lt;p&gt;JDamon: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:M204.0582 skeleton}}&lt;br /&gt;
&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; M204.0582: Access to file K100HILO M2Q999.ROCKET.K100HILO.M204 prevented by: QS99 EXCL PSBAT79C STEP01              25.192 11:27:47.79 &lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Where:&amp;lt;/b&amp;gt;&lt;br /&gt;
VOLSER=M2Q999&lt;br /&gt;
DSN=ROCKET.K100HILO.M204&lt;br /&gt;
LPAR=QS99&lt;br /&gt;
enqueue type=EXCL&lt;br /&gt;
jobname stepname=PSBAT79C STEP01&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
A shared DASD enqueuing conflict occurred for the specified file. Another Model&amp;amp;nbsp;204 run processing on a different CPU has established an enqueue against this file. This conflicts with the enqueue level you are attempting&lt;br /&gt;
to establish. That is, if you want a share enqueue, another run has an exclusive enqueue on the file; if you want an exclusive enqueue, another run already has either a share or an exclusive enqueue. If this message occurs in a batch Model&amp;amp;nbsp;204 run,&lt;br /&gt;
Model &amp;amp;nbsp;204 waits for five minutes and retries the enqueue. It continues to wait and retry until the enqueue succeeds. &amp;lt;/P&amp;gt;&lt;br /&gt;
&amp;lt;P&amp;gt;&lt;br /&gt;
Model&amp;amp;nbsp;204 maintains a Shared DASD Enqueue List for each file on the File Parameter List page, that is, on the first page of the file. Refer to [[Model 204 configurations and operating environments#Shared DASD and Global Resource Serialization|Shared DASD and Global Resource Serialization]] for more details about file enqueueing between multiple copies of Model&amp;amp;nbsp;204. &amp;lt;/P&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Response:&amp;lt;/b&amp;gt; Retry the request or command later or notify your system manager if you suspect that the job holding the enqueue has crashed. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;System manager response:&amp;lt;/b&amp;gt; There may be either a real enqueueing conflict or an obsolete shared DASD enqueue list due to a system crash. The job name specified in the message will assist you in determining the cause. Use the &amp;lt;var&amp;gt;[[ENQCTL command|ENQCTL]]&amp;lt;/var&amp;gt; command to&lt;br /&gt;
correct obsolete shared DASD enqueue lists. This command should be used with extreme caution as its abuse can cause file integrity problems.  &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Operator response:&amp;lt;/b&amp;gt; Notify the Model&amp;amp;nbsp;204 system manager if there are multiple occurrences of this message. &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Template:M204.0582 footer}}&lt;br /&gt;
&amp;lt;!-- skeleton as it was in pdf/ACCESS TO FILE dataset name PREVENTED BY: jobname /--&amp;gt;&lt;/div&gt;</summary>
		<author><name>JDamon</name></author>
	</entry>
	<entry>
		<id>https://m204wiki.rocketsoftware.com/index.php?title=M204.0581&amp;diff=120595</id>
		<title>M204.0581</title>
		<link rel="alternate" type="text/html" href="https://m204wiki.rocketsoftware.com/index.php?title=M204.0581&amp;diff=120595"/>
		<updated>2025-07-11T21:40:31Z</updated>

		<summary type="html">&lt;p&gt;JDamon: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:M204.0581 skeleton}}&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Example:&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;M204.0581: Waiting for share access to file K100HILO M2Q999.ROCKET.K100HILO.M204&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Where:&amp;lt;/b&amp;gt;&lt;br /&gt;
ENQTYPE=share&lt;br /&gt;
VOLSER=M2Q999&lt;br /&gt;
DSN=ROCKET.K100HILO.M204&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;P&amp;gt;A batch Model 204 run is attempting to establish a share enqueue on a Model 204 file, but another job already has an exclusive enqueue outstanding for the same file. Model 204 retries the enqueue and waits for the file to&lt;br /&gt;
become available. &amp;lt;/P&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;b&amp;gt;System manager response:&amp;lt;/b&amp;gt; The message indicates that a job is waiting for an enqueued file to become available, and is tying up system resources. You have the options of waiting for the enqueued file to be dequeued, closing the file in the job&lt;br /&gt;
which has the exclusive enqueue on the file, or holding the job until the required file is available. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;b&amp;gt;Operator response:&amp;lt;/b&amp;gt; Notify the system manager. &amp;lt;/p&amp;gt;&lt;br /&gt;
{{Template:M204.0581 footer}}&lt;br /&gt;
&amp;lt;!-- skeleton as it was in pdf/WAITING FOR SHARE ACCESS TO FILE dataset name /--&amp;gt;&lt;/div&gt;</summary>
		<author><name>JDamon</name></author>
	</entry>
	<entry>
		<id>https://m204wiki.rocketsoftware.com/index.php?title=M204.0582&amp;diff=120594</id>
		<title>M204.0582</title>
		<link rel="alternate" type="text/html" href="https://m204wiki.rocketsoftware.com/index.php?title=M204.0582&amp;diff=120594"/>
		<updated>2025-07-11T21:27:48Z</updated>

		<summary type="html">&lt;p&gt;JDamon: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:M204.0582 skeleton}}&lt;br /&gt;
&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; M204.0582: Access to file K100HILO M2Q999.ROCKET.K100HILO.M204 prevented by: QS99 EXCL PSBAT79C STEP01              25.192 11:27:47.79 &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Where:&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;VOLSER=M2Q999&lt;br /&gt;
DSN=ROCKET.K100HILO.M204&lt;br /&gt;
LPAR=QS99&lt;br /&gt;
enqueue type=EXCL&lt;br /&gt;
jobname stepname=PSBAT79C STEP01&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
A shared DASD enqueuing conflict occurred for the specified file. Another Model&amp;amp;nbsp;204 run processing on a different CPU has established an enqueue against this file. This conflicts with the enqueue level you are attempting&lt;br /&gt;
to establish. That is, if you want a share enqueue, another run has an exclusive enqueue on the file; if you want an exclusive enqueue, another run already has either a share or an exclusive enqueue. If this message occurs in a batch Model&amp;amp;nbsp;204 run,&lt;br /&gt;
Model &amp;amp;nbsp;204 waits for five minutes and retries the enqueue. It continues to wait and retry until the enqueue succeeds. &amp;lt;/P&amp;gt;&lt;br /&gt;
&amp;lt;P&amp;gt;&lt;br /&gt;
Model&amp;amp;nbsp;204 maintains a Shared DASD Enqueue List for each file on the File Parameter List page, that is, on the first page of the file. Refer to [[Model 204 configurations and operating environments#Shared DASD and Global Resource Serialization|Shared DASD and Global Resource Serialization]] for more details about file enqueueing between multiple copies of Model&amp;amp;nbsp;204. &amp;lt;/P&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Response:&amp;lt;/b&amp;gt; Retry the request or command later or notify your system manager if you suspect that the job holding the enqueue has crashed. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;System manager response:&amp;lt;/b&amp;gt; There may be either a real enqueueing conflict or an obsolete shared DASD enqueue list due to a system crash. The job name specified in the message will assist you in determining the cause. Use the &amp;lt;var&amp;gt;[[ENQCTL command|ENQCTL]]&amp;lt;/var&amp;gt; command to&lt;br /&gt;
correct obsolete shared DASD enqueue lists. This command should be used with extreme caution as its abuse can cause file integrity problems.  &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Operator response:&amp;lt;/b&amp;gt; Notify the Model&amp;amp;nbsp;204 system manager if there are multiple occurrences of this message. &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Template:M204.0582 footer}}&lt;br /&gt;
&amp;lt;!-- skeleton as it was in pdf/ACCESS TO FILE dataset name PREVENTED BY: jobname /--&amp;gt;&lt;/div&gt;</summary>
		<author><name>JDamon</name></author>
	</entry>
	<entry>
		<id>https://m204wiki.rocketsoftware.com/index.php?title=System_requirements_for_Application_Subsystems&amp;diff=120590</id>
		<title>System requirements for Application Subsystems</title>
		<link rel="alternate" type="text/html" href="https://m204wiki.rocketsoftware.com/index.php?title=System_requirements_for_Application_Subsystems&amp;diff=120590"/>
		<updated>2025-06-06T21:15:26Z</updated>

		<summary type="html">&lt;p&gt;JDamon: /* Subsystem Administration screen */&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 of CCASYS==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
CCASYS is a system file used in conjunction with [[:Category:Dictionary/204|Dictionary/204]] and the [[Subsystem Management facility]] (SUBSYSMGMT). It contains the procedure names, file names, and parameters that create a [[Application Subsystem development|subsystem]] definition. When a subsystem is executed, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; opens and reads the CCASYS file.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The CCASYS file must be open to use the Subsystem Management facility and to run any user-written subsystem.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Statistics associated with CCASYS processing are written to the CCAAUDIT system file and can be viewed from a terminal or printed to an audit trail.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
This page describes CCASYS and explains how to create and maintain the file.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Maintaining CCASYS==&lt;br /&gt;
&lt;br /&gt;
===Creating CCASYS===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can create CCASYS online as a separate file or as a part of the initial installation of Dictionary and the full-screen interface. Regardless of the approach used to create CCASYS, it must be available before Dictionary and the interface are installed. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
A user with system manager privileges can create CCASYS online (see the &amp;lt;var&amp;gt;[[CREATE command: File|CREATE]]&amp;lt;/var&amp;gt; command).&lt;br /&gt;
The formula for calculating the size of CCASYS is given in the &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; installation guides.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
To create CCASYS during Dictionary installation, follow the instructions given in [[Dictionary/204 installation guide]].&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Reorganizing CCASYS===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
For instructions on reorganizing CCASYS and Dictionary files, refer to [[Dictionary/204 operation and file maintenance]].&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Using CCASYS==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You must be a system manager to run the Subsystem Management facility, as well as having privileges defined in the DICTIONARY to use SUBSYSMGMT. (Refer to the DICTADMIN subsystem to add privileges.)&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
To use the Subsystem Management facility and to run any user-written subsystem, the CCASYS file must be open. &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; opens CCASYS during initialization when the &amp;lt;var&amp;gt;[[SYSOPT parameter|SYSOPT]]&amp;lt;/var&amp;gt; parameter setting includes the X&#039;01&#039; bit (see [[#JCL requirements|JCL requirements]] on this page).&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
CCASYS is opened and locked in share mode. During the process of defining a subsystem, the lock is changed to exclusive mode for the duration of the session. If more than one copy of &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; is using the same CCASYS file, the Subsystem Management facility cannot be entered. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Subsystems available at initialization===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If the CCASYS file is marked as full (the &amp;lt;var&amp;gt;[[FISTAT parameter|FISTAT]]&amp;lt;/var&amp;gt; X&#039;08&#039; bit) during Online initialization, subsystems are now available and the following message is no longer issued:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;M204.1457 UNABLE TO SCAN LIST OF SUBSYSTEM NAMES&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===JCL requirements===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
JCL requirements for CCASYS are:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Set the &amp;lt;var&amp;gt;SYSOPT&amp;lt;/var&amp;gt; X&#039;01&#039; bit on in the JCL PARM field to enable CCASYS.&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The &amp;lt;var&amp;gt;SYSOPT&amp;lt;/var&amp;gt; X&#039;01&#039; bit automatically increments NFILES, NDCBS, and NDIR to allow use of the subsystems.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If the &amp;lt;var&amp;gt;SYSOPT&amp;lt;/var&amp;gt; parameter is set to an even value, CCASYS is not opened by &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; and subsystems are unavailable.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;You must set the &amp;lt;var&amp;gt;SYSOPT&amp;lt;/var&amp;gt; X&#039;01&#039; bit on all nodes that the client subsystem accesses. (For Parallel Query Option/204)&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Specify a CCASYS DD statement for running the subsystem. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===File security===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can add additional file security to the security provided by user privileges in the CCASYS file by:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Resetting the &amp;lt;var&amp;gt;[[OPENCTL parameter|OPENCTL]]&amp;lt;/var&amp;gt; parameter&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Entering passwords for the CCASYS file entries in the password table (CCASTAT). See [[Storing security information (CCASTAT)#Using CCASTAT|Using CCASTAT]].&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Maintaining CCASYS===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Periodically back up CCASYS. Like other &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; files, CCASYS can participate in recovery and transaction back out processing. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
As necessary, include [[File reorganization and table compaction|reorganizations]] in the recovery scheme, such as increasing both Table A and Table C and, sometimes, to recover a file if it is not participating in other recovery options.&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Set up backup and restore jobs to handle all files at once. If need be, you can set up a separate backup job for CCASYS to run with the files. See the Rocket &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; installation guide for your operating system.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Recovering CCASYS===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If CCASYS is used in a run, you can recover it with a &amp;lt;var&amp;gt;[[RESTART command|RESTART]]&amp;lt;/var&amp;gt; command without resetting the &amp;lt;var&amp;gt;SYSOPT&amp;lt;/var&amp;gt; parameter.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Synchronize recovery of CCASYS and Dictionary files. Dictionary subsystems and the Subsystem Management facility must be stopped to perform file maintenance.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
==Activating the APSY Precompiled Procedures in Storage feature==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
z/OS sites can keep precompiled procedures in storage. By removing precompiled procedures from the disk buffer pool, the buffer pool pages are available for &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; files or non-APSY CCATEMP pages. This can reduce disk I/O for both CCATEMP and other &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; files. The &amp;lt;var&amp;gt;[[APSYPAGE parameter|APSYPAGE]]&amp;lt;/var&amp;gt; parameter allows APSY saved compilations to be loaded without having the pages that the compilations are saved on move through the disk buffer pool. This represents a reduced load on page flushing and the HASH LOCK and reduced CPU usage.&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; As of Model&amp;amp;nbsp;204 7.5, it is recommended for performance reasons that customers who have been using the &amp;lt;var&amp;gt;APSYPAGE&amp;lt;/var&amp;gt; parameter &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;disable the APSYPAGE feature&amp;lt;/var&amp;gt; by setting &amp;lt;var&amp;gt;APSYPAGE&amp;lt;/var&amp;gt; to 0. Instead of &amp;lt;var&amp;gt;APSYPAGE&amp;lt;/var&amp;gt;, use the &amp;lt;var&amp;gt;RESPAGE&amp;lt;/var&amp;gt; parameter for [[#APSY precompiled procedures in storage above the bar|storage above the bar]]. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
To activate the APSY Precompiled Procedures in Storage feature in a job, users must set the &amp;lt;var&amp;gt;APSYPAGE&amp;lt;/var&amp;gt; parameter in the User 0 CCAIN stream. The &amp;lt;var&amp;gt;APSYPAGE&amp;lt;/var&amp;gt; parameter specifies the number of virtual storage pages to allocate.&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; While &amp;lt;var&amp;gt;APSYPAGE&amp;lt;/var&amp;gt; looks very much like &amp;lt;var&amp;gt;[[TEMPPAGE parameter|TEMPPAGE]]&amp;lt;/var&amp;gt;, the units are somewhat different: &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;APSYPAGE&amp;lt;/var&amp;gt; refers to 4096-byte virtual storage pages&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;TEMPPAGE&amp;lt;/var&amp;gt; refers to 6184-byte &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; file pages&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
There are several reasons to use the &amp;lt;var&amp;gt;APSYPAGE&amp;lt;/var&amp;gt; parameter instead of, or in addition to, the &amp;lt;var&amp;gt;TEMPPAGE&amp;lt;/var&amp;gt; parameter:&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;APSYPAGE&amp;lt;/var&amp;gt; virtual storage pages do not have to be big enough to hold all of CCATEMP or even all saved compilations. The APSY Precompiled Procedures In Storage feature uses an LRU algorithm to ensure that frequently loaded APSY procedures remain in storage, while infrequently loaded procedures tend to be loaded from CCATEMP. So, if there is not sufficient real storage to back all of CCATEMP, you might set &amp;lt;var&amp;gt;APSYPAGE&amp;lt;/var&amp;gt; to save frequently loaded APSY compilations in real storage. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;The path length for retrieving a page out of storage is significantly lower than for retrieving one out of the disk buffer pool, especially in an MP/204 environment.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;When &amp;lt;var&amp;gt;APSYPAGE&amp;lt;/var&amp;gt; is set, the large &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; server tables are (hardware) page-aligned as are the saved compilations. This makes it possible to use the hardware MVPG (MoVe PaGe) facility to move pages into a server during an APSY load. On some processors, specialized hardware makes the facility significantly faster than byte-oriented data movement.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Storage improvements for APSY subsystem saved precompilation===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If not otherwise set, &amp;lt;var&amp;gt;[[DSPOPT parameter|DSPOPT]]&amp;lt;/var&amp;gt; defaults to X&#039;00&#039;. When a saved compilation page is moved to the &amp;lt;var&amp;gt;APSYPAGE&amp;lt;/var&amp;gt; area, it is no longer also kept in CCATEMP, which eliminates duplicate storage. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
This is particularly useful when you keep CCATEMP in memory, using the &amp;lt;var&amp;gt;TEMPPAGE&amp;lt;/var&amp;gt; parameter. This reduces in-memory CCATEMP storage requirements by approximately (&amp;lt;code&amp;gt;N/1.50&amp;lt;/code&amp;gt;), where &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; is the number of 4K-byte pages of &amp;lt;var&amp;gt;APSYPAGE&amp;lt;/var&amp;gt; that are used. In memory CCATEMP size is defined by the &amp;lt;var&amp;gt;TEMPPAGE&amp;lt;/var&amp;gt; parameter.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Setting the &amp;lt;var&amp;gt;DSPOPT&amp;lt;/var&amp;gt; X&#039;80&#039; bit and setting &amp;lt;var&amp;gt;TEMPPAGE&amp;lt;/var&amp;gt; greater than zero causes saved compilations to be saved in both CCATEMP and &amp;lt;var&amp;gt;APSYPAGE&amp;lt;/var&amp;gt;. Although this is wasteful of storage, it does not cause problems. If you set both parameters, you may see a higher use of CCATEMP in storage.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Setting &amp;lt;var&amp;gt;APSYPAGE&amp;lt;/var&amp;gt; greater than zero causes APSY subsystem precompiled pages to be saved in storage. If &amp;lt;var&amp;gt;TEMPPAGE&amp;lt;/var&amp;gt; is also set to 0, your CCATEMP is kept on disk and all saved compilations are stored in both locations. In-memory APSYPAGE storage can still be reduced if &amp;lt;var&amp;gt;DSPOPT&amp;lt;/var&amp;gt; is set to include the X&#039;80&#039; bit. With both those settings, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; employs the least recently used (LRU) algorithm to keep the more heavily used saved compilations in memory while the less recently used saved compilations migrate to disk.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Storage requirements===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The CCASERVR, CCATEMP, and APSY Precompiled Procedures in Storage features may cause operating system paging. Performance degradation is likely, if real storage frames are insufficient, or expanded storage frames in hiperspaces are used to hold the data saved in this storage. The &amp;lt;var&amp;gt;[[MONITOR DATASPACE command|MONITOR DATASPACE]]&amp;lt;/var&amp;gt; command can provide some information about the storage usage of these features. &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Setting the DSPOPT parameter===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If the APSY precompiled procedures in storage feature is used, or CCASERVR In Storage is used with page-oriented data movement (&amp;lt;var&amp;gt;[[DSPOPT parameter|DSPOPT]]&amp;lt;/var&amp;gt; X&#039;01&#039; set), then certain large server tables and servers themselves are page-aligned. This might require up to five extra hardware pages of real and virtual storage per server, although more typically it requires about three extra pages or 12K bytes per server. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If &amp;lt;var&amp;gt;[[NSERVS parameter|NSERVS]]&amp;lt;/var&amp;gt; is set to 40 and &amp;lt;var&amp;gt;APSYPAGE&amp;lt;/var&amp;gt; is set to a nonzero value, or CCASERVR is kept in storage with &amp;lt;var&amp;gt;DSPOPT&amp;lt;/var&amp;gt; X&#039;01&#039; set, enough real storage frames should be available to hold up to an extra 200 pages or 800K of server data. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The setting of the &amp;lt;var&amp;gt;DSPOPT&amp;lt;/var&amp;gt; parameter depends on your installation: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;If your site has enough expanded storage, you might use it for CCASERVR in Storage and APSY Precompiled Procedures in Storage in a cache hiperspace (&amp;lt;code&amp;gt;DSPOPT=X&#039;43&#039;&amp;lt;/code&amp;gt;). &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;If this decision causes a large number of CCATEMP reads because z/OS steals a lot of pages from the cache hyperspace, then use &amp;lt;code&amp;gt;DSPOPT=X&#039;23&#039;&amp;lt;/code&amp;gt; (no cache hyperspace). &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;If there is an excessive paging, eliminate one or both In Storage features. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;If your installation is z/OS, 64-bit real-storage, do not use any hyperspaces options, but use dataspaces instead. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Users with limited resources should try and test for what feature is the most effective.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
In addition, enough real storage should be available to hold the APSY precompiled procedures and/or CCASERVR data in real or expanded storage.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===APSY load statistics===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
There are three system statistics associated with APSY loads. These statistics are intended to: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Assist in the proper setting of the &amp;lt;var&amp;gt;APSYPAGE&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;RESLTHR&amp;lt;/var&amp;gt; parameters.&amp;lt;/li&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Determine the ratio of requests using precompiled and non-precompiled requests, the percentage of requests which are precompiled being the ratio of APSYLD to REQ. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The APSY load statistics are:&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;Statistic &amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Tracks the number of APSY loads...&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;APSYLD &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Including internal CCASYS procedures that are run as part of APSY 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;APSYLDD &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;From a dataspace. &lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
This statistic is zero unless the APSYPAGE parameter is set. This parameter can be compared with APSYLD and APSYLDT to determine the percentage of eligible APSY loads that are being performed from a dataspace.&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;&lt;br /&gt;
&amp;lt;td&amp;gt;APSYLDT &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;That are tiny.&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
All APSY loads, even those done from dataspaces, read a certain amount of control information from CCATEMP. Immediately following this control information is data that is loaded into NTBL, QTBL, STBL, and VTBL. If this table data does not extend to an extra CCATEMP page beyond the control information, the APSY load is counted as a tiny load. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
This statistic is maintained because tiny APSY loads are not worth saving in dataspaces, so it must be considered when comparing APSYLDD with APSYLD in determining which percentage of pre-compiled procedures are being loaded from dataspaces.&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;
===APSY precompiled procedures in storage above the bar===&lt;br /&gt;
You can store APSY precompiled procedures above the bar by using the &amp;lt;var&amp;gt;[[RESPAGE parameter|RESPAGE]]&amp;lt;/var&amp;gt; parameter to specify a number of 4K operating system pages. See [[Defining_the_runtime_environment_(CCAIN)#ATB_storage_for_APSY_precompiled_procedures|ATB storage for APSY precompiled procedures]] for details.&lt;br /&gt;
&lt;br /&gt;
==Parallel Query Option/204 and scattered subsystems==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Whenever you log in to a service subsystem, you must reset the &amp;lt;var&amp;gt;[[LGTBL parameter|LGTBL]]&amp;lt;/var&amp;gt; parameter on the service thread to at least 288. This sets the size of the global variable table (GTBL). GTBL contains name/value strings for global variables and is used by procedures that are included by APSY to support subsystem processing. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The subsystem designer will have to place the &amp;lt;var&amp;gt;UTABLE&amp;lt;/var&amp;gt; command into the LOGIN procedure, if &amp;lt;var&amp;gt;LGTBL&amp;lt;/var&amp;gt; is insufficient before entering the subsystem.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Overview of the Subsystem Management facility==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The Subsystem Management facility (SUBSYSMGMT) is a full-screen &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; Dictionary interface. It is used as a tool to define user-written applications that run under the Application Subsystem facility (APSY). &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Subsystem characteristics and components are defined by means of a series of screens and stored in the CCASYS file. Data in the CCASYS file is used by the application subsystem to control the processing required by the subsystem. &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; Dictionary entries are maintained for the operational parameters, procedure specifications, and subsystem files. The Subsystem Management facility makes SOUL applications easier to use, easier to maintain, and more efficient.              &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The following sections provide an overview of subsystem processing and explains how to use the SUBSYSMGMT interface to define a subsystem, establish user privileges, and migrate subsystem definitions from one &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; environment to another.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
For more information on subsystems, requirements, and options, refer to: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[[Dictionary/204 installation guide]] and [[Dictionary/204 operation and file maintenance]], which discuss the installation and preparation of CCASYS, D204SYS, and Dictionary files&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;[[Dictionary/204 entity type definitions#SUBSYSTEM|SUBSYSTEM]], which describes the dictionary entries relating to subsystems&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;[[PQO: Overview of Parallel Query Option/204]], which describes 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&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;[[Application Subsystem development]], which gives detailed instructions for designing, developing, and debugging a subsystem&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Components of a subsystem==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
A subsystem is an application consisting of a collection of procedures, files, and assigned characteristics that are defined as a subsystem to &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; through the &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; Dictionary interface, SUBSYSMGMT.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The collection of procedures that make up a subsystem perform system startup, login processing, main processing, disconnect processing, and error-handling tasks. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Control is passed from procedure to procedure by setting a defined communications global variable in each procedure. The communications global variable contains the name of the next procedure to be executed. Detailed information about subsystem design and procedure development is given in [[Application Subsystem development]].&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Assigned characteristics of a subsystem include security and system operation options, such as locking files and groups for subsystem use, automatic login and logout, automatic COMMIT for outstanding updates, message displays, and the response of the subsystem when files are unavailable.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The members of an APSY subsystem are files and permanent groups. With &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;PQO&amp;lt;/var&amp;gt;, members can be either automatic or manual:   &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;An automatic member is a subsystem group or file that is opened automatically when the subsystem is started or when a user enters the subsystem. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;A manual member is a group or file that must be opened explicitly by the &amp;lt;var&amp;gt;OPEN&amp;lt;/var&amp;gt; or &amp;lt;var&amp;gt;OPENC&amp;lt;/var&amp;gt; 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;
Members can also be either mandatory or optional:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;A mandatory member must be open in order to access a subsystem. Mandatory members cannot be manual.   &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;An optional member is not required for subsystem access (start and login processing can succeed without it).   &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
At any given time, a member can be open or closed to a subsystem or to a user within a subsystem. The following sections explain the conditions under which the different kinds of members are accessible to APSY subsystems and their users.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
==File and group availability==&lt;br /&gt;
&lt;br /&gt;
===Member availability to APSY subsystems===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Automatic members of APSY subsystems are always opened by the &amp;lt;var&amp;gt;START SUBSYSTEM&amp;lt;/var&amp;gt; command or by SUBSYSTEM LOGIN. At the end of &amp;lt;var&amp;gt;START&amp;lt;/var&amp;gt; processing, each automatic member is open unless either the &amp;lt;var&amp;gt;START&amp;lt;/var&amp;gt; or &amp;lt;var&amp;gt;OPEN&amp;lt;/var&amp;gt; failed. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Manual members of APSY subsystems are in the closed state at the completion of &amp;lt;var&amp;gt;START SUBSYSTEM&amp;lt;/var&amp;gt; processing and must be explicitly opened by the user. Manual members become open to the subsystem if an OPEN operation succeeds. If &amp;lt;var&amp;gt;OPEN&amp;lt;/var&amp;gt; fails due to node unavailability or for user-specific reasons (for example, if the user&#039;s line goes down), the member remains closed to the subsystem.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;If a node becomes unavailable to a subsystem, all automatic subsystem members and all open manual subsystem members residing on the unavailable node are marked disabled.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;If a &amp;lt;var&amp;gt;STOP FILE&amp;lt;/var&amp;gt; (or &amp;lt;var&amp;gt;STOP GROUP&amp;lt;/var&amp;gt;) command is issued for a manual member on the client subsystem&#039;s node, the member is closed to the client subsystem when the last user closes it. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;If the member is located on the service subsystem node, the file is closed to the service subsystem when either the &amp;lt;var&amp;gt;STOP&amp;lt;/var&amp;gt; is complete or the last user closes the file.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Member availability to subsystem users===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When a user enters a subsystem, automatic subsystem members are opened.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If a user &amp;lt;var&amp;gt;LOGIN&amp;lt;/var&amp;gt; or &amp;lt;var&amp;gt;OPEN&amp;lt;/var&amp;gt; operation fails for an optional member, the member is left closed for the user but remains open to the subsystem. If a mandatory member cannot be opened, the user is denied access to the subsystem.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If a user &amp;lt;var&amp;gt;LOGIN&amp;lt;/var&amp;gt; or &amp;lt;var&amp;gt;OPEN&amp;lt;/var&amp;gt; operation fails for an already open member, the member is left disabled for the user, but remains open to the subsystem. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If an automatic mandatory member is closed to the subsystem, new users are not allowed to enter the subsystem.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Manual members of APSY subsystems are closed for a user within a subsystem until the user issues an &amp;lt;var&amp;gt;OPEN&amp;lt;/var&amp;gt; command or statement. In this case, it does not matter whether the member is open or closed to the subsystem.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If compilation and/or loading of a request fails due to a communications failure, previously opened members on the failing node become disabled to the user. A user can close optional members at any time by issuing the &amp;lt;var&amp;gt;CLOSE&amp;lt;/var&amp;gt; command.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Enabling a disabled subsystem file===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If a file is marked as disabled to the subsystem, you can use the &amp;lt;var&amp;gt;ENABLE SUBSYSTEM FILE&amp;lt;/var&amp;gt; command to make the file available again. If necessary, correct any communications problem. Then enter this command:&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;ENABLE SUBSYSTEM &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;subsysname&amp;lt;/span&amp;gt; [FILE | GROUP] &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;name&amp;lt;/span&amp;gt; AT &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;location&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
Where:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;subsysname &amp;lt;/var&amp;gt;is the name of the client subsystem.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;name&amp;lt;/var&amp;gt; specifies the file or group that supports &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;subsysname&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;location&amp;lt;/var&amp;gt; is the value of the client CCAIN LOCATION parameter (which is also the value of the CLNT field in the &amp;lt;var&amp;gt;[[LOGWHO command|LOGWHO]]&amp;lt;/var&amp;gt; command output).&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 must specify the location; you cannot include local files in an &amp;lt;var&amp;gt;ENABLE SUBSYSTEM&amp;lt;/var&amp;gt; command.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Disabling a subsystem file===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can disable a subsystem file to keep the file itself, or the subsystem to which it belongs, inaccessible for a short period of time, without shutting down the subsystem by using the &amp;lt;var&amp;gt;DISABLE SUBSYSTEM&amp;lt;/var&amp;gt; command.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
To disable a subsystem file, use this command:&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;DISABLE &amp;lt;var&amp;gt;SUBSYS&amp;lt;/var&amp;gt;TEM &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;subsysname&amp;lt;/span&amp;gt; [FILE | GROUP] &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;name&amp;lt;/span&amp;gt; AT &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;location&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
Where:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;subsysname &amp;lt;/var&amp;gt;is the name of the client subsystem. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;name&amp;lt;/var&amp;gt; specifies the file or group that supports &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;subsysname&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;location&amp;lt;/var&amp;gt; is the value of the client CCAIN LOCATION parameter (which is also the value of the CLNT field in the &amp;lt;var&amp;gt;LOGWHO&amp;lt;/var&amp;gt; command output).&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 consequence of disabling a subsystem file depends on whether the file is an optional or mandatory group member: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;If you disable a mandatory file, you effectively disable the subsystem, because users attempting to access the disabled file cannot access the subsystem. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;If you disable an optional file, users can log in to the subsystem, but cannot access the disabled file.   &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
==Application subsystem processing==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Subsystem processing includes startup, login processing, locating, compiling and/or loading procedures (main or driver processing), disconnect processing, and error processing. User-written procedures are required for each processing step.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
For startup and processing considerations specific to scattered subsystems, see [[PQO: Scattered APSY subsystems#Subsystem command processing|PQO subsystem command processing]]. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Subsystem startup===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
To start the subsystem, either issue the &amp;lt;var&amp;gt;[[START command: Starting an application subsystem|START]]&amp;lt;/var&amp;gt; command. Or, optionally, the first user starts the subsystem automatically, if the Auto Start option is in effect. During subsystem startup, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; performs the following tasks:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Finds the subsystem definition stored in CCASYS.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Builds an in-core subsystem definition control block.&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
For z/OS operating systems, application subsystem control blocks reside above the 16-megabyte line.&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Opens all required files and groups.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Scans the procedure file for locked members that have precompiled procedure prefixes (see [[#Procedure Specifications screen|Procedure Specifications screen]]).&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Enters an entry for each precompiled procedure in the in-core procedure dictionary.&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 maximum size of the in-core procedure dictionary is 16 megabytes.&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Adds the subsystem name to the list of active subsystems, if no error occurs.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Performs a user-written initialization procedure (optional).&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Closes all associated files and groups, unless the Auto Start option is in effect. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Login processing===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Each time the subsystem is invoked, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; automatically performs the following steps:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Searches CCASYS for the user&#039;s class definition that assigns user privileges.&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The subsystem invocation is rejected if privileges consistent with the subsystem invoked are not found.&amp;lt;/p&amp;gt; &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Logs the user in to &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; with the subsystem name as the user, account, and record security ID, if the automatic login option (see [[#Operational Parameters screen|Operational Parameters screen]]) is set in the subsystem definition.&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If the automatic login option is not set, 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; ID is retained.&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Opens required subsystem files and groups with the found privileges.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Executes the commands and requests, as specified by the login procedure programmed by the user. The login procedure might consist of:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Storing current server table sizes in the global variable table for later reference&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Issuing UTABLE commands to set compiler table sizes for subsystem use&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Setting the communications global variable to the name of the procedure that displays the initial menu &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;Begins main processing as long as the login procedure specifies the next procedure to include in the communications global variable. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Main processing===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Main processing consists of locating subsystem eligible procedures, compiling procedures (if necessary), and loading procedures until an exit value is encountered. You can have as many main processing procedures as necessary. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Procedure names are stored in the in-core procedure dictionary that is built during system startup. Procedures are retrieved by examining the communications global variable for the name of the procedure and then locating the procedure name in the in-core dictionary.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If the procedure name is not found, the subsystem error procedure is executed. If the procedure is not found and no error procedure is specified in the subsystem definition, the user is disconnected from the subsystem.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If the procedure name is found, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; checks to see if the procedure has been precompiled:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;If the procedure is not a precompilable procedure, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; includes it for compilation and evaluation. Compilation and evaluation are reported in the audit trail under the CMPL and EVAL since-last statistics.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;If the procedure is a precompilable procedure, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; checks to see if the procedure was previously compiled with the set of privileges defined for the user&#039;s subsystem class.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;If the procedure is precompiled for the user&#039;s privilege set, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; loads the contents of the compiler tables from CCATEMP and evaluates the request. Loading and evaluation are reported in the audit trail as LOAD and EVAL since-last statistics.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;If the procedure is not precompiled, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; includes the procedure for compilation and evaluation. Contents of compiler tables are saved in CCATEMP, if the compile is successful and the tables are not already saved for another user class.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;If the procedure is already precompiled for some other privilege set, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; validates whether this user&#039;s privilege set is authorized to compile and validate. If successful, the request is loaded and then evaluated. If unsuccessful (for example, if the privilege set fails), the error procedure is executed.&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;
Main processing continues until the value of the communications global variable is set to the exit value specified in the subsystem definition. Once the exit value is set, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; proceeds to disconnect processing.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;warn&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Warning:&amp;lt;/b&amp;gt; Rocket advises that when using an &amp;lt;var&amp;gt;INCLUDE&amp;lt;/var&amp;gt; statement in a precompiled procedure that the included procedure is the same for all users. Unpredictable results may occur if the procedure is different when compiling for different [[SCLASS]]es.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Requirements for using temporary groups===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If a precompiled procedure includes an &amp;lt;var&amp;gt;OPEN&amp;lt;/var&amp;gt; of a temporary group, an attempt to load that procedure fails (with the &amp;lt;code&amp;gt;GRP NOT OPEN&amp;lt;/code&amp;gt; error) if the procedure contains an unreferenced list in the context of that group. An unreferenced list is a list that is declared but not referred to and, therefore, its declaration is not evaluated. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
To avoid an error in this situation, make sure of the following: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Any temporary group in this situation must be open at the time of the load.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Such a temporary group must be a TBO group if the procedure accesses a TBO file for update.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Disconnect processing===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Disconnect processing is invoked when one of the following conditions occurs: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Communications global variable is set to the exit value.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Error occurs with no subsystem error procedure defined.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;User is restarted by &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt;.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Logout or disconnect commands are issued from a subsystem procedure. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
All open subsystem files and groups are closed for the user during disconnect processing. If the subsystem definition includes the automatic logout option (&amp;lt;b&amp;gt;Log User out of M204&amp;lt;/b&amp;gt; on the Operational Parameters screen), the user is logged out of &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt;.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If the subsystem definition includes the automatic login option (&amp;lt;b&amp;gt;Log User in to M204&amp;lt;/b&amp;gt;) but not the automatic logout option (&amp;lt;b&amp;gt;Log User out of M204&amp;lt;/b&amp;gt;), the user is exited out of the subsystem, logged in again under the original &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; ID (if previously logged in), and returned to &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; command level.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Error processing===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Error processing, an optional procedure, is invoked when an error occurs that cannot be handled by the procedure executing at the time. &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Recoverable errors====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
A subsystem can recover from most errors when an error procedure is used. Recoverable errors include:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Compilation errors&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Record locking or table-full errors&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Attention interrupts and *CANCEL if no ON ATTENTION unit is specified in the application&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
An error procedure must test for different error conditions. The resulting value stored in the error global variable helps the application programmer determine the type of error that occurred.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Considerations for the communications global variable====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The communications global variable is ignored and disconnect processing completed when one of the following conditions occurs:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Error is a soft restart, a hard restart, or a phone hang-up condition.&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If you attempt to set the communications global variable to the name of another procedure, the procedure is not executed.&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;No error procedure is specified in the subsystem definition. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Subsystem operating requirements==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Meet the following requirements to define and execute a subsystem:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Install CCASYS, the &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; Dictionary, and the subsystem interface SUBSYSMGMT&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Allocate sufficient space for subsystem use in the resource locking table, server tables, CCATEMP, and spare core (SPCORE) &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Required files===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Dictionary/204, with the files shown in the table below, must be installed to define a subsystem; see the [[Dictionary/204 installation guide]]. Dictionary entries pertaining to subsystems are for reference purposes only. The subsystem is executed by using the data stored in CCASYS.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;caption&amp;gt;Dictionary/204 files required for subsystem management&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;File&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;CCASYS&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Subsystem definition&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;D204SYS&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Migrating definitions&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;DATALINK&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Dictionary 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;M204PROC&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Procedure 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;M204TEMP&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Internal work 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;METADATA&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Dictionary file&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;
===Resource locking table space===&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; locks in share mode on subsystem procedure names or permanent group names. Locking ensures that the procedures or group definitions do not change while the subsystem is running and prevents any user from issuing the &amp;lt;var&amp;gt;PROCEDURE&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;DELETE PROCEDURE&amp;lt;/var&amp;gt;, or &amp;lt;var&amp;gt;RENAME PROCEDURE&amp;lt;/var&amp;gt; commands. Procedures cannot be updated with the editor while the subsystem is active. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Separate locks are not required if the subsystem definition specifies locked files during processing.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Additional space might be required in the resource-locking table for running a subsystem with groups defined or files unlocked. Use the following formula as a guide:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;Number of additional resource-locking entries =&lt;br /&gt;
Number of groups + number of procedures (if files are unlocked)&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
where additional resources include:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Seven additional entries for application subsystem procedures in CCASYS&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;One additional entry for each subsystem and permanent group&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;One additional entry for each subsystem procedure if LOCK FILE (or GROUP) options are chosen &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Minimum server table sizes===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Minimum server table lengths, exclusive of any application procedures, for all users invoking subsystems are:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;LGTBL = 288&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;LNTBL = 50&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;LQTBL = 120&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;LSTBL = 250&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;LVTBL = 256 &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
During application programming, you must determine actual table lengths for specific procedures. Make adjustments to table lengths in the login procedure to ensure successful execution.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===CCATEMP space===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
CCATEMP requires additional space to accommodate the compiler tables for precompiled procedures. The data stored in CCATEMP consists of a header section and the contents of GTBL, NTBL, QTBL, STBL, and VTBL.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Use the following calculation to determine the additional CCATEMP space required for one precompiled request:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;94 + (32 * VTBL HWM) + (12 * NTBL HWM) + (STBL HWM)&lt;br /&gt;
   + NFILES + NRMTFILE + (16 * QTBL HWM)&lt;br /&gt;
   + (ad hoc group FTBL space)&lt;br /&gt;
   + ((30 + (7 + NRMTLOCS)/8) * #groups)&lt;br /&gt;
   + (8 * (#fields referenced in group))&lt;br /&gt;
   + (the sum of the length of the names of all the fields referenced in the group)&lt;br /&gt;
   + #screens + #images&lt;br /&gt;
   + (unavailable-file space) + (XVAR space)&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;code&amp;gt;HWM&amp;lt;/code&amp;gt; refers to the highwater mark found in the audit trail&#039;s since-last compilation statistic for the indicated table.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;ad hoc group FTBL space&amp;lt;/code&amp;gt; depends on whether ad hoc scattered groups (PQO) are included. If no ad hoc groups are scattered, ad hoc group FTBL space is:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;62 * (#ad hoc groups)&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If some ad hoc groups are scattered, ad hoc group FTBL space is:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;(62 + (#open files in ad hoc groups)) * (#ad hoc groups)&lt;br /&gt;
&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;unavailable-file space&amp;lt;/code&amp;gt; is the following quantity, not knowable in advance, which you need to estimate (PQO only):&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;(4 + (#unavailable group files)) * (#groups with unavailable members)&lt;br /&gt;
&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;XVAR space&amp;lt;/code&amp;gt; is required for these SOUL request elements: found sets, lists, and &amp;lt;var&amp;gt;FOR&amp;lt;/var&amp;gt; statements with a &amp;lt;var&amp;gt;WHERE&amp;lt;/var&amp;gt; clause. The number of bytes per element depends on the file or group context, as follows: &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;Transaction context &amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Bytes required per element&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;Single file&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;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Ad hoc or permanent group&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;8 * (#files in group) &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&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;4 + (8 * (#files in 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;
&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 number of additional CCATEMP pages required is:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;The result of the above calculation / (PAGESZ - 40)&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===SPCORE size===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Control blocks are allocated from spare core for use by active subsystems. Use the following calculation to determine the number of bytes required for one subsystem. The calculation includes PQO remote file subsystem members:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;228 + NRMTFILE + NFILES + (40 * SCLASSes) + NRMTLOCS&lt;br /&gt;
    + (93 * filemembers)&lt;br /&gt;
    + ((36 + (7 + SCLASSes) / 8) * (procedures + 1))&lt;br /&gt;
    + 40 bytes for each stopped file or group&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&amp;gt;NRMTFILE&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;NRMTLOCS&amp;lt;/var&amp;gt; are CCAIN parameters that apply to Parallel Query Option/204.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;filemembers&amp;lt;/code&amp;gt; are the files that belong to the subsystem. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;SCLASSes&amp;lt;/code&amp;gt; is the number of subsystem user privilege classes.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;procedures&amp;lt;/code&amp;gt; is the number of precompiled procedures used by the subsystem.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;40 bytes for each stopped file or group&amp;lt;/code&amp;gt; is the number of bytes returned to spare core if the subsystem is stopped or the file or group is started.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
==Subsystem operating options==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Subsystem operating options consist of commands entered on the command line, the &amp;lt;var&amp;gt;[[AUTOSYS parameter|AUTOSYS]]&amp;lt;/var&amp;gt; parameter entered on user lines in CCAIN, and values entered on screens provided by the Application Subsystem. Options can be entered on the command line only if the subsystem is already started or if the subsystem is defined with the Auto Start option. A summary of the available options is given in the following table.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
More detailed information about the operating options follows the table.&lt;br /&gt;
Options entered through interface screens are discussed throughout this article.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;caption&amp;gt;Summary of subsystem operating 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;Option&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Method of entry&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;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;Auto Commit&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td nowrap&amp;gt;Operational Parm screen&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Controls automatic &amp;lt;var&amp;gt;COMMIT&amp;lt;/var&amp;gt;s at the &amp;lt;var&amp;gt;END&amp;lt;/var&amp;gt; of each procedure&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Auto Start&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Operational Parm screen&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Automatically starts the subsystem when the first user logs in&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Automatic Login (Log user in...) &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Operational Parm screen&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Logs the user in to the subsystem with an account value of the subsystem name&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Automatic Logout (Log user out...)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Operational Parm screen&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Controls user logout from &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;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;AUTOSYS&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;CCAIN user line&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Invokes the specified subsystem for individual users upon &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; login&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td colspan=&amp;quot;3&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Commands&amp;lt;/b&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;DEBUG SUBSYSTEM&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Command line&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Allows the user issuing the command to change subsystem procedures without stopping and restarting the subsystem&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td nowrap&amp;gt;DISABLE SUBSYSTEM FILE&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Command line&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Makes a file or subsystem temporarily inaccessible&amp;lt;/td&amp;gt;&lt;br /&gt;
&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 FILE &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Command line&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Makes a file available again after being disabled&amp;lt;/td&amp;gt;&lt;br /&gt;
&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&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Command line&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Allows a file to be opened and removes the stop flag (if any)&amp;lt;/td&amp;gt;&lt;br /&gt;
&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 SUBSYSTEM&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Command line&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Activates the subsystem, opens files, and performs subsystem startup&amp;lt;/td&amp;gt;&lt;br /&gt;
&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&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Command line&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Prevents opening a specified file or permanent group&amp;lt;/td&amp;gt;&lt;br /&gt;
&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 SUBSYSTEM&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Command line&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Stops the subsystem&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;TEST&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Command line&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Creates a single user test environment&amp;lt;/td&amp;gt;&lt;br /&gt;
&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/Group&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Command line&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Specifies the name and attributes of&lt;br /&gt;
files and groups used by the subsystem&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td colspan=&amp;quot;3&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Global variables&amp;lt;/b&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;Communication&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Procedure Spec screen&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Specifies the variable name of the next procedure to be executed&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Exit Value&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Procedure Spec screen&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Specifies the communication variable setting for exiting the subsystem&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Error Variable&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Procedure Spec screen&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Names the variable containing the error 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;Iterations&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Operational Parm screen&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Specifies the maximum number of times a procedure can execute consecutively&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Lock File/Groups&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Operational Parm screen&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Controls outside user access to subsystem files when the subsystem is active&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td colspan=&amp;quot;3&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Message display&amp;lt;/b&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;Disconnect&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Operational Parm screen&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Controls disconnect message display&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Informational&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Operational Parm screen&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Controls the display of informational 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&amp;gt;Error&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Operational Parm screen&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Controls error message display&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Numlk&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;File Use screen&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Specifies the number of files participating in procedure locking &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td colspan=&amp;quot;3&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Proc names&amp;lt;/b&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;Initialization&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Procedure Spec screen&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Names the first procedure used upon subsystem startup&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Login&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Procedure Spec screen&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Names the first procedure executed for each 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;Error&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Procedure Spec screen&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Names the procedure invoked when an error occurs&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 colspan=&amp;quot;3&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Proc prefixes&amp;lt;/b&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;Non-precompiled &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Procedure Spec screen&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Identifies the prefix used for procedures compiled each time they are 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;Precompiled&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Procedure Spec screen&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Identifies the prefix used for procedures that are saved in CCATEMP for reuse&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Procs&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;File Use screen&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Names the file or group containing the subsystem procedures &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td colspan=&amp;quot;3&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Security&amp;lt;/b&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;Account&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Operational Parm screen&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Specifies an account value that overrides the login account&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&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;Subsys Class screen&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Specifies an account associated with a specific user class (overrides the account specified on the Operational Parameters screen)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&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;User Matrix screen&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Changes an account in any subsystem user class&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Command Priv.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Subsys Class screen &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Specifies whether the class of users can issue the START, TEST, STOP, and DEBUG subsystem commands&amp;lt;/td&amp;gt;&lt;br /&gt;
&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 Priv.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Subsys Class screen &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Specifies values for procedure, file, and field-level security parameters&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Login Priv.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Subsys Class screen &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Overrides privileges on entry to the subsystem and privileges specified on the Operational Parameters screen&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Privileges&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Operational Parm screen&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Specifies user privileges independent of the &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; login privileges&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Record Security&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Subsys Class screen &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Overrides the record security ID held upon entry into the subsystem&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Start Login&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Operational Parm screen&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Controls login privileges while starting a subsystem&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Status&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Operational Parm screen&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Specifies the level of availability of the subsystem to users&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Sys Class&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Subsys Class screen&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Specifies the number and name of a subsystem user class that is assigned specific privileges&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Subsys Class&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Subsys Class Users screen&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Specifies subsystem class changes for individual users&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Subsys Class&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Userdef screen&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Identifies a group of subsystem users and specifies the command privilege level applicable to that 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;
===Subsystem commands===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The following list summarizes commands relating to a subsystem.&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;[[DEBUG command|DEBUG SUBSYSTEM]]&amp;lt;/var&amp;gt; allows login to a specified subsystem with the &amp;lt;var&amp;gt;DEBUG&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;STATS&amp;lt;/var&amp;gt; options of the &amp;lt;var&amp;gt;[[TEST command|TEST]]&amp;lt;/var&amp;gt; command. Individual programmer changes to subsystem procedures can be made without stopping and restarting the subsystem. Changes are limited to the programmer issuing the &amp;lt;var&amp;gt;DEBUG SUBSYSTEM&amp;lt;/var&amp;gt; command. More than one user can execute the &amp;lt;var&amp;gt;DEBUG&amp;lt;/var&amp;gt; command against the same subsystem at the same time.&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
&amp;lt;var&amp;gt;DEBUG SUBSYSTEM&amp;lt;/var&amp;gt; displays the value of the communications global variable and since-last statistics. Prompts are issued for changes to the variable.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
&amp;lt;var&amp;gt;DEBUG&amp;lt;/var&amp;gt; is limited to users with either &amp;lt;var&amp;gt;TEST&amp;lt;/var&amp;gt; or &amp;lt;var&amp;gt;DEBUG&amp;lt;/var&amp;gt; privileges. The &amp;lt;var&amp;gt;DEBUG&amp;lt;/var&amp;gt; privilege does not entitle use of the &amp;lt;var&amp;gt;TEST&amp;lt;/var&amp;gt; command.&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;[[DISABLE command|DISABLE SUBSYSTEM FILE]]&amp;lt;/var&amp;gt; makes a file or the subsystem to which it belongs inaccessible for a short period of time without shutting down the subsystem by using the &amp;lt;var&amp;gt;STOP SUBSYSTEM&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&amp;gt;[[ENABLE command|ENABLE SUBSYSTEM FILE]]&amp;lt;/var&amp;gt; makes a file marked as disabled to the subsystem available again.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;START FILE&amp;lt;/var&amp;gt; removes the &amp;lt;var&amp;gt;OPEN&amp;lt;/var&amp;gt; restriction set by the &amp;lt;var&amp;gt;STOP&amp;lt;/var&amp;gt; command at the system and subsystem levels.     &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;[[START command: Starting an application subsystem|START SUBSYSTEM]]&amp;lt;/var&amp;gt; activates the subsystem and makes it available for use. &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; opens all the files and performs subsystem startup. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;[[STOP command: Making a file or group unavailable|STOP FILE]]&amp;lt;/var&amp;gt; prevents the reopening of a specified file or permanent group. Files or groups open at the time &amp;lt;var&amp;gt;STOP FILE&amp;lt;/var&amp;gt; is issued are not affected until they are closed and an attempt is made to reopen them.&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When the stopped file is closed by all users, all precompiled code in CCATEMP that refers to the file is discarded and pages in the temporary file are reclaimed. &amp;lt;var&amp;gt;STOP FILE&amp;lt;/var&amp;gt; affects only one copy of &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt;. Another copy of &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; can process the file or group. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
&amp;lt;var&amp;gt;STOP FILE&amp;lt;/var&amp;gt; verifies the presence of the named file or group in any active subsystem. Files or groups not required by the subsystem become unavailable for future use.&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;[[STOP command: Stopping an application subsystem|STOP SUBSYSTEM]]&amp;lt;/var&amp;gt; stops the subsystem and makes it unavailable for use. Files and groups are closed. Groups and procedures are released when the subsystem is completely stopped. &lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If &amp;lt;var&amp;gt;STOP SUBSYSTEM&amp;lt;/var&amp;gt; is issued when there are active users, the system remains active until the last user disconnects (drain state).&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;TEST&amp;lt;/var&amp;gt; creates a single user test environment. The subsystem must be stopped to enter the TEST mode and the user must have &amp;lt;var&amp;gt;TEST&amp;lt;/var&amp;gt; privileges. &amp;lt;var&amp;gt;DEBUG&amp;lt;/var&amp;gt; privileges are not sufficient to execute the &amp;lt;var&amp;gt;TEST&amp;lt;/var&amp;gt; command. &lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
&amp;lt;var&amp;gt;TEST&amp;lt;/var&amp;gt; without the &amp;lt;var&amp;gt;DEBUG&amp;lt;/var&amp;gt; option simulates execution of the subsystem. &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;
===AUTOSYS parameter===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The &amp;lt;var&amp;gt;[[AUTOSYS parameter|AUTOSYS]]&amp;lt;/var&amp;gt; parameter, specified on user lines in CCAIN, invokes a subsystem for individual users upon login to &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt;. The same subsystem is generated for each subsequent user line until a different subsystem name is specified, or &amp;lt;var&amp;gt;AUTOSYS&amp;lt;/var&amp;gt; is set to &amp;lt;code&amp;gt;C&#039; &#039;.&amp;lt;/code&amp;gt; &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
In the following example, all IUCV users enter the subsystem VMCFPROF whenever they log in. The AUTOSYS parameter is turned off for all other users.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;IODEV=41,POLLNO=1,NOTERM=50,AUTOSYS=C&#039;VMCFPROF&#039;&lt;br /&gt;
IODEV=41,POLLNO=2&lt;br /&gt;
IODEV=41,POLLNO=3&lt;br /&gt;
 .&lt;br /&gt;
 .&lt;br /&gt;
 .&lt;br /&gt;
IODEV=43,AUTOSYS=C&#039; &#039;&lt;br /&gt;
IODEV=43&lt;br /&gt;
IODEV=43&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
==Overview of the SUBSYSMGMT interface==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
SUBSYSMGMT is the full-screen interface used to define user-written applications that run under the Application Subsystem facility. In addition to accessing from command line the TN3270 interface described below on this page, SUBSYSMGMT is accessible both from the [[RKTools#mainmenu|RKTools main menu]] and from the [[RKWeb#Manage|RKWeb]] browser GUI as of RKTools version 7.7. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
To issue a command from the SUBSYSMGMT screens, press the assigned PF key or enter the command on the command line (&amp;lt;code&amp;gt;===&amp;gt;&amp;lt;/code&amp;gt;). Abbreviations for commands are indicated by the uppercase portion of the command listed for PF keys. The following table describes common commands and PF keys for SUBSYSMGMT screens: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;caption&amp;gt;Commands common to SUBSYSMGMT screens&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;PF key&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;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;HELP&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;F1&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Displays online Help text for the screen.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;QUIT&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;F3&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Terminates processing without saving screen input. QUIT returns to the previous level.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;END&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;F12&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Saves input and returns to the previous level.&amp;lt;/td&amp;gt;&lt;br /&gt;
&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;F11&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Generally used to move to the next screen when adding, modifying, or browsing a subsystem. The command name depends upon the name of the screen. &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 messages are issued from all screens. Messages can be general and issued from any screen, or specific and issued from a particular screen. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===SUBSYSMGMT facility screen summary===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The following table summarizes the SUBSYSMGMT facility screens. The screens are described in detail in the sections that follow. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;caption&amp;gt;SUBSYSMGMT facility screens&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;Screen &amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;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 style=&amp;quot;border-right:none&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Primary screen&amp;lt;/b&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;border-left:none&amp;quot;&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;Activity&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Provides a menu from which to select subsystem definition activities&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;border-right:none&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Secondary screens&amp;lt;/b&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;border-left:none&amp;quot;&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;Command Privileges&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Changes the command privileges for a set of subsystems&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Operational Parameters&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Defines the subsystem operating parameters&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Procedure Specifications&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Defines subsystem procedure specifications&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Subsystem File Use&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Defines file names used by the subsystem&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Subsystem Classes&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Defines command and file privileges for each class of subsystem 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;User Definitions&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Defines the users of the subsystem when used in conjunction with the Subsystem Class User screen &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Subsystem Class Users&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Defines assignments of specific user accounts to specific user classes&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;User Matrix&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Changes the definition of a single account in a user class&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td nowrap&amp;gt;Subsystem Administration&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Defines user and administrative privileges&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Subsystem Trust&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;(PQO only) Views or manages trusted subsystem definitions&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 secondary screens===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The following considerations apply to all secondary screens:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Use secondary screens in any order.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Use PF keys to move from screen to screen.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;You must fill in all screens, except those for public and semi-public subsystems with only one class, to complete a subsystem definition.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Public and semi-public subsystems with only one class do not require the use of the User Definitions (Userdef) screen.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;The &amp;lt;b&amp;gt;END&amp;lt;/b&amp;gt; command (F12) stops and saves the definition when it is complete. If you use the &amp;lt;b&amp;gt;END&amp;lt;/b&amp;gt; command with an incomplete definition, you receive a warning message. Issuing a second &amp;lt;b&amp;gt;END&amp;lt;/b&amp;gt; command allows you to exit and you can complete the definition in another session. (Do not use an incompletely defined subsystem.) &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Sample screens and PQO===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
For screens that have changed since the previous release, the sample screens shown in the following sections represent definitions for a client subsystem in a PQO application. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
PQO-specific fields are explained briefly but their use is not described in detail. Not shown here is the Subsystem Trust screen, which is specific to PQO.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
For full explanations of client and server definitions in PQO applications, see [[PQO: Defining a PQO network]].&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==SUBSYSMGMT Activity screen==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The Activity screen is the primary SUBSYSMGMT screen. Use it to access all SUBSYSMGMT functions.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;caption&amp;quot; style=&amp;quot;width:575px&amp;quot;&amp;gt;Subsystem Activity screen&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;figure&amp;quot;&amp;gt;[[File:sm8-2Activity.gif|575px]] &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Commands and options===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The F2, F4, F5, F6, F7, or F9 keys are used with &amp;lt;b&amp;gt;Add&amp;lt;/b&amp;gt;, &amp;lt;b&amp;gt;Modify&amp;lt;/b&amp;gt;, or &amp;lt;b&amp;gt;Browse&amp;lt;/b&amp;gt; to specify the appropriate secondary screen. F10 invokes the PQO-specific Subsystem Trust screen. The &amp;lt;b&amp;gt;EXPortlist&amp;lt;/b&amp;gt; option (F11) is described below in the [[#Exportlist|Exportlist]] section.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Overview of activities===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The following options are initiated from the Activity screen and completed through the selected secondary screens:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;Add&amp;lt;/b&amp;gt; a new subsystem definition&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;Modify&amp;lt;/b&amp;gt; an existing subsystem definition&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;Browse&amp;lt;/b&amp;gt; without updating an existing subsystem definition &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 following options are initiated and completed from the Activity screen:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;Copy&amp;lt;/b&amp;gt; an existing subsystem definition to a newly named subsystem definition&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;Rename&amp;lt;/b&amp;gt; an existing subsystem with a new, unique name&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;Delete&amp;lt;/b&amp;gt; an entire existing subsystem definition&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;Import&amp;lt;/b&amp;gt; subsystem definitions&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;Export&amp;lt;/b&amp;gt; subsystem definitions&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;Export Delete&amp;lt;/b&amp;gt; a subsystem from the D204SYS file&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 &amp;lt;b&amp;gt;ADMIN&amp;lt;/b&amp;gt; option (option 10) displays secondary screens on which the system manager can define privileges and assign and copy [[SCLASS]] membership. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===From fields (PQO only)===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The &amp;lt;b&amp;gt;From&amp;lt;/b&amp;gt; fields (used when defining a PQO service subsystem) specify the location of the client subsystem. If you specify a &amp;lt;b&amp;gt;From&amp;lt;/b&amp;gt; field, you cannot leave the &amp;lt;b&amp;gt;Subsystem Name&amp;lt;/b&amp;gt; field blank. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The &amp;lt;b&amp;gt;From&amp;lt;/b&amp;gt; field is prefilled on all the secondary screens and protected from input.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Revising command privileges===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can revise command privileges, if you have privileges to use the SUBSYSMGMT facility as well as the privileges to update the individual subsystems.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Using the main screen of the SUBSYSMGMT facility you can enter a pattern in the &amp;lt;b&amp;gt;Subsystem Name&amp;lt;/b&amp;gt; field and select the F7 key to change the command privileges for a set of subsystems. Another screen appears where you can enter a pattern for a subsystem class along with the new command privileges for the &amp;lt;var&amp;gt;START&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;STOP&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;TEST&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;DEBUG&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;RESUME&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;SUSPEND&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;REFRESH&amp;lt;/var&amp;gt; commands. You can also obtain a list of all of the subsystem classes and subsystem definitions that fit the pattern criteria.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
To update the command privileges, select the &amp;lt;b&amp;gt;2. MODIFY&amp;lt;/b&amp;gt; option on the main menu, enter a subsystem name or pattern in the &amp;lt;b&amp;gt;Subsystem Name&amp;lt;/b&amp;gt; field, and press F7. The COMMAND PRIVILEGES screen is displayed next. However:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;If you enter a pattern in the name field, but press another function key, the pattern is treated as an individual name, not a pattern. F7 is only valid with the MODIFY option. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;If F7 is pressed, but the MODIFY option was not specified, then the following error message is displayed: &lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;SUMnnn: PFkey or command only valid with Modify option.&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 &amp;lt;b&amp;gt;Subsystem Name&amp;lt;/b&amp;gt; is left blank, the following error message is displayed:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;SUMnnn: Subsystem name or pattern is required.&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;
==SUBSYSMGMT Command Privileges screen==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The subsystem management command privileges screen is shown below:&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;caption&amp;quot; style=&amp;quot;width:532px&amp;quot;&amp;gt;Subsystem COMMAND PRIVILEGES screen&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;figure&amp;quot;&amp;gt;[[File:sm8-3CmdPriv.gif|532px]] &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
After your screen entries are read, a list of subsystem names and subsystem classes based on the pattern criteria is displayed. The pattern criteria used for the subsystem name is the value that was specified on the main screen. The pattern criteria for the subsystem class defaults to asterisk (&amp;lt;tt&amp;gt;*&amp;lt;/tt&amp;gt;) when the screen is initially read.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If any of the subsystems in the list are enqueued by other users then the command privileges for the subsystem cannot be updated. In this case, &amp;lt;b&amp;gt;6=DISplay&amp;lt;/b&amp;gt; appears on the screen to display the list of subsystems that are enqueued.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Choosing other classes or names&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
To refine the list of subsystem classes or subsystem names, enter a new pattern in the &amp;lt;b&amp;gt;Subsystem Name&amp;lt;/b&amp;gt; or &amp;lt;b&amp;gt;Subsystem Class&amp;lt;/b&amp;gt; field, and press F4 to view the new list.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The maximum number of subsystem classes that may be processed at one time is 1000. If the list exceeds 1000, then 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;SUM096: Refine criteria: # of subsystems classes, exceeds max(1000).&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Entering changes in the COMMAND PRIVILEGES screen===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
To update the command privileges for a particular subsystem class, the command privilege must be set to &amp;lt;code&amp;gt;Y&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; in one or more of the subsystem command privilege fields. In addition, the subsystem class must be selected by putting an &amp;lt;code&amp;gt;X&amp;lt;/code&amp;gt; in front of the subsystem name and the class name. You can also update more than one subsystem class at a time by specifying a command privilege of one of the &amp;lt;b&amp;gt;Change all selected&amp;lt;/b&amp;gt; columns. If the subsystem name and class are not selected, the command privileges are not updated for that particular subsystem class. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
At this point, you press F11 (&amp;lt;b&amp;gt;UPDate priv&amp;lt;/b&amp;gt; or F12 (&amp;lt;b&amp;gt;END&amp;lt;/b&amp;gt;) to update the command privileges for the entire set of selected subsystem classes. If a record enqueuing conflict occurs during the update process, only a partial update can be performed. If this occurs, you can press F6 (&amp;lt;b&amp;gt;DISplay&amp;lt;/b&amp;gt;) to display the list of subsystem classes that are enqueued and cannot be updated at this time. You also can press F11 (&amp;lt;b&amp;gt;UPDate&amp;lt;/b&amp;gt;) or F12 (&amp;lt;b&amp;gt;END&amp;lt;/b&amp;gt;) a second time to apply the partial update, or press F3 (&amp;lt;b&amp;gt;QUIt&amp;lt;/b&amp;gt;) to &amp;lt;i&amp;gt;not&amp;lt;/i&amp;gt; apply the update.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Command privileges are in effect immediately after they are updated and can be changed if the subsystem is active or not.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You may also deselect particular subsystems or classes on the list by deleting the &amp;lt;code&amp;gt;X&amp;lt;/code&amp;gt; that precedes the subsystem or class name. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The following table displays the list of PF key options and commands that are alternatives that accomplish the same thing. (Commands are used with the Enter key.) Each PF key function can also be performed by adding 12 to that PF key&#039;s number and using the resulting PF key. Commands shown may be abbreviated to the first three characters, which are capitalized.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;caption&amp;gt;PF keys&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;PF Key &amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Command&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;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 align=&amp;quot;right&amp;quot;&amp;gt;1 &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;HELp&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Display Help information on this screen&amp;lt;/td&amp;gt;&lt;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;QUIt&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Exit from Command Privileges Screen, return to main menu for SUBSYSMGMT.&amp;lt;/td&amp;gt;&lt;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;LISt&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Displays a list of subsystems and classes based on the pattern specification in the &amp;lt;b&amp;gt;Subsystem&amp;lt;/b&amp;gt; name and &amp;lt;b&amp;gt;Class&amp;lt;/b&amp;gt; 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 align=&amp;quot;right&amp;quot;&amp;gt;5 &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td nowrap&amp;gt;DESelect all&amp;lt;br&amp;gt;&lt;br /&gt;
SELect all&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;De-select all subsystem names on the list.&amp;lt;br&amp;gt;&lt;br /&gt;
Select all subsystem names on the list.&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Toggles between DESelect and SELect. &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;6 &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;DISplay&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Displays a list of subsystems or classes that are enqueued by another user. The command privileges for the subsystems and classes on the list cannot be updated at this time.&amp;lt;/td&amp;gt;&lt;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;7 &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;BACkward&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Scroll up on subsystem names list.&amp;lt;/td&amp;gt;&lt;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;FORward&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Scroll down on subsystem names list.&amp;lt;/td&amp;gt;&lt;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;11&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;UPDate&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Update all subsystem classes with new command privilege. Only the command privileges that are changed are updated.&amp;lt;/td&amp;gt;&lt;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;12&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;END&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Return to the main menu after updating the command privileges that are specified. If a particular command privilege is left blank then it is not updated.&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;
Command privileges can be changed regardless of whether a subsystem is active or not. The new privileges are in effect immediately once they are changed.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Operational Parameters screen==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Selecting F4 from the Activity screen brings up the Operational Parameters screen. Use it to specify the operating parameters of the subsystem. You access the [[RKWeb#Operational|RKWeb version of this screen]] by selecting &amp;lt;code&amp;gt;Manage &amp;gt; Subsystem Management &amp;gt; Operational&amp;lt;/code&amp;gt;. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
On this screen, only system managers can modify &amp;lt;b&amp;gt;Account&amp;lt;/b&amp;gt;, &amp;lt;b&amp;gt;Privileges&amp;lt;/b&amp;gt;, and &amp;lt;b&amp;gt;Start Login privileges&amp;lt;/b&amp;gt; fields.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;caption&amp;quot; style=&amp;quot;width:561px&amp;quot;&amp;gt;Operational Parameters screen&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;figure&amp;quot;&amp;gt;[[File:Sm8-4OperParm.gif|561px]] &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Commands===&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;F2, F6, F9 and F11 validate and save input and display other secondary screens. You must use a PF key to quit, save the input, or move to a different screen.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Pressing the Enter key validates screen input.&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 description of each parameter follows.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Parameter descriptions===&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;Status&amp;lt;/b&amp;gt; (1, 2, and 3) determines access availability:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;PUBLIC&amp;lt;/b&amp;gt; (default) allows any user to access the subsystem.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;SEMI-PUBLIC&amp;lt;/b&amp;gt; allows all users to access the subsystem, but permits different privileges for each class of users.&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
A semi-public subsystem generally has more than one user class. One class is designated as the default (see the [[#Subsystem Classes screen|Subsystem Classes screen]]).&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;PRIVATE&amp;lt;/b&amp;gt; requires all users to have an assigned class. No default is allowed.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;Auto Start&amp;lt;/b&amp;gt; automatically starts the subsystem when the first user enters the subsystem name. The &amp;lt;var&amp;gt;START&amp;lt;/var&amp;gt; command is not required.&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; (the default) is specified, only a user having the appropriate privileges, as defined on the Subsystem Classes screen, can issue the &amp;lt;var&amp;gt;START&amp;lt;/var&amp;gt; command to open the subsystem. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;Lock File/Groups&amp;lt;/b&amp;gt; provides control for file access to users outside the subsystem.&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If &amp;lt;code&amp;gt;Y&amp;lt;/code&amp;gt; is specified, the subsystem files and groups are available only to users running in the subsystem after the subsystem is started.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
A subsystem file can be opened by a non-subsystem user if the subsystem is not started. If any user has the file open when the subsystem is being started, the subsystem start fails.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If a group is defined, all member files of the group are locked. No explicit lock is held on the group.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; (default) is specified, users outside the subsystem can open any subsystem file, but cannot &amp;lt;var&amp;gt;DELETE&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;RENAME&amp;lt;/var&amp;gt;, or &amp;lt;var&amp;gt;REDEFINE&amp;lt;/var&amp;gt; fields. &amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;Log user into M204&amp;lt;/b&amp;gt; controls the method of logging the user in to &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;
If &amp;lt;code&amp;gt;Y&amp;lt;/code&amp;gt; is specified, 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 then logged back in to &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; with the subsystem name as the user ID when entering the system.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; (default) is specified, the user remains logged in under the same &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; account name used before subsystem processing. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;Log user out of M204&amp;lt;/b&amp;gt; controls the method of logging 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;. &lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If &amp;lt;code&amp;gt;Y&amp;lt;/code&amp;gt; is specified, the user is logged out of &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; upon leaving the subsystem. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; (default) is specified and &amp;lt;b&amp;gt;Log user into M204&amp;lt;/b&amp;gt; is &amp;lt;code&amp;gt;Y&amp;lt;/code&amp;gt;, the user&#039;s logon, account, and record security ID are restored to the values that were present before entering the subsystem.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;Auto Commit&amp;lt;/b&amp;gt; controls the issuing of &amp;lt;var&amp;gt;COMMIT&amp;lt;/var&amp;gt; statements: &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;If &amp;lt;code&amp;gt;Y&amp;lt;/code&amp;gt; (default) is specified, a SOUL &amp;lt;var&amp;gt;COMMIT&amp;lt;/var&amp;gt; statement is executed by &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; at each procedure &amp;lt;var&amp;gt;END&amp;lt;/var&amp;gt; in the subsystem during execution.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;If &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; is specified, transactions can span request boundaries (see [[System and media recovery#Transaction boundaries|Transaction boundaries]]). The application must issue &amp;lt;var&amp;gt;COMMIT&amp;lt;/var&amp;gt; statements to commit updates to the database. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;Maximum Iterations&amp;lt;/b&amp;gt; specifies the maximum number of consecutive times the subsystem allows the same procedure to be invoked before interrupting the processing. Valid values are 1 to 99999. &amp;lt;code&amp;gt;NULL&amp;lt;/code&amp;gt; (default) indicates no limit. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;Account&amp;lt;/b&amp;gt; (optional) specifies an account value other than that used at logon. As many as 10 characters can be entered. &amp;lt;code&amp;gt;NULL&amp;lt;/code&amp;gt; can be used to specify the logon account value.&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The original value is restored when the user exits the subsystem.&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;Privileges (in HEX)&amp;lt;/b&amp;gt; (optional) specifies a user&#039;s privileges while in the subsystem. Privileges specified before logging into the subsystem are overridden, regardless of the value of the &amp;lt;b&amp;gt;Log user into M204&amp;lt;/b&amp;gt; field. The original value is restored when the user exits the subsystem.&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The privilege option is expressed as a hexadecimal value within the range of X&#039;00&#039; to X&#039;FF&#039;, as described in [[Establishing and maintaining security#File security|File security]]. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;Start Login Privileges (in HEX)&amp;lt;/b&amp;gt; specifies user login privileges for use while running the subsystem initialization procedure. If specified, &amp;lt;b&amp;gt;Start Login Privileges in (HEX)&amp;lt;/b&amp;gt; overrides both the user&#039;s previous privileges and other privilege fields in the subsystem definition.&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
In the case of automatic login, the starting user&#039;s privileges are reset to those set on the Operational Parameters or Subsystem Classes screens prior to continuing execution within the subsystem.   &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The privilege option is expressed as a hexadecimal value within the range of X&#039;00&#039; to X&#039;FF&#039;, as described in [[Establishing and maintaining security#File security|File security]]. &amp;lt;code&amp;gt;NULL&amp;lt;/code&amp;gt; indicates that other privilege specifications are not to be overridden. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;Subsystem can access Remote Files&amp;lt;/b&amp;gt; pertains to PQO applications. &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; is the default. Change the value to &amp;lt;code&amp;gt;Y&amp;lt;/code&amp;gt;, if you want the subsystem to access remote files. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Message display options===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
At the bottom of the screen are the message display options: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;Disconnect&amp;lt;/b&amp;gt; controls the display of subsystem disconnect messages:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;If you specify &amp;lt;code&amp;gt;Y&amp;lt;/code&amp;gt; (default), the subsystem disconnect message is displayed.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;If you specify &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt;, the subsystem disconnect message is suppressed.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;Informational&amp;lt;/b&amp;gt; controls the display of informational messages:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;If you specify &amp;lt;code&amp;gt;Y&amp;lt;/code&amp;gt; (default), &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; informational messages are displayed. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;If you specify &amp;lt;code&amp;gt;N&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; informational messages are suppressed on the user&#039;s terminal and only subsystem messages are displayed. &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; messages continue to be printed on the audit trail.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;Error&amp;lt;/b&amp;gt; controls the display of error messages on the user&#039;s terminal.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;If you specify &amp;lt;code&amp;gt;Y&amp;lt;/code&amp;gt; (default), &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; error messages are displayed.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;If you specify &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt;, error messages are suppressed, but are still printed on the audit trail. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Procedure Specifications screen==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Enter specifications for subsystem procedures on the Procedure Specifications screen. You access the [[RKWeb#Procedure|RKWeb version of this screen]] by selecting &amp;lt;code&amp;gt;Manage &amp;gt; Subsystem Management &amp;gt; Procedure&amp;lt;/code&amp;gt;.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;caption&amp;quot; style=&amp;quot;width:564px&amp;quot;&amp;gt;Procedure Specifications screen&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;figure&amp;quot;&amp;gt;[[File:Sm8-5Procedure.gif|564px]] &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Commands===&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;F4, F6, F9, and F11 each validate, save the input, and provide the next secondary screen selection.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;You must use a PF key to quit, save input, or move to a different screen.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Pressing Enter validates the screen.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Procedure prefixes===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The &amp;lt;b&amp;gt;PROCEDURE PREFIXES&amp;lt;/b&amp;gt; option requires each procedure used in a subsystem to have a prefix or be included in a procedure with a prefix.   &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Subsystem procedures can contain &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; commands, requests, continued requests, or sections of SOUL code in any combination. A procedure containing commands cannot be precompiled. Procedures included in a precompiled procedure are also precompiled.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;Non-precompiled&amp;lt;/b&amp;gt; specifies a prefix that identifies procedures that are compiled each time they are invoked.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;Precompiled&amp;lt;/b&amp;gt; specifies a prefix that identifies precompiled procedures, which are included in the in-core dictionary for reuse. Precompiled procedures save CPU and elapsed time. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Procedure names===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;PROCEDURE NAMES&amp;lt;/b&amp;gt; require assigned prefixes that indicate if the procedure is or is not precompiled:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;Initialization&amp;lt;/b&amp;gt; (optional) is the procedure invoked once when the subsystem is first started. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;Login&amp;lt;/b&amp;gt; (required) is the name of the first procedure executed for every user. &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; automatically includes a subsystem login procedure when a user enters a subsystem. This procedure must issue &amp;lt;var&amp;gt;UTABLE&amp;lt;/var&amp;gt; commands to set compiler table sizes. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Control must be passed to an initial main menu screen if the subsystem is an Online application.   &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;Error&amp;lt;/b&amp;gt; (optional) is the name of the procedure invoked if an error occurs during execution of a subsystem, or if an attention interrupt occurs when no &amp;lt;var&amp;gt;ON ATTENTION&amp;lt;/var&amp;gt; unit is active.  &lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If no error procedure is supplied, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; disconnects the user from the subsystem when an error occurs. &amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Global variables===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;GLOBAL VARIABLES&amp;lt;/b&amp;gt; enable you to pass information from one request to another and conditionally include procedures at the &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; command level: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt; &lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;Command Line Variable&amp;lt;/b&amp;gt; specifies the name of an optional global variable containing parameter input that you can enter upon logon. The command line can contain up to 255 characters.&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When a user logs in to a subsystem by entering the subsystem name followed by a number of parameters, the parameter input is placed into a global variable that is available to the subsystem procedures. If not defined, the command line is discarded.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Command line variables are not destroyed when control is transferred to another subsystem through the subsystem transfer (XFER) facility.&amp;lt;/p&amp;gt; &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;Communications variable&amp;lt;/b&amp;gt; (required) passes control from one procedure to the next. Each procedure sets the communications variable to the name of the next procedure executed in the subsystem.&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can transfer control from one procedure to another by using a user-designated global variable.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can transfer control between subsystems by using the reserved global variable &amp;lt;code&amp;gt;XFER&amp;lt;/code&amp;gt;. For more details about transferring control, see [[Application Subsystem development#Transferring control|Transferring control]].&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When the application is ready to terminate, a subsystem procedure must set the communications global to the exit value.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;Exit Value&amp;lt;/b&amp;gt; (required) specifies the setting of the communications variable for exiting the subsystem.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;Error Variable&amp;lt;/b&amp;gt; (required) specifies the variable in which an error code is stored. The value of the error variable, which is used by the error procedure, indicates the type of error. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Subsystem File Use screen==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The Subsystem File Use screen defines the files, including the procedure file used by the subsystem. You access the [[RKWeb#Files|RKWeb version of this screen]] by selecting &amp;lt;code&amp;gt;Manage &amp;gt; Subsystem Management &amp;gt; Files&amp;lt;/code&amp;gt;.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;caption&amp;quot; style=&amp;quot;width:537px&amp;quot;&amp;gt;Subsystem File Use screen&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;figure&amp;quot;&amp;gt;[[File:Sm8-6FileUse.gif|537px]] &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
It is useful to define a subsystem procedure file as a multiple-file procedure group. This will let you modify procedures in the group members without stopping the subsystem because of the following interactions of subsystems and procedure groups: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;All members of a procedure group are searched for subsystem procedures. The search, determined by the order in which the files were specified in the &amp;lt;var&amp;gt;[[CREATE command: Permanent group|CREATE]]&amp;lt;/var&amp;gt; command that defined the group, begins with the leftmost specified member and proceeds to the right. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;The &amp;lt;b&amp;gt;NUMLK&amp;lt;/b&amp;gt; parameter, on the Subsystem File Use screen, lets you determine how many and which members of a procedure group are locked (a member in which procedures cannot be modified). The locked members&lt;br /&gt;
are the &amp;lt;b&amp;gt;Procs NUMLK&amp;lt;/b&amp;gt; number of consecutive members beginning with the rightmost member of the group and counting to the left.  &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;You can add new procedures to any member of a procedure file group, but only procedures added to unlocked members are visible to the subsystem without restarting the subsystem.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A consequence of the above-listed factors is that you can&lt;br /&gt;
copy a procedure from a locked member to a (further-to-the-left) unlocked member designated for this purpose, modify that procedure copy, then let future APSY &amp;lt;var&amp;gt;INCLUDE&amp;lt;/var&amp;gt; commands use that copy instead of the version in the locked member.   &lt;br /&gt;
&lt;br /&gt;
For example, the search for procedures in the group defined by the following &amp;lt;var&amp;gt;CREATE&amp;lt;/var&amp;gt; command always starts with the leftmost file,  &amp;lt;code&amp;gt;TESTPROC&amp;lt;/code&amp;gt;, and proceeds to the right:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;CREATE PERM GROUP PROCGRUP FROM TESTPROC, DEVPROC, QAPROC1, QAPROC2, PROD1, PRODPROC&lt;br /&gt;
PARAMETER PROCFILE=*&lt;br /&gt;
END CREATE&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If the Subsystem File Use screen value of NUMLK is 3, procedures (with names starting with the pre-compiled prefix) in the three consecutive files beginning with the rightmost file, &amp;lt;code&amp;gt;PRODPROC&amp;lt;/code&amp;gt;, are locked and cannot be modified&lt;br /&gt;
while their subsystem is active. But a procedure that is a member of &amp;lt;code&amp;gt;PROD1&amp;lt;/code&amp;gt;, for example, can be copied, modified, added to &amp;lt;code&amp;gt;TESTPROC&amp;lt;/code&amp;gt; and then included in the subsystem while it is still running.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
For more information about the &amp;lt;var&amp;gt;PROCFILE&amp;lt;/var&amp;gt; option, see its description in the &amp;lt;var&amp;gt;[[CREATE command: Temporary group#Temporary group parameters|CREATE TEMP GROUP]]&amp;lt;/var&amp;gt; command.&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; Procedures found in unlocked members are &amp;lt;i&amp;gt;always&amp;lt;/i&amp;gt; recompiled on each include, imposing a significant performance penalty.  That performance penalty can be eliminated by setting the &amp;lt;var&amp;gt;[[SIRAPSYF parameter|SIRAPSYF]]&amp;lt;/var&amp;gt; parameter to X&#039;03&#039;.  &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The in-core procedure dictionary is built during initialization by searching the locked members of a procedure file group for procedures with the precompiled prefix.  If a subsystem procedure is present in more than one locked member of the procedure group, only the first procedure located in a left-to-right search of the locked members is included in the in-core procedure dictionary.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
For further information, see also: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[[Application Subsystem development#Permanent vs. temporary groups in subsystem definitions|Substituting a temporary group for the permanent group defined to the subsystem]]&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Defining a multiple procedure file to the &amp;lt;var&amp;gt;[[$LstProc]]&amp;lt;/var&amp;gt; function &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;[[Application Subsystem development#Guidelines and restrictions|Restrictions on using certain commands with multiple procedure files]] &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; Non-system managers can add files to a subsystem if they have been assigned modify privileges (see [[#Administrative Privileges screen|Administrative Privileges screen]]).&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Commands===&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;F4, F5, F9, and F11 each validate, save the input, and provide the next secondary screen selection.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;You must use a PF key to quit, save input, or move to a different screen.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;F7 and F8 provide scrolling to and from the first to last Subsystem File Use screen when more than one is used. Input is validated before the screen scrolls.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Pressing Enter validates the screen.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;You must issue the &amp;lt;code&amp;gt;TOP&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;BOTTOM&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;MAXIMUM&amp;lt;/code&amp;gt; commands on the command line. These commands have no corresponding PF keys.&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;TOP&amp;lt;/code&amp;gt; scrolls to the first file.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;BOTTOM&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;MAXIMUM&amp;lt;/code&amp;gt; scroll to the last file.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;MAXIMUM&amp;lt;/code&amp;gt; used with F7 and F8 is equivalent to &amp;lt;code&amp;gt;TOP&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;BOTTOM&amp;lt;/code&amp;gt;, respectively.&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;
===File specifications===&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;You must specify file or group names in the column labeled &amp;lt;b&amp;gt;File/Group Name&amp;lt;/b&amp;gt;.&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When using a group procedure file, the name specified must correspond to the permanent group. Note that an individual user can create or open a temporary group having the same name as the permanent group defined to the subsystem. If the temporary group is open before login to the subsystem, the subsystem uses the temporary group instead of the defined permanent group.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The following restrictions apply to the use of temporary groups as application subsystem procedure files:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;TEST or DEBUG privilege is required.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;The last files of the permanent group must correspond exactly to the last files of the temporary group. The number of files used in both groups is specified on the &amp;lt;b&amp;gt;NUMLK&amp;lt;/b&amp;gt; parameter. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;File Location&amp;lt;/b&amp;gt; (PQO only) specifies the location of each file. If this field is omitted, the file is assumed to be local. Specify location only for client subsystems.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;Group Y/N&amp;lt;/b&amp;gt; indicates whether or not the data file is a group. The default is &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt;.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;Auto Y/N&amp;lt;/b&amp;gt; indicates automatic members (opened automatically at subsystem startup). &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;Mandatory Y/N&amp;lt;/b&amp;gt; indicates mandatory members (which must be open to access the subsystem).&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;Procs&amp;lt;/b&amp;gt; specifies the name of the procedure file or group for the subsystem. You can use up to eight characters for each entry.&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;NUMLK&amp;lt;/b&amp;gt; specifies the number of files in a group that participate in procedure locking. Valid values are between 0 and 255, but must be less than the number of files in the group. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If &amp;lt;b&amp;gt;Group&amp;lt;/b&amp;gt; is &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt;, the value of &amp;lt;b&amp;gt;NUMLK&amp;lt;/b&amp;gt; must be &amp;lt;code&amp;gt;NULL&amp;lt;/code&amp;gt;. If &amp;lt;b&amp;gt;Group&amp;lt;/b&amp;gt; is &amp;lt;code&amp;gt;Y&amp;lt;/code&amp;gt;, &amp;lt;b&amp;gt;NUMLK&amp;lt;/b&amp;gt; must be given a value. &amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;Deferred Name&amp;lt;/b&amp;gt; specifies an optional deferred update data set that can be a z/OS ddname, a z/VSE DLBL name, or a CMS FILEDEF name. If a deferred name is specified, the file is opened in deferred update mode when the subsystem is started. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;Ordered-Index Deferred Name&amp;lt;/b&amp;gt; specifies an optional Ordered Index deferred update data set that can be a z/OS ddname, a z/VSE DLBL name, or a CMS FILEDEF name. If an ordered-index deferred name is specified, the file is opened in deferred update mode when the subsystem is started. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Subsystem Classes screen==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Define command and file privileges for each class of subsystem users on the Subsystem Classes screen. You access the [[RKWeb#System_Classes|RKWeb version of this screen]] by selecting &amp;lt;code&amp;gt;Manage &amp;gt; Subsystem Management &amp;gt; System Classes&amp;lt;/code&amp;gt;. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Each class of user requires a separate screen. User class privileges defined to the subsystem override settings for &amp;lt;var&amp;gt;OPENCTL&amp;lt;/var&amp;gt; and file privileges that reside in the password table.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Only the system manager can update the &amp;lt;b&amp;gt;Logon Privilege&amp;lt;/b&amp;gt;, &amp;lt;b&amp;gt;Record Security ID&amp;lt;/b&amp;gt;, and &amp;lt;b&amp;gt;Account&amp;lt;/b&amp;gt; fields.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;caption&amp;quot; style=&amp;quot;width:559px&amp;quot;&amp;gt;Subsystem Classes screen&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;figure&amp;quot;&amp;gt;[[File:Sm8-7SysClass.gif|559px]] &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Commands===&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;F2, F4, F5, and F9 each validate, save the input, and provide the next secondary screen selection.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Use a PF key to quit, save input, or move to a different screen.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;F6 displays current &amp;lt;var&amp;gt;PRIVDEF&amp;lt;/var&amp;gt; parameter settings and lists options, described in [[#&amp;lt;Security specifications|Security specifications]], below.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;F7 and F8 provide backward and forward scrolling when the list of files or groups exceeds one page. Input is validated before the screen scrolls.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;F10 returns to the previous subsystem class. Input is validated and saved before moving to a different class.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;F11 moves to the next subsystem class. Input is validated and saved before moving to a different class.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Pressing Enter validates the screen.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;You must issue the TOP, BOTTOM, and MAXIMUM commands on the command line. These commands have no corresponding PF keys:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;TOP&amp;lt;/code&amp;gt; scrolls to the first file in this class.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;BOTTOM&amp;lt;/code&amp;gt; scrolls to the last file in this class.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;MAXIMUM&amp;lt;/code&amp;gt; used with F7 or F8 is equivalent to &amp;lt;code&amp;gt;TOP&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;BOTTOM&amp;lt;/code&amp;gt;.&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;
===Subsystem name and class===&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;Subsystem Name&amp;lt;/b&amp;gt; specifies the name of the subsystem affected by the definitions entered on the screen.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;Subsystem Class&amp;lt;/b&amp;gt; is a system-assigned numeric identifier that specifies the user class being defined. As each new class is added, numeric identifiers are increased by an increment of 1.&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
In a semi-public subsystem, the first class is automatically assigned the class name &amp;lt;code&amp;gt;DEFAULT&amp;lt;/code&amp;gt;, which you can change.&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;
===Security specifications===&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;Command Privileges&amp;lt;/b&amp;gt; determines if the user class (SCLASS) can issue the subsystem commands &amp;lt;var&amp;gt;START&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;TEST&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;STOP&amp;lt;/var&amp;gt;, and &amp;lt;var&amp;gt;DEBUG&amp;lt;/var&amp;gt;. The command fields take &amp;lt;code&amp;gt;Y&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt;, and the default for all fields is &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt;.&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Debug&amp;lt;/b&amp;gt; specifies entering the subsystem in &amp;lt;var&amp;gt;DEBUG&amp;lt;/var&amp;gt; mode. &amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;Login Privilege&amp;lt;/b&amp;gt; (optional) specifies the user class login privileges for all, some, or none of the subsystem user classes.&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Any individual user login privilege held at entry to the subsystem or specified on the Operational Parameters screen is overridden. The original value is restored when the user exits the subsystem.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The privilege option is expressed as a hexadecimal value within the range of X&#039;00&#039; to X&#039;FF&#039;, as described in [[Establishing and maintaining security#PRIVDEF parameter settings|PRIVDEF parameter settings]]. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;NULL&amp;lt;/code&amp;gt; indicates default privileges from the Operational Parameters screen. &amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;Record Security ID&amp;lt;/b&amp;gt; (optional) overrides any individual user record security ID held on entry to the subsystem. You can enter a maximum of eight characters. &lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;NULL&amp;lt;/code&amp;gt; indicates the security activated on login.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The original value of the record security ID is restored when the user exits the subsystem. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;Account&amp;lt;/b&amp;gt; (optional) specifies an account associated with specific user classes. &amp;lt;b&amp;gt;Account&amp;lt;/b&amp;gt; can be specified for all, some, or none of the user classes. You can enter as many as ten characters.&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Any individual value of &amp;lt;b&amp;gt;Account&amp;lt;/b&amp;gt; held at entry to the subsystem or specified on the Operational Parameters screen is overridden. The original value is restored when the user exits the subsystem.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;NULL&amp;lt;/code&amp;gt; indicates the user&#039;s login account or the value from the Operational Parameters screen.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;File/Group&amp;lt;/b&amp;gt; specifies files or groups that can be accessed by the defined class of users.&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Define the set of files or groups belonging to the subsystem on the File Use screen and display them on this screen. &amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;Location&amp;lt;/b&amp;gt; (PQO only) refers to the node where a file is located. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;Prcldef&amp;lt;/b&amp;gt; specifies &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; procedure security. Values must be between 0 (default) and 255:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;0 specifies no procedure security.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;255 specifies the highest security. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;Privdef&amp;lt;/b&amp;gt; specifies file privileges. Values are hexadecimal 0 to X&#039;BFFF&#039; (default). &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;Sellvl&amp;lt;/b&amp;gt;, &amp;lt;b&amp;gt;Readvl&amp;lt;/b&amp;gt;, &amp;lt;b&amp;gt;Updtvl&amp;lt;/b&amp;gt;, and &amp;lt;b&amp;gt;Addvl&amp;lt;/b&amp;gt; specify values for field-level security parameters. Values must be between 0 (default) and 255:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;0 specifies all users can access field values.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;255 restricts access of field values to users having certain privileges.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;PR&amp;lt;/b&amp;gt; specifies the name of the procedure file or group for the subsystem.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==User Definitions screen==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
List user classes on the User Definitions (USErdef) screen for updating or browsing class definitions. You access the [[RKWeb#Operational|RKWeb version of this screen]] by selecting &amp;lt;code&amp;gt;Manage &amp;gt; Subsystem Management &amp;gt; Operational&amp;lt;/code&amp;gt;.  &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;caption&amp;quot; style=&amp;quot;width:562px&amp;quot;&amp;gt;User Definitions screen&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;figure&amp;quot;&amp;gt;[[File:Sm8-8UserDef.gif|562px]] &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Commands===&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;F2, F4, F5, and F6 display the next secondary screen.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;F7 and F8 allow scrolling backward and forward for listing next or previous subsystem classes.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Pressing Enter displays the Subsystem Class Users screen for the class selected.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;You must issue the TOP, BOTTOM, and MAXIMUM commands on the command line. These commands have no corresponding PF keys:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;TOP&amp;lt;/code&amp;gt; scrolls to the first class.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;BOTTOM&amp;lt;/code&amp;gt; scrolls to the last class.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;MAXIMUM&amp;lt;/code&amp;gt; used with F7 and F8, is equivalent to &amp;lt;code&amp;gt;TOP&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;BOTTOM&amp;lt;/code&amp;gt;, respectively.&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;
===Screen specifications===&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;Subsystem Name&amp;lt;/b&amp;gt; specifies the applicable subsystem.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;Subsystem Classes&amp;lt;/b&amp;gt; displays a listing, by class number and name, of the user classes defined on the Subsystem Classes screens.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;ENTER SUBSYSTEM CLASS NUMBER&amp;lt;/b&amp;gt; accepts the number of the Subsystem Class whose user list is to be browsed/updated.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Subsystem Class Users screen==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Define user accounts assigned to a specific class on the Subsystem Class Users screen. You access the [[RKWeb#classUsers|RKWeb version of this screen]] by selecting &amp;lt;code&amp;gt;Manage &amp;gt; Subsystem Management &amp;gt; Users&amp;lt;/code&amp;gt;. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
A user can belong to only one class within a subsystem. If using more than one subsystem, the user can belong to a different class (different privileges) in each subsystem.   &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;caption&amp;quot; style=&amp;quot;width:531px&amp;quot;&amp;gt;Subsystem Class Users screen&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;figure&amp;quot;&amp;gt;[[File:Sm8-9SysClassUser.gif|531px]] &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Duplicate account entries result in the display of the class in which the original name resides.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Users can be added to a class, deleted, or replaced by entering, deleting, or typing over the individual &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; user account identification after the&lt;br /&gt;
prompt (&amp;lt;tt&amp;gt;&amp;gt;&amp;lt;/tt&amp;gt;). &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Copy SCLASS option===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The &amp;lt;b&amp;gt;Copy from Sclass&amp;lt;/b&amp;gt; options allow you to copy user IDs from an SCLASS already defined in one subsystem to the current SCLASS being defined. This option is not available in the RKWeb interface.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====PF keys====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The SCLASS copy options are represented by four PF key functions on the Subsystem Class Users screen: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;F4 (&amp;lt;b&amp;gt;DELusers&amp;lt;/b&amp;gt;) deletes all users from a particular SCLASS selected from the User Definitions Screen. To execute this command, press F4. A warning message appears with the name of the SCLASS from which users are about to be deleted. Reenter the command if you are sure that you want to perform the Delete.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;F5 (&amp;lt;b&amp;gt;PREview&amp;lt;/b&amp;gt;) displays a list of all duplicate user IDs common to the copy-from SCLASS and any of the SCLASSes in the copy-to subsystem. The list is displayed on a separate screen, as shown in the [[#Sample Preview screen|Sample Preview screen]] section, below.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;F10 (&amp;lt;b&amp;gt;COPyusers&amp;lt;/b&amp;gt;) copies user IDs from the SCLASS specified in the copy-from field to the SCLASS selected from the User Definitions screen. This SCLASS is displayed on the current screen as a protected field.&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When duplicate user IDs exist in another SCLASS in the copy-to subsystem, a warning message indicates that duplicates have not been copied. As with F4, reenter the command to perform the copy.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;F11 (&amp;lt;b&amp;gt;CPReplace&amp;lt;/b&amp;gt;) copies user IDs as &amp;lt;b&amp;gt;COPyusers&amp;lt;/b&amp;gt; does, but replaces duplicate user IDs. When duplicates exist, a warning message indicates that duplicates are moved from existing SCLASSes. Reenter the command to perform the copy with replacement.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Other PF keys function as in other secondary screens.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Sample Preview screen===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The following screen is an example of the screen that appears when you execute the &amp;lt;b&amp;gt;PREview&amp;lt;/b&amp;gt; command (F5) on the Subsystem Class Users screen:&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;caption&amp;quot; style=&amp;quot;width:493px&amp;quot;&amp;gt;Preview Duplicate USERIDS screen&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;figure&amp;quot;&amp;gt;[[File:8-10Preview.gif|493px]] &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
This screen is purely informational. Press F3 to return to the Subsystem Class Users screen.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Subsystem Import/Export options==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The &amp;lt;b&amp;gt;Import&amp;lt;/b&amp;gt; and &amp;lt;b&amp;gt;Export&amp;lt;/b&amp;gt; functions allow an authorized user to migrate subsystem definitions from one &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; environment to another via the migration file D204SYS, a &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; file created during Dictionary installation.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The &amp;lt;b&amp;gt;Export Delete&amp;lt;/b&amp;gt; function deletes a specified subsystem from the D204SYS file. &amp;lt;b&amp;gt;EXPortlist&amp;lt;/b&amp;gt; displays the list of subsystems that currently reside in D204SYS for which the user has &amp;lt;var&amp;gt;ALL&amp;lt;/var&amp;gt; privileges (otherwise the user is not authorized to export them).&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The four Import/Export options are all accessible from the Activity screen, shown earlier in [[#SUBSYSMGMT Activity screen|SUBSYSMGMT Activity screen]]. &amp;lt;b&amp;gt;Import&amp;lt;/b&amp;gt;, &amp;lt;b&amp;gt;Export&amp;lt;/b&amp;gt;, and &amp;lt;b&amp;gt;Export Delete&amp;lt;/b&amp;gt; are options 7, 8, and 9, respectively. You can display an Exportlist by pressing F11, &amp;lt;b&amp;gt;Export&amp;lt;/b&amp;gt;.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Export===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The &amp;lt;b&amp;gt;Export&amp;lt;/b&amp;gt; option allows authorized users to export subsystem definitions to another &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; Dictionary. To export a subsystem definition:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Select option 8 from the Activity screen.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Specify the subsystem to be exported.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;To export SCLASS users, change the default value &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;Y&amp;lt;/code&amp;gt; on the &amp;lt;b&amp;gt;Export Users&amp;lt;/b&amp;gt; line.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Press Enter.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
A message appears at the bottom of the screen indicating whether the Export has been successful. If the subsystem has already been exported by another user, then you cannot export it until it is deleted from D204SYS (see [[#Export Delete|Export Delete]]). &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Import===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
To import subsystem definitions, you must enter SUBSYSMGMT in the Dictionary to which the definition is to be imported. If the subsystem already exists, you must delete or rename it before importing. To import a subsystem definition:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Select option 7 from the primary menu.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Specify the subsystem to be imported&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Press Enter.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
A message appears at the bottom of the screen indicating whether the Import was successful. After an Import, the subsystem definitions remain in D204SYS until they are deleted.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Export Delete===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
To delete a subsystem from D204SYS:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Select option 9 from the primary menu&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Specify the subsystem to be deleted from D204SYS&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Press Enter.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Exportlist===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
To display the subsystems in D204SYS for which you have ALL privileges, press F11. The list displayed shows the name of each subsystem, the date and time of export, and the exporting user ID. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Exportable data: scope and limitations===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The Import/Export functions export all information in METADATA and DATALINK except for STAGED entities and user-defined links to the subsystem.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
After an import, the LAST UPDATED field for a METADATA entry is changed to the date of import, and the UPDATED-BY field is changed to the importer&#039;s user ID. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
User SCLASSes can be imported (see [[#Export|Export]]); but administrative privileges cannot be imported.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Subsystem Administration screen==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The Subsystem Administration screen appears when the system manager selects option 10 (ADMIN) on the SUBSYSMGMT primary menu. This option is available only to a system manager.   &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;p class=&amp;quot;caption&amp;quot; style=&amp;quot;width:513px&amp;quot;&amp;gt;Subsystem Administration screen&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;figure&amp;quot;&amp;gt;[[File:Sm8-12Admin.gif|513px]] &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Select &amp;lt;b&amp;gt;Usage&amp;lt;/b&amp;gt; privileges by entering &amp;lt;code&amp;gt;U&amp;lt;/code&amp;gt; on the space provided (&amp;lt;code&amp;gt;U&amp;lt;/code&amp;gt; is the default). These privileges correspond exactly to the User Activity privileges in previous releases of &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt;. Selecting &amp;lt;code&amp;gt;U&amp;lt;/code&amp;gt; brings up the User Matrix screen described in [[#User Matrix screen|User Matrix screen]].&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Select Administrative privileges for a &amp;lt;b&amp;gt;User Account&amp;lt;/b&amp;gt; by entering &amp;lt;code&amp;gt;A&amp;lt;/code&amp;gt;. The four &amp;lt;b&amp;gt;Admin&amp;lt;/b&amp;gt; options are explained in the following section, [[#Admin options|Admin options]].&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When setting privileges for specific users, remember that access to SUBSYSMGMT must be authorized via the DICTADMIN facility, as it is for every &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; Dictionary subsystem. However, if the [[APSYSEC parameter]]=1, that authorization is not required for users who are system managers.  System managers are automatically authorized to use the SUBSYSMGMT and DICTADMIN facilities.&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Admin options===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The Subsystem Administration screen offers four options, described in the following sections.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====1. Define Privileges====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The &amp;lt;b&amp;gt;Define Privileges&amp;lt;/b&amp;gt; option lets the system manager grant administrative privileges to specific users for specific subsystems. Selecting this option brings up the [[#Administrative Privileges screen|Administrative Privileges screen]]. To execute &amp;lt;b&amp;gt;Define Privileges&amp;lt;/b&amp;gt;, enter &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; at the selection number prompt, specify the user ID to be assigned privileges in the &amp;lt;b&amp;gt;User Account&amp;lt;/b&amp;gt; field, and press Enter.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====2. Copy====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The &amp;lt;b&amp;gt;Copy&amp;lt;/b&amp;gt; option duplicates a user&#039;s administrative privileges to another user ID. To execute &amp;lt;b&amp;gt;Copy&amp;lt;/b&amp;gt;, enter &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt; at the selection number prompt, specify the user ID to be copied in the &amp;lt;b&amp;gt;User Account&amp;lt;/b&amp;gt; field, specify the name of the user ID to be copied to in the &amp;lt;b&amp;gt;Copy/Rename&amp;lt;/b&amp;gt; field, and press Enter. &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====3. Rename====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The &amp;lt;b&amp;gt;Rename&amp;lt;/b&amp;gt; option changes a user ID associated with a given set of administrative privileges. To execute &amp;lt;b&amp;gt;Rename&amp;lt;/b&amp;gt;, enter &amp;lt;code&amp;gt;3&amp;lt;/code&amp;gt; at the selection number prompt, specify the user ID to be renamed in the &amp;lt;b&amp;gt;User Account&amp;lt;/b&amp;gt; field, specify the new name in the &amp;lt;b&amp;gt;Copy/Rename&amp;lt;/b&amp;gt; field, and press Enter. &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====4. Delete====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The &amp;lt;b&amp;gt;Delete&amp;lt;/b&amp;gt; option takes away all administrative privileges associated with a specific user ID. To execute &amp;lt;b&amp;gt;Delete&amp;lt;/b&amp;gt;, enter &amp;lt;code&amp;gt;4&amp;lt;/code&amp;gt; at the selection number prompt, specify the user ID in the &amp;lt;b&amp;gt;User Account&amp;lt;/b&amp;gt; field, and press Enter.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Subsystem pattern field===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The &amp;lt;b&amp;gt;Subsystem pattern&amp;lt;/b&amp;gt; field applies to all options in both &amp;lt;b&amp;gt;Usage&amp;lt;/b&amp;gt; and &amp;lt;b&amp;gt;Admin&amp;lt;/b&amp;gt; modes. You can leave it blank, enter a single subsystem name, or enter a pattern: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;If you leave this field blank, the next screen displays all subsystems. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;If you select a pattern following the [[Record retrievals#Pattern matching|standard pattern specifications]],&lt;br /&gt;
the found set of subsystems are displayed on the next screen &amp;amp;mdash; the User Matrix screen, if in &amp;lt;b&amp;gt;Usage&amp;lt;/b&amp;gt; mode; the Administrative Privileges screen, if in &amp;lt;b&amp;gt;Admin&amp;lt;/b&amp;gt; mode.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Administrative Privileges screen==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The &amp;lt;b&amp;gt;Define Privileges&amp;lt;/b&amp;gt; option selected in &amp;lt;b&amp;gt;Admin&amp;lt;/b&amp;gt; mode displays the Administrative Privileges screen. To create or delete privileges, type or space over &amp;lt;code&amp;gt;X&amp;lt;/code&amp;gt;s in the appropriate spaces. &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;
Take care when granting &amp;lt;b&amp;gt;All&amp;lt;/b&amp;gt; and &amp;lt;b&amp;gt;Modify&amp;lt;/b&amp;gt; privileges. A user with these privileges can update subsystem file use data.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;p class=&amp;quot;caption&amp;quot; style=&amp;quot;width:535px&amp;quot;&amp;gt;Administrative Privileges screen&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;figure&amp;quot;&amp;gt;[[File:Sm8-13AdminPriv.gif|535px]] &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Hierarchy of privileges===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The &amp;lt;b&amp;gt;ALL SUBSYS&amp;lt;/b&amp;gt; row on this screen grants the account the selected privileges for all subsystems: &amp;lt;b&amp;gt;All&amp;lt;/b&amp;gt;, &amp;lt;b&amp;gt;Modify&amp;lt;/b&amp;gt;, &amp;lt;b&amp;gt;Browse&amp;lt;/b&amp;gt;, &amp;lt;b&amp;gt;Udef&amp;lt;/b&amp;gt;.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If both &amp;lt;b&amp;gt;ALL SUBSYS&amp;lt;/b&amp;gt; and specific subsystem privileges are granted, the higher privilege takes precedence. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
For Import, Add, and Copy privileges, a user must also be a member of the ADDPRIV SCLASS, described in [[#ADDPRIV SCLASS and Add Privileges|ADDPRIV SCLASS and Add Privileges]].&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===PF keys===&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;F1 (&amp;lt;b&amp;gt;HELp&amp;lt;/b&amp;gt;) displays Help text for the screen.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;F2 (&amp;lt;b&amp;gt;TOP&amp;lt;/b&amp;gt;) scrolls to the top of the display.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;F3 (&amp;lt;b&amp;gt;QUIt&amp;lt;/b&amp;gt;) returns the user to the Admin Screen without saving changes. Before exiting, warning messages are displayed indicating that changes have not been saved.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;F5 (&amp;lt;b&amp;gt;LOCate&amp;lt;/b&amp;gt;) locates a specified subsystem on the display list. Specify the name on the command line before pressing F5. If the subsystem name is found, it is highlighted and displayed at the top of the list. If it is not found, the display is unchanged.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;F7 (&amp;lt;b&amp;gt;BACkward&amp;lt;/b&amp;gt;) scrolls backward through the list of subsystems specified. A maximum of ten subsystems are displayed on the screen at once. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;F8 (&amp;lt;b&amp;gt;FORward&amp;lt;/b&amp;gt;) scrolls forward through the list of subsystems specified. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;F12 (&amp;lt;b&amp;gt;END&amp;lt;/b&amp;gt;) saves all screen changes and returns the user to the Admin Screen.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;The Enter key has no effect on this screen.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===ADDPRIV SCLASS and Add Privileges===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
To give a user Add, Copy, or Import privileges, the system manager must add the appropriate user ID to a new SCLASS called ADDPRIV. Do this as shown in [[#User Matrix screen|User Matrix screen]], or in [[#User Definitions screen|User Definitions screen]].&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Summary of subsystem privileges==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The &amp;quot;Summary of subsystem privileges&amp;quot; table shows how the system of assigned privileges relates to the ten functions displayed on the [[#SUBSYSMGMT Activity screen|Subsystem Management Facility screen]]. The columns are privileges granted, including general system manager privileges. The rows are SUBSYSMGMT functions. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;caption&amp;gt;Summary of subsystem privileges&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;Option&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th colspan=&amp;quot;6&amp;quot;&amp;gt;                                    Assigned privilege&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;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;b&amp;gt;ALL&amp;lt;/b&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;b&amp;gt;Modify&amp;lt;/b&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;b&amp;gt;Browse&amp;lt;/b&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;b&amp;gt;Udef&amp;lt;/b&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;b&amp;gt;ADDPRIV member&amp;lt;/b&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;b&amp;gt;System manager&amp;lt;/b&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;&lt;br /&gt;
&amp;lt;b&amp;gt;Add&amp;lt;/b&amp;gt;&lt;br /&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;td&amp;gt;&amp;amp;nbsp;&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;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;X&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;X&amp;lt;/td&amp;gt;&lt;br /&gt;
&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;b&amp;gt;Modify&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;X&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;X&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;X&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;X&amp;lt;/td&amp;gt;&lt;br /&gt;
&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;b&amp;gt;Browse&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;X&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;X&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;X&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;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;X&amp;lt;/td&amp;gt;&lt;br /&gt;
&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;b&amp;gt;Copy&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;X&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;&amp;amp;nbsp;&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;X&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;X&amp;lt;/td&amp;gt;&lt;br /&gt;
&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;b&amp;gt;Rename&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;X&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;&amp;amp;nbsp;&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;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;X&amp;lt;/td&amp;gt;&lt;br /&gt;
&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;b&amp;gt;Delete&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;X&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;&amp;amp;nbsp;&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;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;X&amp;lt;/td&amp;gt;&lt;br /&gt;
&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;b&amp;gt;Import&amp;lt;/b&amp;gt;&lt;br /&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;td&amp;gt;&amp;amp;nbsp;&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;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;X&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;X&amp;lt;/td&amp;gt;&lt;br /&gt;
&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;b&amp;gt;Export&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;X&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;&amp;amp;nbsp;&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;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;X&amp;lt;/td&amp;gt;&lt;br /&gt;
&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;b&amp;gt;Export Delete&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;X&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;&amp;amp;nbsp;&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;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;X&amp;lt;/td&amp;gt;&lt;br /&gt;
&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;b&amp;gt;Admin&amp;lt;/b&amp;gt;&lt;br /&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;td&amp;gt;&amp;amp;nbsp;&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;&amp;amp;nbsp;&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;X&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; Copy privileges require both ALL and ADDPRIV SCLASS membership. A user assigned Udef privileges can update only the Userdef screens.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==User Matrix screen==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
To change a single account in any class of a subsystem, use the User Matrix screen. Access the User Matrix screen by selecting the &amp;lt;b&amp;gt;ADMIN&amp;lt;/b&amp;gt; option (number 10) on the Activity screen, then selection 1 under the &amp;lt;b&amp;gt;Usage&amp;lt;/b&amp;gt; options.   &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;caption&amp;quot; style=&amp;quot;width:533px&amp;quot;&amp;gt;User Matrix screen&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;figure&amp;quot;&amp;gt;[[File:Sm8-14Matrix.gif|533px]] &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Commands===&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;F7 and F8 provide scrolling to and from the first to last Subsystem Class Users screen when more than one screen is required.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;F10 and F11 provide scrolling to the left and to the right to locate all subsystem classes for the subsystem shown in the leftmost column. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Specifications===&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;Subsystem Name&amp;lt;/b&amp;gt; specifies the subsystem in which the user account is defined.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;Account Exists In&amp;lt;/b&amp;gt; specifies the class in which the account is defined.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;Subsystem Classes&amp;lt;/b&amp;gt; commands are entered in a one-character input field that precedes each class displayed:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;A&amp;lt;/code&amp;gt; adds the current account to the class in the subsystem shown.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;C&amp;lt;/code&amp;gt; changes the class in the subsystem to which the current account belongs from the &amp;lt;b&amp;gt;Account Exists In&amp;lt;/b&amp;gt; or default class to the class at the right of the command.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;D&amp;lt;/code&amp;gt; deletes the current account from the class in the subsystem shown. Note that this is one way to change an account&#039;s class from a non-default to the default class in a semi-public subsystem. &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;
==Dynamic APSY support==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
An application subsystem (APSY) is comprised of &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; procedures executed in a logical order. You define the operation of the application using the &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; Subsystem Management facility (SUBSYSMGMT). The &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; procedures determine the contents of the application. You can dynamically modify the following aspects of an APSY, without terminating the APSY and without interrupting service to your users:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;A subset of application subsystem attributes.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Precompiled and non-precompiled procedures in files that participate in procedure locking while the subsystem is active. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can also save compiled procedures that contain commands by saving the commands before and after the BEGIN/END. The commands are saved on a chain of CCATEMP pages in the form of a temporary procedure. The temporary procedure contains pointers to these pages. These temporary procedures are not the user-accessible temporary procedures (0, -1, and so on) and do not interfere with their operation.&lt;br /&gt;
 &lt;br /&gt;
===Changing APSY subsystem attributes===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Subsystem attribute modifications are saved to the permanent subsystem definition in the CCASYS file as well as to the active in-core subsystem definition without interrupting service to the subsystem user.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Updating an active subsystem via SUBSYSMGMT====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The SUBSYSMGMT subsystem maintains all subsystem definitions. You can modify various attributes of a subsystem through a variety of screens provided by SUBSYSMGMT. Once you are satisfied with the modifications that are made, press F12 to end the updates and to save the definition to disk. &lt;br /&gt;
SUBSYSMGMT checks to see if the subsystem is currently active:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;If the subsystem is not active, you return to Subsystem Management Facility screen. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;If the subsystem is active, the following Active Subsystem Update screen is displayed:&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;SUBSYSMGMT                  Active Subsystem Update  &lt;br /&gt;
 &lt;br /&gt;
                            Subsystem: MCC1&lt;br /&gt;
 &lt;br /&gt;
                            is currently active.  &lt;br /&gt;
 &lt;br /&gt;
          Would you like to update the active subsystem definition?&lt;br /&gt;
 &lt;br /&gt;
          PF3 to QUIT/Not update the active subsystem definition &lt;br /&gt;
          PF12 to END/Update the active subsystem definition &lt;br /&gt;
 &lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;===&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
1=HELp       2=           3=QUIt       4=           5=            6=&lt;br /&gt;
7=           8=           9=          10=          11=           12=END&lt;br /&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;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
At this point, the permanent definition in the CCASYS file has been updated. Your response to this screen determines whether the subsystem will be dynamically updated.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;To update the active subsystem definition, press F12. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;To keep the active in-core definition unchanged, press F3. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Only the F1 (&amp;lt;b&amp;gt;HELp&amp;lt;/b&amp;gt;), F3 (&amp;lt;b&amp;gt;QUIt&amp;lt;/b&amp;gt;), and F12 (&amp;lt;b&amp;gt;END&amp;lt;/b&amp;gt;) function keys are active at this time. &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Using Active Subsystem Help====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If you press F1 while in the Active Subsystem Update screen, the following Active Subsystem Help screen is displayed:  &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;table&amp;gt; &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;SUBSYSMGMT              Active Subsystem Help&lt;br /&gt;
 &lt;br /&gt;
 Use this screen to update the active subsystem definition. If the subsystem&lt;br /&gt;
 has been started and is currently active then the user has the option of&lt;br /&gt;
 refreshing the subsystem definition that is currently running. Only the&lt;br /&gt;
 following fields are supported for active update at this time:&lt;br /&gt;
   . Log user into M204&lt;br /&gt;
   . Log user out of M204&lt;br /&gt;
   . Auto Commit&lt;br /&gt;
   . Maximum Iterations&lt;br /&gt;
   . Account&lt;br /&gt;
   . Disconnect&lt;br /&gt;
   . Informational&lt;br /&gt;
   . Error&lt;br /&gt;
   . Login Procedure&lt;br /&gt;
   . Error Procedure&lt;br /&gt;
 In order to update APSY fields that are not supported for active update,&lt;br /&gt;
 the user must stop and restart the subsystem.&lt;br /&gt;
 Use the PF key below to move to the next screen:&lt;br /&gt;
 PF 3 = QUIT      Does NOT UPDATE active subsystem definition.&lt;br /&gt;
                  Returns to Subsystem Management primary screen.&lt;br /&gt;
 PF12 = END       Updates active subsystem definition.&lt;br /&gt;
                  Returns to Subsystem Management primary screen.&lt;br /&gt;
&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;
====Leaving the active subsystem unchanged====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If you press F3 or enter &amp;lt;code&amp;gt;QUIT&amp;lt;/code&amp;gt; in the Active Subsystem Update screen, you leave the active subsystem unchanged and return to the Subsystem Management Facility screen. The changes you made go into effect the next time the subsystem is started&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Updating the active subsystem====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Press F12 or enter &amp;lt;code&amp;gt;END&amp;lt;/code&amp;gt; to update the active subsystem definition. The changes to the dynamic attributes go into effect immediately. Non-dynamic changes do not take effect until the next time the subsystem is started. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;If the update is successful, you are returned to SUBSYSMGMT main menu screen without any confirmation messages displayed.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;If the update is unsuccessful, one of the following messages is displayed on the main menu screen: &lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;SUM014 Unable to update active definition for subsystem: name &lt;br /&gt;
SUM015 Unable to update active definition, name is no longer active&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;
====Understanding the Dictionary/204 data definition errors====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;SUM014&amp;lt;/code&amp;gt; is displayed if an error occurs while attempting to update the active definition. The reason for the error can be found on the audit trail with one of the following errors: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;M204.1457 UNABLE TO SCAN LIST OF SUBSYSTEM names&lt;br /&gt;
 &lt;br /&gt;
M204.1685 SUBSYSTEM name DOES NOT EXIST&lt;br /&gt;
 &lt;br /&gt;
M204.2253 SUBSYSTEM name, record type - RECORD CONTAINS INVALID DATA&lt;br /&gt;
 &lt;br /&gt;
M204.2391 SUBSYSTEM name, record type - TRANSLATION FAILED FOR FIELD fieldname&lt;br /&gt;
 &lt;br /&gt;
M204.2395 SUBSYSTEM name, record type - RECORD MISSING&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;SUM015&amp;lt;/code&amp;gt; is displayed if the subsystem is stopped while attempting to update the active definition. The following error message is generated on the audit trail:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;M204.2647 UNABLE TO UPDATE ACTIVE DEFINITION, &amp;lt;name&amp;gt; IS NO LONGER ACTIVE.&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Limits to dynamic subsystem attribute changes====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The following table lists the subsystem attributes that you can change. You can make changes on the Operational Parameters screen in SUBSYSMGMT: &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;Operational Parameters you can change&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;Operational 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;th&amp;gt;Log user into M204 &amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;The user is logged into &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; with the subsystem name as the USERID&amp;lt;/td&amp;gt;&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;Log user out of M204 &amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;The user is logged out upon leaving subsystem &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Auto Commit &amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; A User Language COMMIT/RELEASE statement is run at the end of each procedure&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Maximum Iterations &amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Maximum number of consecutive times you can invoke the same procedure before the ERROR procedure is 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;th&amp;gt;Account &amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;The account value other than the one used at logon&amp;lt;/td&amp;gt;&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;Disconnect &amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Whether to display a system disconnect 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;Informational &amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Whether to display &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; informational 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;th&amp;gt;Error &amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Whether to display &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; error 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;
You can change the following on the Procedure Specifications screen in SUBSYSMGMT:&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;Procedure &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;th&amp;gt;Login &amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;First procedure that is invoked for every 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;th&amp;gt;Error &amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Procedure that is invoked if an error occurs when a subsystem is running&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 you dynamically change the name of the Login procedure or the Error procedure, the new name must be defined in the in-core procedure dictionary. You cannot add new procedures to a subsystem procedure file that participates in procedure locking once the subsystem has been started and have those procedures included by the subsystem. Therefore, if you change the name of the login or error procedure that resides in a file that participated in procedure locking, then that procedure must have existed when the subsystem was started. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Dynamically refreshing procedure compilation with the REFRESH SUBSYSPROC command===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The &amp;lt;var&amp;gt;[[REFRESH SUBSYSPROC command|REFRESH SUBSYSPROC]]&amp;lt;/var&amp;gt; command discards the existing precompilation and precompiles the first time through for each SYSCLASS. Once a procedure is refreshed, the subsystem includes the new version of the procedure the next time that procedure is invoked.&lt;br /&gt;
The newer version of the procedure is compiled and saved in CCATEMP for subsequent execution. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The &amp;lt;var&amp;gt;REFRESH SUBSYSPROC&amp;lt;/var&amp;gt; command optionally copies a procedure from an open file (or group) into another open subsystem file (or group) and updates the APSY in-core procedure dictionary with the new procedure text page. In group context, the &amp;lt;var&amp;gt;REFRESH SUBSYSPROC&amp;lt;/var&amp;gt; command replaces and refreshes only procedures that participate in procedure locking, based on the &amp;lt;var&amp;gt;NUMLK&amp;lt;/var&amp;gt; parameter. &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Generating success messages====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Successful execution of the &amp;lt;var&amp;gt;REFRESH SUBSYSPROC&amp;lt;/var&amp;gt; command generates the following confirmation messages:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;M204.2665 procname REFRESHED IN SUBSYSTEM &amp;lt;i&amp;gt;subsystem-name&amp;lt;/i&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If a &amp;lt;var&amp;gt;FROM&amp;lt;/var&amp;gt; clause is specified, the following message is produced:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;M204.2666 &amp;lt;i&amp;gt;procname&amp;lt;/i&amp;gt; REPLACED IN FILE &amp;lt;i&amp;gt;filename&amp;lt;/i&amp;gt; [IN GROUP &amp;lt;i&amp;gt;groupname&amp;lt;/i&amp;gt;]&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Generating error messages====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The &amp;lt;var&amp;gt;REFRESH SUBSYSPROC&amp;lt;/var&amp;gt; command may fail under the following circumstances:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;If you do not have Refresh privileges to issue the command, the command fails, the procedure is not refreshed, and the following message is generated:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;M204.0930 REQUIRES SUBSYSTEM COMMAND PRIVILEGE&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 the procedure is not defined in an active subsystem, the command fails, the procedure is not refreshed, and the following message is generated:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;M204.2668: &amp;lt;i&amp;gt;procname&amp;lt;/i&amp;gt; NOT FOUND IN ANY ACTIVE SUBSYSTEM&lt;br /&gt;
&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;If a procedure is not found in the file named in the &amp;lt;var&amp;gt;FROM&amp;lt;/var&amp;gt; clause, or if the user does not have appropriate file privileges to copy procedures, the following message is generated:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;M204.1158: CAN&#039;T COPY PROCEDURE: &amp;lt;i&amp;gt;procname&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;If the subsystem file (or group) is out of space to copy the procedure, the command fails, the procedure is not refreshed, and the following message is generated:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;M204.1483: NOT ENOUGH TABLED SPACE TO STORE PROCEDURE&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 another user is processing the procedure, the following message is generated:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;M204.2669: PROCEDURE &amp;lt;i&amp;gt;procname&amp;lt;/i&amp;gt; IS IN USE BY SUBSYSTEM &amp;lt;i&amp;gt;subsys-name&amp;lt;/i&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;
====Understanding REFRESH SUBSYSPROC command privileges====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Privileges to issue the &amp;lt;var&amp;gt;REFRESH SUBSYSPROC&amp;lt;/var&amp;gt; command are set on the SUBSYSMGMT [[#Subsystem Classes screen|Subsystem Classes screen]] using the &amp;lt;b&amp;gt;Refresh&amp;lt;/b&amp;gt; field on the &amp;lt;b&amp;gt;Command Privileges&amp;lt;/b&amp;gt; line. The input to this field is either &amp;lt;code&amp;gt;Y&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt;, where &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; is the default. To issue the &amp;lt;var&amp;gt;REFRESH SUBSYSPROC&amp;lt;/var&amp;gt; command, set the &amp;lt;b&amp;gt;Refresh&amp;lt;/b&amp;gt; value to &amp;lt;code&amp;gt;Y&amp;lt;/code&amp;gt;.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Subsystem processing====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When you refresh an active subsystem procedure, the following occurs:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Precompiled procedures are recompiled for each SCLASS.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;While a procedure is being refreshed, the procedure is locked. While a procedure is locked, other users cannot access it. The length of time that the procedure is stopped is as short as possible. &lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
However, if a subsystem attempts to include a procedure that is in the process of being refreshed, the APSY tries to invoke the procedure a few times before giving up. If the APSY fails to invoke the procedure, then the subsystem error procedure is invoked with the error global set to &amp;lt;code&amp;gt;RFR&amp;lt;/code&amp;gt;. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You must write an error procedure instructing your subsystem how to respond to various errors.&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;
====Handling a blocked refresh for a subsystem procedure====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If an APSY subsystem procedure with the subsystem precompile prefix is compiled, and the procedure is found in an unlocked subsystem procedure file, the following message is generated:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;M204.0468: COMPILATION NOT SAVED - INCLUDE FROM UNLOCKED FILE&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Using the SUSPEND SUBSYSTEM command====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Rocket Software recommends that you issue the &amp;lt;var&amp;gt;[[SUSPEND SUBSYSTEM command|SUSPEND SUBSYSTEM]]&amp;lt;/var&amp;gt; command and wait for the active users to exit. If you do not wait, you could have the following problem. The subsystem, which has logically related procedures, is suspended and a user invokes a procedure whose higher-level or lower-level procedure has not been updated and refreshed yet.&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Privileges to issue the &amp;lt;var&amp;gt;SUSPEND SUBSYSTEM&amp;lt;/var&amp;gt; command are set in the SUBSYSMGMT &amp;quot;Subsystem Classes&amp;quot; screen: &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 you issue a SUSPEND SUBSYSTEM command when... &amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;The subsystem is set 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;No active users are in the application subsystem &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Suspended 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;Active users are in the subsystem &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Suspending state. Current, active users continue to use the subsystem, but new users cannot enter it. After all users exit the subsystem, it is set to the Suspended state.&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;
====Monitoring the subsystem====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can issue a &amp;lt;var&amp;gt;MONITOR SUBSYSTEM&amp;lt;/var&amp;gt; command to check the status &amp;amp;mdash; such as Drain or Suspend &amp;amp;mdash; of the subsystem, as well as the number of users still running. Once a subsystem is fully suspended and the number of users is zero (0), you can safely refresh a set of logical procedures.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If you suspend a subsystem that still has active users, the &amp;lt;var&amp;gt;STATUS&amp;lt;/var&amp;gt; option from the &amp;lt;var&amp;gt;MONITOR SUBSYSTEM&amp;lt;/var&amp;gt; command is set to &amp;lt;var&amp;gt;SUSPENDING&amp;lt;/var&amp;gt;. When a subsystem is fully suspended with no active users, the &amp;lt;var&amp;gt;STATUS&amp;lt;/var&amp;gt; option from the &amp;lt;var&amp;gt;MONITOR SUBSYSTEM&amp;lt;/var&amp;gt; command is set to &amp;lt;var&amp;gt;SUSPENDED&amp;lt;/var&amp;gt;. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If the subsystem is in the process of suspending, the following message is generated:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;M204.2659 &amp;lt;i&amp;gt;subsys-name&amp;lt;/i&amp;gt; SET TO SUSPEND, REMAINING USERS=&amp;lt;i&amp;gt;n&amp;lt;/i&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====SUSPEND SUBSYSTEM command messages====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The &amp;lt;var&amp;gt;SUSPEND SUBSYSTEM&amp;lt;/var&amp;gt; command may produce the following messages:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;When a subsystem is successfully suspended, the following message is generated:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;M204.2661 SUBSYSTEM &amp;lt;i&amp;gt;subsys-name&amp;lt;/i&amp;gt; SUSPENDED&lt;br /&gt;
&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;When there are still active users in the subsystem, the following message is generated:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;M204.2659 &amp;lt;i&amp;gt;subsys-name&amp;lt;/i&amp;gt; SET TO SUSPEND, REMAINING USERS = &amp;lt;n&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;If you issue the &amp;lt;var&amp;gt;SUSPEND SUBSYSTEM&amp;lt;/var&amp;gt; command without Subsystem Suspend privileges defined for your SCLASS, the following message is generated:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;M204.0930 REQUIRES SUBSYSTEM COMMAND PRIVILEGE&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;SUSPEND SUBSYSTEM&amp;lt;/var&amp;gt; command is valid against only an active subsystem. If the subsystem has not been started, the following message is generated:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;M204.1126 SUBSYSTEM &amp;lt;i&amp;gt;name&amp;lt;/i&amp;gt; MUST BE STARTED&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 the subsystem is in &amp;lt;var&amp;gt;TEST&amp;lt;/var&amp;gt; mode, it is locked from other users, so the following message is generated:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;M204.0448 SUBSYSTEM TEST IN PROGRESS, COMMAND REJECTED&lt;br /&gt;
&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;If a subsystem is in the process of starting, but not yet fully active, the following message is generated:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;M204.2311 SUBSYSTEM &amp;lt;i&amp;gt;subsys-name&amp;lt;/i&amp;gt; IS BEING STARTED&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 the subsystem was set to Stop and is waiting for all active users to quit, the following message is generated:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;M204.0446 SUBSYSTEM &amp;lt;i&amp;gt;subsys-name&amp;lt;/i&amp;gt; IS TEMPORARILY DISABLED&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 the subsystem requires users to log into &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; and you are not logged in, the following message is generated:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;M204.1031 PLEASE LOGIN&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 an error prevents the subsystem from being suspended, the following message is generated. The preceding message states the cause of the error.&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;M204.2656 UNABLE TO SUSPEND SUBSYSTEM &amp;lt;i&amp;gt;subsys-name&amp;lt;/i&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;div id=&amp;quot;resume subsystem&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
====Using the RESUME SUBSYSTEM command====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When you have completed refreshing a suspended subsystem, you can reactivate it with a &amp;lt;var&amp;gt;[[RESUME SUBSYSTEM command|RESUME SUBSYSTEM]]&amp;lt;/var&amp;gt; command.&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Privileges to issue the &amp;lt;var&amp;gt;RESUME SUBSYSTEM&amp;lt;/var&amp;gt; command are set in the SUBSYSMGMT &amp;quot;Subsystem Classes&amp;quot; screen.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The &amp;lt;var&amp;gt;RESUME SUBSYSTEM&amp;lt;/var&amp;gt; command may generate the following messages:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;When a subsystem successfully resumes, the following message is generated:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;M204.2657 SUBSYSTEM &amp;lt;i&amp;gt;subsys-name&amp;lt;/i&amp;gt; RESUMED&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 issue the &amp;lt;var&amp;gt;RESUME SUBSYSTEM&amp;lt;/var&amp;gt; command without Subsystem Resume privileges defined for your SCLASS, the following message is generated:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;M204.0930 REQUIRES SUBSYSTEM COMMAND PRIVILEGE&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;RESUME SUBSYSTEM&amp;lt;/var&amp;gt; command is valid against only a suspended subsystem. If the subsystem was not suspended, the following message is generated:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;M204.2658 SUBSYSTEM &amp;lt;i&amp;gt;subsys-name&amp;lt;/i&amp;gt; NOT IN SUSPEND STATE&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;RESUME SUBSYSTEM&amp;lt;/var&amp;gt; command is valid against only a suspended subsystem. If the subsystem has not been started, the following message is generated:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;M204.1126 SUBSYSTEM &amp;lt;i&amp;gt;subsys-name&amp;lt;/i&amp;gt; MUST BE STARTED&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 the subsystem is in Test mode, it is inactive for other users, so the following message is generated:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;M204.0448 SUBSYSTEM TEST IN PROGRESS, COMMAND REJECTED&lt;br /&gt;
&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;If a subsystem is in the process of starting, but not yet fully active, the following message is generated:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;M204.2311 SUBSYSTEM &amp;lt;i&amp;gt;subsys-name&amp;lt;/i&amp;gt; IS BEING STARTED&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 the subsystem was set to stop and is waiting for active users to quit, the following message is generated:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;M204.0446 SUBSYSTEM &amp;lt;i&amp;gt;subsys-name&amp;lt;/i&amp;gt; TEMPORARILY DISABLED&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 the subsystem requires users to be logged in to &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; and you are not logged in, the following message is generated:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;M204.1031 PLEASE LOGIN&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 an error prevents the subsystem from resuming processing, the following message is generated. The previous message states the cause of the error.&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;M204.2655 UNABLE TO RESUME SUBSYSTEM &amp;lt;i&amp;gt;subsys-name&amp;lt;/i&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;
===Using precompilable procedures with commands===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If you want to conditionally compile and save a SOUL request through the use of dummy string comments, then you must ensure that the value of the dummy string is the same for all SOUL statements for that request. Otherwise, unpredictable results occur. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
In addition, the loading user will invoke the request that was conditionally compiled by the compiling user. This behavior is simply noted as a reminder.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If a precompiled procedure issues the &amp;lt;var&amp;gt;INCLUDE&amp;lt;/var&amp;gt; command to compile and run a SOUL request, the &amp;lt;var&amp;gt;INCLUDE&amp;lt;/var&amp;gt; command is saved, not the compilation of the request that was included.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Dummy string substitution does not take place when saving commands that contain dummy strings. Instead, when the saved commands are loaded and executed, the current value of the dummy string is used. For example, if you include the following command in a precompiled procedure, whatever is currently in the global &amp;lt;code&amp;gt;COMMAND&amp;lt;/code&amp;gt; is executed.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;?&amp;amp;amp;COMMAND&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Procedures that include multiple &amp;lt;var&amp;gt;BEGIN&amp;lt;/var&amp;gt;/&amp;lt;var&amp;gt;END&amp;lt;/var&amp;gt; blocks are not eligible for precompilation.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Handling subsystem error procedures===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If a subsystem error procedure is cancelled due to attempted terminal I/O, and the return code is one of the following &amp;amp;mdash; &amp;lt;code&amp;gt;CAN&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;HNG&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;HRD&amp;lt;/code&amp;gt;, or &amp;lt;code&amp;gt;SFT&amp;lt;/code&amp;gt; &amp;amp;mdash; the error procedure cannot attempt to issue any of the following SOUL statements:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;PRINT&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;READ&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;READ MENU&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;SCREEN&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;SKIP&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;$$ prompts&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;$Read&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Or any other statement that writes to the user&#039;s terminal&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
All other SOUL statements are permitted.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt; &amp;lt;!-- end of toclimit 3 div --&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>JDamon</name></author>
	</entry>
	<entry>
		<id>https://m204wiki.rocketsoftware.com/index.php?title=Dictionary/204_administration&amp;diff=120589</id>
		<title>Dictionary/204 administration</title>
		<link rel="alternate" type="text/html" href="https://m204wiki.rocketsoftware.com/index.php?title=Dictionary/204_administration&amp;diff=120589"/>
		<updated>2025-06-06T17:37:28Z</updated>

		<summary type="html">&lt;p&gt;JDamon: /* Defining the role */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Overview of the administrator role==&lt;br /&gt;
===Defining the role===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Any system manager is authorized (if the [[APSYSEC parameter]]=1) to start and use the Dictionary Administration facility (DICTADMIN) and the Subsystem Management facility (SUBSYSMGMT).  Any system manager then has complete control over subsystem definitions and can authorize other users (non-system managers) to use those subsystems. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The system manager must also define the administrator in the ADMIN class for each subsystem by using the Subsystem Management facility. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The Subsystem Management facility is described in [[System requirements for Application Subsystems#Overview of the Subsystem Management facility|Overview of the Subsystem Management facility]]. &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Areas of responsibility===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The responsibilities of the dictionary administrator cover six main areas:   &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[[Dictionary/204 administration#Starting and stopping the Dictionary/204 subsystems|Starting, stopping, and testing the DICTIONARY subsystems]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Maintaining Dictionary/204 files (such as backing up, restoring, and reorganizing dictionary files)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Maintaining dictionary structure through [[#Entity type maintenance|entity type maintenance]] (such as defining, deleting, and updating new entity types)&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Maintaining [[#Facility Administration|Dictionary/204 facilities]] (for example, setting parameters and defaults)&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Several of the facilities that are part of the Dictionary/204 environment can be modified to suit the needs of your installation. Specifically, you can alter default and control parameters for File Management and Dictionary Reports.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Maintaining Dictionary/204 [[#Security Administration|security]] (defining Dictionary/204 users and their privileges). See also [[Dictionary/204 logon and commands#Security considerations|Security considerations]].&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The administrator controls access to the Dictionary/204 and Documentation facilities through the ACCOUNT entry in the dictionary.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Populating the Dictionary (with the DDGEN and DDGENSET utilities) to define and synchronize existing Model 204 files in the dictionary&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The Dictionary Administrator normally runs the DDGEN and DDGENSET utilities. &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[[#Creating or updating Dictionary entries with DDGEN|DDGEN]] (a subsystem) creates dictionary entries for existing Model 204 files.&amp;lt;/li&amp;gt; &lt;br /&gt;
&amp;lt;li&amp;gt;[[#DDGENSET utility|DDGENSET]] creates JCL (OS/DOS) and FILEDEFs (CMS) and the CCAIN input data stream for DDGEN.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
The administrator can also create customized reports with the Dictionary Reports facility.&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;
==Installing Dictionary/204==&lt;br /&gt;
&amp;lt;p&amp;gt;For information about installing Dictionary/204, see the [[Dictionary/204 installation guide]]. &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Starting and stopping the Dictionary/204 subsystems==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Administrators of Dictionary/204 start the subsystem as follows:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Log in to the Model 204 system by using the &amp;lt;var&amp;gt;[[LOGIN or LOGON command|LOGIN or LOGON]]&amp;lt;/var&amp;gt; command as the Dictionary/204 administrator, and by using the account name defined by your system manager. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;To start Dictionary/204, enter:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;START SUBSYSTEM DICTIONARY &amp;lt;/p&amp;gt;&lt;br /&gt;
For more information, see [[START command: Starting an application subsystem]]. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;To use Dictionary/204, enter:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;DICTIONARY &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;This command invokes the Dictionary/204 subsystem after it has been started.&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; Starting Dictionary/204 starts only the Dictionary/204 main menu. It does not automatically start the individual subsystems (or facilities) that make up the Dictionary/204 product. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You must start each subsystem independently, using the word &amp;lt;var&amp;gt;SUBSYSTEM&amp;lt;/var&amp;gt; and the facility name as the arguments of the &amp;lt;var&amp;gt;START&amp;lt;/var&amp;gt; command. If you are accessing Dictionary/204 facilities from the [[RKWeb]] interface, all the subsystem starting commands are probably already issued as part of the [[RKTools installation#Janus Web rules for RKWeb|recommended set up for RKWeb]]. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The facility names are:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;tr class=&amp;quot;head&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Facility&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Facility Name&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;Dictionary Administration&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;DICTADMIN&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Dictionary Reports&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;DICTREPORT&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Documentation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;DOCUMENT&amp;lt;/td&amp;gt;&lt;br /&gt;
&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 Management&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;FILEMGMT&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Subsystem Management&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;SUBSYSMGMT&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;User Language Cross-Reference&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;XREF&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 start all the subsystems along with starting Dictionary/204 by adding the &amp;lt;var&amp;gt;START SUBSYSTEM&amp;lt;/var&amp;gt; commands to the CCAIN file for your Model&amp;amp;nbsp;204 Online system. Consult your system manager about adding these commands to CCAIN.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If you are having trouble with one of the Dictionary/204 subsystems, you might want to delete the corresponding START command from CCAIN before starting Dictionary/204 and its other subsystems.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Typically, you stop Dictionary/204 subsystems at the end of the day. You might also need to stop the subsystems periodically to perform utility functions. For example, it might be necessary to stop the Dictionary/204 subsystems to open and use the individual files that make up the dictionary. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Refer to the Rocket [[Model 204 installation|Model 204 installation instructions]] for your operating system for a discussion of these utility functions. For information about more generalized Model&amp;amp;nbsp;204 file maintenance, see [[File management overview]].&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
To stop Dictionary/204, issue the following command: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;STOP SUBSYSTEM DICTIONARY &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
After you issue the &amp;lt;var&amp;gt;STOP&amp;lt;/var&amp;gt; command for Dictionary/204 and its subsystems, users cannot invoke the main menu or any of its subsystems. If no one is currently using the subsystem, Model&amp;amp;nbsp;204 displays:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;DICTIONARY STOPPED &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If any Dictionary/204 facilities are in use when the &amp;lt;var&amp;gt;STOP SUBSYSTEM&amp;lt;/var&amp;gt; command is issued, the following message is displayed on your terminal:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;DICTIONARY SET TO STOP, REMAINING USERS = &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;n&amp;lt;/var&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;n&amp;lt;/var&amp;gt; represents the current number of active users. Current users of Dictionary/204 are allowed to finish their work, but additional users cannot start a session. When all users have ended their sessions, Dictionary/204 is stopped.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
This STOP command applies only to the Dictionary/204 main menu, the subsystem for which you have entered the STOP command. Each subsystem must be stopped individually, just as each must be started individually. If any other subsystems are running, users can still access them, but not through the main menu.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If you stop the Dictionary/204 (main menu) subsystem before stopping other Dictionary/204 facility subsystems, users who logged on to the other subsystems through the main menu receive an error message when logging off. The error, however, does not interfere with saving data or any other facility function.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Even though Dictionary/204 is now shut down, you as administrator are still logged on to Model 204 and can issue any of the Model 204 commands. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;For more information, see [[STOP command: Stopping an application subsystem]].&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can restart Dictionary/204 by typing the following Model 204 command: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;START SUBSYSTEM DICTIONARY &amp;lt;/p&amp;gt;&lt;br /&gt;
===Sending a BROADCAST message===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can use the Model 204 &amp;lt;var&amp;gt;[[BROADCAST command: Sending a file message|BROADCAST]]&amp;lt;/var&amp;gt; command to send a message to subsystem users. After you send a message, it is displayed on a user&#039;s screen as soon as that user completes the current function and returns to a menu selection screen. The BROADCAST command can be used to alert subsystem users to end a session so that file maintenance or other utility functions can be performed.&amp;lt;/p&amp;gt;&lt;br /&gt;
===Diagnosing Dictionary/204 session errors===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If during a Dictionary/204 session a &amp;quot;DICTIONARY SESSION ERROR&amp;quot; occurs, you can use the TEST command to diagnose the problem. The TEST command displays all messages on your terminal. From these messages, you can determine the source of the session error and resolve the problem. To run the TEST command, you must first stop Dictionary/204. This is necessary, because the command puts Dictionary/204 in a single-user mode while the system displays all messages to the terminal.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
To use the TEST command, issue the following commands:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;STOP SUBSYSTEM DICTIONARY&lt;br /&gt;
TEST DEBUG DICTIONARY &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can either try to duplicate the session with the TEST command or consult the audit trail for a listing of the messages.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Dictionary/204 file maintenance==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
See [[Dictionary/204 operation and file maintenance]] for details.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Creating or updating Dictionary entries with DDGEN==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can use the DDGEN utility (a Dictionary/204 subsystem) to create or update dictionary entries that describe the characteristics and contents of existing Model 204 files. The DDGEN utility enables you to populate your dictionary with entries for physical files, fields, field groups, records, and procedures.&amp;lt;/p&amp;gt; &lt;br /&gt;
&amp;lt;p&amp;gt;Following the completion of DDGEN, you can use Dictionary/204 to add any desired attributes or values to these entries.&amp;lt;/p&amp;gt; &lt;br /&gt;
===DDGENSET utility===&lt;br /&gt;
&amp;lt;p&amp;gt;DDGENSET is a supplementary utility for DDGEN that creates a file of file names from existing dictionary entries, enabling you to edit the list of files to run through DDGEN. DDGENSET updates the entries. You can run DDGEN against as many as 100 files at one time.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Before you can update Dictionary/204 files with external procedures, you must have the required update privileges. &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; Transaction backout files must be updated without accessing non-transaction-backout files. &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===DDGEN and standard definitions===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
For each file that is processed, DDGEN creates or updates the following dictionary entries:&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 this item...&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;One entry is added to the dictionary...&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;FILE&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;For file parameters and table sizes for 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;PROCEDURE&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;For each procedure in the file, along with any of its aliases&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;FIELD&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;For each field in the file to specify the attributes of the 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;RECORD&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;If there is no record defined for the file&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;
References from the FILE entry to each FIELD, and from the FILE entry to each PROCEDURE are also created when DDGEN is run.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When running DDGEN, you must ensure that the attributes required by DDGEN are not deleted from the entity type definitions.&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; If any of these required attributes have been deleted from the entity type definitions, you can add the attributes again with the Dictionary Administration facility (by selecting the Entity Type Maintenance option).&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When DDGEN stores an entry in the dictionary, the utility writes the entry to a report file (OUTFILE). You can optionally send the report to CCAPRINT. If the dictionary already contains an entry with the same name as the file, procedure, or field being stored, the entry is updated and a message is written to both the CCAPRINT data set and the Model 204 journal or audit trail.&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;Item&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Required attributes&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;FILE&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;DDGEN creates a FILE entry for the Model 204 file that it is processing. The values for the FILE attributes are derived from the parameters or table sizes defined for the Model 204 file.&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
A list of the FILE attributes can be found in [[Dictionary/204 entity type definitions#FILE|FILE]], where the FILE entity type is defined.&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;FIELD&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;DDGEN creates a FIELD entry for each field defined for the Model 204 file. The values for the FIELD attributes are derived from the field definition statements for the Model 204 file.&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
A list of the FIELD attributes can be found in [[Dictionary/204 entity type definitions#FIELD|FIELD]], where the FIELD entity type is defined.&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;PROCEDURE&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;DDGEN creates a PROCEDURE entry for each procedure defined for the file.&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Each entry consists of attributes and relationships that are defined in [[Dictionary/204 entity type definitions#PROCEDURE|PROCEDURE]], where the PROCEDURE entity type is defined.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
One occurrence of the ALIAS attribute is added to the PROCEDURE entry for each alias associated with the procedure.&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;RECORD&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;DDGEN creates a record entry, if no record exists for that file. The record is given the UNQUALIFIED NAME &amp;amp;lt;&amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;filename&amp;lt;/var&amp;gt;&amp;amp;gt;. Thus, the (unique) NAME of the entry will be &amp;amp;lt;&amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;filename.filename&amp;lt;/var&amp;gt;&amp;amp;gt;.&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Additionally, all preallocated fields will be cross-referenced to a RECORD entry.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
See [[Dictionary/204 entity type definitions#RECORD|RECORD]] for information about the attributes of the RECORD entity type.&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;
===Using the Batch utility to run DDGEN===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Use the DDGEN Job and/or the DDGENSET Job (z/OS or z/VSE) or the DDGEN option of the D204 EXEC (z/VM) to run the DDGEN utility. Customize this Job or EXEC for your installation, as described in your installation guide. (Consult the relevant chapter of your installation guide.) You must specify a DD statement (z/OS); DLBL, EXTENT, and ASSIGN (z/VSE); or LINK, ACCESS, and FILEDEF (z/VM) for the multiple Model 204 files to be used. You must also specify this filename in the CCAIN (User 0) along with a password, if required.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;You can specify up to 100 Model 204 files in a single DDGEN run.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The following example shows the CCAIN stream for DDGEN when run in batch mode:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;PAGESZ=6184,SPCORE=20000,SERVSIZE=180000,LGTBL=1000,NFILES=110, X&lt;br /&gt;
 NDCBS=110,NDIR=110,INCCC=0,MINBUF=10,LENQTBL=6000&lt;br /&gt;
&lt;br /&gt;
 **********************************************************************&lt;br /&gt;
 * MAKE THE FOLLOWING MODIFICATIONS TO THIS CCAIN INPUT STREAM: *&lt;br /&gt;
 * 1) USERID = THE PRIVILEGED ID *&lt;br /&gt;
 * 2) PASSWORD = THE PASSWORD FOR THAT ID *&lt;br /&gt;
 * 3) ENTER FILENAME AND FILE PASSWORDS AS SPECIFIED BELOW *&lt;br /&gt;
 * 4) THE WORD &amp;quot;END&amp;quot; MUST FOLLOW THE LAST FILE,PASSWORD ENTERED *&lt;br /&gt;
 * NOTE: OUTFILE REFERS TO THE REPORT FILE FOR THE RUN *&lt;br /&gt;
 * OUTDDGN IS THE TEMPORARY WORK FILE FOR THE RUN *&lt;br /&gt;
 **********************************************************************&lt;br /&gt;
 LOGON USERID&lt;br /&gt;
 PASSWORD&lt;br /&gt;
 START SUBSYS DDGEN&lt;br /&gt;
 DDGEN&lt;br /&gt;
 OUTFILE&lt;br /&gt;
 OUTDDGN&lt;br /&gt;
 *ENTER FILENAME 001 *&lt;br /&gt;
 *ENTER FILENAME 001 PASSWORD OR BLANK LINE *&lt;br /&gt;
 *ENTER FILENAME ... *&lt;br /&gt;
 *ENTER FILENAME ... PASSWORD OR BLANK LINE *&lt;br /&gt;
 *ENTER FILENAME 100 *&lt;br /&gt;
 *ENTER FILENAME 100 PASSWORD OR BLANK LINE *&lt;br /&gt;
 END&amp;lt;/nowiki&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
As the CCAIN stream indicates, OUTFILE is the name of the report file for the batch run. OUTDDGN is the name of the work file that you must specified for this batch run.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The OUTDDGN record format must be FBA.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Running DDGEN Online===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
DDGEN can be run Online with certain restrictions. Each user who runs DDGEN must have an exclusive report OUTFILE and work OUTDDGN file. This is necessary to maintain the integrity of the report and of the updates. Optionally, the report can also be routed to the screen, but an exclusive work file is required in any case.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
To run DDGEN Online, follow the flow of the CCAIN stream for DDGEN shown in [[#Using the Batch utility to run DDGEN|Using the Batch utility to run DDGEN]]. Although the first two lines (or the User 0 line) are not necessary to run DDGEN Online, be sure that all the relevant parameters are set to values at least equal to those given in the example. Follow these steps:  &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Log in to Model 204.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Issue the command START SUBSYS DDGEN.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;To run the job, type:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;DDGEN&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
You are prompted for the report OUTFILE filename. Enter the report outfile name for spooled output, or press enter to have the report printed on the screen.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
You are prompted for an exclusive work OUTDDGN. Enter the name of the work OUTDDGN. For each file to run through DDGEN, you are prompted for a filename and then a password. Press Enter to receive prompts for additional files to be processed.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
To end the entry of filenames, enter END for the file name and press Enter. To cancel the DDGEN run, enter QUIT for the file name (instead of END) and press Enter. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can process up to 100 files in a single run. It is recommended that you start with only a few files to determine how long it takes to run DDGEN in your environment.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Modifying and running DDGENSET===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The DDGENSET job can be used as a front end to the DDGEN job described in [[#Running DDGEN Online|Running DDGEN Online]]. DDGENSET reads your installation&#039;s dictionary and automatically creates the CCAIN stream. For z/VSE it creates the step override statements for DDGEN JCL. For z/OS, it creates the FILEDEF statements to be included in D204FDEF EXEC. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
DDGENSET processes existing dictionary entries only. Each entry must contain valid data set and DDname attribute values. If there are more than 100 files in your dictionary (the limit for DDGEN), DDGENSET creates multiple sets of CCAIN and step override statements.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
After DDGENSET has created statements, be sure to edit these statements to specify any missing data set or password information and to delete files that do not actually exist as Model 204 files. &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;Replace...&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;With...&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;USERID&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Your installation&#039;s privileged system manager login account 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;PASSWORD&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Password for the USERID account name.&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;
Refer to your Model 204 installation guide for more information.&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; Run DDGENSET in batch mode to help prepare you for a batch run of DDGEN.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Recovering from system problems===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When a system error (for example, a system crash) causes you to exit from a Dictionary/204 facility, the protection (or lock) for the data you were using at the time of the error might not be returned. This occurs because the subsystem error routines cannot run. If this happens, the dictionary administrator must run the procedure SHRO.LOCKFREE to maintain the lock for the data.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Also, if an individual user is restarted, locks can be restored by running SHRO.LOCKFREE.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
(See the appropriate sections of the Rocket [[Model 204 installation|Model 204 installation instructions]] for your operating system for more information.) &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
To run SHRO.LOCKFREE:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Open M204TEMP.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Enter:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;INCLUDE SHRO.LOCKFREE &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
This utility deletes the locks for specified entries.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
You are prompted to provide the entity type and entry name. Specify the entry, or, to quit the utility, press Enter in response to this prompt.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
If you specify the entry, press Enter. The system displays a message confirming that the lock has been freed.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Locks are maintained across sessions for files. Thus, the utility leaves the file locked to the same user ID.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Logging on to Dictionary/204==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
To log on to the Dictionary Administration facility, choose one of the following methods:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Select the number of the Dictionary Administration facility option from the Dictionary/204 main menu. &lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If your main menu does not display the Dictionary Administration option, you have not been authorized to use this facility.&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Invoke the Dictionary Administration facility from the primary screens of other Dictionary/204 facilities with the INVOKE command. The syntax of the command is:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;INVoke DICTADMIN &amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Call the Dictionary Administration subsystem from the Model&amp;amp;nbsp;204 command prompt by typing the subsystem name:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;DICTADMIN &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can log on with this method only if you have started the Dictionary Administration subsystem.&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;If using the [[RKTools#mainmenu|RKTools main menu]], select the &amp;lt;b&amp;gt;DictAdmin&amp;lt;/b&amp;gt; menu item. If using the [[RKWeb]] interface, select &amp;lt;code&amp;gt;Manage &amp;gt; Dictionary &amp;gt; Administration&amp;lt;/code&amp;gt;. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Using the Dictionary/204 Administration main menu==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Dictionary/204 displays the following main menu when you select the Dictionary Administration option:&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;figure&amp;quot;&amp;gt;[[File:Dictionary_fig6-1.png]]&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
In brief, the Dictionary Administration facility provides the following capabilities (numbered items correspond to the menu options):&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Defining, modifying, or deleting an entity type. You can define the attributes and named or cross-referenced relationships of the new entity types, and obtain a report on entity types and path relationships.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Defining, viewing, modifying, and deleting path relationships.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Modifying the default and control parameters for File Management and Dictionary Reports.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Maintaining security by controlling access to the Dictionary/204 facilities.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Requesting a printed inventory of entity types and their attributes and relationships. The report is available only in hard copy and cannot be sent to the terminal. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
====Input====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
To select an option from this menu, type a numbered choice at the Enter Number: prompt and press the Enter key.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Commands====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
To issue commands, press the assigned PF key or type the command name at the prompt (===&amp;amp;gt;) and press Enter.&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;Key&amp;lt;/th&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;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;PF1&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;HELp&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Provides the online HELP text for this screen. You can read the HELp text and exit from the last screen by pressing Enter.&amp;lt;/td&amp;gt;&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;&amp;amp;nbsp;&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;INVoke&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;At the command prompt, type: &lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;INVoke &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;facility_name&amp;lt;/var&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Then press Enter to invoke another facility.&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;PF3&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;QUIt&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Terminates Dictionary Administration. You also can type QUIT at the command prompt and then press Enter. The system then returns you to the Dictionary/204 main menu, to the primary screen of the facility from which Dictionary Administration was invoked, or to Model 204 command 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;Enter&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;amp;nbsp;&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Processes your main menu selection.&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;
==Entity type maintenance==&lt;br /&gt;
===Overview===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The structure of the dictionary is based on entity types, attributes, and relationships. Although there are standard entity types, each having a predefined set of attributes and relationships, the administrator can customize or &amp;quot;extend&amp;quot; the dictionary by:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Adding new entity types that have their own attributes and relationships&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Adding attributes and relationships (also called references) to the standard entity types &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 standard entity types, their attributes and relationships are defined in [[Dictionary/204 entity type definitions]], except for VIEW, COMPOSITE VIEW, VIEW FIELD, and VIEW LINK which are described in [[Dictionary/204 view management]].&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The administrator should not delete or modify the system- or facility-controlled attributes and relationships of the standard entity types. The standard entity types can be modified only by adding attributes or relationships.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Attributes, relationships, and entity types added to the dictionary by the administrator are not system- or facility-controlled. Their values are entered by users, primarily through the Documentation facility.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Users can add new relationships between dictionary entries through the Documentation facility, even if the new relationship is not part of the entry&#039;s definition as set up by the administrator. Users, however, cannot add attributes to the entity type definition.&amp;lt;/p&amp;gt;&lt;br /&gt;
===Entity Type Maintenance screen===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Dictionary/204 displays the following screen when you select the option Entity Type Maintenance from the Dictionary Administration menu:&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;figure&amp;quot;&amp;gt;[[File:Dictionary_fig6-2.png]]&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
This menu provides the following capabilities:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Defining the attributes and relationships of a new entity type. The administrator must define the entity type before users can define entries.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Updating an entity type, when there is a need to change the attributes and/or references of that entity type.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Deleting an entity type, when there is no further need for entries of that type.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Obtaining an entity type and path report when you need to survey the definitions of entity types or the spectrum of relationships between entity types. You can obtain a report on a single entity type or on all entity types and optionally include information on relationship paths.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Input====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
To select a function from this menu, you must select a numbered choice from the list of functions and then specify the entity type. Use options 1, 2, and 3 for maintaining the dictionary records, and option 4 for reporting on them.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Defining, updating, and deleting entity types:&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Type the number of your selection at the Enter Number: prompt.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Respond to the Entity Type: prompt by typing the name of the entity type you want to define, modify, delete, or report on.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The maximum length of an entity type name is 20 characters.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Reporting on entity types:&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
To report on all entity types, respond by typing ALL at the Entity Type: prompt. Otherwise, enter the name of a particular entity type.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If you do not want information about path relationships, type an N over the default value of Y after the following prompt:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;Path Information on Report: Y&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
By default, Dictionary/204 sends reports to your terminal. You can direct the output to a different destination, however, by typing Y over the default value of N at the following prompt:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;Route to Output File: N &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Your output file default is specified in your ACCOUNT entry. (The output destination can be a printer or a specified file.)&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
To override the default Output Destination for your account, type a new value for the following prompt:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;Output Destination: OUTFILE &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;The Output Destination name can be from 1 to 30 characters.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;The system uses this file to send output to a destination other than your terminal. &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;
To process your input on the Entity Type Maintenance menu, press the Enter key. You can press PF1 to read the HELP text for this menu, or press PF3 to terminate the Entity Type Maintenance function and return to the facility main menu.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Defining new entity type attributes===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
A screen similar to the following is displayed when you select the option Define New Entity Type from the Entity Type Maintenance menu. The following screen shows a sample REPORT entity type definition. Your screen is empty, except for the name of the entity type that you have specified on the previous screen and the arrow (--&amp;amp;gt;) prompts.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The attributes you define here for the entity type appear as prompts for the Dictionary/204 users when they define a particular entry for this entity type. Users define entries for nonstandard entity types (such as REPORT) through the Documentation facility.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
It is not necessary to add the following standard system-supplied attributes: NAME, CREATE DATE, LAST UPDATE, UPDATED BY, KEYWORD, ALIAS, SHORT DESCRIPTION, and DESCRIPTION. When users define particular entries through the Documentation facility, Dictionary/204 either provides these values or prompts the user for the values.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;figure&amp;quot;&amp;gt;[[File:Dictionary_fig6-3.png]]&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Input====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Use your tab keys to position the cursor at the next (or previous) line.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Type the names of the attributes to be associated with this entity type to the right of the prompt:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;===&amp;gt; &amp;lt;/nowiki&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Note the following restrictions:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Type only one attribute following each arrow prompt.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Maximum length is 20 characters.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Allowable characters are the same as for Model 204 [[Field names|field names]].&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
To change an attribute name on this screen, type over the current name. To delete an attribute on this screen, use the Erase EOF key or use blank characters.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If you need more than the available number of lines on the screen to complete the attribute set, press PF8 (the FORward command). This command provides a new blank attributes definition screen. The FORward command is described in [[#Defining new entity type references]]. You can enter as many attributes on as many screens as necessary.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Reserved words for attributes===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Avoid the reserved words listed in the following table when creating attributes for Dictionary/204 entity types. An attribute name that contains reserved words generates an error condition.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;caption&amp;gt;Reserved words&amp;lt;/caption&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;OR&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&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;AND&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;RECORD&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&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;AT&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;RECORDS&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&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;BEFORE&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;TAB&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;EQ&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;BY&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;THEN&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;GE&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;COUNT&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;TO&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;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;EACH&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;VALUE&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;LE&amp;lt;/td&amp;gt;&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;WHERE&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;LT&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;END&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;WITH&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;NE&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;FROM&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;=&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&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;IN&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;$&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;- (minus 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;IS&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;??&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&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;LIKE&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;?$&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&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;NOR&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;$&amp;amp;amp;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&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;NOT&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;(&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;^ (not equal 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;OCC&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;amp;#826;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;OCCURRENCE&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;@&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;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;
To move on to the definition of relationships for the new entity type, press PF11 or issue the REFERENCES command. Your input is preserved but not saved until you issue the END command (PF12). You can quit (PF3) out of the definition process at any time before ending.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Defining new entity type references====&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;Key&amp;lt;/th&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;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;PF3&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;QUIt&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Terminates the definition process. Dictionary/204 returns you to the Entity Type Maintenance Menu, but does not save any part of the entity type definition.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;PF8&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;FORward&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Lets you define more attributes for the new entity type. To see another &amp;quot;Define New Entity Type: Attributes&amp;quot; screen, press PF8. This command preserves your input but does not store your definition; next attributes definition screen.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;PF11&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;REFs&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Takes you from the attributes definition screen to the screen that allows you to define references (relationships between entries). Your previous input is preserved but not saved until you issue the END 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;PF12&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;END&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Saves your definition of the new entity type&#039;s attributes and references press. This command stores your input and returns you to the Entity Type Maintenance menu.&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;
After you have specified all the attributes for the new entity type, you can specify the new entity type relationships to other entity types by pressing PF11 on the screen shown in the preceding section.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Use the following screen to specify relationships between the new entity type and existing entity types.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;figure&amp;quot;&amp;gt;[[File:Dictionary_fig6-4.png]]&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;This sample screen specifies a cross-referenced relationship between REPORT and FILE, and a named relationship between REPORT and USER. Two implications for users of the Documentation Facility are:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Whenever you add or update a REPORT entry or FILE entry, Dictionary/204 prompts you to specify a particular report or file for cross-referencing. The TRAVEL SUMMARY report, for example, can be cross-referenced to the TRIPS file.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Whenever you add or update a REPORT entry, Dictionary/204 prompts you to specify that the named relationship ROUTED TO applies to a particular USER. (The TRAVEL SUMMARY report, for example, can be ROUTED TO Johnson.) &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Type the name of a named relationship following the tilde (&amp;amp;#126;) as shown in the ROUTED TO example. Leave cross-references blank, as shown in the FILE example. See [[Dictionary/204 overview#Relationships|Relationships]] for more information.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Named references are directional and can be updated (when using the Documentation Facility) only from one of the two related entity types (in this case only from the REPORTS entity). But all references (cross-references and named references in both directions) are displayed when users query the dictionary with the Dictionary Reports facility.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
From this screen, you can:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Request another screen for defining relationships by pressing PF8 (FORward).&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Cancel the definition of the entity type by pressing PF3 (QUIt).&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Save the entity type definition by pressing PF12 (END). &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Input====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can enter as many related entity types (for example, FILE, FIELD, USER) as you want. Specify one entity type per line in response to the prompt:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;===&amp;gt;&amp;lt;/nowiki&amp;gt; &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The maximum length for an entity type name is 20 characters. You can specify a named relationship by adding a reference name in the space provided following the tilde (&amp;amp;#126;). The maximum length for a relationship name is 19 characters. The previous example is ROUTED TO.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Use the tab keys to position the cursor at a new prompt.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
To change a value typed on this screen, type over the current value. To delete a value, use the Erase EOF key or use blank characters.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Commands====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Commands are the same as those for the previous screen, except that there is no REFs command (PF11). You cannot return directly to the screen for defining attributes. You can, however, modify the attributes by saving the definition (using the END command) and then selecting the Update Entity Type option from the Entity Type Maintenance menu.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Updating an entity type===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Dictionary/204 displays this screen when you select the option Update Entity Type from the Entity Type Maintenance menu. Use this screen to indicate that you want to change the definition format of an existing entity type. Specify the name of the entity type on the main menu when you select the update option.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can add new attributes to the definition of standard entity types, but you cannot modify the standard system-controlled attributes provided by Model 204. If you have created a new entity type (such as REPORT) you can modify any of its attributes or relationships.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You might want to update an entity type:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;When the attributes for an entity type have changed. For example, additional REPORT attributes might need to be specified.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;When an entity type contains references to another entity type that has been, or that will be, deleted. &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 following screen shows the REPORT entity type definition ready to be updated:&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;figure&amp;quot;&amp;gt; [[File:Dictionary_fig6-5.png]]&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Input====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Dictionary/204 displays all the attributes and references defined for the specified entity type on two update screens: one for attributes (shown above), and one for relationships (shown in [[#Updating entity type references|Updating entity type references]]).&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can modify the attributes by following the directions on the previous screen:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Type over existing attributes, using the Erase EOF key or blank characters to delete extra characters.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Specify new attributes on a blank line. &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; Typing over an attribute name deletes the current attribute and replaces it with a new attribute; it does not simply change the name of the existing attribute. Moreover, values entered for the deleted attribute do not apply to the new attribute.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Commands====&lt;br /&gt;
&amp;lt;p&amp;gt;The commands are the same as those described in the [[#Commands|Commands]] section.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Updating entity type references====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Press PF11 to begin updating the entity type references. A screen similar to the following is displayed. The screen lists the relationships defined for the entity type by the administrator or by Model 204 (in the case of standard entity types). You can add references to standard entity types, but you cannot modify those provided by the system.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;figure&amp;quot;&amp;gt;[[File:Dictionary_fig6-6.png]]&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Input====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Dictionary/204 displays all the references defined for the specified entity type on a screen like the previous one. You can modify the references by following the directions on the screen:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Type over existing entity type names and relationship names, using the Erase EOF key or blank characters to delete extra characters.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Specify a new related entity type and named or cross-referenced relationship on a blank line.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Maximum length for an entity type name is 20 characters. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Specify a named relationship by adding a reference name in the space provided following the tilde (&amp;amp;#126;). The maximum length for a relationship name is 19 characters. Leave the space following the tilde blank for cross-references. &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; Typing over an existing reference deletes the current reference; it does not simply change the name or entity type that makes up the existing reference.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The commands are the same as those described in the [[#Commands|Commands]] section. &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Deleting an entity type====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Dictionary/204 displays this screen when you select the following option from the Entity Type Maintenance menu:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;Delete Entity Type&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
This function enables you to delete an entity type from the dictionary. Deleting an entity type does not automatically delete the entry records for that entity type from the dictionary, but it does make the entries inaccessible. First delete the individual entries from the dictionary by using the Documentation facility. If you delete the entity type first, users cannot specify that the entries are to be deleted.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You might want to delete an entity type:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;If the entity type is no longer useful.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;If you want to make the entries for the entity type inaccessible for an indefinite period. (Redefining the entity type at a later time makes the entries accessible again.) &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Before you actually delete an entity type, Dictionary/204 displays the current attributes and related entity types for the entity type to be deleted. Dictionary/204 also tells you how many entries are currently defined in the dictionary for the entity type being deleted. The following screen provides an example.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;figure&amp;quot;&amp;gt;[[File:Dictionary_fig6-7.png]]&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Input====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
After Dictionary/204 displays the attributes and references for the entity to be deleted, it prompts:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;Press Enter to Continue:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Press the Enter key to advance to the confirmation screen.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Confirming the deletion====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Dictionary/204 displays the following Confirmation screen when you press Enter, after viewing the attributes and relationships for the entity to be deleted. The screen tells you how many entries of the type to be deleted are stored in the dictionary.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You must either confirm the deletion by pressing PF6 (DELete), or abort the deletion by pressing PF3 (QUIt).&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;figure&amp;quot;&amp;gt;[[File:Dictionary_fig6-8.png]]&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The previous sample screen indicates that eight REPORT entries are defined in the dictionary. When you delete the REPORT entity type from the dictionary, you delete the definition of attributes and relationships for this entity. Report entries defined by users through the Documentation facility remain in the dictionary database, but they become inaccessible. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If you press PF6, Dictionary/204 displays the Entity Type DELETED message on the message line of the Entity Type Maintenance menu.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If you press PF3, Dictionary/204 cancels the delete operation and returns you to the Entity Type Maintenance menu.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Displaying entity type and path report====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The Entity Type Maintenance menu enables you to display the attributes and relationships that have been assigned to the various entity types -- both system-controlled entity types and those created by the dictionary administrator. By selecting the Entity Type and Path Report option, you can:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Display the definition of a single entity type&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Display the definitions of all entity types&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Optionally display path information for either of the above&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Optionally route the information to a printer or specified file &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 following sample Entity Type Maintenance menu shows the input for a report on the REPORT entity type, including path information, sent to the terminal.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;figure&amp;quot;&amp;gt;[[File:Dictionary_fig6-9.png]]&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Input====&lt;br /&gt;
&amp;lt;p&amp;gt;To respond to this menu, type the name of the entity type or ALL in response to:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;Entity Type: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;The default value is Y for:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;Path Information for Report: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Type N over the default value, if you do not want a report on the paths in which the entity type occurs.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Normally, Dictionary/204 sends reports to your terminal. You can direct the output to a different destination, however, by typing Y over the default value of N at the following prompt:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;Route to Output File: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Your Output Destination default value is specified in your ACCOUNT entry. (The output destination can be a printer or a specified file.) To change your output destination, type a new value for:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;Output Destination &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;You can specify a name of 1 to 30 characters.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;The default value is OUTFILE. The system uses this file to send output to a destination other than your terminal.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Output====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Dictionary/204 displays a report similar to the following when you select the option from the Entity Type Maintenance menu:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;Display Entity Type and Path Report &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The sample report is based on the definition of the SUBSYSTEM entity type and a hypothetical path relationship.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
A dictionary entity type definition contains a list of the attributes and relationships established for an entity type. It does not include the individual entry names and attribute values. (The Inventory Report, described in [[#Printing a dictionary inventory|Printing a dictionary inventory]], enables you to display the existing entries for each entity type, along with their attributes and relationships.)&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
A dictionary path definition contains a list of the entity types that comprise the relationship path, as shown on the second screen of the sample report.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;figure&amp;quot;&amp;gt;[[File:Dictionary_fig6-10.png]]&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;figure&amp;quot;&amp;gt;[[File:Dictionary_fig6-11.png]]&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If Dictionary/204 displays the &amp;amp;gt; prompt at the bottom of the screen, press the Enter key to advance to the next screen, or to return to the Entity Type Maintenance menu. (The prompt (&amp;amp;gt;) does not appear in the sample above, because the report was sent to a printer rather than to a terminal.)&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Path maintenance==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The previous sections explained how to use the functions available from the Entity Type Maintenance menu. This section shows you how to use a function available from the [[#Using the Dictionary/204 Administration main menu|Dictionary Administration main menu]].&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Dictionary/204 displays this screen when you select the following option from the Dictionary Administration main menu:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;Path Maintenance &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Path relationships are defined in [[Dictionary/204 overview#Path relationships|Path relationships]] and are described further in [[#Displaying a path definition|Displaying a path definition]]. &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;figure&amp;quot;&amp;gt;[[File:Dictionary_fig6-12.png]]&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;This menu provides the following capabilities (numbered items correspond to menu options):&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Displaying all path relationships along with their assigned path numbers&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Defining a maximum of eight entity types as a path&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Updating the definition of existing path relationships&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Deleting the definition of a path relationship &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Input====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can select an option from this menu by typing a numbered choice at the Enter Number: prompt, and then pressing Enter.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If you want to update or delete a path, you must type its number at the prompt:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;Path Number: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
This prompt applies only to updating and deleting. Path numbers are assigned automatically and sequentially by the system. To determine the number of a path, use the Display Path Definition option from the Path Maintenance menu.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Commands====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
To issue a command, press the assigned PF key or type the command name at the prompt (===&amp;amp;gt;) and press Enter.&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;Key&amp;lt;/th&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;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;PF1&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;HELp&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Provides the online HELP text for this screen. You can read the HELp text and exit from the last screen by pressing Enter.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;PF3&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;QUIt&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Terminates the Path Maintenance function. The system returns you to the Dictionary Administration main menu.&amp;lt;/td&amp;gt;&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;&amp;lt;p&amp;gt;&amp;amp;nbsp;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Processes your menu selection.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
====Defining paths: in theory====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Before examining the interface for defining paths, it is important to examine why paths are defined and how to ensure their usefulness.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
As defined in [[Dictionary/204 overview#Path relationships|Path relationships]], a path relationship is one that is derived from other relationships. Paths increase the reporting capabilities of the dictionary by enabling it to show indirect relationships among as many as eight entity types and their entries.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Paths can be based on cross-references, as shown in the following figure.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;caption&amp;quot; style=&amp;quot;width:400px&amp;quot;&amp;gt;Path relationship - Example 1&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;figure&amp;quot;&amp;gt;[[File:Dictionary_fig6-13.png]]&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
This relationship allows users to obtain reports on relationships between PROCEDURE and FIELD entries, even though there is no direct relationship defined between these two entity types.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Paths can also be based on named references, as shown in the following figure. &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;caption&amp;quot; style=&amp;quot;width:400px&amp;quot;&amp;gt;Path relationship - Example 2&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;figure&amp;quot;&amp;gt;[[File:Dictionary_fig6-14.png]]&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
This relationship allows reports on existing references between FILE and USER entries. (See [[Dictionary/204 reports#Selecting a report option|Selecting a report option]] for an example of how to request such reports.)&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
In defining path relationships, the dictionary administrator must anticipate the users needs, because the defined paths must support the users&#039; reporting requirements. But keep in mind the following guidelines:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Paths can be defined between any valid entity types, even if no existing relationship exists at all between certain entity types in the path. However, such a &amp;quot;bogus&amp;quot; path does not enhance the users&#039; reporting capabilities. Paths, therefore, must be derived from existing relationships defined for the relevant entity type 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;
If no relationship exists between two consecutive entries, the report path is broken. The report does not &amp;quot;wrap around&amp;quot; from the last entity type in the path to the first.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
See [[#Adding a path definition|Adding a path definition]] for instructions on defining paths.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;When named relationships are part of a path, users can obtain reports that entity type B is related to entity type C even if the unidirectional, named relationship flows from C to B. Consider this 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;A &amp;amp;lt;---&amp;amp;gt; B &amp;amp;lt;--- C ---&amp;amp;gt; D &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If a user asks (using Dictionary Reports) which entities are related to B, the report yields A, C, and D. A Dictionary Reports query asks only if a relationship exists along a path, but not what type it is or what direction is implied by the relationship.   &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Displaying a path definition====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The following screen is displayed when you select the following option from the Path Maintenance menu:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;Display Path Definitions&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
This screen displays a list of all the paths currently defined in the dictionary, along with their identifying path numbers. These numbers are used on the Path Maintenance menu to specify the particular path to be changed or deleted. Paths are numbered sequentially; when paths are deleted, the next defined path takes the number of a previously deleted path.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Always display a path and its number before updating or deleting it; do not assume that you know the correct and current number of a path without checking.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;figure&amp;quot;&amp;gt;[[File:Dictionary_fig6-15.png|468px]]&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Input====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If Dictionary/204 displays the &amp;amp;gt; prompt, press the Enter key to advance to the next screen. After all the paths have been displayed, press Enter to return to the Path Maintenance menu.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Adding a path definition====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Dictionary/204 displays the following screen when you select the following option from the Path Maintenance menu:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;Add Path Definition&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;Use this screen to specify a new path for the entities in your dictionary.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;figure&amp;quot;&amp;gt;[[File:Dictionary_fig6-16.png|468px]]&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Input====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Dictionary/204 prompts you to describe the path by specifying up to eight entity types that comprise it. Enter the entity types, one per line, in response to the &lt;br /&gt;
--&amp;amp;gt; prompts. Use the tab keys to position the cursor at the next or preceding prompt.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You must list the entity types in the order in which Dictionary/204 is to proceed in following the path. If no relationship exists between two sequential entries, the reporting path is broken, as explained in [[#Defining paths: in theory|Defining paths: in theory]].&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
To indicate that the path is complete, press PF12 or issue the END command.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Dictionary/204 checks the entity types that you have specified to ensure that definitions for these entity types exist.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If an entity type is not valid, an angle bracket tag (&amp;amp;lt;) is displayed in column 80 of the line containing the invalid entry. An error message is displayed on the message line (the line below the command prompt). Correct the entity type, using the ERASE EOF key to delete the entered value.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Dictionary/204 also displays an error message if you define a path that is already defined in the dictionary.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If no errors are found, Dictionary/204 adds the path to the Dictionary/204 and displays the Path Maintenance menu with the message:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;The reference path has been defined. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
To cancel the add operation, press PF3, or issue the QUIT command at the command prompt (===&amp;amp;gt;).&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Changing a reference path====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Dictionary/204 displays the following screen when you specify the number of the path on the Path Maintenance menu, and select the following option from the Path Maintenance menu:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;Update Path Definition &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Use this screen to change a reference path by replacing one or more of the entity types that make up the path.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Dictionary/204 displays the entity types that comprise the path, as shown in the following sample screen.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;figure&amp;quot;&amp;gt;[[File:Dictionary_fig6-17.png|468px]]&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Input====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
To modify a path, type over the display of the existing entity types, or use the ERASE EOF key to delete the display.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If you specify an entity type that is not defined in the Dictionary/204, an angle bracket tag (&amp;amp;lt;) is displayed in column 80 on the line containing the erroneous entry. An error message is displayed on the message line (the line below the command line). You can then either correct the entry or cancel the operation by pressing PF3.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Dictionary/204 also displays an error message if you attempt to define a path already defined in the dictionary.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
To indicate that the path is updated to your satisfaction, press PF12 or issue the END command. The update is stored, and the system returns you to the Path Maintenance menu.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;To cancel the update, press PF3. Dictionary/204 returns you to the Path Maintenance menu. &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Deleting a reference path====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Dictionary/204 displays the following screen when you specify the number of the path on the Path Maintenance menu and select the following option from the Path Maintenance menu:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;Delete Path Definition &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
To determine the correct path number, use the Display Path Definition option from the Path Maintenance menu.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Before Dictionary/204 permits you to delete the path from the dictionary, it displays the entity types that comprise the path, as shown on the sample screen.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;figure&amp;quot;&amp;gt;[[File:Dictionary_fig6-18.png|468px]]&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Input====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Press PF6 to delete the path, or cancel the deletion by pressing PF3. Once you have deleted the path, it cannot be recovered. All path numbers are resequenced after a deletion. &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Facility administration==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The previous sections described functions available from the Path Maintenance menu. This section describes the Facility Administration function available from the Dictionary Administration main menu (described in [[#Using the Dictionary/204 Administration main menu|Using the Dictionary/204 Administration main menu]]). This function enables data administrators to control various options and parameters that affect the operation of their respective facilities.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Dictionary/204 displays the following screen when you select the following option from the Dictionary Administration main menu:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;Facility Administration &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;figure&amp;quot;&amp;gt;[[File:Dictionary_fig6-19.png|468px]]&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The Facility Administration menu displays the options for the administration of those facilities installed at your site.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
This menu provides the following options (numbered items correspond to menu choices):&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Adding, deleting, or renaming procedure names on a list of user-written procedures that produce reports&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Determining command options and setting defaults for the File Management facility&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Input====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
To select an option from this menu, type the number of your choice after the Enter Number: prompt and then press the Enter key.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
To terminate the Facility Administration function and return to the Dictionary Administration main menu, press PF3 or issue the QUIT command. You can read the HELP text for this screen by pressing PF1 or by issuing the HELP command. Press Enter to read the HELP text and to exit from the last help screen.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Dictionary Reports administration====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Two distinct tasks comprise the administration of Dictionary Reports:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Maintaining a list of customized (also called &amp;quot;user-written&amp;quot;) reports through the Facility Administration facility&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Creating customized reports, which can be accomplished only from the Model 204 command prompt &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
This section describes both tasks.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The following screen is displayed when you select the following option from the Facility Administration menu:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;Dictionary Reports Administration &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Use this screen to add, rename, or delete a procedure name from the list of user-written procedures in the Dictionary Reports facility (DICTREPORT).&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;figure&amp;quot;&amp;gt;[[File:Dictionary_fig6-20.png|468px]]&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Input====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The Facility Administration facility prompts you to add, rename, or delete the procedure names for user-written reports. When you use this function, the names on the list displayed by the Dictionary Reports facility change. However, the names of Model 204 procedures for those reports are not affected. To change the name of the actual procedures, you must modify the procedure stored in TABLE D of the D204RPT file.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
To add a procedure name:&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Type an X in the prefix area for the Add Procedure Name prompt.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Use the tab or cursor keys to advance the cursor to the Enter Procedure Name: prompt. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Type the name of the procedure you want to add. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Press PF6 or issue the EXECUTE command.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
To rename a procedure:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Type an X in the prefix area for the Rename Procedure prompt. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Use the tab or cursor keys to advance the cursor. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Respond to the Enter Procedure Name: prompt by typing the name of the procedure you want to rename. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Advance the cursor to the prompt Rename Procedure to:, and type in the new name of the procedure. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Press PF6 or issue the EXECUTE command to process the rename.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;To delete a procedure name:&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Type an X in the prefix area for the &amp;quot;Delete procedure name&amp;quot; prompt.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Respond to the Enter Procedure Name prompt. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Press PF6 or issue the EXEcute command to proceed to the following confirmation screen.&lt;br /&gt;
&amp;lt;p class=&amp;quot;figure&amp;quot;&amp;gt;[[File:Dictionary_fig6-21.png|468px]]&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 name of the procedure is supplied by the system. Press PF6 or issue the DELETE command to complete the deletion, or press PF3 to cancel the deletion.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If you confirm the deletion, the procedure name no longer appears on the list of user-written procedures that the Dictionary Reports facility displays. However, the procedure remains in the D204RPT file, though it is no longer available to users. If you want to delete the procedure, you must remove it from the D204RPT file using Model 204 commands.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Creating customized reports====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The administrator can create customized reports to control the selection of dictionary records and to organize the reports according to the needs of your installation. For example, you might want a report that shows duplicate data records in your dictionary. No standard report shows that information. This section demonstrates how the dictionary administrator can write and name a customized (or user-written) report. Further on in this section there is an example of a procedure that produces a customized report.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Dictionary internal structure====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Two types of records are stored in METADATA. Control records (identified by REC=X field=value) are the template for each entity type; and entry records (identified by REC=D field=value) are the actual entity occurrences with data.   The following example shows a METADATA control record for an ACCOUNT entity type:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;&lt;br /&gt;
REC           =X&lt;br /&gt;
ENTITY        =ACCOUNT&lt;br /&gt;
REQ           =NAME&lt;br /&gt;
REQ           =CREATE DATE&lt;br /&gt;
REQ           =LAST UPDATED&lt;br /&gt;
REQ           =UPDATED-BY&lt;br /&gt;
REQ           =DES&lt;br /&gt;
SYS.ATTRIB    =OUTPUT FILE&lt;br /&gt;
SYS.XREF      =FACILITY&lt;br /&gt;
SYS.REFTYPE   =&amp;amp;#126;USES&lt;br /&gt;
ATTRIB        =KEYWORD&lt;br /&gt;
ATTRIB        =ALIAS&lt;br /&gt;
ATTRIB        =PROC FILE NAME&lt;br /&gt;
XREF          =VIEW&lt;br /&gt;
REFTYPE       =&amp;amp;#126;OWNS&lt;br /&gt;
XREF          =VIEW&lt;br /&gt;
REFTYPE       =&amp;amp;#126;UPDATES &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The REQ values specify required attributes. SYS.ATTRIB values specify attributes controlled by Dictionary/204 facilities and ATTRIB values specify other attributes maintained through the DOCUMENT facility.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Within the dictionary system, the values of REQ, SYS.ATTRIB, and ATTRIB become field names in METADATA. Entry occurrences are stored using the value of the attribute as the field name. The value with that field name becomes the character string the user supplies during an &amp;quot;add entry&amp;quot; or &amp;quot;change entry&amp;quot; operation.&amp;lt;/p&amp;gt; &lt;br /&gt;
&amp;lt;p&amp;gt;XREF and REFTYPE and SYS.XREF and SYS.REFTYPE occur in pairs. XREF contains the values of entity types (one per XREF) and REFTYPE contains the name of the reference type to the entity type in the corresponding XREF field. A tilde (&amp;amp;#126;) by itself indicates a cross-reference. The tilde must also prefix any reference name.&amp;lt;/p&amp;gt; &lt;br /&gt;
&amp;lt;p&amp;gt;Values from XREF and REFTYPE are displayed on the screen to prompt the user for references to other entries. SYS.ATTRIB, SYS.XREF and SYS.REFTYPE values are maintained through specific Dictionary/204 facilities.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Sample Customized Report====&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;*****************************************************************&lt;br /&gt;
 * *&lt;br /&gt;
 * PROCEDURE NAME..........: USRN.DUPREPT *&lt;br /&gt;
 * VERSION.................: 1 *&lt;br /&gt;
 * PROCESSING SUMMARY......: SAMPLE USER WRITTEN REPORT, IT WILL *&lt;br /&gt;
 * READ METADATA AND LOOK FOR DUPLICATE DATA RECORDS AND *&lt;br /&gt;
 * DISPLAY RESULTS, IT THEN RETURNS TO USER WRITTEN REPORT *&lt;br /&gt;
 * MENU IN THE DICTREPORT FACILITY *&lt;br /&gt;
 * WRITTEN BY..............: RICK WAHLBERG *&lt;br /&gt;
 * modifying authors *&lt;br /&gt;
 * CALLED FROM.............: DIRN.USERREPT *&lt;br /&gt;
 * CALLS TO................: N/A *&lt;br /&gt;
 * INCLUDES................: N/A *&lt;br /&gt;
 * INCLUDED BY.............: N/A *&lt;br /&gt;
 * GLOBAL VARIABLES READ...: N/A *&lt;br /&gt;
 * GLOBAL VARIABLES SET....: N/A *&lt;br /&gt;
 * LOCAL VARIABLES READ....: N/A (used for subroutine procs *&lt;br /&gt;
 * LOCAL VARIABLES SET.....: N/A (to describe arguments *&lt;br /&gt;
 *****************************************************************&lt;br /&gt;
&lt;br /&gt;
 IF PAPR=Y,DIRO.DDRPTS&lt;br /&gt;
&lt;br /&gt;
 *&lt;br /&gt;
 BEGIN&lt;br /&gt;
 *&lt;br /&gt;
 VARIABLE.DECLARATIONS:&lt;br /&gt;
 *&lt;br /&gt;
 %ENTITY IS STRING LEN 20&lt;br /&gt;
 %NAME IS STRING LEN 255&lt;br /&gt;
 %CURREC IS FLOAT&lt;br /&gt;
 %DUP.FOUND IS FLOAT&lt;br /&gt;
 %RETRY IS FLOAT&lt;br /&gt;
 %CHOICE IS STRING LEN 70&lt;br /&gt;
 %INDEX IS FLOAT&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
 ERROR.MESSAGES:&lt;br /&gt;
 %GFMSG IS STRING LEN 50&lt;br /&gt;
 %GFMSG = &#039;GLOBAL VARIABLE TABLE IS FULL.&#039;&lt;br /&gt;
 %USR001 IS STRING LEN 60&lt;br /&gt;
 %USR001 = &#039;USR001 PA1 ENTERED ON SCREEN, REPORT IS CANCELLED&#039;&lt;br /&gt;
 %USR002 IS STRING LEN 60&lt;br /&gt;
 %USR002 = &#039;USR002 UNRESOLVED ENQUEUE CONFLICT, REPORT HALTED.&#039;&lt;br /&gt;
&lt;br /&gt;
 ***********************************************************************&lt;br /&gt;
 * ON UNIT DECLARATIONS&lt;br /&gt;
 ***********************************************************************&lt;br /&gt;
 ON.ATTN:&lt;br /&gt;
 ON ATTN&lt;br /&gt;
 PRINT %USR001&lt;br /&gt;
 JUMP TO RETURN.TO.MENU&lt;br /&gt;
 END ON&lt;br /&gt;
 ON.FIND.CONFLICT:&lt;br /&gt;
 ON FIND CONFLICT&lt;br /&gt;
 %RETRY = %RETRY + 1&lt;br /&gt;
 IF %RETRY &amp;amp;gt; 10 THEN&lt;br /&gt;
 PRINT %USR002&lt;br /&gt;
 AUDIT %USR002&lt;br /&gt;
 JUMP TO RETURN.TO.MENU&lt;br /&gt;
 ELSE RETRY&lt;br /&gt;
 END IF&lt;br /&gt;
 END ON&lt;br /&gt;
&lt;br /&gt;
 MAIN.LOGIC:&lt;br /&gt;
&lt;br /&gt;
 IN METADATA CLEAR LIST XRECS&lt;br /&gt;
&lt;br /&gt;
 FD.XREC: IN METADATA FD REC = X&lt;br /&gt;
 END FIND&lt;br /&gt;
 PLACE RECORDS IN FD.XREC ON LIST XRECS&lt;br /&gt;
 RELEASE RECORDS IN FD.XREC&lt;br /&gt;
&lt;br /&gt;
 FR.FD.XREC: FOR EACH RECORD ON LIST XRECS&lt;br /&gt;
 %ENTITY = ENTITY&lt;br /&gt;
 FD.DREC: IN METADATA FD REC = D AND ENTITY = %ENTITY&lt;br /&gt;
 END FIND&lt;br /&gt;
&lt;br /&gt;
 IN METADATA CLEAR LIST DRECS&lt;br /&gt;
 PLACE RECORDS IN FD.DREC ON LIST DRECS&lt;br /&gt;
 RELEASE RECORDS IN FD.DREC&lt;br /&gt;
 FR.FD.DREC: FOR EACH RECORD ON LIST DRECS&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 %NAME = NAME&lt;br /&gt;
 FD.DUP.DREC: IN METADATA FD REC=D&lt;br /&gt;
 ENTITY=%ENTITY&lt;br /&gt;
 NAME=%NAME&lt;br /&gt;
 END FIND&lt;br /&gt;
 CT.FD.DUP.DREC: CT FD.DUP.DREC&lt;br /&gt;
 IF COUNT IN CT.FD.DUP.DREC &amp;amp;gt; 1 THEN&lt;br /&gt;
 %DUP.FOUND = %DUP.FOUND + 1&lt;br /&gt;
 SKIP 2 LINES&lt;br /&gt;
 PRINT &#039; DUPLICATE RECORDS ON METADATA FOUND &#039; AT 10&lt;br /&gt;
 PRINT &#039;ENTITY TYPE IS: &#039; AND %ENTITY AND &#039; NAME IS: &#039; AND -&lt;br /&gt;
 %NAME&lt;br /&gt;
 FR FD.DUP.DREC&lt;br /&gt;
 %CURREC = $CURREC&lt;br /&gt;
 SKIP 1 LINE&lt;br /&gt;
 PRINT &#039;RECORD NUMBER: &#039; AND %CURREC&lt;br /&gt;
 PRINT &#039; CREATE DATE IS&#039; AND CREATE DATE&lt;br /&gt;
 PRINT &#039; LAST UPDATED &#039; AND LAST UPDATED&lt;br /&gt;
 PRINT &#039; UPDATED BY &#039; AND U&#039;PDATED-BY&#039;&lt;br /&gt;
 END FOR&lt;br /&gt;
 REMOVE RECORD FROM LIST DRECS&lt;br /&gt;
 END IF&lt;br /&gt;
 RELEASE RECORDS IN FD.DUP.DREC&lt;br /&gt;
 END FOR&lt;br /&gt;
 END FOR&lt;br /&gt;
 NUMBER.DUPS:&lt;br /&gt;
 SKIP 2 LINES&lt;br /&gt;
 PRINT &#039;NUMBER OF DUPLICATES FOUND IS: &#039; AND %DUP.FOUND&lt;br /&gt;
 RETURN.TO.MENU:&lt;br /&gt;
 ** NEXT STATEMENT WILL CAUSE RETURN TO USER WRITTEN REPORTS MENU&lt;br /&gt;
&lt;br /&gt;
 %CHOICE = &#039;DIRN.USERREPT&#039;&lt;br /&gt;
 IF $SETG(&#039;COMM&#039;,%CHOICE) THEN PRINT %GFMSG&lt;br /&gt;
 END IF&lt;br /&gt;
&lt;br /&gt;
 END &amp;lt;/nowiki&amp;gt;   &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====File Management options====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The following screen is displayed when you select the following option from the Facility Administration menu:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;File Management Options &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Use this screen to set command options and defaults for the File Management facility.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;figure&amp;quot;&amp;gt;[[File:Dictionary_fig6-22.png|468px]]&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Input====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
This screen enables you to determine the File Management command options supported at your site and to define the defaults for these options.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Type an X in the left column, to select the options that you want to make available at your site. Type an X in the column to the right of the option that you want to be the default. The default must be one of the options selected. (The previous screen shows the system default 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;Option&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;If you choose this option...&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;Active-Immediate Execution&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Dictionary/204 and Model 204 are synchronized and any change you make in the dictionary files is also made in the Model 204 database at the same time.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Active-Delayed Execution&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;File management facility updates the command&#039;s status as &amp;quot;pending.&amp;quot; These pending commands are implemented later while running the batch version of File Management (DDFIMCMD).&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Inactive: Generate Commands Only&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Dictionary/204 generates commands, but you must run them independently.&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If you choose this option, you must supply either the name of a directed output file (called a USE file, such as OUTFILE), or you must indicate that you want the commands stored in a procedure file. Select a procedure file by entering a file name at the Proc filename: prompt. &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;
The system manager can prevent users from issuing commands against files from outside of Dictionary/204 by setting the &amp;lt;var&amp;gt;[[SYSOPT parameter|SYSOPT]]&amp;lt;/var&amp;gt; parameter to the appropriate value.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Setting the parameter to prevent command execution outside of Dictionary/204 precludes selecting the Inactive execution mode.   &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Security administration==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The dictionary administrator uses the Security Administration function on the Dictionary Administration menu to specify the privileges of Dictionary/204 users. The administrator defines the privileges through the user&#039;s ACCOUNT entry in the dictionary. (The Dictionary/204 installation procedure gives the dictionary administrator user privileges for all the Dictionary/204 facilities.)&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
A user&#039;s privileges are authorized by facility. No distinction is made between update privileges and read-only privileges. Access to a facility implies the privileges to do whatever that facility allows. Dictionary/204 users, however, are limited by their Model 204 privileges, which override their ability to use certain features of the Dictionary/204 facilities. (For specific examples, see [[Dictionary/204 logon and commands#Security considerations|Security considerations]].)&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====PUBLIC account====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
During installation, an ACCOUNT entry named PUBLIC is defined by Dictionary/204. The PUBLIC account, as its name implies, shares its &amp;quot;user&amp;quot; privileges with all Dictionary/204 users. For example, if the administrator gives PUBLIC privileges to use Dictionary Reports, then all accounts become Dictionary Reports users.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The ACCOUNT entity type has an OUTPUT FILE attribute, indicating the device (usually a printer) to which output is sent when the user does not want it sent to the terminal. The default value for this attribute is the same as the default value of the PUBLIC account, which is set at installation. The value can be modified by the dictionary administrator by updating the PUBLIC account through the Security Administration screen. Users can also override the default value when using the Dictionary/204 facilities.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The administrator assigns user privileges for the PUBLIC account prior to assigning privileges for the accounts of individual users. This means PUBLIC facilities are assigned to each user automatically on the &amp;quot;Facility Profile&amp;quot; for each individual account (see the screen in [[#Defining, updating, and deleting ACCOUNT privileges|Defining, updating, and deleting ACCOUNT privileges]]).&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Selecting security administration====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Dictionary/204 displays the following screen shown when the dictionary administrator selects the Security Administration function from the Dictionary Administration menu:&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;figure&amp;quot;&amp;gt;[[File:Dictionary_fig6-23.png]] &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
This menu enables the administrator to define (add) a new account, update the privileges of an existing account, or delete an existing account.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The previous menu shows a sample selection: updating the privileges of the user whose account name is JLSMITH. This function works by providing an interface (see the following screen) that updates the ACCOUNT entry with the name JLSMITH.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Input====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
To make a selection from the menu, enter the number of your choice at the Enter Number: prompt and type the name of the account to be defined, updated, or deleted at the following prompt: Account: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If the administrator is assigning privileges to the PUBLIC account, for example, the name PUBLIC appears following the Account: prompt.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can process your menu selection by pressing Enter, which causes the following Security Administration screen to be displayed. You can also quit this facility by pressing PF3 or request HELP text by pressing PF1 (or issuing the HELP command). &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Defining, updating, and deleting ACCOUNT privileges====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Dictionary/204 displays a screen similar to the following when you select one of the options from the preceding menu.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;figure&amp;quot;&amp;gt;[[File:Dictionary_fig6-24.png]] &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The sample screen shows 12 facilities for which the account JLSMITH might be assigned privileges. You can scroll forward to display more facilities by pressing PF8.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
JLSMITH is the name that was entered at the Account: prompt on the previous menu. The heading on the screen shows that the update function was selected. When the delete function is selected, the screen heading reads &amp;quot;Deleting Security Profile for &amp;amp;lt;&amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;ACCOUNT name&amp;lt;/var&amp;gt;&amp;amp;gt;.&amp;quot; When the add function is selected, the screen heading reads &amp;quot;Security Profile for &amp;amp;lt;&amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;ACCOUNT name&amp;lt;/var&amp;gt;&amp;amp;gt;.&amp;quot;&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
In the prefix area, an X marks those facilities and products for which the ACCOUNT has user privileges. Facilities designated as PUBLIC can be used by all accounts. A &amp;quot;Not Installed&amp;quot; message (as shown in column two of the screen) indicates that the corresponding facility has not been installed with your Dictionary/204 product.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Input====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
To indicate that an ACCOUNT has user privileges for a facility, type an X in the prefix area:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;X DICTREPORT &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
To revoke facility privileges from the ACCOUNT, erase the X by blanking it out with the space bar or the Erase EOF key. Use the tab keys to move the cursor from one prefix line to the next.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If a facility is available to all Dictionary/204 users, the following word appears in column three, as shown in the sample screen, and an X appears in the prefix area for that facility:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;PUBLIC &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
As noted earlier, if the administrator has given the PUBLIC account user privileges for a facility, that privilege extends to all Dictionary/204 users and the word PUBLIC appears to the right of the facility (as shown on the screen).&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
To specify an alternative output destination (other than the user&#039;s terminal), type the device or file name at the prompt: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;Default Output Destination: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The alternative output destination is an option for the Dictionary/204 user when output to the terminal is not desired. This value is the default. (The system sets the default destination to the value of the OUTPUT FILE attribute specified for the PUBLIC account.) Normally, the user can change the output destination when using a facility. The Output Destination name must be from 1 to 30 characters. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
After filling in the screen, you can implement your selection by pressing PF12 (or issuing the END command), or cancel the request by pressing PF3 (or issuing the QUIT command).&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When the function you have selected on the menu has been processed, Dictionary/204 returns you to the Security Administration menu and displays the following message on the message line:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;Account &amp;amp;lt;&amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;ACCOUNT name&amp;lt;/var&amp;gt;&amp;amp;gt; has been &amp;amp;lt;&amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;function&amp;lt;/var&amp;gt;&amp;amp;gt; &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Commands====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
To issue a command, press the assigned PF key or type the command name at the prompt (===&amp;amp;gt;) and press Enter.&lt;br /&gt;
&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;Key&amp;lt;/th&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;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;PF1&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;HELp&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Provides online HELP text for this screen. You can read through a series of HELP screens, or exit from the last screen in the series, by pressing any 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;PF3&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;QUIt&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Terminates this function. You return to the Security Administration menu.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;PF6&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;DELete&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Deletes an account entry. This option is displayed only if the delete function is selected from the Security Administration menu.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;PF7&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;BACKward&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Scrolls backward through the list of facilities. This option appears at the bottom of the screen only if you have scrolled 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;PF8&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;FORward&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Scrolls forward through the list of facilities. This option appears at the bottom of the screen if there are more facilities to be displayed.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;PF12&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;END&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Implements the selection on the screen. You return to the Security Administration menu.&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;
==Printing a dictionary inventory==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can request a formatted, printed report of the entire contents of the dictionary. This facility reports on the attributes and references of all entries of each entity type. &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 processing time required to format and print the dictionary inventory can be quite long, depending upon the complexity and number of dictionary entries. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Select the following option from the Dictionary Administration menu:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;Inventory Report &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;The following screen appears:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;figure&amp;quot;&amp;gt;[[File:Dictionary_fig6-25.png]]&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;The screen shows the default output device. The Inventory Report is always sent to a printer; it cannot be displayed on your terminal.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt; &lt;br /&gt;
&amp;lt;li&amp;gt;To change the printer, type over the default value with the device name of another printer.&lt;br /&gt;
&amp;lt;/li&amp;gt; &lt;br /&gt;
&amp;lt;li&amp;gt;When you are satisfied with the output device, press Enter to proceed.&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;To cancel before printing starts, press PF3 to return to the Dictionary Administration menu.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;To cancel after printing starts, press PA1.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Upon completion of the report, the system returns you to the Dictionary Administration menu, where the following message is displayed:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;The Inventory Report has been sent to the output device&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
A sample entry from an Inventory Report follows.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The Dictionary Inventory Report is printed in sorted order. Each entry begins on a new page, as shown in the sample.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;figure&amp;quot;&amp;gt;[[File:Dictionary_fig6-26.png]] &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;figure&amp;quot;&amp;gt;[[File:Dictionary_fig6-27.png]] &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Duplication correction utilities==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Dictionary/204 provides a set of utilities for the dictionary administrator to use for verifying data integrity. These utilities are described in detail in this section. Use the utility to [[#Correcting duplicate entries or entity types|correct duplicate entity types or entries]] if any of the following error messages are generated during the operation of Dictionary/204:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Dictionary Administration facility message:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;DIA102 Duplicate entity types found, contact your &lt;br /&gt;
        Dictionary Administrator. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Documentation facility messages:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;DOC013 Duplicate entries found for the tagged name.&lt;br /&gt;
        Contact System Administrator.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;DOC015 Duplicate control records for this entity type.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Dictionary Reports facility message:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;DUPLICATE ENTRIES WERE FOUND FOR&lt;br /&gt;
ENTRY: RECORD_ONE&lt;br /&gt;
ENTITY: DUPRECORD&lt;br /&gt;
REPORT THIS TO YOUR DICTIONARY ADMINISTRATOR.&lt;br /&gt;
THIS REPORT HAS BEEN CANCELLED. &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;
The Dictionary administrator must supply the entity type and entry name for the entry in error when taking corrective action, as described in the following section.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Correcting duplicate entries or entity types===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Dictionary/204 provides a special routine, called DICN.CTRLDUP, which can be used to eliminate duplicate entries or entity types. This routine is distributed in the form of a Model 204 SOUL procedure that resides in the Dictionary/204 file M204PROC. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;To run DICN.CTRLDUP:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Stop Dictionary/204 and all its facilities, as described in [[Dictionary/204 administration#Starting and stopping the Dictionary/204 subsystems|Starting and stopping the Dictionary/204 subsystems]].&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Open the Dictionary/204 M204PROC file.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Run the procedure, using the Model 204 INCLUDE command (INCLUDE or I):&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;&amp;amp;gt; OPEN M204PROC&lt;br /&gt;
&amp;amp;gt; I DICN.CTRLDUP &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Model 204 automatically opens the Dictionary/204 METADATA file. The METADATA password prompt is displayed after the file is opened. Enter the password at the prompt or press Enter.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The procedure prompts you for the entity type (for example, FILE) and entry name (for example, PAYROLL) of the dictionary entry for which the duplicate record was found:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;*** FILE METADATA OPENED&lt;br /&gt;
??METADATA PASSWORD&lt;br /&gt;
$$ENTER ENTITY TYPE VALUE: &amp;amp;gt; FILE  &lt;br /&gt;
$$ENTER NAME IF FOR ENTRY RECORD: &amp;amp;gt; PAYROLL  &amp;lt;/nowiki&amp;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; If a password is required, you must supply an update password. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
If you are correcting a duplicate entity type, press Enter in response to the ENTER NAME IF FOR ENTRY RECORD prompt.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
DICN.CTRLDUP displays the duplicate records, as shown in the following [[#DICN.CTRLDUP example|example]]. Each entry is identified with a DDSTAT number. After the display has been completed, enter the DDSTAT number of the entity or entry record that you want to preserve:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;$$ENTER DDSTAT VALUE OF ENTRY YOU WISH TO KEEP: &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 procedure deletes the duplicate record and redisplays the record that is being preserved. You are prompted for the following:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;$$DO YOU WISH TO CONTINUE (Y/N)? &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Enter N to return to command level; enter Y to continue.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If the specified duplicate record cannot be found, DICN.CTRLDUP displays one of the following messages:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;**** NO DUPLICATES WERE FOUND FOR ENTITY&lt;br /&gt;
**** REQUEST FINISHED&lt;br /&gt;
&lt;br /&gt;
 *** NO DUPLICATES WERE FOUND FOR NAME ENTITY&lt;br /&gt;
**** REQUEST FINISHED &amp;lt;/nowiki&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
In this case, DICN.CTRLDUP displays the existing entity type or entry.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====DICN.CTRLDUP example====&lt;br /&gt;
&amp;lt;p&amp;gt;The following example uses DICN.CTRLDUP:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt; STOP DICTIONARY&lt;br /&gt;
&lt;br /&gt;
 OPEN M204PROC&lt;br /&gt;
 I DICN.CTRLDUP &lt;br /&gt;
 &lt;br /&gt;
 ENTER ENTITY TYPE VALUE: &amp;amp;gt; WIDGET &lt;br /&gt;
 ENTER NAME IF FOR ENTRY RECORD: &amp;amp;gt; SNX13 &lt;br /&gt;
 **** ENTRY RECORD FOLLOWS:&lt;br /&gt;
 ENTITY=WIDGET&lt;br /&gt;
 NAME=SNX13&lt;br /&gt;
 CREATE DATE=19 MAR 82&lt;br /&gt;
 DDSTAT=1&lt;br /&gt;
&lt;br /&gt;
 **** ENTRY RECORD FOLLOWS:&lt;br /&gt;
 ENTITY=WIDGET&lt;br /&gt;
 NAME=SNX13&lt;br /&gt;
 CREATE DATE=19 MAR 82&lt;br /&gt;
 DDSTAT=2&lt;br /&gt;
&lt;br /&gt;
 **** ENTRY RECORD FOLLOWS:&lt;br /&gt;
 ENTITY=WIDGET&lt;br /&gt;
 NAME=SNX13&lt;br /&gt;
 CREATE DATE=19 MAR 82&lt;br /&gt;
 LAST UPDATED=22 MAR 82&lt;br /&gt;
 KEYWORD=WID&lt;br /&gt;
 DDSTAT=3&lt;br /&gt;
&lt;br /&gt;
 $$ENTER DDSTAT VALUE OF ENTRY YOU WISH TO KEEP: &amp;amp;gt;3  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 **** THIS IS THE CURRENT ENTRY FOR SNX13 WIDGET:  ENTITY=WIDGET&lt;br /&gt;
 NAME=SNX13&lt;br /&gt;
 CREATE DATE=19 MAR 82&lt;br /&gt;
 LAST UPDATED=22 MAR 82&lt;br /&gt;
 KEYWORD=WID&lt;br /&gt;
&lt;br /&gt;
 *** REQUEST FINISHED ***&lt;br /&gt;
&lt;br /&gt;
 $$DO YOU WISH TO CONTINUE (Y/N)? &amp;amp;gt; N  &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; A sample report is provided (USRN.DUPREPT) that reports on duplicate entries in the dictionary. It is available as a customized report in Dictionary Reports (see [[Dictionary/204 reports#Selecting a user-written (customized) report|Selecting a user-written (customized) report]]). &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Correcting duplicate relationships===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Dictionary/204 provides a special routine, called DICN.CLEANLNK, to eliminate duplicate relationships in the DATALINK file. This routine is distributed in the form of a Model 204 SOUL procedure that resides in the Dictionary/204 file, M204PROC. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;To run DICN.CLEANLNK:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Stop Dictionary/204 and all its facilities, as discussed in [[#Starting and stopping the Dictionary/204 subsystems|Starting and stopping the Dictionary/204 subsystems]].&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Open the Dictionary/204 files DATALINK and M204PROC.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Run the procedure using the Model 204 INCLUDE command (INCLUDE or I):&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;&amp;amp;gt; OPEN DATALINK&lt;br /&gt;
(enter update password if secured)&lt;br /&gt;
OPEN M204PROC&lt;br /&gt;
(enter password if secured)&lt;br /&gt;
&lt;br /&gt;
 &amp;amp;gt; I DICN.CLEANLNK &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
DICN.CLEANLNK displays the current number of entries found in DATALINK:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;THERE ARE # REFERENCES CURRENTLY STORED. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The procedure then deletes any duplicate reference entries found.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;At the completion of the request another count is displayed:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;THERE ARE # RESULTING REFERENCES. &amp;lt;/p&amp;gt;&lt;br /&gt;
====DICN.CLEANLNK example====&lt;br /&gt;
&amp;lt;p&amp;gt;The following example uses DICN.CLEANLNK:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;&amp;amp;gt; O DATALINK &lt;br /&gt;
*** M204.0620: FILE DATALINK OPENED &lt;br /&gt;
&amp;amp;gt; O M204PROC  &lt;br /&gt;
*** M204.0620: FILE M204PROC OPENED &lt;br /&gt;
&amp;amp;gt; I DICN.CLEANLNK  &lt;br /&gt;
THERE ARE 1293 REFERENCES CURRENTLY STORED.&lt;br /&gt;
THERE ARE 1289 RESULTING REFERENCES.&lt;br /&gt;
*** M204.0172: END OF UPDATE 7 at 10:29:57.45&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
{{Template: Dictionary/204 topic list}}&lt;br /&gt;
&lt;br /&gt;
[[Category: Dictionary/204]]&lt;/div&gt;</summary>
		<author><name>JDamon</name></author>
	</entry>
	<entry>
		<id>https://m204wiki.rocketsoftware.com/index.php?title=APSYSEC_parameter&amp;diff=120575</id>
		<title>APSYSEC parameter</title>
		<link rel="alternate" type="text/html" href="https://m204wiki.rocketsoftware.com/index.php?title=APSYSEC_parameter&amp;diff=120575"/>
		<updated>2025-05-09T22:10:56Z</updated>

		<summary type="html">&lt;p&gt;JDamon: /* Description */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:APSYSEC parameter subtitle}}&lt;br /&gt;
&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;X&#039;00&#039;&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;User 0 CCAIN parameters&lt;br /&gt;
&amp;lt;dt&amp;gt;Related products&lt;br /&gt;
&amp;lt;dd&amp;gt;Prior to Version 7.5 of [[Model 204]], this parameter required the &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;SirSafe&amp;lt;/var&amp;gt; product.&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;[[Sirius Mods]]&amp;lt;/var&amp;gt; 6.7&lt;br /&gt;
&amp;lt;/dl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
The &amp;lt;var&amp;gt;APSYSEC&amp;lt;/var&amp;gt; parameter makes it possible for a system manager to enter &amp;lt;var&amp;gt;[[SUBSYSMGMT]]&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;DICTADMIN ([[Dictionary/204 administration]])&amp;lt;/var&amp;gt; without &lt;br /&gt;
prior authorization.  It also allows a system manager to &amp;lt;var&amp;gt;[[START command: Starting an application subsystem|START]]&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;[[STOP command: Stopping an application subsystem|STOP]]&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;[[DEBUG command|DEBUG]]&amp;lt;/var&amp;gt;, or &amp;lt;var&amp;gt;[[TEST command|TEST]]&amp;lt;/var&amp;gt; any PUBLIC or SEMI-PUBLIC subsystem (not PRIVATE), without having to&lt;br /&gt;
add the system manager to the [[SCLASS]] authorized to do these things.&lt;br /&gt;
&lt;br /&gt;
For versions of Model&amp;amp;nbsp;204 prior to 7.5, setting this parameter has no effect at sites not authorized for [[SirSafe]].&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;var&amp;gt;APSYSEC&amp;lt;/var&amp;gt; parameter is a bitmask parameter where the bits mean:&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;X&#039;01&#039;&amp;lt;/th&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;td&amp;gt;System managers are allowed to enter SUBSYSMGMT and DICTADMIN without prior authorization. System managers are also allowed to &amp;lt;var&amp;gt;START&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;STOP&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;DEBUG&amp;lt;/var&amp;gt;, or &amp;lt;var&amp;gt;TEST&amp;lt;/var&amp;gt; any PUBLIC or SEMI-PUBLIC subsystem (not PRIVATE).&lt;br /&gt;
&lt;br /&gt;
System managers cannot use SUBSYSMGMT or DICTADMIN unless another    &lt;br /&gt;
system manager, who has privileges to use those subsystems, gives     &lt;br /&gt;
them access through SUBSYSMGMT and DICTADMIN. When employee turnover &lt;br /&gt;
and retirements leave no one with those privileges, new system       &lt;br /&gt;
managers cannot get access.  This option solves that problem.                                        &lt;br /&gt;
&lt;br /&gt;
In addition to those privileges, the authority to issue START, STOP, TEST and DEBUG &lt;br /&gt;
commands saves the effort of adding a system manager to a privileged&lt;br /&gt;
SCLASS in every subsystem in an Online so that the system manager could&lt;br /&gt;
at least start and stop the subsystems &amp;amp;mdash; a common thing for system&lt;br /&gt;
managers to need to do.&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
In fact, if no users other than system managers need to start or stop&lt;br /&gt;
subsystems, this can eliminate the need to even have sclasses in a subsystem to allow starting or stopping of the subsystem.&lt;br /&gt;
In some cases, eliminating this need can reduce the subsystem definition to&lt;br /&gt;
a single default sclass, which has performance benefits &amp;amp;mdash; no sclass&lt;br /&gt;
lookup is required when a user enters a subsystem, and no sclass-specific&lt;br /&gt;
compilations are done for the procedures in the subsystem.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Because of the overhead associated with multiple sclasses in a&lt;br /&gt;
subsystem (not huge, but possibly measurable), some sites take the risk&lt;br /&gt;
of adding &amp;lt;var&amp;gt;START&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;STOP&amp;lt;/var&amp;gt; privileges (and perhaps &amp;lt;var&amp;gt;TEST&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;DEBUG&amp;lt;/var&amp;gt;) to the one and only sclass for a subsystem.&lt;br /&gt;
This, of course, means that any user can start and stop the subsystem, which might not be ideal from a control or security perspective. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The &amp;lt;var&amp;gt;APSYSEC&amp;lt;/var&amp;gt; parameter allows such a site to keep one sclass but remove the risk.&lt;br /&gt;
&amp;lt;var&amp;gt;START&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;STOP&amp;lt;/var&amp;gt; privileges can be removed from the default/only sclass for a&lt;br /&gt;
subsystem, and only system managers (or users running subsystems that give them system manager privileges) can start or stop subsystems.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
To continue using Model 204&#039;s traditional fine-grained control of granting access to run SUBSYSMGMT and DICTADMIN through those subsystems and granting&lt;br /&gt;
control of &amp;lt;var&amp;gt;START&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;STOP&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;TEST&amp;lt;/var&amp;gt;, and &amp;lt;var&amp;gt;DEBUG&amp;lt;/var&amp;gt; privileges, the &amp;lt;var&amp;gt;APSYSEC&amp;lt;/var&amp;gt; X&#039;01&#039; bit should &amp;lt;i&amp;gt;&amp;lt;strong&amp;gt;not&amp;lt;/strong&amp;gt;&amp;lt;/i&amp;gt; be set.&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;
&amp;lt;!-- APSYXMM - Deprecated --&amp;gt;&lt;br /&gt;
&amp;lt;!-- APSYXMP - deprecated --&amp;gt;&lt;br /&gt;
[[Category:System parameters]]&lt;br /&gt;
[[Category:Parameters]]&lt;/div&gt;</summary>
		<author><name>JDamon</name></author>
	</entry>
	<entry>
		<id>https://m204wiki.rocketsoftware.com/index.php?title=APSYSEC_parameter&amp;diff=120574</id>
		<title>APSYSEC parameter</title>
		<link rel="alternate" type="text/html" href="https://m204wiki.rocketsoftware.com/index.php?title=APSYSEC_parameter&amp;diff=120574"/>
		<updated>2025-05-09T22:09:21Z</updated>

		<summary type="html">&lt;p&gt;JDamon: /* Description */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:APSYSEC parameter subtitle}}&lt;br /&gt;
&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;X&#039;00&#039;&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;User 0 CCAIN parameters&lt;br /&gt;
&amp;lt;dt&amp;gt;Related products&lt;br /&gt;
&amp;lt;dd&amp;gt;Prior to Version 7.5 of [[Model 204]], this parameter required the &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;SirSafe&amp;lt;/var&amp;gt; product.&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;[[Sirius Mods]]&amp;lt;/var&amp;gt; 6.7&lt;br /&gt;
&amp;lt;/dl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
The &amp;lt;var&amp;gt;APSYSEC&amp;lt;/var&amp;gt; parameter makes it possible for a system manager to enter &amp;lt;var&amp;gt;[[SUBSYSMGMT]]&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;DICTADMIN ([[Dictionary/204 administration]])&amp;lt;/var&amp;gt; without &lt;br /&gt;
prior authorization.  It also allows a system manager to &amp;lt;var&amp;gt;[[START command: Starting an application subsystem|START]]&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;[[STOP command: Stopping an application subsystem|STOP]]&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;[[DEBUG command|DEBUG]]&amp;lt;/var&amp;gt;, or &amp;lt;var&amp;gt;[[TEST command|TEST]]&amp;lt;/var&amp;gt; any PUBLIC or SEMI-PUBLIC subsystem (not PRIVATE), without having to&lt;br /&gt;
add the system manager to the [[SCLASS]] authorized to do these things.&lt;br /&gt;
&lt;br /&gt;
For versions of Model&amp;amp;nbsp;204 prior to 7.5, setting this parameter has no effect at sites not authorized for [[SirSafe]].&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;var&amp;gt;APSYSEC&amp;lt;/var&amp;gt; parameter is a bitmask parameter where the bits mean:&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;X&#039;01&#039;&amp;lt;/th&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;td&amp;gt;System managers are allowed to enter SUBSYSMGMT and DICTADMIN without prior authorization. System managers are also allowed to &amp;lt;var&amp;gt;START&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;STOP&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;DEBUG&amp;lt;/var&amp;gt;, or &amp;lt;var&amp;gt;TEST&amp;lt;/var&amp;gt; any PUBLIC or SEMI-PUBLIC subsystem (not PRIVATE).&lt;br /&gt;
&lt;br /&gt;
System managers cannot use SUBSYSMGMT or DICTADMIN unless another    &lt;br /&gt;
system manager, who has privileges to use those subsystems, gives     &lt;br /&gt;
them access through SUBSYSMGMT and DICTADMIN. When employee turnover &lt;br /&gt;
and retirements leave no one with those privileges, new system       &lt;br /&gt;
managers cannot get access.  This option solves that problem.                                        &lt;br /&gt;
&lt;br /&gt;
In addition to those privileges, the authority to issue START, STOP, TEST and DEBUG &lt;br /&gt;
commands saves the effort of adding a system manager to a privileged&lt;br /&gt;
SCLASS in every subsystem in an Online so that the system manager could&lt;br /&gt;
at least start and stop the subsystems &amp;amp;mdash; a common thing for system&lt;br /&gt;
managers to need to do.&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
In fact, if no users other than system managers need to start or stop&lt;br /&gt;
subsystems, this can eliminate the need to even have sclasses in a subsystem to allow starting or stopping of the subsystem.&lt;br /&gt;
In some cases, eliminating this need can reduce the subsystem definition to&lt;br /&gt;
a single default sclass, which has performance benefits &amp;amp;mdash; no sclass&lt;br /&gt;
lookup is required when a user enters a subsystem, and no sclass-specific&lt;br /&gt;
compilations are done for the procedures in the subsystem.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Because of the overhead associated with multiple sclasses in a&lt;br /&gt;
subsystem (not huge, but possibly measurable), some sites take the risk&lt;br /&gt;
of adding &amp;lt;var&amp;gt;START&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;STOP&amp;lt;/var&amp;gt; privileges (and perhaps &amp;lt;var&amp;gt;TEST&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;DEBUG&amp;lt;/var&amp;gt;) to the one and only sclass for a subsystem.&lt;br /&gt;
This, of course, means that any user can start and stop the subsystem, which might not be ideal from a control or security perspective. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The &amp;lt;var&amp;gt;APSYSEC&amp;lt;/var&amp;gt; parameter allows such a site to keep one sclass but remove the risk.&lt;br /&gt;
&amp;lt;var&amp;gt;START&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;STOP&amp;lt;/var&amp;gt; privileges can be removed from the default/only sclass for a&lt;br /&gt;
subsystem, and only system managers (or users running subsystems that give them system manager privileges) can start or stop subsystems.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
To continue using Model 204&#039;s traditional fine-grained control of granting access to run SUBSYSMGMT and DICTADMIN through those subsystems and grant&lt;br /&gt;
control of &amp;lt;var&amp;gt;START&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;STOP&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;TEST&amp;lt;/var&amp;gt;, and &amp;lt;var&amp;gt;DEBUG&amp;lt;/var&amp;gt; privileges, the &amp;lt;var&amp;gt;APSYSEC&amp;lt;/var&amp;gt; X&#039;01&#039; bit should &amp;lt;i&amp;gt;&amp;lt;strong&amp;gt;not&amp;lt;/strong&amp;gt;&amp;lt;/i&amp;gt; be set.&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;
&amp;lt;!-- APSYXMM - Deprecated --&amp;gt;&lt;br /&gt;
&amp;lt;!-- APSYXMP - deprecated --&amp;gt;&lt;br /&gt;
[[Category:System parameters]]&lt;br /&gt;
[[Category:Parameters]]&lt;/div&gt;</summary>
		<author><name>JDamon</name></author>
	</entry>
	<entry>
		<id>https://m204wiki.rocketsoftware.com/index.php?title=APSYSEC_parameter&amp;diff=120573</id>
		<title>APSYSEC parameter</title>
		<link rel="alternate" type="text/html" href="https://m204wiki.rocketsoftware.com/index.php?title=APSYSEC_parameter&amp;diff=120573"/>
		<updated>2025-05-09T22:00:33Z</updated>

		<summary type="html">&lt;p&gt;JDamon: /* Description */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:APSYSEC parameter subtitle}}&lt;br /&gt;
&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;X&#039;00&#039;&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;User 0 CCAIN parameters&lt;br /&gt;
&amp;lt;dt&amp;gt;Related products&lt;br /&gt;
&amp;lt;dd&amp;gt;Prior to Version 7.5 of [[Model 204]], this parameter required the &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;SirSafe&amp;lt;/var&amp;gt; product.&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;[[Sirius Mods]]&amp;lt;/var&amp;gt; 6.7&lt;br /&gt;
&amp;lt;/dl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
The &amp;lt;var&amp;gt;APSYSEC&amp;lt;/var&amp;gt; parameter makes it possible for a system manager to enter &amp;lt;var&amp;gt;[[SUBSYSMGMT]]&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;DICTADMIN ([[Dictionary/204 administration]])&amp;lt;/var&amp;gt; without &lt;br /&gt;
prior authorization.  It also allows a system manager to &amp;lt;var&amp;gt;[[START command: Starting an application subsystem|START]]&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;[[STOP command: Stopping an application subsystem|STOP]]&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;[[DEBUG command|DEBUG]]&amp;lt;/var&amp;gt;, or &amp;lt;var&amp;gt;[[TEST command|TEST]]&amp;lt;/var&amp;gt; any PUBLIC or SEMI-PUBLIC subsystem (not PRIVATE), without having to&lt;br /&gt;
add the system manager to the [[SCLASS]] authorized to do these things.&lt;br /&gt;
&lt;br /&gt;
For versions of Model&amp;amp;nbsp;204 prior to 7.5, setting this parameter has no effect at sites not authorized for [[SirSafe]].&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;var&amp;gt;APSYSEC&amp;lt;/var&amp;gt; parameter is a bitmask parameter where the bits mean:&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;X&#039;01&#039;&amp;lt;/th&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;td&amp;gt;System managers are allowed to enter SUBSYSMGMT and DICTADMIN without prior authorization. System managers are also allowed to &amp;lt;var&amp;gt;START&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;STOP&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;DEBUG&amp;lt;/var&amp;gt;, or &amp;lt;var&amp;gt;TEST&amp;lt;/var&amp;gt; any PUBLIC or SEMI-PUBLIC subsystem (not PRIVATE).&lt;br /&gt;
&lt;br /&gt;
System managers cannot use SUBSYSMGMT or DICTADMIN unless another    &lt;br /&gt;
system manager, who has privileges to use those subsystems, gives     &lt;br /&gt;
them access through SUBSYSMGMT and DICTADMIN. When employee turnover &lt;br /&gt;
and retirements leave no one with those privileges, new system       &lt;br /&gt;
managers cannot get access.                                          &lt;br /&gt;
&lt;br /&gt;
In addition to those privileges, the authority to issue START, STOP, TEST and DEBUG &lt;br /&gt;
commands saves the effort of adding a system manager to a privileged&lt;br /&gt;
SCLASS in every subsystem in an Online so that the system manager could&lt;br /&gt;
at least start and stop the subsystems &amp;amp;mdash; a common thing for system&lt;br /&gt;
managers to need to do.&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
In fact, if no users other than system managers need to start or stop&lt;br /&gt;
subsystems, this can eliminate the need to even have sclasses in a subsystem to allow starting or stopping of the subsystem.&lt;br /&gt;
In some cases, eliminating this need can reduce the subsystem definition to&lt;br /&gt;
a single default sclass, which has performance benefits &amp;amp;mdash; no sclass&lt;br /&gt;
lookup is required when a user enters a subsystem, and no sclass-specific&lt;br /&gt;
compilations are done for the procedures in the subsystem.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Because of the overhead associated with multiple sclasses in a&lt;br /&gt;
subsystem (not huge, but possibly measurable), some sites take the risk&lt;br /&gt;
of adding &amp;lt;var&amp;gt;START&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;STOP&amp;lt;/var&amp;gt; privileges (and perhaps &amp;lt;var&amp;gt;TEST&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;DEBUG&amp;lt;/var&amp;gt;) to the one and only sclass for a subsystem.&lt;br /&gt;
This, of course, means that any user can start and stop the subsystem, which might not be ideal from a control or security perspective. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The &amp;lt;var&amp;gt;APSYSEC&amp;lt;/var&amp;gt; parameter allows such a site to keep one sclass but remove the risk.&lt;br /&gt;
&amp;lt;var&amp;gt;START&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;STOP&amp;lt;/var&amp;gt; privileges can be removed from the default/only sclass for a&lt;br /&gt;
subsystem, and only system managers (or users running subsystems that give them system manager privileges) can start or stop subsystems.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
To continue using Model 204&#039;s traditional fine-grained control of granting access to run SUBSYSMGMT and DICTADMIN through those subsystems and grant&lt;br /&gt;
control of &amp;lt;var&amp;gt;START&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;STOP&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;TEST&amp;lt;/var&amp;gt;, and &amp;lt;var&amp;gt;DEBUG&amp;lt;/var&amp;gt; privileges, the &amp;lt;var&amp;gt;APSYSEC&amp;lt;/var&amp;gt; X&#039;01&#039; bit should &amp;lt;i&amp;gt;&amp;lt;strong&amp;gt;not&amp;lt;/strong&amp;gt;&amp;lt;/i&amp;gt; be set.&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;
&amp;lt;!-- APSYXMM - Deprecated --&amp;gt;&lt;br /&gt;
&amp;lt;!-- APSYXMP - deprecated --&amp;gt;&lt;br /&gt;
[[Category:System parameters]]&lt;br /&gt;
[[Category:Parameters]]&lt;/div&gt;</summary>
		<author><name>JDamon</name></author>
	</entry>
	<entry>
		<id>https://m204wiki.rocketsoftware.com/index.php?title=APSYSEC_parameter&amp;diff=120572</id>
		<title>APSYSEC parameter</title>
		<link rel="alternate" type="text/html" href="https://m204wiki.rocketsoftware.com/index.php?title=APSYSEC_parameter&amp;diff=120572"/>
		<updated>2025-05-09T17:06:10Z</updated>

		<summary type="html">&lt;p&gt;JDamon: /* Description */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:APSYSEC parameter subtitle}}&lt;br /&gt;
&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;X&#039;00&#039;&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;User 0 CCAIN parameters&lt;br /&gt;
&amp;lt;dt&amp;gt;Related products&lt;br /&gt;
&amp;lt;dd&amp;gt;Prior to Version 7.5 of [[Model 204]], this parameter required the &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;SirSafe&amp;lt;/var&amp;gt; product.&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;[[Sirius Mods]]&amp;lt;/var&amp;gt; 6.7&lt;br /&gt;
&amp;lt;/dl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
The &amp;lt;var&amp;gt;APSYSEC&amp;lt;/var&amp;gt; parameter makes it possible for a system manager to enter &amp;lt;var&amp;gt;[[SUBSYSMGMT]]&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;DICTADMIN ([[Dictionary/204 administration]])&amp;lt;/var&amp;gt; without &lt;br /&gt;
prior authorization.  It also allows a system manager to &amp;lt;var&amp;gt;[[START command: Starting an application subsystem|START]]&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;[[STOP command: Stopping an application subsystem|STOP]]&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;[[DEBUG command|DEBUG]]&amp;lt;/var&amp;gt;, or &amp;lt;var&amp;gt;[[TEST command|TEST]]&amp;lt;/var&amp;gt; any PUBLIC or SEMI-PUBLIC subsystem (not PRIVATE), without having to&lt;br /&gt;
add the system manager to the [[SCLASS]] authorized to do these things.&lt;br /&gt;
&lt;br /&gt;
For versions of Model&amp;amp;nbsp;204 prior to 7.5, setting this parameter has no effect at sites not authorized for [[SirSafe]].&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;var&amp;gt;APSYSEC&amp;lt;/var&amp;gt; parameter is a bitmask parameter where the bits mean:&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;X&#039;01&#039;&amp;lt;/th&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;td&amp;gt;System managers are allowed to enter SUBSYSMGMT and DICTADMIN without prior authorization. System managers are also allowed to &amp;lt;var&amp;gt;START&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;STOP&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;DEBUG&amp;lt;/var&amp;gt;, or &amp;lt;var&amp;gt;TEST&amp;lt;/var&amp;gt; any PUBLIC or SEMI-PUBLIC subsystem (not PRIVATE).&lt;br /&gt;
This saves the effort of adding a system manager to a privileged&lt;br /&gt;
SCLASS in every subsystem in an Online so that the system manager could&lt;br /&gt;
at least start and stop the subsystems &amp;amp;mdash; a common thing for system&lt;br /&gt;
managers to need to do.&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
In fact, if no users other than system managers need to start or stop&lt;br /&gt;
subsystems, this can eliminate the need to even have sclasses in a subsystem to allow starting or stopping of the subsystem.&lt;br /&gt;
In some cases, eliminating this need can reduce the subsystem definition to&lt;br /&gt;
a single default sclass, which has performance benefits &amp;amp;mdash; no sclass&lt;br /&gt;
lookup is required when a user enters a subsystem, and no sclass-specific&lt;br /&gt;
compilations are done for the procedures in the subsystem.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Because of the overhead associated with multiple sclasses in a&lt;br /&gt;
subsystem (not huge, but possibly measurable), some sites take the risk&lt;br /&gt;
of adding &amp;lt;var&amp;gt;START&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;STOP&amp;lt;/var&amp;gt; privileges (and perhaps &amp;lt;var&amp;gt;TEST&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;DEBUG&amp;lt;/var&amp;gt;) to the one and only sclass for a subsystem.&lt;br /&gt;
This, of course, means that any user can start and stop the subsystem, which might not be ideal from a control or security perspective. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The &amp;lt;var&amp;gt;APSYSEC&amp;lt;/var&amp;gt; parameter allows such a site to keep one sclass but remove the risk.&lt;br /&gt;
&amp;lt;var&amp;gt;START&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;STOP&amp;lt;/var&amp;gt; privileges can be removed from the default/only sclass for a&lt;br /&gt;
subsystem, and only system managers (or users running subsystems that give them system manager privileges) can start or stop subsystems.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
To continue using Model 204&#039;s traditional fine-grained&lt;br /&gt;
control of &amp;lt;var&amp;gt;START&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;STOP&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;TEST&amp;lt;/var&amp;gt;, and &amp;lt;var&amp;gt;DEBUG&amp;lt;/var&amp;gt; privileges, the &amp;lt;var&amp;gt;APSYSEC&amp;lt;/var&amp;gt; X&#039;01&#039; bit should &amp;lt;i&amp;gt;&amp;lt;strong&amp;gt;not&amp;lt;/strong&amp;gt;&amp;lt;/i&amp;gt; be set.&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;
&amp;lt;!-- APSYXMM - Deprecated --&amp;gt;&lt;br /&gt;
&amp;lt;!-- APSYXMP - deprecated --&amp;gt;&lt;br /&gt;
[[Category:System parameters]]&lt;br /&gt;
[[Category:Parameters]]&lt;/div&gt;</summary>
		<author><name>JDamon</name></author>
	</entry>
	<entry>
		<id>https://m204wiki.rocketsoftware.com/index.php?title=M204.0473&amp;diff=120553</id>
		<title>M204.0473</title>
		<link rel="alternate" type="text/html" href="https://m204wiki.rocketsoftware.com/index.php?title=M204.0473&amp;diff=120553"/>
		<updated>2025-04-08T17:13:04Z</updated>

		<summary type="html">&lt;p&gt;JDamon: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:M204.0473 skeleton}}&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;LI&amp;gt;If the message reports a specific subsystem name, that subsystem could not be initialized because of an error.&amp;lt;/LI&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;LI&amp;gt;If the message is issued by User 0 during Model&amp;amp;nbsp;204 initialization and it reports &amp;lt;code&amp;gt;SUBSYSTEMS&amp;lt;/code&amp;gt;, APSY initialization failed, and APSY subsystems will not be available during this run.  Otherwise, &amp;lt;code&amp;gt;subsysName&amp;lt;/code&amp;gt; has failed to initialize.&amp;lt;/LI&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;LI&amp;gt;If this message is preceded by the following message, then the user attempted to start a suspended subsystem:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;M204.2661: SUBSYSTEM &amp;lt;i&amp;gt;name&amp;lt;/i&amp;gt; SUSPENDED&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;P&amp;gt; &lt;br /&gt;
The user must issue the &amp;lt;var&amp;gt;RESUME SUBSYSTEM&amp;lt;/var&amp;gt; command to make the subsystem available for use.&amp;lt;/P&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;P&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Response:&amp;lt;/b&amp;gt; Notify the system manager.&amp;lt;/P&amp;gt;&lt;br /&gt;
&amp;lt;P&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;System manager response:&amp;lt;/b&amp;gt; If the message reports a specific subsystem, look at the audit trail or issue the &amp;lt;var&amp;gt;TEST&amp;lt;/var&amp;gt; subsystem command to determine which error caused subsystem initialization to fail.&amp;lt;/P&amp;gt;&lt;br /&gt;
&amp;lt;P&amp;gt;&lt;br /&gt;
If the message reports &amp;lt;code&amp;gt;SUBSYSTEMS&amp;lt;/code&amp;gt;, there are two possible causes:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[[M204.0027]] was issued indicating that CCASYS contained non-Rocket supported procs or the CCASYS auxiliary procedure dictionary was full&amp;lt;/P&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;P&amp;gt;or&amp;lt;/p&amp;gt; &lt;br /&gt;
&amp;lt;li&amp;gt;Server tables for User 0 are not large enough to initialize subsystem handling. Change the User 0 parameters so that its server table sizes are at least as large as the sizes listed in the description of message [[M204.1457]], and then restart Model&amp;amp;nbsp;204.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
{{Template:M204.0473 footer}}&lt;br /&gt;
&amp;lt;!-- skeleton as it was in pdf/UNABLE TO INITIALIZE [subsystem name | SUBSYSTEMS]/--&amp;gt;&lt;/div&gt;</summary>
		<author><name>JDamon</name></author>
	</entry>
	<entry>
		<id>https://m204wiki.rocketsoftware.com/index.php?title=M204.1457&amp;diff=120552</id>
		<title>M204.1457</title>
		<link rel="alternate" type="text/html" href="https://m204wiki.rocketsoftware.com/index.php?title=M204.1457&amp;diff=120552"/>
		<updated>2025-04-08T17:10:21Z</updated>

		<summary type="html">&lt;p&gt;JDamon: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:M204.1457 skeleton}}&lt;br /&gt;
&amp;lt;P&amp;gt;&lt;br /&gt;
Model 204 is unable to scan the CCASYS auxiliary procedure dictionary.  This scan is required to check the START SUBSYS command you entered against the list of application subsystems defined at your installation. The command is not executed and Subsystem processing is disabled for this run; Model 204 must be restarted to enable Subsystem processing.  This message can be caused by any of the following: &amp;lt;/P&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;LI&amp;gt;The system manager did not set the &amp;lt;var&amp;gt;SYSOPT&amp;lt;/var&amp;gt; X&#039;01&#039; bit.&amp;lt;/LI&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;LI&amp;gt;An error occurred during Model&amp;amp;nbsp;204 initialization. Early in CCAAUDIT, you may see&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;[[M204.0027]]: Aux procedure dictionary full&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;followed by&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;[[M204.0473]]: Unable to initialize subsysName&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;The [[M204.0027]] indicates that the CCASYS auxiliary procedure dictionary could not be built in memory because:&amp;lt;/p&amp;gt; &lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;unsupported procs have been stored in CCASYS; only Rocket supplied procs can be stored in CCASYS&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;building the CCASYS auxiliary procedure dictionary failed due to memory constraints&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt; &lt;br /&gt;
&amp;lt;LI&amp;gt;There is insufficient space in the server tables of the user who issued the command.&amp;lt;/LI&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;LI&amp;gt;A new Model&amp;amp;nbsp;204 release was installed, but a matching Dictionary/204 upgrade was either omitted or not performed properly.&amp;lt;/LI&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;LI&amp;gt;There is some problem with the CCASYS file.&amp;lt;/LI&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Response:&amp;lt;/b&amp;gt; Subsystems cannot be started unless there are 288 unused bytes in the global variable table (GTBL). The following sequence of commands may assist you in verifying and creating adequate GTBL space:&amp;lt;/P&amp;gt;&lt;br /&gt;
&amp;lt;TABLE&amp;gt;&lt;br /&gt;
&amp;lt;TR class=&amp;quot;head&amp;quot;&amp;gt;&amp;lt;TH&amp;gt;&amp;lt;P CLASS=&amp;quot;zcellheading&amp;quot;&amp;gt;Command &amp;lt;/P&amp;gt;&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;&amp;lt;P CLASS=&amp;quot;zcellheading&amp;quot;&amp;gt;Purpose&amp;lt;/P&amp;gt;&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;&amp;lt;P CLASS=&amp;quot;zcellbody&amp;quot;&amp;gt;CLEARG &amp;lt;/P&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&amp;lt;P CLASS=&amp;quot;zcellbody&amp;quot;&amp;gt;Deletes all global string variables from GTBL&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;TD&amp;gt;&amp;lt;P CLASS=&amp;quot;zcellbody&amp;quot;&amp;gt;CLEARGO &amp;lt;/P&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&amp;lt;P CLASS=&amp;quot;zcellbody&amp;quot;&amp;gt;Deletes all global objects from GTBL&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;TD&amp;gt;&amp;lt;P CLASS=&amp;quot;zcellbody&amp;quot;&amp;gt;VIEW LGTBL &amp;lt;/P&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&amp;lt;P CLASS=&amp;quot;zcellbody&amp;quot;&amp;gt;Displays the allocated size of GTBL&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;TD&amp;gt;&amp;lt;P CLASS=&amp;quot;zcellbody&amp;quot;&amp;gt;VIEW GTBLHASH &amp;lt;/P&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&amp;lt;P CLASS=&amp;quot;zcellbody&amp;quot;&amp;gt;Displays the number of GTBL hash buckets&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;TD&amp;gt;&amp;lt;P CLASS=&amp;quot;zcellbody&amp;quot;&amp;gt;UTABLE LGTBL=&amp;lt;i&amp;gt;value&amp;lt;/i&amp;gt; &amp;lt;/P&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&amp;lt;P CLASS=&amp;quot;zcellbody&amp;quot;&amp;gt;Resizes GTBL to the indicated size&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;
&amp;lt;P&amp;gt;&lt;br /&gt;
If GTBLHASH is zero, &amp;lt;code&amp;gt;LGTBL=288&amp;lt;/code&amp;gt; is sufficient. However, if GTBLHASH is nonzero, LGTBL should be at least &amp;lt;code&amp;gt;(288 + (10 * GTBLHASH))&amp;lt;/code&amp;gt;. The extra space represents 8 bytes of control information per hash bucket, plus an allowance&lt;br /&gt;
because hashing cannot distribute values exactly evenly. &amp;lt;/P&amp;gt;&lt;br /&gt;
&amp;lt;P&amp;gt;&lt;br /&gt;
If this error occurs when GTBL is large enough, use the VIEW command to verify that the sizes of the server tables are at least this size:&amp;lt;/P&amp;gt;&lt;br /&gt;
&amp;lt;TABLE&amp;gt;&lt;br /&gt;
&amp;lt;TR class=&amp;quot;head&amp;quot;&amp;gt;&amp;lt;TH&amp;gt;&amp;lt;P CLASS=&amp;quot;zcellheading&amp;quot;&amp;gt;Server table &amp;lt;/P&amp;gt;&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;&amp;lt;P CLASS=&amp;quot;zcellheading&amp;quot;&amp;gt;Size&amp;lt;/P&amp;gt;&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;LNTBL &amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;50&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;LQTBL&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;120&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;LSTBL&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;250&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;LVTBL &amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;50&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;LFSCB &amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;256&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 values of these parameters are adequate when this message is issued, contact the system manager.&amp;lt;/P&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;System manager response:&amp;lt;/b&amp;gt;Look at the audit trail for an earlier message identifying the cause of the error. Verify that CCASYS was installed properly. Was Dictionary/204 correctly installed or upgraded for this release? If CCASYS is physically&lt;br /&gt;
inconsistent, reorganize the file. The reorganization should include a reload of data and the procedures stored in CCASYS.&lt;br /&gt;
&amp;lt;/P&amp;gt;&lt;br /&gt;
{{Template:M204.1457 footer}}&lt;br /&gt;
&amp;lt;!-- skeleton as it was in pdf/UNABLE TO SCAN LIST OF SUBSYSTEM NAMES/--&amp;gt;&lt;/div&gt;</summary>
		<author><name>JDamon</name></author>
	</entry>
	<entry>
		<id>https://m204wiki.rocketsoftware.com/index.php?title=M204.0027&amp;diff=120551</id>
		<title>M204.0027</title>
		<link rel="alternate" type="text/html" href="https://m204wiki.rocketsoftware.com/index.php?title=M204.0027&amp;diff=120551"/>
		<updated>2025-04-08T16:59:13Z</updated>

		<summary type="html">&lt;p&gt;JDamon: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:M204.0027 skeleton}}&lt;br /&gt;
&amp;lt;P&amp;gt;This error can occur:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;During Model 204 initialization, if unsupported procs have been stored in CCASYS. Only Rocket supplied procs can be stored in CCASYS.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;or&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;When the &amp;lt;b&amp;gt;&amp;lt;i&amp;gt;START SUBSYS subsysName&amp;lt;/i&amp;gt;&amp;lt;/b&amp;gt; command is issued for a subsystem.  During a subsystem initialization, the subsystem procedure file is scanned twice. The first scan retrieves the number of subsystem procedures in order to allocate the subsystem&#039;s in-core procedure dictionary. The second scan retrieves the procedure information that is copied into the in-core procedure dictionary.  If another user adds a new subsystem procedure between the first procedure file scan and the second, the error can occur.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;b&amp;gt;Response:&amp;lt;/b&amp;gt; &lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Remove all non-ROCKET procs from CCASYS and restart Model 204.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Reissue the &amp;lt;i&amp;gt;&amp;lt;b&amp;gt;START SUBSYS subsysName&amp;lt;/i&amp;gt;&amp;lt;/b&amp;gt; command.  If this doesn&#039;t help, issue the &amp;lt;i&amp;gt;&amp;lt;b&amp;gt;DEBUG SUBSYS subsysName&amp;lt;/b&amp;gt;&amp;lt;/i&amp;gt; command; the messages produced may provide information pointing to the problem.&amp;lt;/LI&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
{{Template:M204.0027 footer}}&lt;br /&gt;
&amp;lt;!-- skeleton as it was in pdf/AUX PROCEDURE DICTIONARY FULL /--&amp;gt;&lt;/div&gt;</summary>
		<author><name>JDamon</name></author>
	</entry>
	<entry>
		<id>https://m204wiki.rocketsoftware.com/index.php?title=M204.0027&amp;diff=120550</id>
		<title>M204.0027</title>
		<link rel="alternate" type="text/html" href="https://m204wiki.rocketsoftware.com/index.php?title=M204.0027&amp;diff=120550"/>
		<updated>2025-04-08T16:53:21Z</updated>

		<summary type="html">&lt;p&gt;JDamon: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:M204.0027 skeleton}}&lt;br /&gt;
&amp;lt;P&amp;gt;This error can occur:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;During Model 204 initialization, if unsupported procs have been stored in CCASYS. Only Rocket supplied procs can be stored in CCASYS.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;or&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;When the START SUBSYS &amp;lt;i&amp;gt;subsysName&amp;lt;/i&amp;gt; command is issued for a subsystem.  During a subsystem initialization, the subsystem procedure file is scanned twice. The first scan retrieves the number of subsystem procedures in order to allocate the subsystem&#039;s in-core procedure dictionary. The second scan retrieves the procedure information that is copied into the in-core procedure dictionary.  If another user adds a new subsystem procedure between the first procedure file scan and the second, the error can occur.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;b&amp;gt;Response:&amp;lt;/b&amp;gt; &lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Remove all non-ROCKET procs from CCASYS and restart Model 204.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Reissue the START SUBSYS &amp;lt;i&amp;gt;subsysName&amp;lt;/i&amp;gt; command.  If this doesn&#039;t help, issue the &amp;lt;i&amp;gt;&#039;&#039;&#039;DEBUG SUBSYS subsysName&#039;&#039;&#039;&amp;lt;/i&amp;gt; command; the messages produced may provide information pointing to the problem.&amp;lt;/LI&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
{{Template:M204.0027 footer}}&lt;br /&gt;
&amp;lt;!-- skeleton as it was in pdf/AUX PROCEDURE DICTIONARY FULL /--&amp;gt;&lt;/div&gt;</summary>
		<author><name>JDamon</name></author>
	</entry>
	<entry>
		<id>https://m204wiki.rocketsoftware.com/index.php?title=M204.0027&amp;diff=120547</id>
		<title>M204.0027</title>
		<link rel="alternate" type="text/html" href="https://m204wiki.rocketsoftware.com/index.php?title=M204.0027&amp;diff=120547"/>
		<updated>2025-04-07T23:28:31Z</updated>

		<summary type="html">&lt;p&gt;JDamon: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:M204.0027 skeleton}}&lt;br /&gt;
&amp;lt;P&amp;gt;This error can occur:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;During Model 204 initialization, if unsupported procs have been stored in CCASYS. Only Rocket supplied procs can be stored in CCASYS.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;or&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;When the START SUBSYS &amp;lt;i&amp;gt;subsysName&amp;lt;/i&amp;gt; command is issued for a subsystem.  During a subsystem initialization, the subsystem procedure file is scanned twice. The first scan retrieves the number of subsystem procedures in order to allocate the subsystem&#039;s in-core procedure dictionary. The second scan retrieves the procedure information that is copied into the in-core procedure dictionary.  If another user adds a new subsystem procedure between the first procedure file scan and the second, the error can occur.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;b&amp;gt;Response:&amp;lt;/b&amp;gt; &lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Remove all non-ROCKET procs from CCASYS and restart Model 204.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Reissue the START SUBSYS &amp;lt;i&amp;gt;subsysName&amp;lt;/i&amp;gt; command.&amp;lt;/LI&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
{{Template:M204.0027 footer}}&lt;br /&gt;
&amp;lt;!-- skeleton as it was in pdf/AUX PROCEDURE DICTIONARY FULL /--&amp;gt;&lt;/div&gt;</summary>
		<author><name>JDamon</name></author>
	</entry>
	<entry>
		<id>https://m204wiki.rocketsoftware.com/index.php?title=M204.0027&amp;diff=120546</id>
		<title>M204.0027</title>
		<link rel="alternate" type="text/html" href="https://m204wiki.rocketsoftware.com/index.php?title=M204.0027&amp;diff=120546"/>
		<updated>2025-04-07T22:48:07Z</updated>

		<summary type="html">&lt;p&gt;JDamon: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:M204.0027 skeleton}}&lt;br /&gt;
&amp;lt;P&amp;gt;When Model 204 performs a subsystem initialization, the subsystem procedure file is scanned twice. The first scan retrieves the number of subsystem procedures in order to allocate the subsystem&#039;s in-core procedure dictionary. The second scan retrieves the procedure information that is copied into the in-core procedure dictionary. This error occurs when another user adds a new subsystem procedure between the first procedure file scan and the second. The error can also occur if unsupported procs have been stored in CCASYS; only Rocket supplied procs can be stored in CCASYS.&amp;lt;/P&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;b&amp;gt;Response:&amp;lt;/b&amp;gt; Reissue the subsystem command. &amp;lt;/p&amp;gt;&lt;br /&gt;
{{Template:M204.0027 footer}}&lt;br /&gt;
&amp;lt;!-- skeleton as it was in pdf/AUX PROCEDURE DICTIONARY FULL /--&amp;gt;&lt;/div&gt;</summary>
		<author><name>JDamon</name></author>
	</entry>
	<entry>
		<id>https://m204wiki.rocketsoftware.com/index.php?title=M204.0473&amp;diff=120545</id>
		<title>M204.0473</title>
		<link rel="alternate" type="text/html" href="https://m204wiki.rocketsoftware.com/index.php?title=M204.0473&amp;diff=120545"/>
		<updated>2025-04-07T22:46:07Z</updated>

		<summary type="html">&lt;p&gt;JDamon: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:M204.0473 skeleton}}&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;LI&amp;gt;If the message reports a specific subsystem name, that subsystem could not be initialized because of an error.&amp;lt;/LI&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;LI&amp;gt;If the message is issued by User 0 during Model&amp;amp;nbsp;204 initialization and it reports &amp;lt;code&amp;gt;SUBSYSTEMS&amp;lt;/code&amp;gt;, APSY initialization failed, and APSY subsystems will not be available during this run.  Otherwise, &amp;lt;code&amp;gt;subsysName&amp;lt;/code&amp;gt; has failed to initialize.&amp;lt;/LI&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;LI&amp;gt;If this message is preceded by the following message, then the user attempted to start a suspended subsystem:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;M204.2661: SUBSYSTEM &amp;lt;i&amp;gt;name&amp;lt;/i&amp;gt; SUSPENDED&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;P&amp;gt; &lt;br /&gt;
The user must issue the &amp;lt;var&amp;gt;RESUME SUBSYSTEM&amp;lt;/var&amp;gt; command to make the subsystem available for use.&amp;lt;/P&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;P&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Response:&amp;lt;/b&amp;gt; Notify the system manager.&amp;lt;/P&amp;gt;&lt;br /&gt;
&amp;lt;P&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;System manager response:&amp;lt;/b&amp;gt; If the message reports a specific subsystem, look at the audit trail or issue the &amp;lt;var&amp;gt;TEST&amp;lt;/var&amp;gt; subsystem command to determine which error caused subsystem initialization to fail.&amp;lt;/P&amp;gt;&lt;br /&gt;
&amp;lt;P&amp;gt;&lt;br /&gt;
If the message reports &amp;lt;code&amp;gt;SUBSYSTEMS&amp;lt;/code&amp;gt;, there are two possible causes:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[[M204.0027]] was issued indicating that the CCASYS auxiliary procedure dictionary was full&amp;lt;/P&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;P&amp;gt;or&amp;lt;/p&amp;gt; &lt;br /&gt;
&amp;lt;li&amp;gt;Server tables for User 0 are not large enough to initialize subsystem handling. Change the User 0 parameters so that its server table sizes are at least as large as the sizes listed in the description of message [[M204.1457]], and then restart Model&amp;amp;nbsp;204.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
{{Template:M204.0473 footer}}&lt;br /&gt;
&amp;lt;!-- skeleton as it was in pdf/UNABLE TO INITIALIZE [subsystem name | SUBSYSTEMS]/--&amp;gt;&lt;/div&gt;</summary>
		<author><name>JDamon</name></author>
	</entry>
	<entry>
		<id>https://m204wiki.rocketsoftware.com/index.php?title=M204.0027&amp;diff=120544</id>
		<title>M204.0027</title>
		<link rel="alternate" type="text/html" href="https://m204wiki.rocketsoftware.com/index.php?title=M204.0027&amp;diff=120544"/>
		<updated>2025-04-07T22:27:18Z</updated>

		<summary type="html">&lt;p&gt;JDamon: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:M204.0027 skeleton}}&lt;br /&gt;
&amp;lt;P&amp;gt;When Model 204 performs a subsystem initialization, the subsystem procedure file is scanned twice. The first scan retrieves the number of subsystem procedures in order to allocate the subsystem&#039;s in-core procedure dictionary. The second scan retrieves the procedure information that is copied into the in-core procedure dictionary. This error occurs when another user adds a new subsystem procedure between the first procedure file scan and the second. The error can also occur if unsupported procs have been store in CCASYS; only Rocket supplied procs can be stored in CCASYS.&amp;lt;/P&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;b&amp;gt;Response:&amp;lt;/b&amp;gt; Reissue the subsystem command. &amp;lt;/p&amp;gt;&lt;br /&gt;
{{Template:M204.0027 footer}}&lt;br /&gt;
&amp;lt;!-- skeleton as it was in pdf/AUX PROCEDURE DICTIONARY FULL /--&amp;gt;&lt;/div&gt;</summary>
		<author><name>JDamon</name></author>
	</entry>
	<entry>
		<id>https://m204wiki.rocketsoftware.com/index.php?title=M204.1457&amp;diff=120543</id>
		<title>M204.1457</title>
		<link rel="alternate" type="text/html" href="https://m204wiki.rocketsoftware.com/index.php?title=M204.1457&amp;diff=120543"/>
		<updated>2025-04-07T22:24:46Z</updated>

		<summary type="html">&lt;p&gt;JDamon: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:M204.1457 skeleton}}&lt;br /&gt;
&amp;lt;P&amp;gt;&lt;br /&gt;
Model 204 is unable to scan the CCASYS auxiliary procedure dictionary.  This scan is required to check the START SUBSYS command you entered against the list of application subsystems defined at your installation. The command is not executed and Subsystem processing is disabled for this run; Model 204 must be restarted to enable Subsystem processing.  This message can be caused by any of the following: &amp;lt;/P&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;LI&amp;gt;The system manager did not set the &amp;lt;var&amp;gt;SYSOPT&amp;lt;/var&amp;gt; X&#039;01&#039; bit.&amp;lt;/LI&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;LI&amp;gt;An error occurred during Model&amp;amp;nbsp;204 initialization. Early in CCAAUDIT, you may see&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;[[M204.0027]]: Aux procedure dictionary full&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;followed by&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;[[M204.0473]]: Unable to initialize subsysName&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The [[M204.0027]] indicates that the CCASYS auxiliary procedure dictionary could not be built in-memory because unsupported procs have been stored in CCASYS.  Only Rocket supplied procs can be stored in CCASYS.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;LI&amp;gt;There is insufficient space in the server tables of the user who issued the command.&amp;lt;/LI&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;LI&amp;gt;A new Model&amp;amp;nbsp;204 release was installed, but a matching Dictionary/204 upgrade was either omitted or not performed properly.&amp;lt;/LI&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;LI&amp;gt;There is some problem with the CCASYS file.&amp;lt;/LI&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Response:&amp;lt;/b&amp;gt; Subsystems cannot be started unless there are 288 unused bytes in the global variable table (GTBL). The following sequence of commands may assist you in verifying and creating adequate GTBL space:&amp;lt;/P&amp;gt;&lt;br /&gt;
&amp;lt;TABLE&amp;gt;&lt;br /&gt;
&amp;lt;TR class=&amp;quot;head&amp;quot;&amp;gt;&amp;lt;TH&amp;gt;&amp;lt;P CLASS=&amp;quot;zcellheading&amp;quot;&amp;gt;Command &amp;lt;/P&amp;gt;&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;&amp;lt;P CLASS=&amp;quot;zcellheading&amp;quot;&amp;gt;Purpose&amp;lt;/P&amp;gt;&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;&amp;lt;P CLASS=&amp;quot;zcellbody&amp;quot;&amp;gt;CLEARG &amp;lt;/P&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&amp;lt;P CLASS=&amp;quot;zcellbody&amp;quot;&amp;gt;Deletes all global string variables from GTBL&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;TD&amp;gt;&amp;lt;P CLASS=&amp;quot;zcellbody&amp;quot;&amp;gt;CLEARGO &amp;lt;/P&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&amp;lt;P CLASS=&amp;quot;zcellbody&amp;quot;&amp;gt;Deletes all global objects from GTBL&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;TD&amp;gt;&amp;lt;P CLASS=&amp;quot;zcellbody&amp;quot;&amp;gt;VIEW LGTBL &amp;lt;/P&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&amp;lt;P CLASS=&amp;quot;zcellbody&amp;quot;&amp;gt;Displays the allocated size of GTBL&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;TD&amp;gt;&amp;lt;P CLASS=&amp;quot;zcellbody&amp;quot;&amp;gt;VIEW GTBLHASH &amp;lt;/P&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&amp;lt;P CLASS=&amp;quot;zcellbody&amp;quot;&amp;gt;Displays the number of GTBL hash buckets&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;TD&amp;gt;&amp;lt;P CLASS=&amp;quot;zcellbody&amp;quot;&amp;gt;UTABLE LGTBL=&amp;lt;i&amp;gt;value&amp;lt;/i&amp;gt; &amp;lt;/P&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&amp;lt;P CLASS=&amp;quot;zcellbody&amp;quot;&amp;gt;Resizes GTBL to the indicated size&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;
&amp;lt;P&amp;gt;&lt;br /&gt;
If GTBLHASH is zero, &amp;lt;code&amp;gt;LGTBL=288&amp;lt;/code&amp;gt; is sufficient. However, if GTBLHASH is nonzero, LGTBL should be at least &amp;lt;code&amp;gt;(288 + (10 * GTBLHASH))&amp;lt;/code&amp;gt;. The extra space represents 8 bytes of control information per hash bucket, plus an allowance&lt;br /&gt;
because hashing cannot distribute values exactly evenly. &amp;lt;/P&amp;gt;&lt;br /&gt;
&amp;lt;P&amp;gt;&lt;br /&gt;
If this error occurs when GTBL is large enough, use the VIEW command to verify that the sizes of the server tables are at least this size:&amp;lt;/P&amp;gt;&lt;br /&gt;
&amp;lt;TABLE&amp;gt;&lt;br /&gt;
&amp;lt;TR class=&amp;quot;head&amp;quot;&amp;gt;&amp;lt;TH&amp;gt;&amp;lt;P CLASS=&amp;quot;zcellheading&amp;quot;&amp;gt;Server table &amp;lt;/P&amp;gt;&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;&amp;lt;P CLASS=&amp;quot;zcellheading&amp;quot;&amp;gt;Size&amp;lt;/P&amp;gt;&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;LNTBL &amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;50&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;LQTBL&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;120&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;LSTBL&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;250&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;LVTBL &amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;50&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;LFSCB &amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;256&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 values of these parameters are adequate when this message is issued, contact the system manager.&amp;lt;/P&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;System manager response:&amp;lt;/b&amp;gt;Look at the audit trail for an earlier message identifying the cause of the error. Verify that CCASYS was installed properly. Was Dictionary/204 correctly installed or upgraded for this release? If CCASYS is physically&lt;br /&gt;
inconsistent, reorganize the file. The reorganization should include a reload of data and the procedures stored in CCASYS.&lt;br /&gt;
&amp;lt;/P&amp;gt;&lt;br /&gt;
{{Template:M204.1457 footer}}&lt;br /&gt;
&amp;lt;!-- skeleton as it was in pdf/UNABLE TO SCAN LIST OF SUBSYSTEM NAMES/--&amp;gt;&lt;/div&gt;</summary>
		<author><name>JDamon</name></author>
	</entry>
	<entry>
		<id>https://m204wiki.rocketsoftware.com/index.php?title=M204.1457&amp;diff=120542</id>
		<title>M204.1457</title>
		<link rel="alternate" type="text/html" href="https://m204wiki.rocketsoftware.com/index.php?title=M204.1457&amp;diff=120542"/>
		<updated>2025-04-07T20:27:01Z</updated>

		<summary type="html">&lt;p&gt;JDamon: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:M204.1457 skeleton}}&lt;br /&gt;
&amp;lt;P&amp;gt;&lt;br /&gt;
Model 204 is unable to scan the CCASYS auxiliary procedure dictionary to check the START SUBSYS command you entered against the list of application subsystems defined at your installation. The command is not executed and Subsystem processing is disabled for this run; Model 204 must be restarted to enable Subsystem processing.  This message can be caused by any of the following: &amp;lt;/P&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;LI&amp;gt;The system manager did not set the &amp;lt;var&amp;gt;SYSOPT&amp;lt;/var&amp;gt; X&#039;01&#039; bit.&amp;lt;/LI&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;LI&amp;gt;An error occurred during Model&amp;amp;nbsp;204 initialization. This is indicated in the audit trail by message [[M204.0473]], issued by User&amp;amp;nbsp;0 during initialization. &amp;lt;/LI&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;LI&amp;gt;There is insufficient space in the server tables of the user who issued the command.&amp;lt;/LI&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;M204.1457 may be preceded by &amp;lt;b&amp;gt;M204.0027: Aux procedure dictionary full&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;During Model 204 initialization, the CCASYS auxiliary procedure dictionary could not be built in-memory because unsupported procs have been stored in CCASYS.  Only Rocket supplied procs can be stored in CCASYS.&amp;lt;/P&amp;gt;&lt;br /&gt;
&amp;lt;/LI&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;LI&amp;gt;A new Model&amp;amp;nbsp;204 release was installed, but a matching Dictionary/204 upgrade was either omitted or not performed properly.&amp;lt;/LI&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;LI&amp;gt;There is some problem with the CCASYS file.&amp;lt;/LI&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Response:&amp;lt;/b&amp;gt; Subsystems cannot be started unless there are 288 unused bytes in the global variable table (GTBL). The following sequence of commands may assist you in verifying and creating adequate GTBL space:&amp;lt;/P&amp;gt;&lt;br /&gt;
&amp;lt;TABLE&amp;gt;&lt;br /&gt;
&amp;lt;TR class=&amp;quot;head&amp;quot;&amp;gt;&amp;lt;TH&amp;gt;&amp;lt;P CLASS=&amp;quot;zcellheading&amp;quot;&amp;gt;Command &amp;lt;/P&amp;gt;&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;&amp;lt;P CLASS=&amp;quot;zcellheading&amp;quot;&amp;gt;Purpose&amp;lt;/P&amp;gt;&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;&amp;lt;P CLASS=&amp;quot;zcellbody&amp;quot;&amp;gt;CLEARG &amp;lt;/P&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&amp;lt;P CLASS=&amp;quot;zcellbody&amp;quot;&amp;gt;Deletes all global string variables from GTBL&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;TD&amp;gt;&amp;lt;P CLASS=&amp;quot;zcellbody&amp;quot;&amp;gt;CLEARGO &amp;lt;/P&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&amp;lt;P CLASS=&amp;quot;zcellbody&amp;quot;&amp;gt;Deletes all global objects from GTBL&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;TD&amp;gt;&amp;lt;P CLASS=&amp;quot;zcellbody&amp;quot;&amp;gt;VIEW LGTBL &amp;lt;/P&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&amp;lt;P CLASS=&amp;quot;zcellbody&amp;quot;&amp;gt;Displays the allocated size of GTBL&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;TD&amp;gt;&amp;lt;P CLASS=&amp;quot;zcellbody&amp;quot;&amp;gt;VIEW GTBLHASH &amp;lt;/P&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&amp;lt;P CLASS=&amp;quot;zcellbody&amp;quot;&amp;gt;Displays the number of GTBL hash buckets&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;TD&amp;gt;&amp;lt;P CLASS=&amp;quot;zcellbody&amp;quot;&amp;gt;UTABLE LGTBL=&amp;lt;i&amp;gt;value&amp;lt;/i&amp;gt; &amp;lt;/P&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&amp;lt;P CLASS=&amp;quot;zcellbody&amp;quot;&amp;gt;Resizes GTBL to the indicated size&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;
&amp;lt;P&amp;gt;&lt;br /&gt;
If GTBLHASH is zero, &amp;lt;code&amp;gt;LGTBL=288&amp;lt;/code&amp;gt; is sufficient. However, if GTBLHASH is nonzero, LGTBL should be at least &amp;lt;code&amp;gt;(288 + (10 * GTBLHASH))&amp;lt;/code&amp;gt;. The extra space represents 8 bytes of control information per hash bucket, plus an allowance&lt;br /&gt;
because hashing cannot distribute values exactly evenly. &amp;lt;/P&amp;gt;&lt;br /&gt;
&amp;lt;P&amp;gt;&lt;br /&gt;
If this error occurs when GTBL is large enough, use the VIEW command to verify that the sizes of the server tables are at least this size:&amp;lt;/P&amp;gt;&lt;br /&gt;
&amp;lt;TABLE&amp;gt;&lt;br /&gt;
&amp;lt;TR class=&amp;quot;head&amp;quot;&amp;gt;&amp;lt;TH&amp;gt;&amp;lt;P CLASS=&amp;quot;zcellheading&amp;quot;&amp;gt;Server table &amp;lt;/P&amp;gt;&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;&amp;lt;P CLASS=&amp;quot;zcellheading&amp;quot;&amp;gt;Size&amp;lt;/P&amp;gt;&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;LNTBL &amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;50&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;LQTBL&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;120&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;LSTBL&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;250&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;LVTBL &amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;50&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;LFSCB &amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;256&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 values of these parameters are adequate when this message is issued, contact the system manager.&amp;lt;/P&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;System manager response:&amp;lt;/b&amp;gt;Look at the audit trail for an earlier message identifying the cause of the error. Verify that CCASYS was installed properly. Was Dictionary/204 correctly installed or upgraded for this release? If CCASYS is physically&lt;br /&gt;
inconsistent, reorganize the file. The reorganization should include a reload of data and the procedures stored in CCASYS.&lt;br /&gt;
&amp;lt;/P&amp;gt;&lt;br /&gt;
{{Template:M204.1457 footer}}&lt;br /&gt;
&amp;lt;!-- skeleton as it was in pdf/UNABLE TO SCAN LIST OF SUBSYSTEM NAMES/--&amp;gt;&lt;/div&gt;</summary>
		<author><name>JDamon</name></author>
	</entry>
	<entry>
		<id>https://m204wiki.rocketsoftware.com/index.php?title=Subroutines&amp;diff=120335</id>
		<title>Subroutines</title>
		<link rel="alternate" type="text/html" href="https://m204wiki.rocketsoftware.com/index.php?title=Subroutines&amp;diff=120335"/>
		<updated>2025-01-29T19:56:04Z</updated>

		<summary type="html">&lt;p&gt;JDamon: /* DECLARE before CALL */&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;
User Language lets you treat a single set of statements as a simple or complex subroutine. You can:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Execute simple subroutines a number of times from different locations within a request.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Use complex subroutines as you would simple subroutines. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
In addition, you can:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Pass parameters via parameter lists.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Declare variables locally.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Common elements===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
An element that is not passed as a parameter can be shared between complex subroutines, or between a complex subroutine and the main request, when you declare that element as &amp;lt;var&amp;gt;COMMON&amp;lt;/var&amp;gt;.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===On units===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
As [[#On statement|described later]], an &amp;lt;var&amp;gt;On&amp;lt;/var&amp;gt; unit specifies a response action to a triggering event: for example, the terminal operator pressing one of the ATTENTION identifier (AID) keys. &amp;lt;var&amp;gt;On&amp;lt;/var&amp;gt; units let an application override the normal system response.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
==Simple subroutines==&lt;br /&gt;
 &lt;br /&gt;
===Outlining a simple subroutine===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The following statements are used in simple subroutines within a 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;Statement&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Purpose&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;CALL&amp;lt;/var&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Transfers control to the subroutine.&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td nowrap&amp;gt;&amp;lt;var&amp;gt;END SUBROUTINE&amp;lt;/var&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Indicates the end of the subroutine.&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;JUMP TO&amp;lt;/var&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Transfers control to another statement in the request.&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;RETURN&amp;lt;/var&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Returns control to the statement immediately following the CALL statement. &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;SUBROUTINE&amp;lt;/var&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Indicates the beginning of a subroutine. &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 statements are coded in the following sequence, so they are described in order of usage.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;SUBROUTINE&amp;lt;/var&amp;gt; statement&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;JUMP TO&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;RETURN&amp;lt;/var&amp;gt; statements as appropriate&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;END SUBROUTINE&amp;lt;/var&amp;gt; statement&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;CALL&amp;lt;/var&amp;gt; statement&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===SUBROUTINE statement===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
A simple subroutine consists of a sequence of SOUL statements that must begin with a &amp;lt;var&amp;gt;SUBROUTINE&amp;lt;/var&amp;gt; statement. The body of the subroutine is composed of the statements immediately following the &amp;lt;var&amp;gt;SUBROUTINE&amp;lt;/var&amp;gt; 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 &amp;lt;var&amp;gt;SUBROUTINE&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;term&amp;quot;&amp;gt;label&amp;lt;/span&amp;gt;: SUBROUTINE&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
A simple subroutine must be labeled; without a label it cannot be executed. You cannot use field names in the subroutine, except within a FOR loop, even if the subroutine is always called from within a record loop.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Example of a simple subroutine====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The following request uses two subroutines. &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; Simple subroutine statements in the following example are described more fully after this example.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The first subroutine, &amp;lt;code&amp;gt;TOTAL&amp;lt;/code&amp;gt;, accumulates a total in the %variable named &amp;lt;code&amp;gt;%TOTAL.MUSTANGS&amp;lt;/code&amp;gt;. The second subroutine, &amp;lt;code&amp;gt;PRINT.TOTAL&amp;lt;/code&amp;gt;, prints a literal that varies depending on the total accumulated. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;BEGIN&lt;br /&gt;
MUSTANGS:    FIND ALL RECORDS FOR WHICH&lt;br /&gt;
                MODEL = MUSTANG&lt;br /&gt;
             END FIND&lt;br /&gt;
             FOR EACH RECORD IN MUSTANGS&lt;br /&gt;
                CALL TOTAL&lt;br /&gt;
             END FOR&lt;br /&gt;
             CALL PRINT.TOTAL&lt;br /&gt;
TOTAL:       SUBROUTINE&lt;br /&gt;
                %TOTAL.MUSTANGS = %TOTAL.MUSTANGS + 1&lt;br /&gt;
                RETURN&lt;br /&gt;
             END SUBROUTINE TOTAL&lt;br /&gt;
PRINT.TOTAL: SUBROUTINE&lt;br /&gt;
                IF %TOTAL.MUSTANGS LE 10 THEN&lt;br /&gt;
                   PRINT &#039;TOTAL MUSTANG POLICIES -&lt;br /&gt;
                      NOT GREATER THAN 10&#039;&lt;br /&gt;
                ELSEIF %TOTAL.MUSTANGS LE 50 THEN&lt;br /&gt;
                   PRINT &#039;TOTAL MUSTANG POLICIES -&lt;br /&gt;
                      NOT GREATER THAN 50&#039;&lt;br /&gt;
                ELSEIF %TOTAL.MUSTANGS GT 50 THEN&lt;br /&gt;
                   PRINT &#039;TOTAL MUSTANG POLICIES -&lt;br /&gt;
                      GREATER THAN 50&#039;&lt;br /&gt;
                END IF&lt;br /&gt;
                RETURN&lt;br /&gt;
             END SUBROUTINE PRINT.TOTAL&lt;br /&gt;
END&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===JUMP TO statements===&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; compiles subroutines only after they are called, regardless of where they are in your program.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If you use a &amp;lt;var&amp;gt;JUMP TO&amp;lt;/var&amp;gt; statement, its destination must be within the same subroutine. You cannot jump into a subroutine from outside of a subroutine.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===RETURN statement===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The &amp;lt;var&amp;gt;RETURN&amp;lt;/var&amp;gt; statement returns control from the subroutine to the statement following the most recent &amp;lt;var&amp;gt;CALL&amp;lt;/var&amp;gt; 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 &amp;lt;var&amp;gt;RETURN&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;RETURN&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The &amp;lt;var&amp;gt;RETURN&amp;lt;/var&amp;gt; statement can appear only within the body of a subroutine. Use of the &amp;lt;var&amp;gt;RETURN&amp;lt;/var&amp;gt; statement inside of an &amp;lt;var&amp;gt;ON&amp;lt;/var&amp;gt; unit terminates compilation, the procedure cannot run, and the following message is produced: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;M204.1779 RETURN IS INVALID IN ON UNITS, USE BYPASS STATEMENT&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; automatically generates a return at the end of a subroutine, if you do not specify one. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
For more information, see [[#ON units|ON units]] and [[#Passing control to and from ON units|Passing control to and from ON units]].&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===END SUBROUTINE statement===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can end a subroutine using an &amp;lt;var&amp;gt;END SUBROUTINE&amp;lt;/var&amp;gt; statement or an &amp;lt;var&amp;gt;END BLOCK&amp;lt;/var&amp;gt; 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 END SUBROUTINE statement is formatted as follows:             &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;END SUBROUTINE &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;label&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;squareb&amp;quot;&amp;gt;]&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===CALL statement===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The &amp;lt;var&amp;gt;CALL&amp;lt;/var&amp;gt; statement transfers control to the subroutine. &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;CALL&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;CALL &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;
This statement:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;CALL.SUB: CALL COMPUTE.PREMIUM&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
transfers control to the following statement:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;COMPUTE.PREMIUM: SUBROUTINE&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When you use a simple subroutine, no arguments are passed in subroutine calls. Instead, input and output values are implicitly passed in %variables or global variables. If you want field values as arguments, you must assign the values to %variables before the call, or the subroutine must contain its own &amp;lt;var&amp;gt;FOR EACH RECORD&amp;lt;/var&amp;gt; loop on the set of records to be processed.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Processing continues sequentially from that statement until another control transfer statement &amp;amp;mdash; a &amp;lt;var&amp;gt;CALL&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;IF&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;JUMP TO&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;RETURN&amp;lt;/var&amp;gt;, or &amp;lt;var&amp;gt;STOP&amp;lt;/var&amp;gt; statement &amp;amp;mdash; is encountered. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
==Complex subroutines==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Complex subroutines perform all the operations of a simple subroutine. In addition, a complex subroutine can pass parameters via parameter lists and can declare local variables. &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 format of the &amp;lt;var&amp;gt;SUBROUTINE&amp;lt;/var&amp;gt; statement changes for a complex subroutine and the &amp;lt;var&amp;gt;CALL&amp;lt;/var&amp;gt; statement is also more complex.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Symbolic parameter passing===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can specify positional parameters on the &amp;lt;var&amp;gt;CALL&amp;lt;/var&amp;gt; statement for a complex subroutine. These parameters are substituted for symbolic parameters used within the subroutine during execution. You can use the following elements as parameters to a complex subroutine:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Scalar %variables&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;%variable arrays&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Lists of records&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Local variable declaration===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Labels, %variables, and other elements in a complex subroutine are local to the subroutine; they do not conflict with elements of the same name in the request or in other complex subroutines. This allows the same element to be used in different portions of a request, and for the same name to describe different elements in each portion.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Processing===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
All data within the subroutine is statically allocated. When the subroutine is called, the values of all found sets, counts, noted values, and variables are as they were when the subroutine was last executed. Recursive calls to the same subroutine do not allocate separate storage for each subroutine local variable. Local variables are allocated only one time.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====OPEN statement within a complex subroutine====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
A SOUL &amp;lt;var&amp;gt;OPEN&amp;lt;/var&amp;gt; statement &amp;amp;mdash; an &amp;lt;var&amp;gt;OPEN&amp;lt;/var&amp;gt; statement inside a &amp;lt;var&amp;gt;BEGIN/END&amp;lt;/var&amp;gt; &amp;amp;mdash; when used within a complex subroutine on a file that is not defined to the region produces the following counting error and the request is not compiled:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;M204.1521: &amp;lt;i&amp;gt;entity-name&amp;lt;/i&amp;gt; DOES NOT EXIST OR REQUESTED ACCESS NOT AUTHORIZED&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===SUBROUTINE statement for complex subroutines===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Complex subroutines begin with the following form of the &amp;lt;var&amp;gt;SUBROUTINE&amp;lt;/var&amp;gt; statement:   &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;SUBROUTINE &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;subname&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;formal-parameter&amp;lt;/span&amp;gt; &lt;br /&gt;
                   &amp;lt;span class=&amp;quot;squareb&amp;quot;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;inout-option&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;squareb&amp;quot;&amp;gt;]&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;squareb&amp;quot;&amp;gt;[&amp;lt;/span&amp;gt;, ...&amp;lt;span class=&amp;quot;squareb&amp;quot;&amp;gt;]&amp;lt;/span&amp;gt;)&amp;lt;span class=&amp;quot;squareb&amp;quot;&amp;gt;]&amp;lt;/span&amp;gt;&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;subname&amp;lt;/var&amp;gt; is the name of the subroutine.&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;formal-parameter&amp;lt;/var&amp;gt; is the declaration of a symbolic parameter used within the subroutine. The parameter list is comprised of the &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;formal-parameter&amp;lt;/var&amp;gt; and subsequent input-options. The parameter list is enclosed in parentheses, and it contains declarations for each parameter separated by commas. The parameter list must be specified on one logical line. Null parameters are not allowed.&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;formal-parameter&amp;lt;/var&amp;gt; specifies the name and type of element to be used within the subroutine and can be any of the following:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Scalar (nonarray) %variable formatted as:&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;%variable&amp;lt;/span&amp;gt; [IS] {[STRING] [LEN] &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;n&amp;lt;/span&amp;gt; [DP {&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;squareb&amp;quot;&amp;gt;|&amp;lt;/span&amp;gt; [FIXED [DP &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;n&amp;lt;/span&amp;gt;] &amp;lt;span class=&amp;quot;squareb&amp;quot;&amp;gt;|&amp;lt;/span&amp;gt; FLOAT]}&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;SUBROUTINE EXAMPLE (%W IS STRING DP *         -&lt;br /&gt;
                    %X IS STRING LEN 40,      -&lt;br /&gt;
                    %Y IS STRING LEN 10 DP 2, -&lt;br /&gt;
                    %Z IS FLOAT,              -&lt;br /&gt;
                    %A IS FIXED DP 4)&lt;br /&gt;
&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Array %variable formatted as:&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;%variable&amp;lt;/span&amp;gt; [IS] [[STRING] [LEN &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;n&amp;lt;/span&amp;gt;] [DP {&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;n&amp;lt;/span&amp;gt; | *}] &lt;br /&gt;
 [ARRAY(* [,*[,*]])] [NO FIELD SAVE] &lt;br /&gt;
 &amp;lt;span class=&amp;quot;squareb&amp;quot;&amp;gt;|&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;squareb&amp;quot;&amp;gt;{&amp;lt;/span&amp;gt;FIXED [DP &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;n&amp;lt;/span&amp;gt;] &amp;lt;span class=&amp;quot;squareb&amp;quot;&amp;gt;|&amp;lt;/span&amp;gt; FLOAT&amp;lt;span class=&amp;quot;squareb&amp;quot;&amp;gt;}&amp;lt;/span&amp;gt; [ARRAY(* [,*[,*]])]]&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The number of dimensions must be specified in the subroutine declaration, but the exact size of each dimension is not specified. An asterisk (&amp;lt;tt&amp;gt;*&amp;lt;/tt&amp;gt;) is used instead of the dimension size. For example:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;SUBROUTINE EXAMPLE(%ARR IS STRING LEN 10 - ARRAY(*,*))&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 list of records formatted as:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;[LIST] &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;listname&amp;lt;/span&amp;gt; [IN [FILE | [PERM | TEMP] GROUP]] &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;name&amp;lt;/span&amp;gt; &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The context of the list is restricted to a single file or group. For example:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;SUBROUTINE GENERAL(LIST TOTRECS IN FILE VEHICLES)&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;li&amp;gt;&amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;inout-option&amp;lt;/var&amp;gt; specifies whether a formal-parameter is to be used as input to the subroutine or passed as output from the subroutine. Options are as follows:&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;Data can be...&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;INPUT&amp;lt;br&amp;gt;&lt;br /&gt;
(the default)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Passed into, but not out of, a subroutine. In addition, data conversions are performed automatically, in the same manner as an assignment statement. All references to &amp;lt;var&amp;gt;INPUT&amp;lt;/var&amp;gt; parameters that update the parameter, for example, assignment statements, result in compiler errors.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td nowrap&amp;gt;INPUT OUTPUT&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;This option is equivalent to the OUTPUT option. &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;OUTPUT&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Returned from a subroutine. No data conversions are performed.&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The lengths of complex subroutine string OUTPUT parameters are inherited from calling parameters. If the lengths are specified in the subroutine declaration, the following message is written to the audit trail: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;M204.1981 LENGTH IGNORED FOR OUTPUT PARAMETER&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Compilation and evaluation of the procedure continues, with the inherited length.&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;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===END SUBROUTINE statement===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Like simple subroutines, a complex subroutine ends with an &amp;lt;var&amp;gt;END SUBROUTINE&amp;lt;/var&amp;gt; statement. However, unlike simple subroutines, you must not label the &amp;lt;var&amp;gt;SUBROUTINE&amp;lt;/var&amp;gt; statement.   &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
All declarations and statements compiled after the &amp;lt;var&amp;gt;SUBROUTINE&amp;lt;/var&amp;gt; statement become a part of the subroutine until the &amp;lt;var&amp;gt;END SUBROUTINE&amp;lt;/var&amp;gt; statement is encountered or until the request is ended with the &amp;lt;var&amp;gt;END&amp;lt;/var&amp;gt; statement.  &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===CALL statement===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The execution of a &amp;lt;var&amp;gt;CALL&amp;lt;/var&amp;gt; statement passes control to a complex subroutine. The first time a subroutine is called, all elements in the subroutine are initialized. Subsequently, each time the subroutine is called, all elements in the subroutine remain in the same state as they were when the subroutine was last exited. You are responsible for reinitializing the elements within the subroutine.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Syntax====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
A complex subroutine is invoked with this form of the &amp;lt;var&amp;gt;CALL&amp;lt;/var&amp;gt; statement:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;CALL &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;subname&amp;lt;/span&amp;gt; [(&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;actual-parameter&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;subname&amp;lt;/var&amp;gt; is the name of the subroutine.&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;actual-parameter&amp;lt;/var&amp;gt; specifies the actual data that replaces the symbolic formal-parameter within the subroutine. At execution time, the value of each actual-parameter is substituted, based on the order in which it appears, for a formal-parameter declared for the subroutine. The correspondence of each formal-parameter in the &amp;lt;var&amp;gt;SUBROUTINE&amp;lt;/var&amp;gt; statement to an actual-parameter in the &amp;lt;var&amp;gt;CALL&amp;lt;/var&amp;gt; statement is by position rather than by name.&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
An actual-parameter can be any of the following:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;%variable or expression&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Expressions can contain field names, screen items, image items, and constants.&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Array %variable&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When an entire array is passed as a parameter, the %variable name is used with the percent (%) sign, but no parenthesis or subscript expressions follow it. 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;
%A IS FLOAT ARRAY(10,10)&lt;br /&gt;
DECLARE SUBROUTINE FDO(FLOAT ARRAY(*,*))&lt;br /&gt;
    .&lt;br /&gt;
    .&lt;br /&gt;
    .&lt;br /&gt;
CALL FDO (%A)&lt;br /&gt;
    .&lt;br /&gt;
    .&lt;br /&gt;
    .&lt;br /&gt;
SUBROUTINE FDO (%B IS FLOAT ARRAY(*,*))&lt;br /&gt;
   PRINT %B(1,1)&lt;br /&gt;
END SUBROUTINE&lt;br /&gt;
END&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The &amp;lt;var&amp;gt;[[$ArrSize]]&amp;lt;/var&amp;gt; function can be used to determine the number of elements in a particular dimension of an array. &amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;A list&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
An actual-parameter can be a list, optionally preceded by the word LIST to distinguish it from a field name. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If the compiler already knows of the formal-parameter list because the subroutine is already compiled or declared, the LIST keyword is unnecessary. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If the list has never been declared in the request, a compilation error results. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;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;
====Additional rules for parameters====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The following additional rules apply to actual-parameters and parameter passing:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The maximum number of parameters that can be passed in complex subroutines is 63.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;If the formal-parameter is specified as an OUTPUT parameter, the corresponding actual-parameter must match type.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;The INPUT parameters of a %variable array requires that the type of the array &amp;amp;mdash; &amp;lt;var&amp;gt;FLOAT&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;FIXED&amp;lt;/var&amp;gt;, or &amp;lt;var&amp;gt;STRING&amp;lt;/var&amp;gt; &amp;amp;mdash; the &amp;lt;var&amp;gt;DP&amp;lt;/var&amp;gt; specification, and the number of dimensions match the actual-parameter. In addition, if the &amp;lt;var&amp;gt;NO FIELD SAVE&amp;lt;/var&amp;gt; (&amp;lt;var&amp;gt;NO FS&amp;lt;/var&amp;gt;) option is specified for a &amp;lt;var&amp;gt;STRING&amp;lt;/var&amp;gt; formal-parameter, it also must be specified for the corresponding actual-parameter and vice versa. All checking of array bounds within subroutines occurs during evaluation.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;The INPUT parameters of a list requires the same file or group context as the actual-parameter.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;An INPUT parameter of a scalar %variable can be called with an actual-parameter that is an expression or %variable of a differing type. &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; converts the actual-parameter to the type required by the subroutine, according to the rules of the assignment statement. The converted value has a separate storage location from the original variable or expression.&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Passing arguments to INPUT parameters might involve truncation where the number of decimal places is different, or conversion to 0 for non-numeric strings.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;OUTPUT parameters of lists and %variable arrays follow the same rules as INPUT parameters for lists and %variable arrays.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;OUTPUT parameters of scalar %variables require that the actual-parameter supplied in the &amp;lt;var&amp;gt;CALL&amp;lt;/var&amp;gt; statement be another scalar %variable (no constants or expressions) of the same type &amp;amp;mdash; &amp;lt;var&amp;gt;FLOAT&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;FIXED&amp;lt;/var&amp;gt;, or &amp;lt;var&amp;gt;STRING&amp;lt;/var&amp;gt; &amp;amp;mdash; and that the number of decimal places be the same, or the following message is issued by &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 class=&amp;quot;code&amp;quot;&amp;gt;M204.1725 PARAMETER NUMBER &amp;lt;i&amp;gt;n&amp;lt;/i&amp;gt; IS TYPE INCOMPATIBLE&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Strings can be of any length. The length used is that of the actual input parameter. &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;
===Processing complex subroutines===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Checking for the validity of parameter lists occurs during compilation. When the SUBROUTINE statement is compiled, the types of parameters are saved by the compiler, and any subsequent CALL statements are verified as to whether the actual parameter is consistent with the type of formal parameter.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When a CALL statement is compiled and the subroutine to which it refers has not been compiled, the compiler verifies whether the actual parameter list is compatible with other CALL statements for the subroutine that it has already compiled. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The compiler cannot verify that the actual parameters are compatible with the SUBROUTINE statement until that SUBROUTINE statement is compiled. If the compiler then detects a CALL statement that is not compatible with the SUBROUTINE statement, an error is issued at that time. Checking is done at compile time, so a statement that is not executed during evaluation can still generate an error.    &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===DECLARE SUBROUTINE statement===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The DECLARE statement for a complex subroutine is similar to the SUBROUTINE statement, except that the parameter names are omitted. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Syntax====&lt;br /&gt;
The complete syntax for the DECLARE SUBROUTINE statement is:&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;DECLARE SUBROUTINE &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;subname&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;squareb&amp;quot;&amp;gt;[&amp;lt;/span&amp;gt;(&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;type&amp;lt;/span&amp;gt; &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;inout-option&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;squareb&amp;quot;&amp;gt;]&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;squareb&amp;quot;&amp;gt;[&amp;lt;/span&amp;gt;, ...&amp;lt;span class=&amp;quot;squareb&amp;quot;&amp;gt;]&amp;lt;/span&amp;gt;)&amp;lt;span class=&amp;quot;squareb&amp;quot;&amp;gt;]&amp;lt;/span&amp;gt;  &amp;lt;/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;subname&amp;lt;/var&amp;gt; is the name of the subroutine.&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; is one of the following:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Scalar %variable of the following format:&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; [DP {&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;n&amp;lt;/span&amp;gt; | *}] | [FIXED [DP &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;n&amp;lt;/span&amp;gt;] | FLOAT]}&lt;br /&gt;
&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Array %variable of the following format:&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;] [DP [&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;n&amp;lt;/span&amp;gt; | *}] [ARRAY(* [,*[,*]]) [NO FIELD SAVE]]&lt;br /&gt;
 | [FIXED [DP &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;n&amp;lt;/span&amp;gt;] | FLOAT] [ARRAY(* [,*[,*]])]}&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 list of records of the following format:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;[LIST] [IN {FILE | [PERM | TEMP] GROUP} &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;name&amp;lt;/span&amp;gt;]&lt;br /&gt;
&amp;lt;/p&amp;gt;&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;&lt;br /&gt;
&amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;inout-option&amp;lt;/var&amp;gt; specifies whether each formal parameter is to be used as input to the subroutine or passed as output from the subroutine. Options are the same as those that can be specified on the SUBROUTINE statement: INPUT, OUTPUT, or INPUT OUTPUT. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====DECLARE before CALL====&lt;br /&gt;
When a &amp;lt;var&amp;gt;CALL&amp;lt;/var&amp;gt; statement refers to a subroutine that has not yet been compiled, the error checking capabilities of the compiler are limited, because the number and type of formal parameters are not known to the compiler. If the first &amp;lt;var&amp;gt;CALL&amp;lt;/var&amp;gt; statement for a particular subroutine is not correctly coded, then a large number of error messages can be generated when compiling subsequent &amp;lt;var&amp;gt;CALL&amp;lt;/var&amp;gt; statements, although these statements might be correctly coded.&lt;br /&gt;
&lt;br /&gt;
You can avoid this problem in one of the following ways:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Declare the formal parameter list with the &amp;lt;var&amp;gt;DECLARE&amp;lt;/var&amp;gt; statement. When the &amp;lt;var&amp;gt;DECLARE&amp;lt;/var&amp;gt; statement precedes the first &amp;lt;var&amp;gt;CALL&amp;lt;/var&amp;gt;, the compiler generates the correct error messages, if problems are encountered. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Place the subroutine declaration before the first &amp;lt;var&amp;gt;CALL&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;
====Specifying a list of records====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If you specify a &amp;lt;var&amp;gt;LIST&amp;lt;/var&amp;gt; (of records), you must also specify &amp;lt;var&amp;gt;FILE&amp;lt;/var&amp;gt; or &amp;lt;var&amp;gt;GROUP&amp;lt;/var&amp;gt;. For example:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;OPEN METADATA&lt;br /&gt;
password&lt;br /&gt;
 &lt;br /&gt;
BEGIN&lt;br /&gt;
    DECLARE LIST ORIG IN METADATA&lt;br /&gt;
    DECLARE SUBROUTINE THE.SUB(LIST IN FILE METADATA INOUT)&lt;br /&gt;
    .&lt;br /&gt;
    .&lt;br /&gt;
    CALL THE.SUB (LIST ORIG)&lt;br /&gt;
    .&lt;br /&gt;
    .&lt;br /&gt;
SUBROUTINE THE.SUB(LIST ORIG IN METADATA INOUT)&lt;br /&gt;
    .&lt;br /&gt;
    .&lt;br /&gt;
END SUBROUTINE THE.SUB&lt;br /&gt;
END&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If you do not specify &amp;lt;var&amp;gt;FILE&amp;lt;/var&amp;gt; or &amp;lt;var&amp;gt;GROUP&amp;lt;/var&amp;gt; in the code, you 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.1725: PARAMETER NUMBER n IS TYPE INCOMPATIBLE&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====DECLARE parameters and CALL parameters====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
In the following example, note that the &amp;lt;var&amp;gt;DECLARE&amp;lt;/var&amp;gt; statement lists the formal parameters, while the &amp;lt;var&amp;gt;CALL&amp;lt;/var&amp;gt; statement lists the actual parameters:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;DECLARE SUBROUTINE SUB1(FLOAT, FIXED DP 2, STRING, STRING DP *)&lt;br /&gt;
    .&lt;br /&gt;
    .&lt;br /&gt;
   CALL SUB1(%INCREASE,%WAGES,%NAME,%DEPT)&lt;br /&gt;
    .&lt;br /&gt;
    .&lt;br /&gt;
  SUBROUTINE SUB1(%A IS FLOAT,&lt;br /&gt;
                %B IS FIXED DP 2,&lt;br /&gt;
                %C IS STRING,&lt;br /&gt;
                %D IS STRING DP *)&lt;br /&gt;
  END SUBROUTINE&lt;br /&gt;
    .&lt;br /&gt;
    .&lt;br /&gt;
END&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Impact on CALL and SUBROUTINE statements====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The &amp;lt;var&amp;gt;CALL&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;SUBROUTINE&amp;lt;/var&amp;gt; statements are not overridden when a &amp;lt;var&amp;gt;DECLARE SUBROUTINE&amp;lt;/var&amp;gt; statement is present. The &amp;lt;var&amp;gt;DECLARE SUBROUTINE&amp;lt;/var&amp;gt; statement does not cause the compiler to use more table space, nor does it alter the way in which the compiler output is generated.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Rocket Software recommends that you use a &amp;lt;var&amp;gt;DECLARE SUBROUTINE&amp;lt;/var&amp;gt; statement before the &amp;lt;var&amp;gt;CALL&amp;lt;/var&amp;gt; statement for a subroutine or that you place the subroutine itself before the &amp;lt;var&amp;gt;CALL&amp;lt;/var&amp;gt; statement. Error reporting will be more complete and specific to the subroutine.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Exiting the subroutine===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The &amp;lt;var&amp;gt;RETURN&amp;lt;/var&amp;gt; statement returns control to the statement immediately following the most recent &amp;lt;var&amp;gt;CALL&amp;lt;/var&amp;gt; statement. If an &amp;lt;var&amp;gt;END SUBROUTINE&amp;lt;/var&amp;gt; or &amp;lt;var&amp;gt;END&amp;lt;/var&amp;gt; statement is encountered without a &amp;lt;var&amp;gt;RETURN&amp;lt;/var&amp;gt; statement, &amp;lt;var&amp;gt;RETURN&amp;lt;/var&amp;gt; processing is implied and automatically added by the compiler. More than one &amp;lt;var&amp;gt;RETURN&amp;lt;/var&amp;gt; statement can be specified in a subroutine.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If a &amp;lt;var&amp;gt;JUMP&amp;lt;/var&amp;gt; statement is used within a subroutine, its destination must be within the same subroutine. You cannot jump into a subroutine. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
A &amp;lt;var&amp;gt;STOP&amp;lt;/var&amp;gt; statement, when executed inside a subroutine, terminates the request in the same manner as it does when executed outside a subroutine. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Examples using complex subroutines===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
In the following example, an employee name with regular and overtime hours is passed to the subroutine &amp;lt;code&amp;gt;CALC.WAGES&amp;lt;/code&amp;gt;. The total pay is returned and a list of records processed by the routine is updated.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;BEGIN&lt;br /&gt;
DECLARE SUBROUTINE CALC.WAGES(FIXED DP 2, -&lt;br /&gt;
        FIXED DP 2, STRING, FIXED DP 2 OUTPUT, -&lt;br /&gt;
        LIST IN FILE EMPLOYEE INOUT)&lt;br /&gt;
    .&lt;br /&gt;
    .&lt;br /&gt;
    .&lt;br /&gt;
CALL CALC.WAGES(%R.HRS, %OT.HRS, %NAME, -&lt;br /&gt;
                %TOTAL.PAY, LIST EMPLST)&lt;br /&gt;
    .&lt;br /&gt;
    .&lt;br /&gt;
    .&lt;br /&gt;
SUBROUTINE CALC.WAGES(%REG IS FIXED DP 2, -&lt;br /&gt;
                %OT IS FIXED DP 2, -&lt;br /&gt;
                %E.NAME IS STRING, -&lt;br /&gt;
                %TOTAL IS FIXED DP 2 OUTPUT, -&lt;br /&gt;
                LIST EMPLIST IN FILE EMPLOYEE INOUT)&lt;br /&gt;
 &lt;br /&gt;
%TEMP IS FIXED DP 2&lt;br /&gt;
 &lt;br /&gt;
WAGES1: IN EMPLOYEE FIND ALL RECORDS FOR WHICH&lt;br /&gt;
           NAME = %E.NAME&lt;br /&gt;
        END FIND&lt;br /&gt;
        FOR EACH RECORD IN WAGES1&lt;br /&gt;
           %TEMP = (RATE * %REG)&lt;br /&gt;
           %TOTAL = %TEMP + (RATE * 1.5 * %OT)&lt;br /&gt;
        END FOR&lt;br /&gt;
        PLACE RECORDS IN WAGES1 ON LIST EMPLIST&lt;br /&gt;
        RETURN&lt;br /&gt;
END SUBROUTINE&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 following example, an entire array is passed as a single subroutine parameter:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;BEGIN&lt;br /&gt;
%NUMBERS IS FLOAT ARRAY(10,10)&lt;br /&gt;
%MAX IS FLOAT&lt;br /&gt;
   DECLARE SUBROUTINE MAXIMUM(FLOAT ARRAY(*,*), FLOAT OUTPUT)&lt;br /&gt;
   .&lt;br /&gt;
   .&lt;br /&gt;
   .&lt;br /&gt;
   CALL MAXIMUM(%NUMBERS,%MAX)&lt;br /&gt;
   .&lt;br /&gt;
   .&lt;br /&gt;
   .&lt;br /&gt;
 &lt;br /&gt;
SUBROUTINE MAXIMUM(%ARR IS FLOAT ARRAY(*,*), %M IS FLOAT OUTPUT)&lt;br /&gt;
%I IS FIXED&lt;br /&gt;
%J IS FIXED&lt;br /&gt;
   %M = 0&lt;br /&gt;
   FOR %I FROM 1 TO $arrsize(&#039;%ARR&#039;,1)&lt;br /&gt;
      FOR %J FROM 1 TO $arrsize(&#039;%ARR&#039;,2)&lt;br /&gt;
         IF %ARR(%I,%J) GT %M THEN&lt;br /&gt;
            %M = %ARR(%I,%J)&lt;br /&gt;
         END IF&lt;br /&gt;
      END FOR&lt;br /&gt;
   END FOR&lt;br /&gt;
END SUBROUTINE&lt;br /&gt;
END&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Sharing common elements==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
An element that is not passed as a parameter can be shared between complex subroutines, or between a complex subroutine and the main request, when it is declared as a common element. A common element is created by using the &amp;lt;var&amp;gt;Declare&amp;lt;/var&amp;gt; statement or by using the &amp;lt;var&amp;gt;Common&amp;lt;/var&amp;gt; keyword on a &amp;lt;var&amp;gt;&amp;lt;i&amp;gt;%variable&amp;lt;/i&amp;gt; Is&amp;lt;/var&amp;gt; declaration. For an element to be shared, it must be declared as common in every place (each separate scope) in which it is used.  &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; In [[Object oriented programming in SOUL|SOUL OOP]], the &amp;lt;var&amp;gt;Common&amp;lt;/var&amp;gt; keyword is used for non-class properties and subroutines, which are typically defined for more confined, special-purpose uses (such as migration from SOUL to object-oriented SOUL). See [[Local and Common entities#Common methods and aliases|Common methods and aliases]].&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Scope of elements===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The scope of an element refers to the area within a request in which an element has a particular meaning. In User Language, complex subroutines have a different scope than the remainder of the request (the elements of a complex subroutine differ from the elements outside the subroutine even when they have the same name). This concept applies to labels, lists, %variables and %variable arrays, menus, screens, and images.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The elements of the main request (the statements not enclosed by any &amp;lt;var&amp;gt;Subroutine&amp;lt;/var&amp;gt;/&amp;lt;var&amp;gt;End Subroutine&amp;lt;/var&amp;gt; statements) and the elements of all simple subroutines share the same scope. Simple subroutines share the same elements with the main request and all other simple subroutines within the request.  &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Shareable elements===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The following elements can be shared if they are declared as common:&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====%variables and %variable arrays====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can share %variables if a &amp;lt;var&amp;gt;Declare &amp;lt;i&amp;gt;%variable&amp;lt;/i&amp;gt;&amp;lt;/var&amp;gt; or a &amp;lt;var&amp;gt;&amp;lt;i&amp;gt;%variable&amp;lt;/i&amp;gt; Is&amp;lt;/var&amp;gt; statement that declares the %variable as common is present in each portion of the request where you use the %variable. The %variable must have the same type, length, number of decimal places, and &amp;lt;var&amp;gt;Field Save&amp;lt;/var&amp;gt; option in each declaration. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Lists of records====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can share a list if a &amp;lt;var&amp;gt;Declare&amp;lt;/var&amp;gt; statement that declares the list as common is contained in each place where you use the list. The declaration of the list must precede the first reference to that list, or &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; declares the list implicitly without the common attribute.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Found sets====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can share found sets if the label of the &amp;lt;var&amp;gt;Find&amp;lt;/var&amp;gt; statement is declared as common. To effectively share a found set, follow these steps: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Add a &amp;lt;var&amp;gt;Declare&amp;lt;/var&amp;gt; statement that declares the statement label as common before the actual label in the portion of the request where the &amp;lt;var&amp;gt;Find&amp;lt;/var&amp;gt; statement will be executed. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Add a &amp;lt;var&amp;gt;Declare&amp;lt;/var&amp;gt; statement that declares the label as common to any parts of the request that require access to that found set. These parts, however, cannot contain a label with the same name, or a compiler error occurs. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
After execution of the &amp;lt;var&amp;gt;Find&amp;lt;/var&amp;gt; statement, you can access the record set in any portion of the request that contains the proper &amp;lt;var&amp;gt;Declare&amp;lt;/var&amp;gt; statement. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Menus and screens====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can share a menu or screen as common under the following conditions: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The first reference to the menu or screen must be the complete definition of the menu or screen, with the &amp;lt;var&amp;gt;Common&amp;lt;/var&amp;gt; keyword following the &amp;lt;var&amp;gt;Menu&amp;lt;/var&amp;gt; or &amp;lt;var&amp;gt;Screen&amp;lt;/var&amp;gt; statement. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Other parts of the request can reference the same menu or screen by using an abbreviated declaration of the form:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;Declare [Menu &amp;lt;i&amp;gt;menuname&amp;lt;/i&amp;gt; | Screen &amp;lt;i&amp;gt;screenname&amp;lt;/i&amp;gt;] Common &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If the complete definition of the menu or screen exists, and if that definition was declared as common, the menu or screen is shared. If not, a compiler error results. Two or more complete menu or screen definitions with the &amp;lt;var&amp;gt;Common&amp;lt;/var&amp;gt; keyword also result in a compiler error. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If you use a menu or screen %variable (:%variable) within a complex subroutine to refer to a &amp;lt;var&amp;gt;Common&amp;lt;/var&amp;gt; screen element, you must include a &amp;lt;var&amp;gt;Common&amp;lt;/var&amp;gt; declaration for each possible value of the menu or screen 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;
 &lt;br /&gt;
====Images====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The sharing of [[Images|images]] follows the same rules used for the sharing of menus and screens. If multiple images are contained within the same block, then the following rules also apply: &amp;lt;/p&amp;gt;&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;Common&amp;lt;/var&amp;gt; keyword on only the first &amp;lt;var&amp;gt;Image&amp;lt;/var&amp;gt; statement of an image block. All other images within the same block are automatically considered as candidates for sharing as common data.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;All other parts of the request that access common images must contain the following abbreviated form of the &amp;lt;var&amp;gt;Declare&amp;lt;/var&amp;gt; statement for each image to which access is required: &lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;Declare Image &amp;lt;i&amp;gt;imagename&amp;lt;/i&amp;gt; Common&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;
===Declare statement===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can use the &amp;lt;var&amp;gt;Declare&amp;lt;/var&amp;gt; statement to perform the following functions: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Specify subroutine formal parameter types. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Specify variables, labels, lists, menus, screens, and images as &amp;lt;var&amp;gt;Common&amp;lt;/var&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;
Menus and screens are discussed in detail in [[Full-screen feature]]. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Images are discussed in detail in [[Images]]. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;To declare lists without having to use an &amp;lt;code&amp;gt;In &amp;lt;i&amp;gt;filename&amp;lt;/i&amp;gt; Clear List &amp;lt;i&amp;gt;listname&amp;lt;/i&amp;gt;&amp;lt;/code&amp;gt; clause. See [[Lists#Creating and clearing a list|Creating and clearing a list]]. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;To declare %variables, see [[Using variables and values in computation#Declaring|Declaring %variables and %variable arrays]]. &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;
In the context of sharable elements, the format of the &amp;lt;var&amp;gt;Declare&amp;lt;/var&amp;gt; statement is shown below. For information about using &amp;lt;var&amp;gt;Declare&amp;lt;/var&amp;gt; for global elements, see [[Global features#Global objects|Global objects]]. For the detailed syntax of &amp;lt;var&amp;gt;Declare&amp;lt;/var&amp;gt;, see [[Statement syntax#Declare|Statement syntax]]. &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;Declare &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;declaration&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;declaration&amp;lt;/span&amp;gt; is one of the following:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;Label &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;label&amp;lt;/span&amp;gt; Common &lt;br /&gt;
&lt;br /&gt;
[List] &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;listname&amp;lt;/span&amp;gt; [In [File [Perm | Temp] Group] &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;name&amp;lt;/span&amp;gt;] [Common] &lt;br /&gt;
&lt;br /&gt;
Image &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;imagename&amp;lt;/span&amp;gt; Common &lt;br /&gt;
&lt;br /&gt;
Menu &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;menuname&amp;lt;/span&amp;gt; Common&lt;br /&gt;
&lt;br /&gt;
Screen &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;screenname&amp;lt;/span&amp;gt; Common&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;%variable&amp;lt;/span&amp;gt; [Is] {Fixed [Dp &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;n&amp;lt;/span&amp;gt;] | Float}&lt;br /&gt;
 [Array(&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;d1&amp;lt;/span&amp;gt; [,&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;d2&amp;lt;/span&amp;gt; [,&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;d3&amp;lt;/span&amp;gt;]])] [Common] &lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;%variable&amp;lt;/span&amp;gt; [Is] String [Len &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;n&amp;lt;/span&amp;gt;] [Dp {&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;dn1&amp;lt;/span&amp;gt; | *}]&lt;br /&gt;
 [Array(&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;d1&amp;lt;/span&amp;gt; [,&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;d2&amp;lt;/span&amp;gt; [,&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;d3&amp;lt;/span&amp;gt;]])] [No Field Save] [Common]&lt;br /&gt;
 &lt;br /&gt;
Subroutine &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;subname&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;inout-option&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;
For example, the &amp;lt;var&amp;gt;Declare&amp;lt;/var&amp;gt; statement declares the list &amp;lt;code&amp;gt;RECNAMES&amp;lt;/code&amp;gt; in the following request: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;BEGIN&lt;br /&gt;
DECLARE LIST RECNAMES&lt;br /&gt;
DECLARE SUBROUTINE REGION(LIST OUTPUT, STRING)&lt;br /&gt;
    .&lt;br /&gt;
    .&lt;br /&gt;
    .&lt;br /&gt;
CALL REGION(LIST RECNAMES, &#039;NORTHEAST&#039;)&lt;br /&gt;
    .&lt;br /&gt;
    .&lt;br /&gt;
    .&lt;br /&gt;
SUBROUTINE REGION(LIST RGNLST OUTPUT, %REGION IS STRING)&lt;br /&gt;
 &lt;br /&gt;
R1: IN EMPLOYEE FIND ALL RECORDS FOR WHICH REGION = %REGION&lt;br /&gt;
R2: PLACE RECORDS IN R1 ON LIST RGNLIST&lt;br /&gt;
END SUBROUTINE&lt;br /&gt;
END&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Defining common variables===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can define common variables at the beginning of all programs without later redefinitions. The syntax lets you use the &amp;lt;var&amp;gt;&amp;lt;i&amp;gt;%var&amp;lt;/i&amp;gt; Is Common&amp;lt;/var&amp;gt; clause without duplicating the previous attributes. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
However, if attributes, such as &amp;lt;var&amp;gt;String&amp;lt;/var&amp;gt; or &amp;lt;var&amp;gt;Len&amp;lt;/var&amp;gt;, are included in the redefinition, which differ from those previously defined, a compilation error occurs. In addition, if the variable is not previously defined, it is allocated based on the current default variable definition. &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;BEGIN&lt;br /&gt;
VARIABLES ARE STRING LEN 20 &lt;br /&gt;
%X IS STRING LEN 3 INITIAL (&#039;AAA&#039;) STATIC COMMON &lt;br /&gt;
SUBROUTINE A&lt;br /&gt;
   * full definition on next line no longer required&lt;br /&gt;
   ** %X IS STRING LEN 3 INITIAL (&#039;AAA&#039;) STATIC COMMON&lt;br /&gt;
   * new syntax on next line replaces previous line&lt;br /&gt;
   %X IS COMMON  /? defaults to previous %X definition ?/&lt;br /&gt;
   CALL B&lt;br /&gt;
END SUBROUTINE&lt;br /&gt;
 &lt;br /&gt;
SUBROUTINE B&lt;br /&gt;
   * But next line will fail compile since %X already exists&lt;br /&gt;
   %X IS STRING LEN 4 COMMON  /? compiler error ?/&lt;br /&gt;
   * And the next line will result in a default definition&lt;br /&gt;
   * since %Y is not previously defined.&lt;br /&gt;
   %Y IS COMMON&lt;br /&gt;
END SUBROUTINE&lt;br /&gt;
PRINT %X&lt;br /&gt;
CALL A&lt;br /&gt;
END&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Shared common element examples===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The following examples illustrate the differences between data that is locally scoped and data that is shared using the &amp;lt;var&amp;gt;Common&amp;lt;/var&amp;gt; keyword. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Example 1====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
In this example, the variable &amp;lt;code&amp;gt;%I&amp;lt;/code&amp;gt; assumes different values depending upon which part of the request is being executed: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;BEGIN&lt;br /&gt;
%I IS FIXED&lt;br /&gt;
   DECLARE SUBROUTINE SUBR1(STRING)&lt;br /&gt;
   .&lt;br /&gt;
   .&lt;br /&gt;
   .&lt;br /&gt;
FOR %I FROM 1 TO 10&lt;br /&gt;
   CALL SUBR1(%ARR(%I))&lt;br /&gt;
END FOR&lt;br /&gt;
   .&lt;br /&gt;
   .&lt;br /&gt;
   .&lt;br /&gt;
SUBROUTINE SUBR1(%A IS STRING)&lt;br /&gt;
%I IS FIXED&lt;br /&gt;
   FOR %I FROM 1 TO 10&lt;br /&gt;
      PRINT %I and %A&lt;br /&gt;
   END FOR&lt;br /&gt;
END SUBROUTINE&lt;br /&gt;
END&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;
In this example, the screen &amp;lt;code&amp;gt;EXAMPLE&amp;lt;/code&amp;gt; and the &amp;lt;code&amp;gt;%A&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;%B&amp;lt;/code&amp;gt; variables retain the same values no matter which part of the request is being executed: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;BEGIN&lt;br /&gt;
SCREEN EXAMDEF COMMON&lt;br /&gt;
   TITLE &#039;THIS IS A COMMON SCREEN DEFINITION&#039;&lt;br /&gt;
   PROMPT &#039;ENTER VALUE&#039;&lt;br /&gt;
   INPUT FLD1 AT 10 LEN 20 PAD &#039;_&#039;&lt;br /&gt;
END SCREEN&lt;br /&gt;
%A IS STRING LEN 10 COMMON&lt;br /&gt;
%B IS FLOAT COMMON&lt;br /&gt;
DECLARE SUBROUTINE SUBR1(STRING LEN 10)&lt;br /&gt;
   .&lt;br /&gt;
   .&lt;br /&gt;
   .&lt;br /&gt;
SUBROUTINE SUBR1(%Z IS STRING LEN 10)&lt;br /&gt;
DECLARE SCREEN EXAMDEF COMMON&lt;br /&gt;
%A IS STRING LEN 10 COMMON&lt;br /&gt;
%B IS FLOAT COMMON&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;
====Example 3====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
In this example, the main request and the subroutine share the common data of an array and a found set:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;BEGIN&lt;br /&gt;
%COM.ARRAY IS STRING LEN 10 ARRAY(10,10) COMMON&lt;br /&gt;
DECLARE LABEL ALL.RECS COMMON&lt;br /&gt;
%I IS FIXED&lt;br /&gt;
DECLARE SUBROUTINE EXAMPLE&lt;br /&gt;
   .&lt;br /&gt;
   .&lt;br /&gt;
   .&lt;br /&gt;
ALL.RECS: FIND ALL RECORDS&lt;br /&gt;
          END FIND&lt;br /&gt;
          %I = 0&lt;br /&gt;
          %J = 1&lt;br /&gt;
          FOR 10 RECORDS IN ALL.RECS&lt;br /&gt;
             %I = %I + 1&lt;br /&gt;
             %COM.ARRAY(%I,%J) = FLD&lt;br /&gt;
          END FOR&lt;br /&gt;
          CALL EXAMPLE&lt;br /&gt;
          STOP&lt;br /&gt;
 &lt;br /&gt;
SUBROUTINE EXAMPLE&lt;br /&gt;
   %COM.ARRAY IS STRING LEN 10 ARRAY(10,10) COMMON&lt;br /&gt;
   DECLARE LABEL ALL.RECS COMMON&lt;br /&gt;
   %I IS FIXED&lt;br /&gt;
   %I = 0&lt;br /&gt;
   %J = 2&lt;br /&gt;
   FOR 10 RECORDS IN ALL.RECS&lt;br /&gt;
      %I = %I + 1&lt;br /&gt;
      %COM.ARRAY(%I,%J) = FLD2&lt;br /&gt;
   END FOR&lt;br /&gt;
END SUBROUTINE&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 example, the main request updates column 1 of the array &amp;lt;code&amp;gt;%COMM.ARRAY&amp;lt;/code&amp;gt; with the contents of &amp;lt;code&amp;gt;FLD&amp;lt;/code&amp;gt;. The subroutine, &amp;lt;code&amp;gt;EXAMPLE&amp;lt;/code&amp;gt;, updates column 2 of the same array with the contents of &amp;lt;code&amp;gt;FLD2&amp;lt;/code&amp;gt;. Both the array &amp;lt;code&amp;gt;%COM.ARRAY&amp;lt;/code&amp;gt; and the found set &amp;lt;code&amp;gt;ALL.RECS&amp;lt;/code&amp;gt; are shared by using the &amp;lt;var&amp;gt;Common&amp;lt;/var&amp;gt; keyword. &amp;lt;code&amp;gt;%I&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;%J&amp;lt;/code&amp;gt; are both local variables. &amp;lt;code&amp;gt;%I&amp;lt;/code&amp;gt; is local because it was declared without the &amp;lt;var&amp;gt;Common&amp;lt;/var&amp;gt; keyword; &amp;lt;code&amp;gt;%J&amp;lt;/code&amp;gt; is local because it was not declared at all. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
==&amp;lt;b id=&amp;quot;On statement&amp;quot;&amp;gt;&amp;lt;/b&amp;gt;On units==  &lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
An &amp;lt;var&amp;gt;On&amp;lt;/var&amp;gt; unit lets you specify a course of action following a triggering event, such as the terminal operator pressing one of the &amp;lt;var&amp;gt;Attention&amp;lt;/var&amp;gt; identifier (AID) keys. The &amp;lt;var&amp;gt;On&amp;lt;/var&amp;gt; unit provides an application with a way to override the normal system response. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Syntax====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
To define an &amp;lt;var&amp;gt;On&amp;lt;/var&amp;gt; unit, use an &amp;lt;var&amp;gt;On&amp;lt;/var&amp;gt; block in the following 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;label&amp;lt;/span&amp;gt;] On &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;unittype&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;
   &amp;lt;span class=&amp;quot;literal&amp;quot;&amp;gt;...&amp;lt;/span&amp;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;
where &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;unittype&amp;lt;/var&amp;gt; is one of the following:&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;unittype&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;You can specify the course of action to take if...&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;ATTENTION&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;The end user invokes the attention feature (for example, presses the &amp;lt;var&amp;gt;BREAK, ATTN,&amp;lt;/var&amp;gt; or &amp;lt;var&amp;gt;PA1&amp;lt;/var&amp;gt; key, or enters &amp;lt;var&amp;gt;*CANCEL&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;ERROR&amp;lt;/td&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; cancels a request. Before a request is canceled or, for transaction backout files, after the current transaction is backed out, the ON ERROR unit is processed instead of returning control to the terminal command level. For more information on transaction backout files, see [[Data recovery]]. &amp;lt;/td&amp;gt;&lt;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 CONSTRAINT&lt;br /&gt;
CONFLICT (FCC)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;There are field level constraint conflicts. Violating the UNIQUE and AT-MOST-ONE attributes causes field-level conflicts.*&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;FIND CONFLICT&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;A conflict arises evaluating a FIND statement or a FOR EACH RECORD statement used for retrieval.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;MISSING FILE&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;A remote file is no longer available.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;MISSING MEMBER&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;A remote optional member is no longer available.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;RECORD LOCKING CONFLICT&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;A conflict arises during a record locking attempt.&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 you have procedures written for &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; V2R1.0 that use ON FCC for UNIQUE fields, and you are planning to use ON FCC for AT-MOST-ONE fields, you might need to rewrite the ON FCC unit to take the new value of $UPDSTAT (2 for AT-MOST-ONE) into account. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Several $functions provide information about conflicts. They are:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;[[$UpdFile]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;[[$UpdFld]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;[[$UpdOval]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;[[$UpdRec]]&amp;lt;/td&amp;gt;&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;[[$UpdStmt]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;[[$UpdVal]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;[[$UnqRec]]&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;
===Body of an On unit===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The body of the &amp;lt;var&amp;gt;On&amp;lt;/var&amp;gt; unit consists of statements immediately following the &amp;lt;var&amp;gt;On&amp;lt;/var&amp;gt; statement. Any User Language statement can appear within an &amp;lt;var&amp;gt;On&amp;lt;/var&amp;gt; unit except the SUBROUTINE statement.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Ending an On unit===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You must conclude an ON unit with either an END ON statement or an END BLOCK statement. The format of the END ON statement is as follows:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;END ON [&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;var class=&amp;quot;term&amp;quot;&amp;gt;label&amp;lt;/var&amp;gt; is the label of the statement that began the ON statement. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Processing an On unit===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When an &amp;lt;var&amp;gt;On&amp;lt;/var&amp;gt; statement is evaluated, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; remembers the location of the &amp;lt;var&amp;gt;On&amp;lt;/var&amp;gt; unit body (the statement after the &amp;lt;var&amp;gt;On&amp;lt;/var&amp;gt; statement and within the unit), but does not immediately evaluate the body. Instead, it passes control to the statement immediately following the &amp;lt;var&amp;gt;On&amp;lt;/var&amp;gt; unit. The &amp;lt;var&amp;gt;On&amp;lt;/var&amp;gt; unit body is evaluated only when the triggering event takes place.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Usage guidelines for On units===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Note the following considerations when using &amp;lt;var&amp;gt;On&amp;lt;/var&amp;gt; units:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;You must define the &amp;lt;var&amp;gt;On&amp;lt;/var&amp;gt; unit before it is invoked (that is, you should typically place the &amp;lt;var&amp;gt;On&amp;lt;/var&amp;gt; unit near the beginning of your procedure). &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;A subsequent definition of an &amp;lt;var&amp;gt;On&amp;lt;/var&amp;gt; unit of the same kind replaces the previous one. For example, if you define two ON ATTN units, the second one becomes the current one.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;You can jump to destinations within the same &amp;lt;var&amp;gt;On&amp;lt;/var&amp;gt; unit. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;You can jump out of an &amp;lt;var&amp;gt;On&amp;lt;/var&amp;gt; unit only to unnested, labeled statements.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;You cannot jump into an &amp;lt;var&amp;gt;On&amp;lt;/var&amp;gt; unit.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;You can jump outside of an ON unit only if the &amp;lt;var&amp;gt;On&amp;lt;/var&amp;gt; unit is part of a main routine or part of a complex subroutine. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;You cannot jump out of an &amp;lt;var&amp;gt;On&amp;lt;/var&amp;gt; unit contained in a simple subroutine, regardless of whether the destination is within the subroutine or back in the mainline program, because &amp;lt;var&amp;gt;On&amp;lt;/var&amp;gt; units are part of the mainline program; hence, there is no scoping of ON units. This restriction ensures that the &amp;lt;var&amp;gt;On&amp;lt;/var&amp;gt; unit is executed and the control returned to the main routine.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;An &amp;lt;var&amp;gt;On&amp;lt;/var&amp;gt; unit definition is not preserved when a request is continued with an END MORE statement and a MORE command. Each new request continuation must define its own &amp;lt;var&amp;gt;On&amp;lt;/var&amp;gt; units. (See [[Large request considerations#Rules for request continuation|Rules for request continuation]].)&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;For complex subroutines, an active &amp;lt;var&amp;gt;On&amp;lt;/var&amp;gt; unit is temporarily disabled when a subroutine is called that contains an &amp;lt;var&amp;gt;On&amp;lt;/var&amp;gt; UNIT of the same type; it is restored when the subroutine returns. Any ON unit enabled during the execution of a subroutine is replaced by the active &amp;lt;var&amp;gt;On&amp;lt;/var&amp;gt; unit at the time of the last CALL statement as soon as the RETURN statement is evaluated.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;On&amp;lt;/var&amp;gt; units coded inside complex subroutines can contain JUMP statements that specify a destination outside the &amp;lt;var&amp;gt;On&amp;lt;/var&amp;gt; unit. The destination must be to an unnested labeled statement within the complex subroutine. Also, if the &amp;lt;var&amp;gt;On&amp;lt;/var&amp;gt; unit is to be jumped out of, the condition that causes the &amp;lt;var&amp;gt;On&amp;lt;/var&amp;gt; unit to be invoked must be raised in the subroutine that contains the &amp;lt;var&amp;gt;On&amp;lt;/var&amp;gt; unit.&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
This prevents a lower level subroutine from returning inadvertently by raising a condition for which there is an &amp;lt;var&amp;gt;On&amp;lt;/var&amp;gt; unit coded in a higher level subroutine. If the inadvertent return is attempted, the request is canceled. &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;On&amp;lt;/var&amp;gt; units do not have their own local data and labels. They inherit the scope of the part of the program in which they are compiled. An &amp;lt;var&amp;gt;On&amp;lt;/var&amp;gt; unit that is compiled within a complex subroutine is considered part of only that subroutine. &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;
In the following example, if the user presses the&amp;lt;var&amp;gt; ATTN&amp;lt;/var&amp;gt; key instead of entering a response to the prompt in the GET.REC.TYPE statement, the &amp;lt;code&amp;gt;ON ATTENTION&amp;lt;/code&amp;gt; unit sets %FLAG to 1. The FLAG.SET statement tests %FLAG. If %FLAG is set, the request branches to END.REQUEST and the FIND statement is not executed. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;%FLAG=0&lt;br /&gt;
              ON ATTENTION&lt;br /&gt;
                 %FLAG=1&lt;br /&gt;
                 BYPASS&lt;br /&gt;
              END ON&lt;br /&gt;
GET.REC.TYPE: %TYPE=$READ(&#039;ENTER RECORD TYPE&#039;)&lt;br /&gt;
FLAG.SET:     IF %FLAG=1 THEN&lt;br /&gt;
                 JUMP TO END.REQUEST&lt;br /&gt;
              END IF&lt;br /&gt;
FIND.RECS:    FIND ALL RECORDS FOR WHICH&lt;br /&gt;
                 TYPE = %TYPE&lt;br /&gt;
              END FIND&lt;br /&gt;
                 .&lt;br /&gt;
                 .&lt;br /&gt;
                 .&lt;br /&gt;
END.REQUEST:&lt;br /&gt;
END&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Only one On unit at a time===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Only one &amp;lt;var&amp;gt;On&amp;lt;/var&amp;gt; unit of each kind is active at a time. For example, the processing of a second ON ERROR statement resets the current ON ERROR unit, but does not affect the current ON ATTENTION unit. Thus, you can redefine what to do in a variety of cases by having several ON statements and units within a request. An &amp;lt;var&amp;gt;On&amp;lt;/var&amp;gt; unit can be redefined within another &amp;lt;var&amp;gt;On&amp;lt;/var&amp;gt; unit.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Passing control to and from On units===&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; passes control to an &amp;lt;var&amp;gt;On&amp;lt;/var&amp;gt; unit when the triggering event occurs. For example, an ON ATTENTION unit receives control when a user presses one of the ATTENTION identifier (AID) keys at the terminal during the execution of a request. Use one of the following statements to return control to the body of the request. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====BYPASS statement====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The BYPASS statement handles the various unittypes of an &amp;lt;var&amp;gt;On&amp;lt;/var&amp;gt; statement 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;For unittype...&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;The BYPASS statement...&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;ON MISSING FILE&amp;lt;br&amp;gt;&lt;br /&gt;
ON MISSING MEMBER&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Returns control to the statement immediately after the END FOR statement that closes the current FOR loop. &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;ON ERROR&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Ends the 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 nowrap&amp;gt;ON ATTENTION&amp;lt;br&amp;gt;&lt;br /&gt;
ON FIND CONFLICT&amp;lt;br&amp;gt;&lt;br /&gt;
ON RECORD LOCKING CONFLICT&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Returns control to the statement immediately after the statement that invoked the &amp;lt;var&amp;gt;On&amp;lt;/var&amp;gt; unit.&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 format of the BYPASS statement is as follows:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;BYPASS [PENDING STATEMENT]&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
where the PENDING STATEMENT keyword is optional. If the &amp;lt;var&amp;gt;On&amp;lt;/var&amp;gt; unit is not ended with a BYPASS statement, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; automatically generates a STOP statement at the end of the unit. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====CONTINUE statement====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The CONTINUE statement is supported only with the Parallel Query Option. If you lose access to a group member that is an optional file during FOR processing, the CONTINUE statement continues FOR processing with the next available file, and skips any other unavailable files.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====JUMP TO statement====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The JUMP statement, when used to jump to a labeled statement outside the ON unit, causes the request to continue at that point. There are restrictions pertaining to jumps; see [[Flow of control in User Language#Branching statements|Branching statements]] and [[#Simple subroutines|Simple subroutines]]. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====RETRY statement====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The RETRY statement passes control to the statement that invoked the ON unit, thereby retrying that statement. The RETRY statement is not valid in an ON ERROR unit.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The format of the RETRY statement is as follows:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;RETRY [PENDING STATEMENT]&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
where the &amp;lt;var&amp;gt;PENDING STATEMENT&amp;lt;/var&amp;gt; keyword is optional.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====STOP statement====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The STOP statement is used to end the request.         &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Clearing On units===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can issue the following statement to clear the definition of an &amp;lt;var&amp;gt;On&amp;lt;/var&amp;gt; unit:   &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;CLEAR ON &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;unittype&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 statement clears any defined &amp;lt;var&amp;gt;On&amp;lt;/var&amp;gt; unit of the type specified. Clearing an ON unit produces the following results:&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;After a CLEAR ON ATTENTION, pressing one of the ATTENTION identifier (AID) keys at the terminal does not invoke the ON ATTENTION unit.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;After a CLEAR ON ERROR, a request cancellation error does not invoke the ON ERROR unit. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
An &amp;lt;var&amp;gt;On&amp;lt;/var&amp;gt; unit can be defined, cleared, and then redefined. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Pausing during the request===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The &amp;lt;var&amp;gt;[[Pause statement|Pause]]&amp;lt;/var&amp;gt; statement can be used with &amp;lt;var&amp;gt;On&amp;lt;/var&amp;gt; units to cause the request to wait a specified number of seconds and then to retry the statement that caused the evaluation of the &amp;lt;var&amp;gt;On&amp;lt;/var&amp;gt; unit. &amp;lt;var&amp;gt;Pause&amp;lt;/var&amp;gt; is typically used with the other &amp;lt;var&amp;gt;On&amp;lt;/var&amp;gt; unit types (&amp;lt;var&amp;gt;On Record Locking Conflict&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;On Find Conflict&amp;lt;/var&amp;gt;) and is discussed in [[Record level locking and concurrency control]].   &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;The &amp;lt;var&amp;gt;[[$WakeUp]]&amp;lt;/var&amp;gt; function is an alternative approach; it offers millisecond resolution pausing.&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>JDamon</name></author>
	</entry>
	<entry>
		<id>https://m204wiki.rocketsoftware.com/index.php?title=CREATE_command:_Temporary_group&amp;diff=120331</id>
		<title>CREATE command: Temporary group</title>
		<link rel="alternate" type="text/html" href="https://m204wiki.rocketsoftware.com/index.php?title=CREATE_command:_Temporary_group&amp;diff=120331"/>
		<updated>2025-01-23T00:42:45Z</updated>

		<summary type="html">&lt;p&gt;JDamon: /* Temporary group parameters */&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;Any user&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; temporary file group&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 [TEMP] GROUP &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;groupname&amp;lt;/var&amp;gt;&lt;br /&gt;
 FROM {&amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;filename&amp;lt;/var&amp;gt; [AT &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;location&amp;lt;/var&amp;gt;] &lt;br /&gt;
 [(&amp;lt;b&amp;gt;OPT&amp;lt;/b&amp;gt;IONAL) | (&amp;lt;u&amp;gt;&amp;lt;b&amp;gt;MAND&amp;lt;/b&amp;gt;ATORY&amp;lt;/u&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;] &lt;br /&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;
Where:&lt;br /&gt;
&amp;lt;table&amp;gt; &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;groupname&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;The name of the temporary file group that is being created (1 to 8 characters). The group name cannot be &amp;lt;code&amp;gt;FILE&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;GROUP&amp;lt;/code&amp;gt;, and it cannot start with &amp;lt;code&amp;gt;CCA&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;SYS&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;OUT&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;TAPE&amp;lt;/code&amp;gt;, dollar sign (&amp;lt;tt&amp;gt;$&amp;lt;/tt&amp;gt;), or percent sign (&amp;lt;tt&amp;gt;%&amp;lt;/tt&amp;gt;). &lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The group name can contain any alphanumeric characters except those 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; &amp;lt;th&amp;gt;Character name &amp;lt;/th&amp;gt; &lt;br /&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;Asterisk&amp;lt;/var&amp;gt;&amp;lt;/th&amp;gt; &lt;br /&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;Equal sign &amp;lt;/var&amp;gt;&amp;lt;/th&amp;gt; &lt;br /&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;Left parenthesis &amp;lt;/var&amp;gt;&amp;lt;/th&amp;gt; &lt;br /&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;Minus sign&amp;lt;/var&amp;gt;&amp;lt;/th&amp;gt; &lt;br /&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;Plus sign &amp;lt;/var&amp;gt;&amp;lt;/th&amp;gt; &lt;br /&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;Right parenthesis &amp;lt;/var&amp;gt;&amp;lt;/th&amp;gt; &lt;br /&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;Semicolon&amp;lt;/var&amp;gt;&amp;lt;/th&amp;gt; &lt;br /&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;Single quote &amp;lt;/var&amp;gt;&amp;lt;/th&amp;gt; &lt;br /&gt;
&amp;lt;td&amp;gt;( &#039; ) &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;Slash &amp;lt;/var&amp;gt;&amp;lt;/th&amp;gt; &lt;br /&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;Space &amp;lt;/var&amp;gt;&amp;lt;/th&amp;gt; &lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt;   &lt;br /&gt;
&amp;lt;/table&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;filename&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;The name of 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;p&amp;gt;&lt;br /&gt;
If you are specifying [[PQO|Parallel Query Option/204]] remote files, &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;filename&amp;lt;/var&amp;gt; must include a remote location (AT &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;location&amp;lt;/var&amp;gt;) or be a defined file synonym. Also, you cannot specify multiple identifiers for the same file: that is, you cannot include two synonyms for the same file, and you cannot include a synonym and a remote file specification for the same file. &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;location&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;For PQO files, &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;location&amp;lt;/var&amp;gt; is the symbolic name (as many as eight characters) that refers to the location of the node on which the remote file resides. An unquoted equal sign (&amp;lt;tt&amp;gt;=&amp;lt;/tt&amp;gt;) specifies that the file is local.&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;&amp;lt;var&amp;gt;OPTIONAL&amp;lt;/var&amp;gt; or &amp;lt;var&amp;gt;MANDATORY&amp;lt;/var&amp;gt;&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Indicates whether PQO scattered group operations can proceed in the absence of this group member. The default is &amp;lt;var&amp;gt;MANDATORY&amp;lt;/var&amp;gt;. Valid abbreviations are &amp;lt;var&amp;gt;OPT&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;MAND&amp;lt;/var&amp;gt;.&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You cannot open a group if a mandatory member is unavailable. Also, you cannot specify &amp;lt;var&amp;gt;OPTIONAL&amp;lt;/var&amp;gt; for local files.&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;&lt;br /&gt;
&amp;lt;th&amp;gt;parameter=value&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Specifies &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; temporary group parameters. Multiple &amp;lt;var&amp;gt;PARAMETER&amp;lt;/var&amp;gt; statements can follow, and each statement can contain as many parameters in any order as will fit on one input line. Valid temporary group parameters are described in [[#Temporary group parameters|Temporary group parameters]], below.&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==&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;b&amp;gt;CREATE GROUP REGION FROM DELAWARE, MARYLAND, VIRGINIA &amp;lt;/b&amp;gt;  &lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;*** M204.0825: READING GROUP PARAMETERS &lt;br /&gt;
&amp;lt;b&amp;gt;PARAMETER PROCFILE = VIRGINIA &lt;br /&gt;
END&amp;lt;/b&amp;gt;  &lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;*** M204.0828: TEMP GROUP CREATED: REGION&lt;br /&gt;
&amp;lt;/p&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 &amp;lt;var&amp;gt;CREATE TEMP GROUP&amp;lt;/var&amp;gt; command creates a temporary file group from the &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; files specified in the command. A temporary group is established by a user for use during the current login session. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;A temporary group can be referenced only by the user who creates it. &lt;br /&gt;
The temporary group ceases to exist when the user logs out. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;If you omit &amp;lt;code&amp;gt;TEMP&amp;lt;/code&amp;gt; from the &amp;lt;var&amp;gt;CREATE GROUP&amp;lt;/var&amp;gt; command, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; assumes you are creating a temporary group.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Temporary group parameters===&lt;br /&gt;
The [[#Example|CREATE GROUP REGION example]] above shows how group parameters can be specified. The &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; temporary group parameters that can be set in the &amp;lt;var&amp;gt;CREATE&amp;lt;/var&amp;gt; command&#039;s parameter list are shown in the table below: &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;Parameter&amp;lt;/th&amp;gt; &lt;br /&gt;
&amp;lt;th&amp;gt;Defines...&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;UPDTFILE&amp;lt;/var&amp;gt;&amp;lt;/th&amp;gt; &lt;br /&gt;
&amp;lt;td&amp;gt;Group&#039;s update file for the STORE RECORD statement. &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;PROCFILE&amp;lt;/var&amp;gt;&amp;lt;/th&amp;gt; &lt;br /&gt;
&amp;lt;td&amp;gt;Group&#039;s procedure file, or specifies that the group can contain multiple procedure 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;&amp;lt;var&amp;gt;BLDGFT&amp;lt;/var&amp;gt;&amp;lt;/th&amp;gt; &lt;br /&gt;
&amp;lt;td&amp;gt;Whether to build an internal field table for this group. Can be YES or NO; YES is the default. &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;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The &amp;lt;var&amp;gt;UPDTFILE&amp;lt;/var&amp;gt; parameter defines the group&#039;s update file for the STORE RECORD statement. When a SOUL &amp;lt;var&amp;gt;Store Record&amp;lt;/var&amp;gt; statement is encountered in group context, and &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; cannot determine a file context, the record is stored in the group-update file. If &amp;lt;var&amp;gt;UPDTFILE&amp;lt;/var&amp;gt; is not specified, no update file is assigned and any attempt to issue a STORE RECORD statement will fail with:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;M204.0203: &amp;quot;Store&amp;quot; requires update file&amp;lt;/p code&amp;gt;&lt;br /&gt;
In that case, use the &amp;quot;IN FILE&amp;quot; or &#039;IN MEMBER&amp;quot; clause with STORE RECORD:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;IN FILE filename STORE RECORD &lt;br /&gt;
IN GROUP groupname MEMBER %membername STORE RECORD&lt;br /&gt;
&amp;lt;/p code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
The [[$Update]] function also provides a convenient method for manipulating the update file. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;The &amp;lt;var&amp;gt;PROCFILE&amp;lt;/var&amp;gt; parameter defines the group&#039;s procedure file. All procedure-related commands and the &amp;lt;var&amp;gt;INCLUDE&amp;lt;/var&amp;gt; statement operate on this file if no other file context is established. If this parameter is omitted, no procedure file is assigned. &lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can also use &amp;lt;var&amp;gt;PROCFILE&amp;lt;/var&amp;gt; to specify multiple procedure files for a group. If a group contains multiple procedure files, then the &amp;lt;var&amp;gt;INCLUDE&amp;lt;/var&amp;gt; statement searches the entire group for the procedure to be included. The search proceeds in order from the first file defined in the &amp;lt;var&amp;gt;CREATE GROUP&amp;lt;/var&amp;gt; command to the last. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
To allow for multiple procedure files, specify &amp;lt;code&amp;gt;PROCFILE = *&amp;lt;/code&amp;gt;, which indicates that any of the files in a group can contain procedures. This specification is optional; use it only if more than one file in the group contains procedures that you want to include.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
For more information, see [[Application Subsystem development#Multiple procedure files|multiple procedure files]]. &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;BLDGFT&amp;lt;/var&amp;gt; parameter, if &amp;lt;code&amp;gt;YES&amp;lt;/code&amp;gt; (the default), directs &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; to maintain certain information about the group in an internal field table. The option to specify depends upon how long you expect to use the group. If the group is only to satisfy a few short requests, specify &amp;lt;code&amp;gt;NO&amp;lt;/code&amp;gt;.&amp;lt;/li&amp;gt;&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;[[CREATE command: Permanent group]] &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category: User commands]]&lt;br /&gt;
[[Category:Commands]]&lt;/div&gt;</summary>
		<author><name>JDamon</name></author>
	</entry>
	<entry>
		<id>https://m204wiki.rocketsoftware.com/index.php?title=CREATE_command:_Temporary_group&amp;diff=120322</id>
		<title>CREATE command: Temporary group</title>
		<link rel="alternate" type="text/html" href="https://m204wiki.rocketsoftware.com/index.php?title=CREATE_command:_Temporary_group&amp;diff=120322"/>
		<updated>2025-01-17T02:44:01Z</updated>

		<summary type="html">&lt;p&gt;JDamon: /* Temporary group parameters */&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;Any user&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; temporary file group&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 [TEMP] GROUP &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;groupname&amp;lt;/var&amp;gt;&lt;br /&gt;
 FROM {&amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;filename&amp;lt;/var&amp;gt; [AT &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;location&amp;lt;/var&amp;gt;] &lt;br /&gt;
 [(&amp;lt;b&amp;gt;OPT&amp;lt;/b&amp;gt;IONAL) | (&amp;lt;u&amp;gt;&amp;lt;b&amp;gt;MAND&amp;lt;/b&amp;gt;ATORY&amp;lt;/u&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;] &lt;br /&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;
Where:&lt;br /&gt;
&amp;lt;table&amp;gt; &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;groupname&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;The name of the temporary file group that is being created (1 to 8 characters). The group name cannot be &amp;lt;code&amp;gt;FILE&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;GROUP&amp;lt;/code&amp;gt;, and it cannot start with &amp;lt;code&amp;gt;CCA&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;SYS&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;OUT&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;TAPE&amp;lt;/code&amp;gt;, dollar sign (&amp;lt;tt&amp;gt;$&amp;lt;/tt&amp;gt;), or percent sign (&amp;lt;tt&amp;gt;%&amp;lt;/tt&amp;gt;). &lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The group name can contain any alphanumeric characters except those 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; &amp;lt;th&amp;gt;Character name &amp;lt;/th&amp;gt; &lt;br /&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;Asterisk&amp;lt;/var&amp;gt;&amp;lt;/th&amp;gt; &lt;br /&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;Equal sign &amp;lt;/var&amp;gt;&amp;lt;/th&amp;gt; &lt;br /&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;Left parenthesis &amp;lt;/var&amp;gt;&amp;lt;/th&amp;gt; &lt;br /&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;Minus sign&amp;lt;/var&amp;gt;&amp;lt;/th&amp;gt; &lt;br /&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;Plus sign &amp;lt;/var&amp;gt;&amp;lt;/th&amp;gt; &lt;br /&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;Right parenthesis &amp;lt;/var&amp;gt;&amp;lt;/th&amp;gt; &lt;br /&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;Semicolon&amp;lt;/var&amp;gt;&amp;lt;/th&amp;gt; &lt;br /&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;Single quote &amp;lt;/var&amp;gt;&amp;lt;/th&amp;gt; &lt;br /&gt;
&amp;lt;td&amp;gt;( &#039; ) &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;Slash &amp;lt;/var&amp;gt;&amp;lt;/th&amp;gt; &lt;br /&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;Space &amp;lt;/var&amp;gt;&amp;lt;/th&amp;gt; &lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt;   &lt;br /&gt;
&amp;lt;/table&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;filename&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;The name of 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;p&amp;gt;&lt;br /&gt;
If you are specifying [[PQO|Parallel Query Option/204]] remote files, &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;filename&amp;lt;/var&amp;gt; must include a remote location (AT &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;location&amp;lt;/var&amp;gt;) or be a defined file synonym. Also, you cannot specify multiple identifiers for the same file: that is, you cannot include two synonyms for the same file, and you cannot include a synonym and a remote file specification for the same file. &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;location&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;For PQO files, &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;location&amp;lt;/var&amp;gt; is the symbolic name (as many as eight characters) that refers to the location of the node on which the remote file resides. An unquoted equal sign (&amp;lt;tt&amp;gt;=&amp;lt;/tt&amp;gt;) specifies that the file is local.&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;&amp;lt;var&amp;gt;OPTIONAL&amp;lt;/var&amp;gt; or &amp;lt;var&amp;gt;MANDATORY&amp;lt;/var&amp;gt;&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Indicates whether PQO scattered group operations can proceed in the absence of this group member. The default is &amp;lt;var&amp;gt;MANDATORY&amp;lt;/var&amp;gt;. Valid abbreviations are &amp;lt;var&amp;gt;OPT&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;MAND&amp;lt;/var&amp;gt;.&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You cannot open a group if a mandatory member is unavailable. Also, you cannot specify &amp;lt;var&amp;gt;OPTIONAL&amp;lt;/var&amp;gt; for local files.&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;&lt;br /&gt;
&amp;lt;th&amp;gt;parameter=value&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Specifies &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; temporary group parameters. Multiple &amp;lt;var&amp;gt;PARAMETER&amp;lt;/var&amp;gt; statements can follow, and each statement can contain as many parameters in any order as will fit on one input line. Valid temporary group parameters are described in [[#Temporary group parameters|Temporary group parameters]], below.&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==&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;b&amp;gt;CREATE GROUP REGION FROM DELAWARE, MARYLAND, VIRGINIA &amp;lt;/b&amp;gt;  &lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;*** M204.0825: READING GROUP PARAMETERS &lt;br /&gt;
&amp;lt;b&amp;gt;PARAMETER PROCFILE = VIRGINIA &lt;br /&gt;
END&amp;lt;/b&amp;gt;  &lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;*** M204.0828: TEMP GROUP CREATED: REGION&lt;br /&gt;
&amp;lt;/p&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 &amp;lt;var&amp;gt;CREATE TEMP GROUP&amp;lt;/var&amp;gt; command creates a temporary file group from the &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; files specified in the command. A temporary group is established by a user for use during the current login session. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;A temporary group can be referenced only by the user who creates it. &lt;br /&gt;
The temporary group ceases to exist when the user logs out. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;If you omit &amp;lt;code&amp;gt;TEMP&amp;lt;/code&amp;gt; from the &amp;lt;var&amp;gt;CREATE GROUP&amp;lt;/var&amp;gt; command, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; assumes you are creating a temporary group.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Temporary group parameters===&lt;br /&gt;
The [[#Example|CREATE GROUP REGION example]] above shows how group parameters can be specified. The &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; temporary group parameters that can be set in the &amp;lt;var&amp;gt;CREATE&amp;lt;/var&amp;gt; command&#039;s parameter list are shown in the table below: &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;Parameter&amp;lt;/th&amp;gt; &lt;br /&gt;
&amp;lt;th&amp;gt;Defines...&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;UPDTFILE&amp;lt;/var&amp;gt;&amp;lt;/th&amp;gt; &lt;br /&gt;
&amp;lt;td&amp;gt;Group&#039;s update 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;&amp;lt;var&amp;gt;PROCFILE&amp;lt;/var&amp;gt;&amp;lt;/th&amp;gt; &lt;br /&gt;
&amp;lt;td&amp;gt;Group&#039;s procedure file, or specifies that the group can contain multiple procedure 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;&amp;lt;var&amp;gt;BLDGFT&amp;lt;/var&amp;gt;&amp;lt;/th&amp;gt; &lt;br /&gt;
&amp;lt;td&amp;gt;Whether to build an internal field table for this group. Can be YES or NO; YES is the default. &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;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The &amp;lt;var&amp;gt;UPDTFILE&amp;lt;/var&amp;gt; parameter defines the group&#039;s update file for the STORE RECORD statement. When a SOUL &amp;lt;var&amp;gt;Store Record&amp;lt;/var&amp;gt; statement is encountered in group context, and &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; cannot determine a file context, the record is stored in the group-update file. If &amp;lt;var&amp;gt;UPDTFILE&amp;lt;/var&amp;gt; is not specified, no update file is assigned and any attempt to issue a STORE RECORD statement will fail with:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;M204.0203: &amp;quot;Store&amp;quot; requires update file&amp;lt;/p code&amp;gt;&lt;br /&gt;
In that case, use the &amp;quot;IN FILE&amp;quot; or &#039;IN MEMBER&amp;quot; clause with STORE RECORD:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;IN FILE filename STORE RECORD &lt;br /&gt;
IN GROUP groupname MEMBER %membername STORE RECORD&lt;br /&gt;
&amp;lt;/p code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
The [[$Update]] function also provides a convenient method for manipulating the update file. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;The &amp;lt;var&amp;gt;PROCFILE&amp;lt;/var&amp;gt; parameter defines the group&#039;s procedure file. All procedure-related commands and the &amp;lt;var&amp;gt;INCLUDE&amp;lt;/var&amp;gt; statement operate on this file if no other file context is established. If this parameter is omitted, no procedure file is assigned. &lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can also use &amp;lt;var&amp;gt;PROCFILE&amp;lt;/var&amp;gt; to specify multiple procedure files for a group. If a group contains multiple procedure files, then the &amp;lt;var&amp;gt;INCLUDE&amp;lt;/var&amp;gt; statement searches the entire group for the procedure to be included. The search proceeds in order from the first file defined in the &amp;lt;var&amp;gt;CREATE GROUP&amp;lt;/var&amp;gt; command to the last. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
To allow for multiple procedure files, specify &amp;lt;code&amp;gt;PROCFILE = *&amp;lt;/code&amp;gt;, which indicates that any of the files in a group can contain procedures. This specification is optional; use it only if more than one file in the group contains procedures that you want to include.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
For more information, see [[Application Subsystem development#Multiple procedure files|multiple procedure files]]. &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;BLDGFT&amp;lt;/var&amp;gt; parameter, if &amp;lt;code&amp;gt;YES&amp;lt;/code&amp;gt; (the default), directs &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; to maintain certain information about the group in an internal field table. The option to specify depends upon how long you expect to use the group. If the group is only to satisfy a few short requests, specify &amp;lt;code&amp;gt;NO&amp;lt;/code&amp;gt;.&amp;lt;/li&amp;gt;&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;[[CREATE command: Permanent group]] &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category: User commands]]&lt;br /&gt;
[[Category:Commands]]&lt;/div&gt;</summary>
		<author><name>JDamon</name></author>
	</entry>
	<entry>
		<id>https://m204wiki.rocketsoftware.com/index.php?title=CREATE_PERM_GROUP_command&amp;diff=120321</id>
		<title>CREATE PERM GROUP command</title>
		<link rel="alternate" type="text/html" href="https://m204wiki.rocketsoftware.com/index.php?title=CREATE_PERM_GROUP_command&amp;diff=120321"/>
		<updated>2025-01-17T02:40:30Z</updated>

		<summary type="html">&lt;p&gt;JDamon: /* Syntax */&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;System manager&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; permanent [[Files,_groups,_and_reference_context#File_groups|file group]]&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 PERM GROUP &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;groupname&amp;lt;/var&amp;gt;&lt;br /&gt;
 FROM {&amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;filename&amp;lt;/var&amp;gt; [AT &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;location&amp;lt;/var&amp;gt;] &lt;br /&gt;
 [(&amp;lt;b&amp;gt;OPT&amp;lt;/b&amp;gt;IONAL) | (&amp;lt;b&amp;gt;MAND&amp;lt;/b&amp;gt;ATORY)]} ,...&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;] &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;]]...&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;
Where:&lt;br /&gt;
&amp;lt;table&amp;gt; &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;groupname&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;The name of the permanent file group that is being created (1 to 8 characters). The group name cannot be &amp;lt;code&amp;gt;FILE&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;GROUP&amp;lt;/code&amp;gt;, and it cannot start with &amp;lt;code&amp;gt;CCA&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;SYS&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;OUT&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;TAPE&amp;lt;/code&amp;gt;, dollar sign (&amp;lt;tt&amp;gt;$&amp;lt;/tt&amp;gt;), or percent sign (&amp;lt;tt&amp;gt;%&amp;lt;/tt&amp;gt;). &lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The group name can contain any alphanumeric characters except those shown 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; &amp;lt;th&amp;gt;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;Asterisk&amp;lt;/var&amp;gt;&amp;lt;/th&amp;gt; &lt;br /&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;Equal sign &amp;lt;/var&amp;gt;&amp;lt;/th&amp;gt; &lt;br /&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;Left parenthesis &amp;lt;/var&amp;gt;&amp;lt;/th&amp;gt; &lt;br /&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;Minus sign&amp;lt;/var&amp;gt;&amp;lt;/th&amp;gt; &lt;br /&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;Plus sign &amp;lt;/var&amp;gt;&amp;lt;/th&amp;gt; &lt;br /&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;Right parenthesis &amp;lt;/var&amp;gt;&amp;lt;/th&amp;gt; &lt;br /&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;Semicolon&amp;lt;/var&amp;gt;&amp;lt;/th&amp;gt; &lt;br /&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;Single quote &amp;lt;/var&amp;gt;&amp;lt;/th&amp;gt; &lt;br /&gt;
&amp;lt;td&amp;gt;(&#039;) &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;Slash &amp;lt;/var&amp;gt;&amp;lt;/th&amp;gt; &lt;br /&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;Space &amp;lt;/var&amp;gt;&amp;lt;/th&amp;gt; &lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&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;filename&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;The name of 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;p&amp;gt;If you are specifying [[PQO|Parallel Query Option/204]] remote files, &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;filename&amp;lt;/var&amp;gt; must include a remote location (&amp;lt;var&amp;gt;AT&amp;lt;/var&amp;gt; &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;location&amp;lt;/var&amp;gt;) or be a defined file synonym. Also, do not specify multiple identifiers for the same file; that is, you cannot include two synonyms for the same file, and you cannot include a synonym and a remote file specification for the same file. A group may have up to 254 files.&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;location&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;For PQO files, &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;location&amp;lt;/var&amp;gt; is the symbolic name (as many as eight characters) that refers to the location of the node on which the remote file resides. An unquoted equal sign (&amp;lt;tt&amp;gt;=&amp;lt;/tt&amp;gt;) specifies that the file is local.&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;&amp;lt;var&amp;gt;OPTIONAL&amp;lt;/var&amp;gt; or &amp;lt;var&amp;gt;MANDATORY&amp;lt;/var&amp;gt;&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Indicates whether PQO scattered group operations can proceed in the absence of this group member. The default is &amp;lt;var&amp;gt;MANDATORY&amp;lt;/var&amp;gt;. Valid abbreviations are &amp;lt;var&amp;gt;OPT&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;MAND&amp;lt;/var&amp;gt;.&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You cannot open a group if a mandatory member is unavailable. Also, you cannot specify &amp;lt;var&amp;gt;OPTIONAL&amp;lt;/var&amp;gt; for local files.&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;parameter&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Specifies &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; group parameters. Any number of &amp;lt;var&amp;gt;PARAMETER&amp;lt;/var&amp;gt; statements can follow, and each can contain as many parameters in any order as fit on one input line. Valid permanent group parameters are described in the table below. All but &amp;lt;code&amp;gt;PRIVATE&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;PUBLIC&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;SEMIPUB&amp;lt;/code&amp;gt; must be followed by a value:&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;Parameter&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; &lt;br /&gt;
&amp;lt;th&amp;gt;&amp;lt;var&amp;gt;ADDLVL&amp;lt;/var&amp;gt;&amp;lt;/th&amp;gt; &lt;br /&gt;
&amp;lt;td&amp;gt;Identifies the &amp;lt;var&amp;gt;ADD&amp;lt;/var&amp;gt; field level security access level for the files making up the group. The default is 0.   &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;&amp;lt;var&amp;gt;BLDGFT &amp;lt;/var&amp;gt;&amp;lt;/th&amp;gt; &lt;br /&gt;
&amp;lt;td&amp;gt;Indicates whether to build an internal field table for this group. Can be &amp;lt;code&amp;gt;YES&amp;lt;/code&amp;gt; (default) or &amp;lt;code&amp;gt;NO&amp;lt;/code&amp;gt;. &lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
&amp;lt;var&amp;gt;BLDGFT&amp;lt;/var&amp;gt; is ignored for groups that include remote members.&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; &lt;br /&gt;
&amp;lt;th&amp;gt;&amp;lt;var&amp;gt;MAXFAIL&amp;lt;/var&amp;gt;&amp;lt;/th&amp;gt; &amp;lt;td&amp;gt;For scattered groups (PQO), the maximum number of optional members that can be unavailable. If more than &amp;lt;var&amp;gt;MAXFAIL&amp;lt;/var&amp;gt; files are unavailable, the group fails to open or operations on the group are aborted.&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The value of &amp;lt;var&amp;gt;MAXFAIL&amp;lt;/var&amp;gt; must be 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;An integer between one and the number of optional group members. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;An asterisk (&amp;lt;tt&amp;gt;*&amp;lt;/tt&amp;gt;), which is equivalent to the number of optional members in the group. This setting means that the group can function without any of its optional members. This is the default. &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 ad hoc scattered groups, &amp;lt;var&amp;gt;MAXFAIL&amp;lt;/var&amp;gt; is always set to the default.&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;&amp;lt;var&amp;gt;PCLASSDF&amp;lt;/var&amp;gt;&amp;lt;/th&amp;gt; &lt;br /&gt;
&amp;lt;td&amp;gt;Identifies the default user class with respect to the procedures defined for a permanent group. &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;&amp;lt;var&amp;gt;PRIVATE&amp;lt;/var&amp;gt;&amp;lt;/th&amp;gt; &lt;br /&gt;
&amp;lt;td&amp;gt;Indicates that users are asked for a group password when they open the group. The password entered must be valid to open the group.   &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;&amp;lt;var&amp;gt;PRIVDEF&amp;lt;/var&amp;gt;&amp;lt;/th&amp;gt; &lt;br /&gt;
&amp;lt;td&amp;gt;Indicates the default privileges for public and semi-public groups. If not specified, default group privileges are set to X&#039;3FFF&#039; (all privileges). &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 id=&amp;quot;PROCFILE&amp;quot;&amp;gt;&amp;lt;var&amp;gt;PROCFILE&amp;lt;/var&amp;gt;&amp;lt;/th&amp;gt; &lt;br /&gt;
&amp;lt;td&amp;gt;Defines the group&#039;s procedure file. Multiple procedure files can be specified with &amp;lt;code&amp;gt;PROCFILE = *&amp;lt;/code&amp;gt;, as explained in [[CREATE command: Temporary group#Temporary group parameters|Temporary group parameters]].   &lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
With scattered groups, &amp;lt;var&amp;gt;PROCFILE&amp;lt;/var&amp;gt; must refer to a local file, and its value cannot be an asterisk (&amp;lt;tt&amp;gt;*&amp;lt;/tt&amp;gt;). &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;&amp;lt;var&amp;gt;PUBLIC&amp;lt;/var&amp;gt;&amp;lt;/th&amp;gt; &lt;br /&gt;
&amp;lt;td&amp;gt;Indicates that users are not asked for a group password when they open the group and are automatically given default group privileges. If none of the parameters &amp;lt;var&amp;gt;PUBLIC&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;SEMIPUB&amp;lt;/var&amp;gt;, or &amp;lt;var&amp;gt;PRIVATE&amp;lt;/var&amp;gt; is specified, &amp;lt;var&amp;gt;PUBLIC&amp;lt;/var&amp;gt; is the default. &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;&amp;lt;var&amp;gt;READLVL&amp;lt;/var&amp;gt;&amp;lt;/th&amp;gt; &lt;br /&gt;
&amp;lt;td&amp;gt;Identifies the &amp;lt;var&amp;gt;READ&amp;lt;/var&amp;gt; field level security access level for the files making up the group. The default is 0. &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;&amp;lt;var&amp;gt;SELLVL&amp;lt;/var&amp;gt;&amp;lt;/th&amp;gt; &lt;br /&gt;
&amp;lt;td&amp;gt;Identifies the &amp;lt;var&amp;gt;SELECT&amp;lt;/var&amp;gt; access level for the fields in the files making up the group. The default is 0. &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;&amp;lt;var&amp;gt;SEMIPUB&amp;lt;/var&amp;gt;&amp;lt;/th&amp;gt; &lt;br /&gt;
&amp;lt;td&amp;gt;Indicates that users are asked for a group password to open the group. If the password is valid, the group is opened with the privileges assigned to that password. If the password is invalid, the group is opened with the default group privileges.   &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;&amp;lt;var&amp;gt;UPDTFILE&amp;lt;/var&amp;gt;&amp;lt;/th&amp;gt; &lt;br /&gt;
&amp;lt;td&amp;gt;Defines the group&#039;s update file for the STORE RECORD statement.  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;When a SOUL &amp;lt;var&amp;gt;Store Record&amp;lt;/var&amp;gt; statement is encountered in a group context, and &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; cannot determine a file context, the record is stored in the group-update file. If &amp;lt;var&amp;gt;UPDTFILE&amp;lt;/var&amp;gt; is not specified, no update file is assigned and any attempt to issue a STORE RECORD statement will fail with:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;M204.0203: &amp;quot;Store&amp;quot; requires update file&amp;lt;/p code&amp;gt;&lt;br /&gt;
In that case, use the &amp;quot;IN FILE&amp;quot; or &#039;IN MEMBER&amp;quot; clause with STORE RECORD:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;IN FILE filename STORE RECORD &lt;br /&gt;
IN GROUP groupname MEMBER %membername STORE RECORD&lt;br /&gt;
&amp;lt;/p code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
The [[$Update]] function also provides a convenient method for manipulating the update file. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;p&amp;gt;If used in PQO, &amp;lt;var&amp;gt;UPDTFILE&amp;lt;/var&amp;gt; can refer to either local or remote files. If the update file you are naming is a remote file, you can include its remote file specification (AT &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;location&amp;lt;/var&amp;gt;). &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;&amp;lt;var&amp;gt;UPDTLVL&amp;lt;/var&amp;gt;&amp;lt;/th&amp;gt; &lt;br /&gt;
&amp;lt;td&amp;gt;Identifies the &amp;lt;var&amp;gt;UPDATE&amp;lt;/var&amp;gt; field level security access level for the files making up the group. The default is 0.&lt;br /&gt;
&amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&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;
===Syntax notes===&lt;br /&gt;
Commas and equal signs are optional.&lt;br /&gt;
&lt;br /&gt;
==Example==&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;b&amp;gt;CREATE PERM GROUP ACCOUNT FROM ACC1, ACC2, ACC3, ACC4&amp;lt;/b&amp;gt; &lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;*** M204.0825: READING GROUP PARAMETERS&lt;br /&gt;
&amp;lt;b&amp;gt;PARAMETER PROCFILE = ACC1, PRIVDEF = X&#039;3FFF&#039; &lt;br /&gt;
END&amp;lt;/b&amp;gt;   &lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;*** M204.0830: PERM GROUP CREATED &lt;br /&gt;
&amp;lt;/p&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 &amp;lt;var&amp;gt;CREATE PERM GROUP&amp;lt;/var&amp;gt; command creates a permanent file group from the files specified in the command. A permanent group is a group established by the system manager and maintained permanently in an external file (the [[Storing_and_using_file_group_definitions_(CCAGRP)|CCAGRP]] file) until it is explicitly deleted. Before a permanent group can be created, the system manager must create the CCAGRP file in which the group definitions are stored. This is accomplished with the &amp;lt;var&amp;gt;[[CREATEG_command|CREATEG]]&amp;lt;/var&amp;gt; command.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;When it processes &amp;lt;var&amp;gt;CREATE PERM GROUP&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]]. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Duplicate identifiers for a local file are detected when &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; tries to open the group. A &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; messages tells you the name of the file duplicates that result from using file synonyms. You cannot: &lt;br /&gt;
&amp;lt;ul&amp;gt; &lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Specify multiple identifiers for the same file in a CREATE GROUP command: that is, you cannot include two synonyms for the same file.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Include a synonym and a remote file specification for the same file.&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;
&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;[[CREATE command: Temporary group]] &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category: System manager commands]]&lt;br /&gt;
[[Category:Commands]]&lt;/div&gt;</summary>
		<author><name>JDamon</name></author>
	</entry>
	<entry>
		<id>https://m204wiki.rocketsoftware.com/index.php?title=CREATE_command:_Temporary_group&amp;diff=120320</id>
		<title>CREATE command: Temporary group</title>
		<link rel="alternate" type="text/html" href="https://m204wiki.rocketsoftware.com/index.php?title=CREATE_command:_Temporary_group&amp;diff=120320"/>
		<updated>2025-01-17T01:30:08Z</updated>

		<summary type="html">&lt;p&gt;JDamon: /* Temporary group parameters */&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;Any user&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; temporary file group&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 [TEMP] GROUP &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;groupname&amp;lt;/var&amp;gt;&lt;br /&gt;
 FROM {&amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;filename&amp;lt;/var&amp;gt; [AT &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;location&amp;lt;/var&amp;gt;] &lt;br /&gt;
 [(&amp;lt;b&amp;gt;OPT&amp;lt;/b&amp;gt;IONAL) | (&amp;lt;u&amp;gt;&amp;lt;b&amp;gt;MAND&amp;lt;/b&amp;gt;ATORY&amp;lt;/u&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;] &lt;br /&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;
Where:&lt;br /&gt;
&amp;lt;table&amp;gt; &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;groupname&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;The name of the temporary file group that is being created (1 to 8 characters). The group name cannot be &amp;lt;code&amp;gt;FILE&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;GROUP&amp;lt;/code&amp;gt;, and it cannot start with &amp;lt;code&amp;gt;CCA&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;SYS&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;OUT&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;TAPE&amp;lt;/code&amp;gt;, dollar sign (&amp;lt;tt&amp;gt;$&amp;lt;/tt&amp;gt;), or percent sign (&amp;lt;tt&amp;gt;%&amp;lt;/tt&amp;gt;). &lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The group name can contain any alphanumeric characters except those 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; &amp;lt;th&amp;gt;Character name &amp;lt;/th&amp;gt; &lt;br /&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;Asterisk&amp;lt;/var&amp;gt;&amp;lt;/th&amp;gt; &lt;br /&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;Equal sign &amp;lt;/var&amp;gt;&amp;lt;/th&amp;gt; &lt;br /&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;Left parenthesis &amp;lt;/var&amp;gt;&amp;lt;/th&amp;gt; &lt;br /&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;Minus sign&amp;lt;/var&amp;gt;&amp;lt;/th&amp;gt; &lt;br /&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;Plus sign &amp;lt;/var&amp;gt;&amp;lt;/th&amp;gt; &lt;br /&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;Right parenthesis &amp;lt;/var&amp;gt;&amp;lt;/th&amp;gt; &lt;br /&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;Semicolon&amp;lt;/var&amp;gt;&amp;lt;/th&amp;gt; &lt;br /&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;Single quote &amp;lt;/var&amp;gt;&amp;lt;/th&amp;gt; &lt;br /&gt;
&amp;lt;td&amp;gt;( &#039; ) &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;Slash &amp;lt;/var&amp;gt;&amp;lt;/th&amp;gt; &lt;br /&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;Space &amp;lt;/var&amp;gt;&amp;lt;/th&amp;gt; &lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt;   &lt;br /&gt;
&amp;lt;/table&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;filename&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;The name of 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;p&amp;gt;&lt;br /&gt;
If you are specifying [[PQO|Parallel Query Option/204]] remote files, &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;filename&amp;lt;/var&amp;gt; must include a remote location (AT &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;location&amp;lt;/var&amp;gt;) or be a defined file synonym. Also, you cannot specify multiple identifiers for the same file: that is, you cannot include two synonyms for the same file, and you cannot include a synonym and a remote file specification for the same file. &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;location&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;For PQO files, &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;location&amp;lt;/var&amp;gt; is the symbolic name (as many as eight characters) that refers to the location of the node on which the remote file resides. An unquoted equal sign (&amp;lt;tt&amp;gt;=&amp;lt;/tt&amp;gt;) specifies that the file is local.&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;&amp;lt;var&amp;gt;OPTIONAL&amp;lt;/var&amp;gt; or &amp;lt;var&amp;gt;MANDATORY&amp;lt;/var&amp;gt;&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Indicates whether PQO scattered group operations can proceed in the absence of this group member. The default is &amp;lt;var&amp;gt;MANDATORY&amp;lt;/var&amp;gt;. Valid abbreviations are &amp;lt;var&amp;gt;OPT&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;MAND&amp;lt;/var&amp;gt;.&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You cannot open a group if a mandatory member is unavailable. Also, you cannot specify &amp;lt;var&amp;gt;OPTIONAL&amp;lt;/var&amp;gt; for local files.&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;&lt;br /&gt;
&amp;lt;th&amp;gt;parameter=value&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Specifies &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; temporary group parameters. Multiple &amp;lt;var&amp;gt;PARAMETER&amp;lt;/var&amp;gt; statements can follow, and each statement can contain as many parameters in any order as will fit on one input line. Valid temporary group parameters are described in [[#Temporary group parameters|Temporary group parameters]], below.&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==&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;b&amp;gt;CREATE GROUP REGION FROM DELAWARE, MARYLAND, VIRGINIA &amp;lt;/b&amp;gt;  &lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;*** M204.0825: READING GROUP PARAMETERS &lt;br /&gt;
&amp;lt;b&amp;gt;PARAMETER PROCFILE = VIRGINIA &lt;br /&gt;
END&amp;lt;/b&amp;gt;  &lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;*** M204.0828: TEMP GROUP CREATED: REGION&lt;br /&gt;
&amp;lt;/p&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 &amp;lt;var&amp;gt;CREATE TEMP GROUP&amp;lt;/var&amp;gt; command creates a temporary file group from the &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; files specified in the command. A temporary group is established by a user for use during the current login session. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;A temporary group can be referenced only by the user who creates it. &lt;br /&gt;
The temporary group ceases to exist when the user logs out. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;If you omit &amp;lt;code&amp;gt;TEMP&amp;lt;/code&amp;gt; from the &amp;lt;var&amp;gt;CREATE GROUP&amp;lt;/var&amp;gt; command, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; assumes you are creating a temporary group.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Temporary group parameters===&lt;br /&gt;
The [[#Example|CREATE GROUP REGION example]] above shows how group parameters can be specified. The &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; temporary group parameters that can be set in the &amp;lt;var&amp;gt;CREATE&amp;lt;/var&amp;gt; command&#039;s parameter list are shown in the table below: &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;Parameter&amp;lt;/th&amp;gt; &lt;br /&gt;
&amp;lt;th&amp;gt;Defines...&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;UPDTFILE&amp;lt;/var&amp;gt;&amp;lt;/th&amp;gt; &lt;br /&gt;
&amp;lt;td&amp;gt;Group&#039;s update 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;&amp;lt;var&amp;gt;PROCFILE&amp;lt;/var&amp;gt;&amp;lt;/th&amp;gt; &lt;br /&gt;
&amp;lt;td&amp;gt;Group&#039;s procedure file, or specifies that the group can contain multiple procedure 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;&amp;lt;var&amp;gt;BLDGFT&amp;lt;/var&amp;gt;&amp;lt;/th&amp;gt; &lt;br /&gt;
&amp;lt;td&amp;gt;Whether to build an internal field table for this group. Can be YES or NO; YES is the default. &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;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The &amp;lt;var&amp;gt;UPDTFILE&amp;lt;/var&amp;gt; parameter defines the group&#039;s update file. When a SOUL &amp;lt;var&amp;gt;Store Record&amp;lt;/var&amp;gt; statement is encountered and &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; cannot determine a file context, the record is stored in the group update file. If &amp;lt;var&amp;gt;UPDTFILE&amp;lt;/var&amp;gt; is not specified, no update file is assigned and any attempt to issue a STORE RECORD statement will fail with:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;M204.0203: &amp;quot;Store&amp;quot; requires update file&amp;lt;/p code&amp;gt;&lt;br /&gt;
In that case, use the &amp;quot;IN FILE&amp;quot; or &#039;IN MEMBER&amp;quot; clause with STORE RECORD:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;IN FILE filename STORE RECORD &lt;br /&gt;
IN GROUP groupname MEMBER %membername STORE RECORD&lt;br /&gt;
&amp;lt;/p code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
The [[$Update]] function also provides a convenient method for manipulating the update file. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;The &amp;lt;var&amp;gt;PROCFILE&amp;lt;/var&amp;gt; parameter defines the group&#039;s procedure file. All procedure-related commands and the &amp;lt;var&amp;gt;INCLUDE&amp;lt;/var&amp;gt; statement operate on this file if no other file context is established. If this parameter is omitted, no procedure file is assigned. &lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can also use &amp;lt;var&amp;gt;PROCFILE&amp;lt;/var&amp;gt; to specify multiple procedure files for a group. If a group contains multiple procedure files, then the &amp;lt;var&amp;gt;INCLUDE&amp;lt;/var&amp;gt; statement searches the entire group for the procedure to be included. The search proceeds in order from the first file defined in the &amp;lt;var&amp;gt;CREATE GROUP&amp;lt;/var&amp;gt; command to the last. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
To allow for multiple procedure files, specify &amp;lt;code&amp;gt;PROCFILE = *&amp;lt;/code&amp;gt;, which indicates that any of the files in a group can contain procedures. This specification is optional; use it only if more than one file in the group contains procedures that you want to include.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
For more information, see [[Application Subsystem development#Multiple procedure files|multiple procedure files]]. &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;BLDGFT&amp;lt;/var&amp;gt; parameter, if &amp;lt;code&amp;gt;YES&amp;lt;/code&amp;gt; (the default), directs &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; to maintain certain information about the group in an internal field table. The option to specify depends upon how long you expect to use the group. If the group is only to satisfy a few short requests, specify &amp;lt;code&amp;gt;NO&amp;lt;/code&amp;gt;.&amp;lt;/li&amp;gt;&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;[[CREATE command: Permanent group]] &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category: User commands]]&lt;br /&gt;
[[Category:Commands]]&lt;/div&gt;</summary>
		<author><name>JDamon</name></author>
	</entry>
	<entry>
		<id>https://m204wiki.rocketsoftware.com/index.php?title=Table_B_(File_architecture)&amp;diff=120317</id>
		<title>Table B (File architecture)</title>
		<link rel="alternate" type="text/html" href="https://m204wiki.rocketsoftware.com/index.php?title=Table_B_(File_architecture)&amp;diff=120317"/>
		<updated>2024-11-15T03:25:28Z</updated>

		<summary type="html">&lt;p&gt;JDamon: /* Structure of a Table B page */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page describes the internal architecture of a Model&amp;amp;nbsp;204 Table B page. &lt;br /&gt;
&lt;br /&gt;
For a discussion of the ways a File Manager can organize these pages in a file, refer to [[File design]]. &lt;br /&gt;
&lt;br /&gt;
At a minimum, Table B contains all of the base records in a Model 204 file. &lt;br /&gt;
&amp;lt;p&amp;gt;Up to Model 204 version 7.4, Table B has a maximum number of 16.7 million record numbers (IRNs for Internal Record Numbers). &lt;br /&gt;
As of Model 204 version 7.5, Table B has a maximum number of 48 million record numbers (if the &amp;lt;var&amp;gt;[[FILEORG parameter|FILEORG]]&amp;lt;/var&amp;gt; X&#039;200&#039; bit is set). &amp;lt;/p&amp;gt;&lt;br /&gt;
If [[Table X (File architecture)|Table X]] is &amp;lt;i&amp;gt;not&amp;lt;/i&amp;gt; enabled, these &amp;quot;slots&amp;quot; are used for both base records and extension records. If [[Table E (File architecture)|Table E]] is &amp;lt;i&amp;gt;not&amp;lt;/i&amp;gt; enabled, any data with contents greater than 255 bytes must be stored as a series of repeating fields.&lt;br /&gt;
&lt;br /&gt;
==Structure of a Table B page==&lt;br /&gt;
&lt;br /&gt;
:[[File:Table_B_structure.jpg|border|400 px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Not shown in the figure above is a 4-byte &amp;quot;Reuse Queue page number&amp;quot; for Unordered files. If it is present, it is in the lower right-hand corner (offset 6140), before working backwards to the first record on the page. &lt;br /&gt;
&lt;br /&gt;
Each item in the figure is described below.&lt;br /&gt;
&lt;br /&gt;
===Pointers===&lt;br /&gt;
&lt;br /&gt;
====Free space pointer====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The free space pointer points to the last cell in the currently allocated  pointer array, which in turn points to the beginning of free space on a page, where the next record can begin. (See the above diagram.)&lt;br /&gt;
On pages with no records yet stored, the free space pointer points to the last byte on the page (either the very end, of just before the Reuse Queue Page Number described above).&amp;lt;/p&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
====Record pointer array====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
There are &#039;&#039;as many as&#039;&#039; &amp;lt;var&amp;gt;[[BRECPPG parameter|BRECPPG]]&amp;lt;/var&amp;gt; record pointers. These are not physically put onto the page until the record is being added to the file. &#039;&#039;As many as&#039;&#039; because, (except as noted below) it is possible that, as large records are stored, there will not be room for the full number of &amp;lt;var&amp;gt;BRECPPG&amp;lt;/var&amp;gt; on the page, and so they would not be stored.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;For Enhanced Data Handling (&amp;lt;var&amp;gt;FILEORG&amp;lt;/var&amp;gt; X&#039;100&#039;) files, with &amp;lt;var&amp;gt;[[RECRDOPT parameter|RECRDOPT]]&amp;lt;/var&amp;gt; set to X&#039;01&#039;, you will always have space for the full number of &amp;lt;var&amp;gt;BRECPPG&amp;lt;/var&amp;gt; record pointers, as their length is included in the calculation of the &amp;lt;var&amp;gt;[[BRLIMSZ parameter|BRLIMSZ]]&amp;lt;/var&amp;gt;. They still are not present on the page until the record is stored.&amp;lt;/p&amp;gt;    &lt;br /&gt;
&lt;br /&gt;
====Internal Record Number====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The record pointer is a useful identifier of a record, and is referred to as the &amp;quot;Internal Record Number&amp;quot; (IRN).&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;If, for example, &amp;lt;var&amp;gt;BRECPPG&amp;lt;/var&amp;gt; is set to 10, the first Table B page contains, at most, records 0 to 9 (the first record in a Model 204 file is IRN 0). The second page contains IRNs 10 to 19, and so on.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;Even if all the record slots are not used, they are treated as if they were. That is, in the example above, the second page in the file will still contain IRNs 10 to 19, even if only one record is physically present on the first page.&amp;lt;/p&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;See &amp;lt;var&amp;gt;[[$CURREC]]&amp;lt;/var&amp;gt; for a handy way to retrieve the IRN.&amp;lt;/p&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;Note that the IRN is not a permanent record identifier. If the file is reorganized, it is highly likely that almost all records will have a different IRN afterward.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Space management===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
A Table B page grows from the top down (the pointers) and the bottom up (data area) simultaneously.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;When adding records, there must be enough room to add all the preallocated fields on that page. Also, no new record will be added to the page if there are less than &amp;lt;var&amp;gt;[[BRESERVE parameter|BRESERVE]]&amp;lt;/var&amp;gt; bytes available on the page. In each of these cases, the &amp;quot;next&amp;quot; page is used (see [[Adding records (File architecture)|adding records]]).&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;Similarly, when adding fields to existing records and the new field (or fieldgroup) does not fit on the current page, data is moved from the record into the extension record next in the chain, with, perhaps, a new extension being created at the end of the chain.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Further information about records ===&lt;br /&gt;
&lt;br /&gt;
Refer to [[Record (File architecture)|Record]] and [[Adding records (File architecture)|Adding records]] for a full discussion of record architecture.&lt;br /&gt;
&lt;br /&gt;
Refer also to [[Record design]] for the best use of Model 204 records.&lt;br /&gt;
&lt;br /&gt;
===Table B segments===  &lt;br /&gt;
&lt;br /&gt;
====Definition====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
As discussed below, [[Bitmaps (File architecture)|bitmaps]] are used in a number of ways in Model&amp;amp;nbsp;204&#039;s processing. As bitmaps can contain bits covering 49152 records (usable space of 6144 * 8) records, this number of records is called a &amp;lt;b&amp;gt;segment&amp;lt;/b&amp;gt;.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Importance of and use====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Segments are used in indexing (as discussed below). In addition, when a procedure is compiled, the maximum number of Table B segments that the code needs to be able to handle is tracked (remember that sets of records are tracked with bitmaps). &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====INCREASE command boundaries====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When Model 204 code is compiled, one of the critical things noted is the number of segments in the file. This is necessary so that space can be reserved for found sets and other record tracking methodology.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;Because of this, if you want to increase Table B, and other users or subsystems have the file open, you can only increase it to the next segment boundary (that is, the next multiple of 49152), and you must use the &amp;lt;var&amp;gt;DYNAMIC&amp;lt;/var&amp;gt; option of the &amp;lt;var&amp;gt;[[INCREASE command|INCREASE]]&amp;lt;/var&amp;gt; command. Otherwise, you can use the &amp;lt;var&amp;gt;INCREASE&amp;lt;/var&amp;gt; command to extend Table B beyond the current segment boundary, but this requires exclusive access to the file.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;For flexibility, consider using the &amp;lt;var&amp;gt;[[MAXINCBP parameter|MAXINCBP]]&amp;lt;/var&amp;gt; parameter. This parameter (expressed as a percentage) is the additional number of segments reserved in compilation for growth. See the &amp;lt;var&amp;gt;MAXINCBP&amp;lt;/var&amp;gt; explanation in [[Managing file and table sizes#MAXINCBP parameter|Managing file and table sizes]] for details.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Use in indexing====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The segment concept is inherent to Model 204 indexing in a number of ways. Specifically:&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;See [[Table C (File architecture)#Segment entries |Table C segment entries]] for the effect of segments in the hash index.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;See [[Table D (File architecture)#B-tree index structure|B-tree index structure]] for the effect of segments in the ordered index.  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;See [[Table D (File architecture)#Bitmaps used in indexing|Bitmaps used in indexing]] for how segments relate to the detailed level of both types of indexes.&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Reuse queue===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
For Reuse Record Number (RRN) files (&amp;lt;var&amp;gt;FILEORG&amp;lt;/var&amp;gt; X&#039;04&#039; bit set), pages with sufficient space (see the &amp;lt;var&amp;gt;[[BREUSE parameter]]&amp;lt;/var&amp;gt;) and one or more available record slots are kept in a reuse queue.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;This may happen due to records (or large numbers of fields) being deleted.&amp;lt;/p&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;These use the 4-byte reuse queue page number to track the pages&#039;s availability.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;RRN files add records to the pages from the queue before adding records to &amp;lt;var&amp;gt;[[BHIGHPG parameter|BHIGHPG]]&amp;lt;/var&amp;gt;.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Parameters related to the use of Table B==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
This table excludes the parameters used for [[Hash key files|Hash Key]] and [[Sorted files]]. See those topics for a full discussion of their special parameters (and distinction in meanings for some of the parameters below).&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Also not shown are the parameters that control the [[Managing file and table sizes#Automatic increases|automatic increase]] in table size.&amp;lt;/p&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;table  class=&amp;quot;thJustBold&amp;quot; style=&amp;quot;Width:80%&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;[[BHIGHPG parameter|BHIGHPG]]&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Table B highest active page. Normally the high water mark of pages used (except for Hash Key and Sorted files). Viewable only. &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;[[BQLEN parameter|BQLEN]]&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;The number of pages in the reuse queue. Viewable only. &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;[[BRECPPG parameter|BRECPPG]]&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;The maximum number of record slots on a Table B page. &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;[[BRESERVE parameter|BRESERVE]]&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Table B Reserved space. &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;[[BREUSE parameter|BREUSE]]&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;The minimum percentage of free space necessary to add a page to the reuse queue, over and above BRESERVE. &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;[[BREUSED parameter|BREUSED]]&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;The numberof record slots reused.  &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;[[BRLIMSZ parameter|BRLIMSZ]]&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Base record size maximum. Viewable only. &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;[[BSIZE parameter|BSIZE]]&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;The number of pages in Table B. &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;[[RECRDOPT parameter|RECRDOPT]]&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Record storage options. &amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt; &lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:File architecture]]&lt;/div&gt;</summary>
		<author><name>JDamon</name></author>
	</entry>
	<entry>
		<id>https://m204wiki.rocketsoftware.com/index.php?title=Table_B_(File_architecture)&amp;diff=120316</id>
		<title>Table B (File architecture)</title>
		<link rel="alternate" type="text/html" href="https://m204wiki.rocketsoftware.com/index.php?title=Table_B_(File_architecture)&amp;diff=120316"/>
		<updated>2024-11-07T20:24:22Z</updated>

		<summary type="html">&lt;p&gt;JDamon: /* Structure of a Table B page */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page describes the internal architecture of a Model&amp;amp;nbsp;204 Table B page. &lt;br /&gt;
&lt;br /&gt;
For a discussion of the ways a File Manager can organize these pages in a file, refer to [[File design]]. &lt;br /&gt;
&lt;br /&gt;
At a minimum, Table B contains all of the base records in a Model 204 file. &lt;br /&gt;
&amp;lt;p&amp;gt;Up to Model 204 version 7.4, Table B has a maximum number of 16.7 million record numbers (IRNs for Internal Record Numbers). &lt;br /&gt;
As of Model 204 version 7.5, Table B has a maximum number of 48 million record numbers (if the &amp;lt;var&amp;gt;[[FILEORG parameter|FILEORG]]&amp;lt;/var&amp;gt; X&#039;200&#039; bit is set). &amp;lt;/p&amp;gt;&lt;br /&gt;
If [[Table X (File architecture)|Table X]] is &amp;lt;i&amp;gt;not&amp;lt;/i&amp;gt; enabled, these &amp;quot;slots&amp;quot; are used for both base records and extension records. If [[Table E (File architecture)|Table E]] is &amp;lt;i&amp;gt;not&amp;lt;/i&amp;gt; enabled, any data with contents greater than 255 bytes must be stored as a series of repeating fields.&lt;br /&gt;
&lt;br /&gt;
==Structure of a Table B page==&lt;br /&gt;
&lt;br /&gt;
:[[File:Table_B_structure.jpg|border|400 px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Not shown in the figure above is a 4-byte &amp;quot;Reuse Queue page number&amp;quot; for Unordered files. If it is present, it is in the lower right-hand corner, before working backwards to the first record on the page. &lt;br /&gt;
&lt;br /&gt;
Each item in the figure is described below.&lt;br /&gt;
&lt;br /&gt;
===Pointers===&lt;br /&gt;
&lt;br /&gt;
====Free space pointer====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The free space pointer points to the last cell in the currently allocated  pointer array, which in turn points to the beginning of free space on a page, where the next record can begin. (See the above diagram.)&lt;br /&gt;
On pages with no records yet stored, the free space pointer points to the last byte on the page (either the very end, of just before the Reuse Queue Page Number described above).&amp;lt;/p&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
====Record pointer array====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
There are &#039;&#039;as many as&#039;&#039; &amp;lt;var&amp;gt;[[BRECPPG parameter|BRECPPG]]&amp;lt;/var&amp;gt; record pointers. These are not physically put onto the page until the record is being added to the file. &#039;&#039;As many as&#039;&#039; because, (except as noted below) it is possible that, as large records are stored, there will not be room for the full number of &amp;lt;var&amp;gt;BRECPPG&amp;lt;/var&amp;gt; on the page, and so they would not be stored.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;For Enhanced Data Handling (&amp;lt;var&amp;gt;FILEORG&amp;lt;/var&amp;gt; X&#039;100&#039;) files, with &amp;lt;var&amp;gt;[[RECRDOPT parameter|RECRDOPT]]&amp;lt;/var&amp;gt; set to X&#039;01&#039;, you will always have space for the full number of &amp;lt;var&amp;gt;BRECPPG&amp;lt;/var&amp;gt; record pointers, as their length is included in the calculation of the &amp;lt;var&amp;gt;[[BRLIMSZ parameter|BRLIMSZ]]&amp;lt;/var&amp;gt;. They still are not present on the page until the record is stored.&amp;lt;/p&amp;gt;    &lt;br /&gt;
&lt;br /&gt;
====Internal Record Number====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The record pointer is a useful identifier of a record, and is referred to as the &amp;quot;Internal Record Number&amp;quot; (IRN).&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;If, for example, &amp;lt;var&amp;gt;BRECPPG&amp;lt;/var&amp;gt; is set to 10, the first Table B page contains, at most, records 0 to 9 (the first record in a Model 204 file is IRN 0). The second page contains IRNs 10 to 19, and so on.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;Even if all the record slots are not used, they are treated as if they were. That is, in the example above, the second page in the file will still contain IRNs 10 to 19, even if only one record is physically present on the first page.&amp;lt;/p&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;See &amp;lt;var&amp;gt;[[$CURREC]]&amp;lt;/var&amp;gt; for a handy way to retrieve the IRN.&amp;lt;/p&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;Note that the IRN is not a permanent record identifier. If the file is reorganized, it is highly likely that almost all records will have a different IRN afterward.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Space management===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
A Table B page grows from the top down (the pointers) and the bottom up (data area) simultaneously.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;When adding records, there must be enough room to add all the preallocated fields on that page. Also, no new record will be added to the page if there are less than &amp;lt;var&amp;gt;[[BRESERVE parameter|BRESERVE]]&amp;lt;/var&amp;gt; bytes available on the page. In each of these cases, the &amp;quot;next&amp;quot; page is used (see [[Adding records (File architecture)|adding records]]).&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;Similarly, when adding fields to existing records and the new field (or fieldgroup) does not fit on the current page, data is moved from the record into the extension record next in the chain, with, perhaps, a new extension being created at the end of the chain.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Further information about records ===&lt;br /&gt;
&lt;br /&gt;
Refer to [[Record (File architecture)|Record]] and [[Adding records (File architecture)|Adding records]] for a full discussion of record architecture.&lt;br /&gt;
&lt;br /&gt;
Refer also to [[Record design]] for the best use of Model 204 records.&lt;br /&gt;
&lt;br /&gt;
===Table B segments===  &lt;br /&gt;
&lt;br /&gt;
====Definition====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
As discussed below, [[Bitmaps (File architecture)|bitmaps]] are used in a number of ways in Model&amp;amp;nbsp;204&#039;s processing. As bitmaps can contain bits covering 49152 records (usable space of 6144 * 8) records, this number of records is called a &amp;lt;b&amp;gt;segment&amp;lt;/b&amp;gt;.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Importance of and use====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Segments are used in indexing (as discussed below). In addition, when a procedure is compiled, the maximum number of Table B segments that the code needs to be able to handle is tracked (remember that sets of records are tracked with bitmaps). &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====INCREASE command boundaries====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When Model 204 code is compiled, one of the critical things noted is the number of segments in the file. This is necessary so that space can be reserved for found sets and other record tracking methodology.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;Because of this, if you want to increase Table B, and other users or subsystems have the file open, you can only increase it to the next segment boundary (that is, the next multiple of 49152), and you must use the &amp;lt;var&amp;gt;DYNAMIC&amp;lt;/var&amp;gt; option of the &amp;lt;var&amp;gt;[[INCREASE command|INCREASE]]&amp;lt;/var&amp;gt; command. Otherwise, you can use the &amp;lt;var&amp;gt;INCREASE&amp;lt;/var&amp;gt; command to extend Table B beyond the current segment boundary, but this requires exclusive access to the file.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;For flexibility, consider using the &amp;lt;var&amp;gt;[[MAXINCBP parameter|MAXINCBP]]&amp;lt;/var&amp;gt; parameter. This parameter (expressed as a percentage) is the additional number of segments reserved in compilation for growth. See the &amp;lt;var&amp;gt;MAXINCBP&amp;lt;/var&amp;gt; explanation in [[Managing file and table sizes#MAXINCBP parameter|Managing file and table sizes]] for details.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Use in indexing====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The segment concept is inherent to Model 204 indexing in a number of ways. Specifically:&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;See [[Table C (File architecture)#Segment entries |Table C segment entries]] for the effect of segments in the hash index.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;See [[Table D (File architecture)#B-tree index structure|B-tree index structure]] for the effect of segments in the ordered index.  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;See [[Table D (File architecture)#Bitmaps used in indexing|Bitmaps used in indexing]] for how segments relate to the detailed level of both types of indexes.&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Reuse queue===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
For Reuse Record Number (RRN) files (&amp;lt;var&amp;gt;FILEORG&amp;lt;/var&amp;gt; X&#039;04&#039; bit set), pages with sufficient space (see the &amp;lt;var&amp;gt;[[BREUSE parameter]]&amp;lt;/var&amp;gt;) and one or more available record slots are kept in a reuse queue.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;This may happen due to records (or large numbers of fields) being deleted.&amp;lt;/p&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;These use the 4-byte reuse queue page number to track the pages&#039;s availability.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;RRN files add records to the pages from the queue before adding records to &amp;lt;var&amp;gt;[[BHIGHPG parameter|BHIGHPG]]&amp;lt;/var&amp;gt;.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Parameters related to the use of Table B==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
This table excludes the parameters used for [[Hash key files|Hash Key]] and [[Sorted files]]. See those topics for a full discussion of their special parameters (and distinction in meanings for some of the parameters below).&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Also not shown are the parameters that control the [[Managing file and table sizes#Automatic increases|automatic increase]] in table size.&amp;lt;/p&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;table  class=&amp;quot;thJustBold&amp;quot; style=&amp;quot;Width:80%&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;[[BHIGHPG parameter|BHIGHPG]]&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Table B highest active page. Normally the high water mark of pages used (except for Hash Key and Sorted files). Viewable only. &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;[[BQLEN parameter|BQLEN]]&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;The number of pages in the reuse queue. Viewable only. &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;[[BRECPPG parameter|BRECPPG]]&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;The maximum number of record slots on a Table B page. &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;[[BRESERVE parameter|BRESERVE]]&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Table B Reserved space. &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;[[BREUSE parameter|BREUSE]]&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;The minimum percentage of free space necessary to add a page to the reuse queue, over and above BRESERVE. &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;[[BREUSED parameter|BREUSED]]&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;The numberof record slots reused.  &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;[[BRLIMSZ parameter|BRLIMSZ]]&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Base record size maximum. Viewable only. &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;[[BSIZE parameter|BSIZE]]&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;The number of pages in Table B. &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;[[RECRDOPT parameter|RECRDOPT]]&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Record storage options. &amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt; &lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:File architecture]]&lt;/div&gt;</summary>
		<author><name>JDamon</name></author>
	</entry>
	<entry>
		<id>https://m204wiki.rocketsoftware.com/index.php?title=Tracking_system_activity_(CCAJRNL,_CCAAUDIT,_CCAJLOG)&amp;diff=120293</id>
		<title>Tracking system activity (CCAJRNL, CCAAUDIT, CCAJLOG)</title>
		<link rel="alternate" type="text/html" href="https://m204wiki.rocketsoftware.com/index.php?title=Tracking_system_activity_(CCAJRNL,_CCAAUDIT,_CCAJLOG)&amp;diff=120293"/>
		<updated>2024-10-02T17:08:56Z</updated>

		<summary type="html">&lt;p&gt;JDamon: /* AUDIT204 Return Codes */&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 of the journal data sets==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
This topic discusses the journal data sets you can create and use in &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt;, how to manage them, and the utilities you can use to report on and analyze the &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; information collected. The system manager can set up the following journal data sets, which are not part of &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; installation.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The data sets are CCAJRNL, CCAAUDIT, and CCAJLOG. You set each up as:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;A ddname in z/OS&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;A FILEDEF in z/VM&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;A DLBL in z/VSE&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===CCAJRNL===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The complete repository of &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; system activity and data that would be used in recovery is CCAJRNL. The CCAJRNL file collects all update information used to reconstruct the database during recovery and all other activity history, such as messages and statistics, in an unformatted, therefore unreadable, binary format.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===CCAAUDIT and CCAJLOG===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can also create a CCAAUDIT and/or a CCAJLOG file to track information. CCAAUDIT and CCAJLOG are comprised of the same &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; audit trail data, however, differently. The activity history or audit trail is comprised of:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Important characteristics of a run&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;All error messages encountered during a run&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;All communications with the operator&#039;s console&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Input lines from Online terminals&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;HLI calls&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Utilization statistics&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Information specifically directed to the journal/audit trail by users &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Watching your system in action: CCAAUDIT====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The CCAAUDIT file, also known as the audit trail, logs information about a &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; run and prints the information in readable format for the terminal screen while processes are running or to paper.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Improving recovery performance: CCAJLOG====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The CCAJLOG file off loads the audit trail information into itself, so that the CCAJRNL contains only the information required for RESTART recovery. Recovery performance is improved, because the audit trail information does not have to be read and rejected for recovery.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Version-specific journals===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Journals created by &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; prior to V7R1.0 cannot by processed in V7R1.0. The reverse is also true: journals created in V7R1.0 cannot be processed by an earlier version 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;
 &lt;br /&gt;
==Using Model 204 journal files==&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; system managers and file managers use the journal files in some of the following ways:&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;Task &amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Journal used &amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Utility/command used&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;Generate an audit trail that can be viewed during processing &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;CCAAUDIT&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;Generate an audit trail for printing out later &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td nowrap&amp;gt;CCAJRNL, CCAJLOG &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Audit204 utility&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Regenerate a file to complete media recovery&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;CCAJRNL &amp;lt;br&amp;gt;(ddname CCAGEN) &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;REGENERATE command&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Recover &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; following a system failure &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;CCAJRNL &amp;lt;br&amp;gt;(ddname CCARF) &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;RESTART command&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Extract a report &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;CCAJRNL&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;UTILJ utility&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Performance tuning by analyzing statistics &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;CCAJRNL&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Audit204 utility or site written analysis program&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 &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; system manager is expected to create the CCAJRNL file at their site for recovery purposes. The &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; file manager may be responsible for using the CCAJRNL file to regenerate data files.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Creating and generating CCAJRNL==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
A journal is generated if: &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;SYSOPT&amp;lt;/var&amp;gt; parameter includes the 128 specification.&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You must set &amp;lt;var&amp;gt;BLKSIZE&amp;lt;/var&amp;gt; for CCAJRNL to not less than 6749 on up to 32K. Buffers are written to CCAJRNL either when a transaction is committed or when the buffer fills. Frequent commits may result in many short blocks/buffers being written to CCAJRNL.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;A CCAJRNL is defined with BLKSIZE set to the minimum, 6749, for:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;z/OS, a DD statement&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;z/VM, a FILEDEF&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Statistics generated in an audit trail line are presented in [[Using system statistics#User statistics entries (Type 9)|User statistics entries (Type 9)]]. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The use of CCAJRNL in recovery procedures is explained in [[System and media recovery#Recovery data sets and job control|Recovery data sets and job control]]. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
How to use CCAJRNL to regenerate a data set is discussed&lt;br /&gt;
in [[Media recovery]].&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
CCAJRNL may take multiple extents and may span multiple volumes, since it is read forward-only. Its size cannot be limited in a way similar to the CHKPOINT data set (see [[Checkpoints: Storing before-images of changed pages#Limiting the size of CHKPOINT|Limiting the size of CHKPOINT]]), because CCAJRNL records all update activity in an Online, which may be required in a subsequent REGENERATE or RESTART process.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===CCAJRNL as single data set or stream===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can define CCAJRNL as a single data set or as a stream. Using a &amp;lt;var&amp;gt;[[DEFINE STREAM command|DEFINE STREAM]]&amp;lt;/var&amp;gt; command, you incorporate multiple journal data sets. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;For parallel and ring structures, see [[Configuring checkpoint and journal data streams#Example 1: Ring/parallel journal stream|Example 1: Ring/parallel journal stream]].&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;For GDG structure, see [[Configuring checkpoint and journal data streams#Perpetual journaling for z/OS|Perpetual journaling for z/OS]].  &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
==SWITCH STREAM command==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The &amp;lt;var&amp;gt;[[SWITCH STREAM command|SWITCH STREAM]]&amp;lt;/var&amp;gt; command switches a stream to the next member of a parallel, ring, concatenated, or Generation Data Group (GDG) stream. You can issue the &amp;lt;var&amp;gt;SWITCH STREAM&amp;lt;/var&amp;gt; command for the following streams: CCAJLOG, CCAJRNL, CHKPOINT, or CHKPNTS. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Using the SWITCH STREAM command===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When the &amp;lt;var&amp;gt;SWITCH STREAM&amp;lt;/var&amp;gt; command is issued, the following messages are produced:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;M204.2712: STREAM &amp;lt;i&amp;gt;streamname&amp;lt;/i&amp;gt; IS BEING SWITCHED&lt;br /&gt;
M204.2712: STREAM &amp;lt;i&amp;gt;streamname&amp;lt;/i&amp;gt; SWITCHED VIA COMMAND&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;When switching a journal stream, CCAJRNL or CCAJLOG, the currently active data set in that stream is closed. The next data set defined to the stream is opened when the next write to that stream is required. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;When switching a checkpoint stream, CHKPOINT or CHKPNTS, the currently active data set in that stream is closed after the next record is written to that data set.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If not in an extended quiesce, Rocket Software recommends that you follow a &amp;lt;code&amp;gt;SWITCH STREAM CCAJRNL&amp;lt;/code&amp;gt; command with a &amp;lt;var&amp;gt;CHECKPOINT&amp;lt;/var&amp;gt; command to ensure that you have a checkpoint in the current journal. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The &amp;lt;var&amp;gt;SWITCH STREAM command&amp;lt;/var&amp;gt; is sometimes useful for CCAJLOG and rarely required for CHKPOINT or CHKPNTS.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Journal block header information for SWITCH STREAM===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Some journal analysis utilities require additional journal information at sites that embrace GDG streams and the &amp;lt;var&amp;gt;SWITCH STREAM&amp;lt;/var&amp;gt; command as a means to keep their Onlines up for long periods. &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; includes this additional information in the header for each journal block. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
To ensure that the required information is present in the first block of each journal data set created by the &amp;lt;var&amp;gt;SWITCH STREAM&amp;lt;/var&amp;gt; command, the header has been expanded. This expansion makes the journal up to 4% larger than in previous releases.&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; Due to these changes in journal record layouts, CCAJRNL and CHKPOINT/CHKPNT data sets are not compatible with previous 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;
&amp;lt;p&amp;gt;&lt;br /&gt;
For the complete description of the header entry formats in the journal block, see [[Using system statistics#Header entries (Type 0)|Header entries (Type 0)]].&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
In pre-7.4.0 versions of Rocket &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt;, each Online environment might produce a single merged journal daily. If an Online was bounced during the day, then the various journals for the day were merged into a single daily journal. Usually the daily merged journal contained records from only one run. The single merged journal could be used to automate media recovery, rather than manually assemble the recovery job journal concatenation.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Using the &amp;lt;var&amp;gt;SWITCH STREAM&amp;lt;/var&amp;gt; command, a site can still prepare a daily merged journal. However, when the &amp;lt;var&amp;gt;SWITCH STREAM&amp;lt;/var&amp;gt; command is used, each journal merged does not begin with the initialization of the Online. This means that no Type 12 records or M204.0061 initialization messages are included. Although &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; recovery, including media recovery, can successfully process these merged journals, various journal analysis utilities cannot.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Using a SWITCH STREAM CCAJRNL command during extended quiesce===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
In pre-7.1.0 releases, if you used the checkpoint quiesce feature, a switch to the next journal member at checkpoint quiesce could occur only when CCAJRNL was defined as a ring stream.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
However, a switch at checkpoint quiesce may be desirable for all stream configurations of CCAJRNL: ring, parallel, concatenated, and GDG. The switch marks the point where the CCAJRNL data collected thus far is not needed in subsequent &amp;lt;var&amp;gt;REGENERATE&amp;lt;/var&amp;gt; processing against files backed up during the quiesce. If file backups or dumps are taken during the checkpoint quiesce, only CCAJRNL data collected after checkpoint quiesce is useful for &amp;lt;var&amp;gt;REGENERATE&amp;lt;/var&amp;gt; processing against those files.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
A checkpoint is automatically taken if you issue a &amp;lt;code&amp;gt;SWITCH STREAM CCAJRNL&amp;lt;/code&amp;gt; command while you are in extended quiesce, as shown 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;SWITCH command within extended quiesce&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;td&amp;gt;Step &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Command issued &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Purpose&amp;lt;/td&amp;gt;&lt;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;CHECKPOINT SET EXTENDED QUIESCE &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Enables extended quiesce&amp;lt;/td&amp;gt;&lt;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;CHECKPOINT or automated checkpoint&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The next checkpoint, automated or command initiated, begins the extended quiesce&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When the checkpoint is successful, the extended quiesce is entered. While in extended quiesce, you cannot issue a &amp;lt;var&amp;gt;CHECKPOINT&amp;lt;/var&amp;gt; command. However, you can issue a &amp;lt;var&amp;gt;SWITCH STREAM&amp;lt;/var&amp;gt; command, such as the following:&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;3&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;SWITCH STREAM CCAJRNL &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;When the checkpoint is successful, extended quiesce processing can begin for backups, SnapShots, or any activity that does not involve updating.&amp;lt;/td&amp;gt;&lt;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 nowrap&amp;gt;CHECKPOINT END EXTENDED QUIESCE&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Concludes extended quiesce. Should recovery be required due to a failure during extended quiesce, journals created prior to the &amp;lt;var&amp;gt;SWITCH STREAM&amp;lt;/var&amp;gt; command will not be required, as the last checkpoint resides in the current CCAJRNL member.&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;
This automated checkpoint functionality of &amp;lt;var&amp;gt;SWITCH STREAM CCAJRNL&amp;lt;/var&amp;gt; applies only during checkpoint quiesce. The automated checkpoint functionality is not supported for CCAJLOG, CHKPOINT, or CHKPNTS.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===SWITCH STREAM limitations===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
In order for a stream to be switched, there must be a target data set to switch to. If there is no target data set, 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.2712: MEMBER &amp;lt;i&amp;gt;membername&amp;lt;/i&amp;gt; IS INELIGIBLE FOR SWITCHING&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Consider the following example:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;DEFINE STREAM CCAJRNL WITH SCOPE=SYSTEM PARALLEL=(JRNL1,JRNL2) MINAVAIL=2&lt;br /&gt;
DEFINE DATASET JRNL1  WITH SCOPE=SYSTEM DSN=CCAJRNL.JRNL1 OLD&lt;br /&gt;
DEFINE STREAM  JRNL2  WITH SCOPE=SYSTEM GDG=J2 CONTROL=J2CTL&lt;br /&gt;
DEFINE DATASET J2     WITH SCOPE=SYSTME DSN=CCAJRNL.GDGBASE.JRNL2 CATALOG -&lt;br /&gt;
                      GEN=+1 CYL PRI 500&lt;br /&gt;
DEFINE DATASET J2CTL  WITH SCOPE=SYSTEM DSN=CCAJRNL.GDGBASE.JRNL2.CTL OLD&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Since data set &amp;lt;code&amp;gt;JRNL1&amp;lt;/code&amp;gt; has no target data set for a switch, when the &amp;lt;code&amp;gt;JRNL1&amp;lt;/code&amp;gt; data set is marked full, the number of available parallel stream members (&amp;lt;var&amp;gt;MINAVAIL&amp;lt;/var&amp;gt;) drops to one, since only &amp;lt;code&amp;gt;JRNL2&amp;lt;/code&amp;gt; now has space available. Since the number of available members is now less than &amp;lt;var&amp;gt;MINAVAIL&amp;lt;/var&amp;gt;, the Online would stop with a &amp;quot;CCAJRNL full&amp;quot; message.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If before &amp;lt;code&amp;gt;JRNL1&amp;lt;/code&amp;gt; fills, a &amp;lt;code&amp;gt;SWITCH STREAM CCAJRNL&amp;lt;/code&amp;gt; command were issued, the following messages would be produced:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;M204.2712: MEMBER JRNL1 IS INELIGIBLE FOR SWITCHING&lt;br /&gt;
M204.2712: STREAM JRNL2 IS BEING SWITCHED&lt;br /&gt;
M204.2712: STREAM CCAJRNL - NOT ALL MEMBERS SWITCHED&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Member &amp;lt;code&amp;gt;JRNL1&amp;lt;/code&amp;gt; was not switched. However, if &amp;lt;code&amp;gt;JRNL1&amp;lt;/code&amp;gt; has not filled, the parallel stream will remain open because the number of available members (&amp;lt;var&amp;gt;MINAVAIL&amp;lt;/var&amp;gt;) is still 2. Stream &amp;lt;code&amp;gt;JRNL2&amp;lt;/code&amp;gt; always has a target data set to switch to since it is a GDG. Nevertheless, whenever &amp;lt;code&amp;gt;JRNL1&amp;lt;/code&amp;gt; fills, the minimum available members will be less than &amp;lt;var&amp;gt;MINAVAIL&amp;lt;/var&amp;gt;, the stream will be closed, and the run will terminate.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Because stream members are not locked before switch processing, and because all members are not switched at exactly the same time, the number of records in individual data sets of a parallel stream may not be identical. This is of no consequence to recovery or &amp;lt;var&amp;gt;REGENERATE&amp;lt;/var&amp;gt;, but should be noted. However, the total number of records in each member is identical. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Previously, you had to concatenate all journals into one data set or specify a concatenated &amp;lt;code&amp;gt;CCAGEN DD&amp;lt;/code&amp;gt; statement.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===SWITCH STREAM command for concatenated streams===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The same limitation exists for the last member in a concatenated stream. Since there is no additional member to switch to, 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.2712: STREAM &amp;lt;i&amp;gt;streamname&amp;lt;/i&amp;gt; IS INELIGIBLE FOR SWITCHING&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If all members of a stream are switched, 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.2712: STREAM CCAJRNL SWITCHED VIA COMMAND&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Handling streams without records===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You cannot switch a stream member that contains no records. So in the previous case, if the first G1 stream member has just become full and the newly opened (second) GDG member contains zero records, then a &amp;lt;code&amp;gt;SWITCH STREAM CCAJRNL&amp;lt;/code&amp;gt; command is not processed.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Since &amp;lt;code&amp;gt;J1&amp;lt;/code&amp;gt; is ineligible, and &amp;lt;code&amp;gt;G1&amp;lt;/code&amp;gt; (second member) is empty, no switch occurs. The messages issued are:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;M204.2712: MEMBER J1 IS INELIGIBLE FOR SWITCHING&lt;br /&gt;
M204.2712: MEMBER G1 IS EMPTY AND CANNOT BE SWITCHED&lt;br /&gt;
M204.2712: SWITCH WAS UNSUCCESSFUL&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Recovery parameters===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Use the following recovery parameters when generating a journal:&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;Set &amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Specifies...&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Comments&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;FRCVOPT &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;During file creation or with the &amp;lt;var&amp;gt;RESET&amp;lt;/var&amp;gt; command &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;File recovery options&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;If the file is included in system or media recovery, do not use &amp;lt;code&amp;gt;FRCVOPT=X&#039;04&#039;&amp;lt;/code&amp;gt;, which suppresses roll forward logging. &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;RCVOPT &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;On the JCL EXEC parameter or on User 0&#039;s parameter line &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Type of information written to the journal&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
X&#039;08&#039; writes the roll forward information that is required for system and media recovery to CCAJRNL.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
X&#039;09&#039; also causes preimages to be written to the CHKPOINT data set for roll back recovery. Use this setting if you want to enable full recovery.&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;
===Writing error messages to the journal data set===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can control which error messages or classes of error messages to store in CCAJRNL, CCAAUDIT, or CCAJLOG using &amp;lt;var&amp;gt;[[MSGCTL command|MSGCTL]]&amp;lt;/var&amp;gt; command parameters.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===ERRMSGL: Setting the length of saved error messages===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The &amp;lt;var&amp;gt;[[ERRMSGL parameter|ERRMSGL]]&amp;lt;/var&amp;gt; parameter provides the ability to set the number of bytes to use for saved error messages &amp;amp;mdash; messages 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;. You can set &amp;lt;var&amp;gt;ERRMSGL&amp;lt;/var&amp;gt; to any value from 80 to 256 &amp;amp;mdash; that length includes a count byte. The value is rounded up to an 8-byte multiple. For example, if you set &amp;lt;code&amp;gt;ERRMSGL=99&amp;lt;/code&amp;gt;, it will be rounded to 104, that value is reduced by 1 for the count byte, thus allowing up to 103 characters of an error message to be saved.&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Server size requirements for saved error messages====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Increasing &amp;lt;var&amp;gt;ERRMSGL&amp;lt;/var&amp;gt; increases the requirement of the fixed table size of a server. This may necessitate an increase in you &amp;lt;var&amp;gt;SERVSIZE&amp;lt;/var&amp;gt; settings. The size requirement for &amp;lt;var&amp;gt;ERRMSGL&amp;lt;/var&amp;gt; is:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;3 * (ERRMSGL - 80)&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
For example, increasing &amp;lt;var&amp;gt;ERRMSGL&amp;lt;/var&amp;gt; to its maximum of 256 would increase the fixed server requirement by &amp;lt;code&amp;gt;(3 * (256-80) -1)&amp;lt;/code&amp;gt;, or 527 bytes. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
For a full update to the &amp;lt;var&amp;gt;SERVSIZE&amp;lt;/var&amp;gt; formula, see [[Defining the runtime environment (CCAIN)#Calculating fixed table size|Calculating fixed table size]].&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
==Using the CCAJRNL data set==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
During a production Online run, roll forward recovery information is written to the CCAJRNL data set. Additionally, a substantial amount of unformatted audit trail data is also written. When recovery is required and after roll back recovery has completed, that data set (during recovery its ddname is CCARF) is read and the roll forward information is extracted and used to reapply all committed updates up to the time of the system failure.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;caption&amp;quot; style=&amp;quot;width:468px&amp;quot;&amp;gt;CCAJRNL collecting all roll forward and audit information&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;figure&amp;quot;&amp;gt;[[File:SM13ccaprint1_sep05.gif|468px]] &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Performance efficiencies using CCAJRNL==&lt;br /&gt;
 &lt;br /&gt;
===Choosing whether to define CCAAUDIT===&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; operates more efficiently using CCAJRNL without CCAAUDIT, because it is not also generating a separate audit trail. If you need printed information and your site does not maintain CCAAUDIT, you can extract the audit trail from CCAJRNL in a separate step using AUDIT204. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If you need printed run information immediately upon completion of the job and you also need Roll Forward or Accounting facilities, create both the journal (CCAJRNL) and the audit trail (CCAAUDIT). &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can use CCAJRNL in place of CCAAUDIT when you do not need audit trail data immediately following run termination.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Allocating multiple journal buffers===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Setting &amp;lt;var&amp;gt;NJBUFF&amp;lt;/var&amp;gt; to a value (&amp;lt;code&amp;gt;NSERVS + NSUBTKS + 1&amp;lt;/code&amp;gt;) allocates multiple journal buffers and ensures that a free buffer is always available for the journal. In z/VM, the &amp;lt;var&amp;gt;NJBUFF&amp;lt;/var&amp;gt; parameter is stacked in the EXEC that issues all the FILEDEFs.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Using the CCAJLOG data set===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If you allocate CCAJLOG, the unformatted audit trail data is written to it and only roll forward recovery data is written to CCAJRNL. Reducing the number of records written to CCAJRNL improves recovery performance and also reduces the likelihood of filling CCAJRNL, which would result in run termination.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The number of buffers allocated for CCAJLOG is determined by the parameter, &amp;lt;var&amp;gt;[[NLBUFF parameter|NLBUFF]]&amp;lt;/var&amp;gt;, which defaults to five. Only full blocks/buffers are written to CCAJLOG.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;The size of these buffers is determined by the &amp;lt;var&amp;gt;BLKSIZE&amp;lt;/var&amp;gt; parameter defined for the CCAJLOG data set which may be as large as 32K.&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 produce a formatted CCAAUDIT report from CCAJLOG using the AUDIT204 utility. In this case, the CCAJLOG is referenced via the ddname CCAJRNL. &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;caption&amp;quot; style=&amp;quot;width:466px&amp;quot;&amp;gt;CCAJRNL collecting roll forward data; &amp;lt;br/&amp;gt;CCAJLOG collecting audit trail data&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;figure&amp;quot;&amp;gt;[[File:SM13ccaprint2_sep05.gif|466px]] &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Defining the CCAJLOG stream====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can define a CCAJLOG using any of the stream definitions: concatenate, parallel, ring, or GDG; see [[DEFINE STREAM command]].&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===M204JLOG assembler exit===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The assembler exit, M204JLOG, can be invoked if linked in. This exit is initiated when a &amp;lt;var&amp;gt;SWITCH&amp;lt;/var&amp;gt; command is issued against a CCAJLOG GDG stream. The exit may be any AMODE and need not be reentrant.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Coding considerations====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
On entry, the registers contain:&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:R4  = A(GDG LIOD)&lt;br /&gt;
:R9  = A(new switch control record) (see CRD dsect)&lt;br /&gt;
:R13 = A(OSW save area)&lt;br /&gt;
:R14 = return address&lt;br /&gt;
:R15 = base address&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; expects no output from the exit. All registers must be restored before return. If any &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; data structures are modified by the exit, unpredictable results may occur.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;blockquote class=&amp;quot;note&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;b&amp;gt;Note:&amp;lt;/b&amp;gt; If the user exit abends, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; issues an error and produces a snap. This leaves &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; waiting for the switch to complete. At that point the switch will never complete, no further Online activity is possible, and the Online must be cancelled.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
In addition, while the M204JLOG user exit is running, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; cannot continue normal processing until a return from the exit is accomplished. For this reason, WAITs and I/Os inside the exit are strongly discouraged.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Sample M204JLOG Assembler exit====&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;M204JLOG  CSECT&lt;br /&gt;
M204JLOG  AMODE 31&lt;br /&gt;
M204JLOG  TITLE &#039;TEST THE MODEL 204 CCAJLOG USER EXIT&#039;&lt;br /&gt;
X10       EQU    10&lt;br /&gt;
X11       EQU    11&lt;br /&gt;
X12       EQU    12&lt;br /&gt;
X13       EQU    13&lt;br /&gt;
X14       EQU    14&lt;br /&gt;
X15       EQU    15&lt;br /&gt;
         STM   X14,X12,12(X13)    SAVE CALLERS REGISTERS&lt;br /&gt;
         LR    X12,X15            ESTABLISH BASE REGISTER&lt;br /&gt;
        USING  M204JLOG,X12&lt;br /&gt;
         LA    X10,SAVEAREA       GET A(LOCAL REGISTER SAVEAREA)&lt;br /&gt;
         ST    X10,8(,X13)        CHAIN OUR SAVEAREA TO CALLERS&lt;br /&gt;
         ST    X13,SAVEAREA+4     CHAIN CALLERS SAVEAREA TO OURS&lt;br /&gt;
         LA    X13,SAVEAREA       SET A(OUR SAVEAREA)&lt;br /&gt;
         WTO   &#039;M204JLOG EXIT INVOKED, DOING SOMETHING&#039;&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;* ******************************************************************* *&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;* * CUSTOMERS MAY PLACE CODE HERE TO DO WHATEVER THEY DESIRE.       * *&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;* ******************************************************************* *&lt;br /&gt;
         WTO   &#039;M204JLOG EXIT ENDING&#039;&lt;br /&gt;
         L     X13,4(,X13)        RESTORE CALLERS SAVEAREA ADDRESS&lt;br /&gt;
         ST    X10,16(X13)        SET RETURN CODE (R15)&lt;br /&gt;
         LM    X14,X12,12(X13)    RESTORE CALLERS REGISTERS&lt;br /&gt;
         BR    X14                RETURN TO CALLER&lt;br /&gt;
         DS    0D&lt;br /&gt;
SAVEAREA DS    18F                REGISTER SAVE AREA&lt;br /&gt;
        LTORG&lt;br /&gt;
         END&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Model 204 roll forward recovery with CCAJLOG===&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; operates more efficiently during roll forward recovery, if you have defined CCAJLOG. This is because CCAJRNL now contains only roll forward recovery data; CCAJLOG contains unformatted CCAAUDIT data, which does not have to be read and ignored during the roll forward recovery since it has been removed from CCAJRNL.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Separating transaction (CCAJRNL) and auditing (CCAJLOG) information===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Splitting audit trail records &amp;amp;mdash; messages and statistics &amp;amp;mdash; out from CCAJRNL and writing them to CCAJLOG improves recovery performance by reducing the size of CCAJRNL. This also reduces the likelihood of filling CCAJRNL. However, it does shift the possibility to CCAJLOG and if either CCAJRNL or CCAJLOG fills, the run comes down.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Regenerating files using CCAJRNL and CCAJLOG===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Sending audit trail data to CCAJLOG also speeds up the &amp;lt;var&amp;gt;REGENERATE&amp;lt;/var&amp;gt; processing, if that is required.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Considerations for CCAJLOG===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
By specifying CCAJLOG in the JCL or dynamically at the start of CCAIN, all messages and statistics are written to CCAJLOG. All recovery-type records are written to CCAJRNL. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;If you do not specify CCAJLOG, a CCAJRNL is maintained that collects recovery records, messages, and statistics. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;If CCAJLOG is specified but the open fails, the run terminates initialization.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;If CCAJLOG fills during a run, the run is terminated.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Set the &amp;lt;var&amp;gt;[[NLBUFF parameter|NLBUFF]]&amp;lt;/var&amp;gt; parameter to specify the number of buffers to use for CCAJLOG. If you do not specify a value for &amp;lt;var&amp;gt;NLBUFF&amp;lt;/var&amp;gt;, a default value of five is allocated. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Using the journals correctly===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If you create both a CCAJRNL file and a CCAJLOG file, you must use the CCAJLOG file as input to AUDIT204. And, you must continue to use the CCAJRNL file as input to &amp;lt;var&amp;gt;REGEN&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;RESTART&amp;lt;/var&amp;gt; commands; otherwise, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; issues one of the following messages:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;M204:2515: CCAJRNL DATASET IS INVALID FOR AUDIT 204 &lt;br /&gt;
M204:2515: CCAJLOG DATASET IS INVALID FOR {REGEN | RESTART}&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If you create both a CCAJLOG and CCAJRNL and you use the CCAJRNL as input to AUDIT204, AUDIT204 issues the following message and stops processing:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;NON-MESSAGE DATASET IS INVALID FOR CCAJRNL&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Although UTILJ can handle a CCAJLOG data set, the utility will, of course, find only message and statistics type records in CCAJLOG. So, if you ask for recovery journal entries, type 1-6, the output is empty, since they do not exist on the CCAJLOG.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Because audit trail information is stored in CCAJLOG, if you have written a custom application for statistics reports, use CCAJLOG for input.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
==CCAJRNL data set record layout==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The journal data set is composed of variable length records. Each record consists of a header, one or more journal entries, and a trailer. The format of the journal data set is subject to change with each release 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;
 &lt;br /&gt;
===Journal entry format===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Journal entries contain audit trail, statistical, and control information, or information used for recovery. Statistics are recorded in the journal as fullword hexadecimal counters. Space is allocated in a given journal statistics entry for all possible statistics, even if they are not being kept. The values for statistics that are not maintained, or do not have relevance to the current configuration of &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt;, are represented as hexadecimal zeros.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Each entry has the same general format: &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;Bytes&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;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt; 0-1&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Length&amp;lt;/td&amp;gt;&lt;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;Entry type&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; 3-n&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;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;
&amp;lt;p&amp;gt;&lt;br /&gt;
Offset 0 is a 2-byte hexadecimal field containing the length of the entry. (The only exception to this rule is the header entry, where the length is the length of the entire journal block.)&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Offset 2 is a 1-byte field, which identifies the type of the entry: file, system, or user.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Offset 3 is a variable-length data portion. The size and layout depends upon the type of entry.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The following table summarizes the journal entry types, including formatting layouts and statistical information. Use the layout and statistics tables in [[Using system statistics]] for developing customized software to extract particular information from the journal data set. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;caption&amp;gt;Summary of journal entry 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;Type&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Journal record&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt; X&#039;00&#039; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Header/Trailer&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt; X&#039;01&#039; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Recovery entry&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt; X&#039;02&#039; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Recovery entry&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt; X&#039;03&#039; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Recovery entry&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt; X&#039;04&#039; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Recovery entry&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt; X&#039;05&#039; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Recovery entry&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt; X&#039;06&#039; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Recovery entry&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt; X&#039;07&#039; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Unused&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt; X&#039;08&#039; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;System statistics&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt; X&#039;09&#039; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;User statistics&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt; X&#039;0A&#039; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;File statistics&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt; X&#039;0B&#039; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Discontinued audit trail text&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt; X&#039;0C&#039; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Initialization entry&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt; X&#039;0D&#039; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Possibly continued audit trail text&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt; X&#039;0E&#039; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Timestamp&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt; X&#039;0F&#039; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Merged journal brackets&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;
===Number of lines in the journal data set===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The number of lines in the journal are controlled by the &amp;lt;var&amp;gt;CAUDIT&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;LAUDIT&amp;lt;/var&amp;gt;, and &amp;lt;var&amp;gt;SYSOPT&amp;lt;/var&amp;gt; parameters.  &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====CAUDIT parameter====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The &amp;lt;var&amp;gt;[[CAUDIT parameter|CAUDIT]]&amp;lt;/var&amp;gt; parameter controls physical input lines from a terminal, procedure, some IFAM arguments, or full-screen input. &amp;lt;var&amp;gt;CAUDIT&amp;lt;/var&amp;gt; operates at physical line (card) level. It controls the auditing of input lines after line editing has been performed, but before line continuation is interpreted. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
&amp;lt;var&amp;gt;CAUDIT&amp;lt;/var&amp;gt; is set on any user parameter line at the beginning of CCAIN, and can be reset by a user with system manager privileges who logs in with that user number. (&amp;lt;var&amp;gt;CAUDIT&amp;lt;/var&amp;gt; is generally used only by Technical Support staff in special instances.)&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====LAUDIT parameter====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The &amp;lt;var&amp;gt;[[LAUDIT parameter|LAUDIT]]&amp;lt;/var&amp;gt; parameter controls logical input lines from a terminal or procedure, some IFAM arguments, and full screen information. &amp;lt;var&amp;gt;LAUDIT&amp;lt;/var&amp;gt; is useful in reconstructing events that lead to a system crash. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Set &amp;lt;var&amp;gt;LAUDIT&amp;lt;/var&amp;gt; on any user parameter (&amp;lt;var&amp;gt;IODEV&amp;lt;/var&amp;gt;) line or at the beginning of CCAIN. For example:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;PAGESZ=6184,NUSERS=1,NSERVS=1,NFILES=20,&lt;br /&gt;
LENQTBL=15,LAUDIT=5, ...&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
&amp;lt;var&amp;gt;LAUDIT&amp;lt;/var&amp;gt; can be reset by a user with system manager privileges who logs in with that user number.&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====SYSOPT parameter====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The &amp;lt;var&amp;gt;[[SYSOPT parameter|SYSOPT]]&amp;lt;/var&amp;gt; 32 option controls output of information that relates to system initialization or to an IFAM function call.&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Sizing the journal buffer===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
In z/OS and z/VM only, you can specify the &amp;lt;var&amp;gt;NJBUFF&amp;lt;/var&amp;gt; parameter on the EXEC statement to make journal entries of one user without interrupting other current users. Valid settings are the default &amp;lt;code&amp;gt;NJBUFF=1&amp;lt;/code&amp;gt; or, to ensure the availability of a free buffer:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;NJBUFF = NSERVS + NSUBTKS + 1&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
In z/OS only, if the setting of the NJBUFF parameter is greater than 1, the setting is automatically recalculated using the previous formula and the initial value of &amp;lt;var&amp;gt;NJBUFF&amp;lt;/var&amp;gt; is used to define the number of concurrent I/O operations (NCP) for the journal data set. Sizing &amp;lt;var&amp;gt;NJBUFF&amp;lt;/var&amp;gt; to the value calculated in the formula guarantees the optimal number of Network Control Programs (NCP) for the journal data set.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If you use the &amp;lt;var&amp;gt;NJBUFF&amp;lt;/var&amp;gt; option, specify &amp;lt;code&amp;gt;BLKSIZE=6749&amp;lt;/code&amp;gt; as the minimum journal buffer size to allow a full page to be written to a single journal buffer. The contents of a buffer are automatically written to CCAJRNL before the buffer is completely full.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Messages giving the number of journal buffers and the number of bytes allocated to the buffers are displayed at the end of the run.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Managing space requirements for all operating systems===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The space requirement for CCAJRNL is reduced, if CCAJLOG is enabled. However, CCAJRNL must still be sized to prevent B37, D37, or E37 abends, which will terminate the run and require recovery to get files to a state of logical and physical consistency. The same applies to CCAJLOG: If it fills, the run terminates and recovery is required. Generous secondary extents allocated to these data set also help avoid overflow problems.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Additional managing space requirement on z/OS====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
At a z/OS site, the most comprehensive way to avoid data set full problems is to define both CCAJRNL and CCAJOG as generation data groups (GDGs). See [[Configuring checkpoint and journal data streams#Perpetual journaling for z/OS|Perpetual journaling for z/OS]].&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
==Model 204 statistics==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
A statistic is written to CCAAUDIT only if its value is nonzero. However, all statistics, even those with zero values, are written to CCAJRNL (or CCAJLOG). &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Audit trail and journal statistics lines===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The statistics generated on audit trail lines are valuable in a study of the performance of an individual user or of the &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; system as a whole. The effect of configuration changes within &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; and with other jobs in the operating system can be determined by comparing statistics gathered in &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; runs.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Statistics described as percentages are multiplied by 10 (a value printed as 1000 represents 100 percent). &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Statistics described as averages are multiplied by 1000 (1000 represents 1.000).&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Output lines===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Statistics for each user and file active during a particular run are written to the journal and audit trail files in output lines that begin with &amp;lt;code&amp;gt;ST $$$&amp;lt;/code&amp;gt;. The output lines are written in groups of related lines that include: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;User lines, which you can monitor to identify active users and to help determine if individual applications are efficiently implemented&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;File lines&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;System lines, which you can watch &amp;amp;mdash; together with file lines &amp;amp;mdash; to signal shifting loads on the CPU, disks, and terminals &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 type of line written &amp;amp;mdash; user, file, or system &amp;amp;mdash; is specified by the value of the first parameter after the journal header.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Identifying subtypes===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The subtype &amp;amp;mdash; final, partial, performance, or since-last &amp;amp;mdash; within each type is specified by the value of the second parameter after the journal header. In the audit trail, the subtype is indicated by &amp;lt;code&amp;gt;USERID=&amp;lt;i&amp;gt;user-id&amp;lt;/i&amp;gt;&amp;lt;/code&amp;gt; (user statistics), &amp;lt;code&amp;gt;FILE=&amp;lt;i&amp;gt;filename&amp;lt;/i&amp;gt;&amp;lt;/code&amp;gt; (file statistics), and &amp;lt;code&amp;gt;SYSTEM=&amp;lt;i&amp;gt;Model-204-version&amp;lt;/i&amp;gt;&amp;lt;/code&amp;gt; (system statistics). &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Within each major type of statistics line, subtypes are produced under specified conditions: some are always produced, others are optional. Optional subtypes are produced if the appropriate parameters are set during system initialization. See [[Tracking system activity (CCAJRNL, CCAAUDIT, CCAJLOG)#Setting the NSUBTKS parameter|Setting the NSUBTKS parameter]]. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
==Monitoring statistics==&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; statistics that you can monitor are introduced in [[Using system statistics]]. The statistics are presented in alphabetical order with their stated purpose, followed by tables that identify their position in various layouts.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can monitor statistics using one or more of the following methods:     &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Print out the audit trail. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;View formatted or unformatted displays of all nonzero cumulative statistics for active users &amp;amp;mdash; individual, specified groups, and all users &amp;amp;mdash; and system activities.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Use the AUDIT204 or UTILJ utility program to extract and summarize statistics lines from the journal data set. See [[#AUDIT204 utility|the AUDIT204 utility]] and [[System and media recovery#Using the UTILJ utility|Using the UTILJ utility]]&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Write optional records to the System Management Facilities (SMF) data set; see [[Using system statistics#System Management Facilities|System Management Facilities]]. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Setting the NSUBTKS parameter===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Gathering partial or performance statistics lines requires a &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; pseudo subtask. &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; uses pseudo subtasks to perform actions that must be done regularly but that cannot be assigned to a specific user. To accommodate partial and performance statistics lines you might need to increase the &amp;lt;var&amp;gt;NSUBTKS&amp;lt;/var&amp;gt; parameter on User 0&#039;s parameter line, which controls the maximum number of [[Controlling system operations (CCAIN)#Pseudo subtasks|pseudo subtasks]] that can be allocated. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Setting parameters to collect certain statistics===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You must set various parameters to collect certain statistics. The following table lists the statistics and the corresponding parameter(s):&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;caption&amp;gt;Parameters to set to collect certain statistics&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;Statistic &amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Parameter to set to nonzero&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;BLKCFRE &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;CFRJRNL and CFRLOOK&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;BLKI&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;RPTCNT and SMPLTIM&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;BLKO&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;RPTCNT and SMPLTIM&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;BLKRLK &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;CFRJRNL and CFRLOOK&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;LONGUPDTIME(MS)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;MAXUD&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;LONGUPDTS&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;MAXUD&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;PNDGTIME&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;DKUPDTWT&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;REDY &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;RPTCNT and SMPLTIM&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;RUNG &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;RPTCNT and SMPLTIM&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;SMPLS&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;RPTCNT and SMPLTIM&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;SWPG&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;RPTCNT and SMPLTIM&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;USRS&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;RPTCNT and SMPLTIM&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;WTCFR &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;CFRJRNL and CFRLOOK&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;WTRLK &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;CFRJRNL and CFRLOOK&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;WTSV &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;RPTCNT and SMPLTIM&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;
==Audit trail format==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Whether printed to CCAAUDIT, either directly from ONLINE/BATCH204 (with two exceptions), or from AUDIT204,&lt;br /&gt;
the format of an audit trail line is shown below.  The two exceptions are:&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
The YEARFORM 4 parameter is not available in ONLINE/BATCH204; it is only available in AUDIT204.&lt;br /&gt;
This means that a 4-digit year cannot be printed in a CCAAUDIT generated by ONLINE/BATCH204.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
The TIMEHH parameter is not available in ONLINE/BATCH204; it is only available in AUDIT204.&lt;br /&gt;
This means that the time stamp with hundredths of a second cannot be printed in a CCAAUDIT generated&lt;br /&gt;
by ONLINE/BATCH204.  &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 class=&amp;quot;code&amp;quot;&amp;gt;yydddhhmmss seq sssss uuuuu tt audit-trail-text ... &lt;br /&gt;
or&lt;br /&gt;
yydddhhmmsshu seq sssss uuuuu tt audit-trail-text ... &#039;&#039;&#039;(if TIMEHH was specified)&#039;&#039;&#039;&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;yyddd&amp;lt;/var&amp;gt; is  the Julian year and day.&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;hhmmss&amp;lt;/var&amp;gt; is the time of day in hours, minutes, and seconds.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;hhmmsshu&amp;lt;/var&amp;gt; is the time of day in hours, minutes, seconds, hundredths.&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&amp;lt;/var&amp;gt; sequence number is a counter to distinguish lines produced in the same second.&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;sssss&amp;lt;/var&amp;gt; is the 5-digit server number the user is currently using. (Leading zeros are suppressed.)&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;uuuuu&amp;lt;/var&amp;gt; is the 5-digit user number. (Leading zeros are suppressed.)&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;tt&amp;lt;/var&amp;gt; is code for the type of audit trail line. The tt codes are shown in the&lt;br /&gt;
&amp;quot;Types of audit trail lines&amp;quot; table, below.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Example 1, CCAAUDIT output direct from ONLINE====&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt; &lt;br /&gt;
&#039;&#039;&#039;COLUMN:                       These three lines&#039;&#039;&#039;  &lt;br /&gt;
&#039;&#039;&#039;2           15 18   23 25       are not present&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;&#039;DATE/TIME SEQ# S# USR# TYPE       in actual output&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
23256145406  0  0    0 RK ...  START VERSION =7.8.0A   SMF SYSTEM ID = RS26                                                      XX-&lt;br /&gt;
23256145406  1  0    0 XX                                                                                                           &lt;br /&gt;
23256145406  2  0    0 AD ///  **************************************************************************                           &lt;br /&gt;
23256145406  3  0    0 AD ///  * Model 204 is proprietary to and a registered trademark of Rocket       *                           &lt;br /&gt;
23256145406  4  0    0 AD ///  * Software, Inc. All title, copyright and other proprietary rights shall *                           &lt;br /&gt;
23256145406  5  0    0 AD ///  * be retained by Rocket Software, Inc. Model 204 has been licensed by    *                           &lt;br /&gt;
23256145406  6  0    0 AD ///  * this customer and the use and protection of Model 204 is governed by   *                           &lt;br /&gt;
23256145406  7  0    0 AD ///  * the license agreement between the customer and Rocket Software, Inc.   *                           &lt;br /&gt;
23256145406  8  0    0 AD ///  *                                                                        *                           &lt;br /&gt;
23256145406  9  0    0 AD ///  * Copyright (C) 2016 Rocket Software, Inc.                               *                           &lt;br /&gt;
23256145406 10  0    0 AD ///  * or its affiliates                                                      *                           &lt;br /&gt;
23256145406 11  0    0 AD ///  **************************************************************************                           &lt;br /&gt;
23256145406 12  0    0 AD ///  M204.0060: Model 204 initialization. Version = 7.8.0A 2020/03/06 14.12, RSQL level = 7.8.0A 2020/02/-&lt;br /&gt;
23256145406 13  0    0 XX 12 08.14                                                                                                  &lt;br /&gt;
23256145406 14  0    0 AD ///  M204.0061: SMF system ID = RS26, job name = PSTPC780, step name = TPCBV780, job step =  , JES ID = J-&lt;br /&gt;
23256145406 15  0    0 XX 0130887                                                                                                   &lt;br /&gt;
23256145406 16  0    0 AD ///  M204.0062: Execute parameters: RCVOPT=9,NJBUFF=115,SYSOPT=139,SYSOPT2=64,LIBUFF=6000,XMEMOPT=3,SIRFU-&lt;br /&gt;
23256145406 17  0    0 XX NC=1                                                                                                      &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Example 2, CCAAUDIT output from AUDIT204====&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt; &lt;br /&gt;
AUDIT204 Utility - Version 7.8.0A, Assembly date/time: 20200229 22.08                                                               &lt;br /&gt;
Date/time of run: 09/07/2023 12:56:01                                                                                               &lt;br /&gt;
CCAJRNL or CCAJLOG version: 7.8.0A                                                                                                  &lt;br /&gt;
Zaps: 78Z7759 78Z7891 78Z7973 78Z7975 78Z8066 78Z8075 &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;COLUMN:                              These three lines&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;&#039;2              18    24    30 32       are not present &#039;&#039;&#039; &lt;br /&gt;
&#039;&#039;&#039;DATE/TIME    SEQ# SERV# USER# TYPE       in actual output&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;FORMAT TIMEHH&#039;&#039;&#039;                                                                                                                       &lt;br /&gt;
2216613441420   0     0     0 RK ...  START VERSION =7.8.0A   SMF SYSTEM ID = RS26                                               XX-&lt;br /&gt;
2216613441420   1     0     0 XX                                                                                                    &lt;br /&gt;
2216613441420   2     0     0 AD ///  **************************************************************************                    &lt;br /&gt;
2216613441420   3     0     0 AD ///  * Model 204 is proprietary to and a registered trademark of Rocket       *                    &lt;br /&gt;
2216613441420   4     0     0 AD ///  * Software, Inc. All title, copyright and other proprietary rights shall *                    &lt;br /&gt;
2216613441420   5     0     0 AD ///  * be retained by Rocket Software, Inc. Model 204 has been licensed by    *                    &lt;br /&gt;
2216613441420   6     0     0 AD ///  * this customer and the use and protection of Model 204 is governed by   *                    &lt;br /&gt;
2216613441420   7     0     0 AD ///  * the license agreement between the customer and Rocket Software, Inc.   *                    &lt;br /&gt;
2216613441420   8     0     0 AD ///  *                                                                        *                    &lt;br /&gt;
2216613441420   9     0     0 AD ///  * Copyright (C) 2016 Rocket Software, Inc.                               *                    &lt;br /&gt;
2216613441420  10     0     0 AD ///  * or its affiliates                                                      *                    &lt;br /&gt;
2216613441420  11     0     0 AD ///  **************************************************************************                    &lt;br /&gt;
2216613441420  12     0     0 AD ///  M204.0060: Model 204 initialization. Version = 7.8.0A 2020/03/06 14.12, RSQL level = 7.8.0A 2-&lt;br /&gt;
2216613441420  13     0     0 XX 020/02/12 08.14                                                                                    &lt;br /&gt;
2216613441420  14     0     0 AD ///  M204.0061: SMF system ID = RS26, job name = PSTPC780, step name = TPCBV780, job step =  , JES-&lt;br /&gt;
2216613441420  15     0     0 XX  ID = J0536896                                                                                     &lt;br /&gt;
2216613441420  16     0     0 AD ///  M204.0062: Execute parameters: RCVOPT=9,NJBUFF=115,SYSOPT=139,SYSOPT2=64,LIBUFF=6000,XMEMOPT=-&lt;br /&gt;
2216613441420  17     0     0 XX 3,SIRFUNC=1  &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Example 3, CCAAUDIT output from AUDIT204====&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt; &lt;br /&gt;
AUDIT204 Utility - Version 7.8.0A, Assembly date/time: 20200229 22.08                                                               &lt;br /&gt;
Date/time of run: 09/07/2023 14:09:46                                                                                               &lt;br /&gt;
CCAJRNL or CCAJLOG version: 7.8.0A                                                                                                  &lt;br /&gt;
Zaps: 78Z7759 78Z7891 78Z7973 78Z7975 78Z8066 78Z8075&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;COLUMN:                              These three lines&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;&#039;2              18    24    30 32       are not present &#039;&#039;&#039; &lt;br /&gt;
&#039;&#039;&#039;DATE/TIME    SEQ# SERV# USER# TYPE       in actual output&#039;&#039;&#039;&lt;br /&gt;
                                                                             &lt;br /&gt;
&#039;&#039;&#039;FORMAT&#039;&#039;&#039;                                                                                                                              &lt;br /&gt;
&#039;&#039;&#039;YEARFORM 4&#039;&#039;&#039;                                                                                                                         &lt;br /&gt;
2022166134414   0     0     0 RK ...  START VERSION =7.8.0A   SMF SYSTEM ID = RS26                                               XX-&lt;br /&gt;
2022166134414   1     0     0 XX                                                                                                    &lt;br /&gt;
2022166134414   2     0     0 AD ///  **************************************************************************                    &lt;br /&gt;
2022166134414   3     0     0 AD ///  * Model 204 is proprietary to and a registered trademark of Rocket       *                    &lt;br /&gt;
2022166134414   4     0     0 AD ///  * Software, Inc. All title, copyright and other proprietary rights shall *                    &lt;br /&gt;
2022166134414   5     0     0 AD ///  * be retained by Rocket Software, Inc. Model 204 has been licensed by    *                    &lt;br /&gt;
2022166134414   6     0     0 AD ///  * this customer and the use and protection of Model 204 is governed by   *                    &lt;br /&gt;
2022166134414   7     0     0 AD ///  * the license agreement between the customer and Rocket Software, Inc.   *                    &lt;br /&gt;
2022166134414   8     0     0 AD ///  *                                                                        *                    &lt;br /&gt;
2022166134414   9     0     0 AD ///  * Copyright (C) 2016 Rocket Software, Inc.                               *                    &lt;br /&gt;
2022166134414  10     0     0 AD ///  * or its affiliates                                                      *                    &lt;br /&gt;
2022166134414  11     0     0 AD ///  **************************************************************************                    &lt;br /&gt;
2022166134414  12     0     0 AD ///  M204.0060: Model 204 initialization. Version = 7.8.0A 2020/03/06 14.12, RSQL level = 7.8.0A 2-&lt;br /&gt;
2022166134414  13     0     0 XX 020/02/12 08.14                                                                                    &lt;br /&gt;
2022166134414  14     0     0 AD ///  M204.0061: SMF system ID = RS26, job name = PSTPC780, step name = TPCBV780, job step =  , JES-&lt;br /&gt;
2022166134414  15     0     0 XX  ID = J0536896                                                                                     &lt;br /&gt;
2022166134414  16     0     0 AD ///  M204.0062: Execute parameters: RCVOPT=9,NJBUFF=115,SYSOPT=139,SYSOPT2=64,LIBUFF=6000,XMEMOPT=-&lt;br /&gt;
2022166134414  17     0     0 XX 3,SIRFUNC=1&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Example 4, CCAAUDIT output from AUDIT204====&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt; &lt;br /&gt;
AUDIT204 Utility - Version 7.8.0A, Assembly date/time: 20200229 22.08                                                               &lt;br /&gt;
Date/time of run: 09/13/2023 13:34:45                                                                                               &lt;br /&gt;
CCAJRNL or CCAJLOG version: 7.8.0A                                                                                                  &lt;br /&gt;
Zaps: 78Z7759 78Z7891 78Z7973 78Z7975 78Z8066 78Z8075 &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;COLUMN:                              These three lines&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;&#039;2                20    26    32 34       are not present &#039;&#039;&#039; &lt;br /&gt;
&#039;&#039;&#039;DATE/TIME      SEQ# SERV# USER# TYPE       in actual output&#039;&#039;&#039;&lt;br /&gt;
                                                                              &lt;br /&gt;
&#039;&#039;&#039;FORMAT TIMEHH&#039;&#039;&#039;                                                                                                                       &lt;br /&gt;
&#039;&#039;&#039;YEARFORM 4&#039;&#039;&#039;                                                                                                                          &lt;br /&gt;
202216613441420   0     0     0 RK ...  START VERSION =7.8.0A   SMF SYSTEM ID = RS26                                             XX-&lt;br /&gt;
202216613441420   1     0     0 XX                                                                                                  &lt;br /&gt;
202216613441420   2     0     0 AD ///  **************************************************************************                  &lt;br /&gt;
202216613441420   3     0     0 AD ///  * Model 204 is proprietary to and a registered trademark of Rocket       *                  &lt;br /&gt;
202216613441420   4     0     0 AD ///  * Software, Inc. All title, copyright and other proprietary rights shall *                  &lt;br /&gt;
202216613441420   5     0     0 AD ///  * be retained by Rocket Software, Inc. Model 204 has been licensed by    *                  &lt;br /&gt;
202216613441420   6     0     0 AD ///  * this customer and the use and protection of Model 204 is governed by   *                  &lt;br /&gt;
202216613441420   7     0     0 AD ///  * the license agreement between the customer and Rocket Software, Inc.   *                  &lt;br /&gt;
202216613441420   8     0     0 AD ///  *                                                                        *                  &lt;br /&gt;
202216613441420   9     0     0 AD ///  * Copyright (C) 2016 Rocket Software, Inc.                               *                  &lt;br /&gt;
202216613441420  10     0     0 AD ///  * or its affiliates                                                      *                  &lt;br /&gt;
202216613441420  11     0     0 AD ///  **************************************************************************                  &lt;br /&gt;
202216613441420  12     0     0 AD ///  M204.0060: Model 204 initialization. Version = 7.8.0A 2020/03/06 14.12, RSQL level = 7.8.0A-&lt;br /&gt;
202216613441420  13     0     0 XX  2020/02/12 08.14                                                                                &lt;br /&gt;
202216613441420  14     0     0 AD ///  M204.0061: SMF system ID = RS26, job name = PSTPC780, step name = TPCBV780, job step =  , J-&lt;br /&gt;
202216613441420  15     0     0 XX ES ID = J0536896                                                                                 &lt;br /&gt;
202216613441420  16     0     0 AD ///  M204.0062: Execute parameters: RCVOPT=9,NJBUFF=115,SYSOPT=139,SYSOPT2=64,LIBUFF=6000,XMEMOP-&lt;br /&gt;
202216613441420  17     0     0 XX T=3,SIRFUNC=1                                                                                    &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt; &lt;br /&gt;
The following table lists the code and purpose of the audit trail lines:&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;caption&amp;gt;Types of audit trail lines&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;Displays...&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;AD&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Special information about the run, job step return code, status of &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; files, user or the password table, the SNA Communications Server (formerly VTAM) Interface, or messages sent from an HLI program via the IFERR 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;CI&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Physical input line from a user&#039;s terminal or some IFAM arguments.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;CP&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Physical input line from a procedure.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;CS&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Physical line of full-screen input (see LS below).&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;ER&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Error message sent 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;LI&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Logical input line from a user&#039;s terminal or some HLI arguments.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;LP&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Logical input line from a procedure.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;LR&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Read images from a 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;LS&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Full-screen information. For a screen, each line lists one input value. For a menu, the line provides the menu selection number.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;MS&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Informational message sent to the user (not an 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&amp;gt;OI&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Input line from the operator&#039;s console.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;OO&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Message sent to the operator&#039;s console.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;RK&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Special information that relates to system initialization or to the record of a call to the following types of function:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Connect&amp;lt;sup&amp;gt;&amp;amp;#9733;&amp;lt;/sup&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;HLI&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;MQ/204&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;PQO&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;SQL&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;UL/DB2&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;QT&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Lines of SQL statement level 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;ST&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Utilization statistics (see [[Using system statistics]]).&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;US&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Line of special information directed to the audit trail by means of the SOUL &amp;lt;var&amp;gt;Audit&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;XX&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Continuation of the previous line.&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;
==Generating an audit trail==&lt;br /&gt;
 &lt;br /&gt;
===Overview of audit trail parameters===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
An audit trail is generated if:   &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;SYSOPT&amp;lt;/var&amp;gt; parameter includes the 128 specification&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;CCAAUDIT DD 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;
The &amp;lt;var&amp;gt;[[LAUDPROC parameter|LAUDPROC]]&amp;lt;/var&amp;gt; parameter controls the length of procedure names that appear in since-last statistic lines of the audit trail. You can reset &amp;lt;var&amp;gt;LAUDPROC&amp;lt;/var&amp;gt; to a low or high value. A low value conserves memory. A high value captures long procedure names. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===z/VSE and the audit trail===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
In a z/VSE environment, activate the audit trail by incorporating the following specifications into the JCL:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;You must set UPSI to &amp;lt;code&amp;gt;1xxxxxxx&amp;lt;/code&amp;gt; (&amp;lt;code&amp;gt;SYSOPT=128&amp;lt;/code&amp;gt;).&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;You must write the audit trail file to either a disk device or a print device:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Assign a disk device using a DLBL and EXTENT statement for file name &amp;lt;code&amp;gt;CCAUDIT&amp;lt;/code&amp;gt; (retention 0 is recommended).&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Assign a print device using symbolic unit &amp;lt;code&amp;gt;SYS008&amp;lt;/code&amp;gt;. (You cannot assign &amp;lt;code&amp;gt;SYS008&amp;lt;/code&amp;gt; to the same physical device as SYSLST.)&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If the DLBL and EXTENT for CCAUDIT are provided in the JCL, the audit trail is written to disk regardless of the assignment of &amp;lt;code&amp;gt;SYS008&amp;lt;/code&amp;gt;.&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;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The following example shows a job stream for an &amp;lt;var&amp;gt;ONLINE&amp;lt;/var&amp;gt; configuration with the audit trail on disk:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;// JOB ONLINE&lt;br /&gt;
...&lt;br /&gt;
// DLBL CCAUDIT,&#039;audit trail file-id&#039;,0&lt;br /&gt;
// EXTENT SYSnnn,balance of extent information&lt;br /&gt;
// ASSGN SYSnnn,X&#039;cuu&#039;&lt;br /&gt;
...&lt;br /&gt;
// UPSI 10000000&lt;br /&gt;
// EXEC ONLINE, SIZE=AUTO&lt;br /&gt;
...&lt;br /&gt;
/&amp;amp;amp;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
After the audit trail has been written to disk, you can print it using the UTLA utility program supplied with the &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; DBMS.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Use the following JCL:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;// JOB UTLA PRINT MODEL 204 AUDIT TRAIL&lt;br /&gt;
// DLBL M204LIB,&#039;M204.PROD.LIBRARY&#039;&lt;br /&gt;
// EXTENT SYSnnn,...&lt;br /&gt;
// LIBDEF PHASE.SEARCH=M204LIB.V411&lt;br /&gt;
// DLBL CCAUDIT,&#039;audit trail file-id&#039;&lt;br /&gt;
// EXTENT SYSnnn,balance of extent information&lt;br /&gt;
// ASSGN SYSnnn,X&#039;cuu&#039;&lt;br /&gt;
// ASSGN SYS005,SYSLST&lt;br /&gt;
// EXEC UTLA,SIZE=AUTO&lt;br /&gt;
/&amp;amp;amp;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===z/VM and the audit trail===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
In the z/VM/CMS environment, define CCAAUDIT as 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;CMS file:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;FILEDEF CCAAUDIT DISK ONLN CCAAUDIT A&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Service machine virtual printer:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;FILEDEF CCAAUDIT PRINTER&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
==AUDIT204 utility==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The AUDIT204 utility program produces the following reports, all of which are written to CCAAUDIT:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Complete or partial audit trail from a journal &amp;amp;mdash; CCAJRNL or CCAJLOG, as ddname CCAJRNL &amp;amp;mdash; produced by a &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; run&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Report based on statistics that appear on user logout and partial lines or file closed and partial lines&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Statistical analysis of the evaluation of SOUL requests &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 of AUDIT204 reports is determined by AUDIT204 commands and parameters you enter in:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;z/OS CCAIN data stream&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;z/VM (CMS) AUDIT204 CCAIN file&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;DOS SYSIPT 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;
The basic AUDIT204 input commands are:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;tr class=&amp;quot;head&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;AUDIT204 command &amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;For... &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;ANALYZE &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Statistical analysis of the evaluation of User Language 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;FORMAT &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Printed audit trail&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;REPORT &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Breakdown of user and file statistics lines containing optional price calculations&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 to AUDIT204===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Input to AUDIT204 is free form, located in columns 1-71. The following rules apply:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;The command line may have one parameter and its subparameters.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Type each subsequent parameter on a separate line.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Use blanks to separate subparameters.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;You can type parameters for a single command in any order.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;You can add subparameters for some parameters (PRICE and RENAME) by naming the subparameters in the form of character strings:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;If a name contains a blank or a single quotation mark, you must enclose the name in single quotation marks.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Use double quotation marks within the name.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Use blanks around the equal signs in the PRICE and RENAME parameters.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Use blanks to separate subparameters.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;If more than one line is required for the subparameters, place a nonblank character in column 72 or repeat the parameter on a new line. &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;Any characters appearing in columns 73-80 are ignored. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;You can repeat any parameter. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Precede each comment by an asterisk (&amp;lt;tt&amp;gt;*&amp;lt;/tt&amp;gt;) in column 1.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;The effect of parameters containing lists of subparameters is cumulative. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;The last value of parameters without subparameter lists is the value used. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===ANALYZE command===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The &amp;lt;var&amp;gt;ANALYZE&amp;lt;/var&amp;gt; command produces a statistical analysis report on the evaluation of SOUL requests. The complete report comprises an analysis for each individual account and the system as a whole. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Since-last evaluation lines calculate the mean and standard deviation for each since-last statistic:&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;Measure &amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Represents... &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;Mean &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Center of a set of data points (usually referred to as the average value of the set), obtained by summing the values and dividing by the number of values.&amp;lt;/td&amp;gt;&lt;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;Standard deviation &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;How spread out the data is around the center. In particular, it is useful to know whether the data is tightly clustered around the mean, or more dispersed. &lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
A small standard deviation indicates that any given value is likely to be close to the mean, and a large standard deviation implies that a value is more likely to be far away from the mean. &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;
You can obtain more information about the mean and the standard deviation from any standard statistics textbook.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Syntax====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Use the following syntax for the &amp;lt;var&amp;gt;ANALYZE&amp;lt;/var&amp;gt; command:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;ANALYZE [USERID | NOUSERID] [USERIDS &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;userid1...useridn&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;ANALYZE [ACCOUNT | NOACCOUNT] [ACCOUNTS &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;account1...accountn&amp;lt;/span&amp;gt;] &lt;br /&gt;
        [&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;parameters&amp;lt;/span&amp;gt;]&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
Where:&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Use the following parameters with the &amp;lt;var&amp;gt;ANALYZE&amp;lt;/var&amp;gt; command:&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;&amp;lt;var&amp;gt;ACCOUNT&amp;lt;/var&amp;gt;&lt;br /&gt;
or &amp;lt;var&amp;gt;NOACCOUNT&amp;lt;/var&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Whether or not to do an individual account analysis. The &amp;lt;var&amp;gt;ACCT&amp;lt;/var&amp;gt; or &amp;lt;var&amp;gt;NOACCT&amp;lt;/var&amp;gt; parameters are equivalent to &amp;lt;var&amp;gt;ACCOUNT&amp;lt;/var&amp;gt; or &amp;lt;var&amp;gt;NOACCOUNT&amp;lt;/var&amp;gt;, respectively. &amp;lt;/td&amp;gt;&lt;br /&gt;
&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;ACCOUNTS&amp;lt;/var&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Login account name(s) to list in the analysis report. &lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Reports are produced only for the specified accounts and only the since-last evaluation lines for those accounts that are included in the systemwide report.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Specifying &amp;lt;var&amp;gt;ACCOUNTS&amp;lt;/var&amp;gt; sets the &amp;lt;var&amp;gt;ACCOUNT&amp;lt;/var&amp;gt; parameter when neither &amp;lt;var&amp;gt;ACCOUNT&amp;lt;/var&amp;gt; nor &amp;lt;var&amp;gt;NOACCOUNT&amp;lt;/var&amp;gt; was specified.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;var&amp;gt;OMIT &amp;lt;i&amp;gt;name1 name2&amp;lt;/i&amp;gt;...&amp;lt;/var&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Since-last statistic(s) to list, but omit from the analysis report. The report contains all since-last statistics that are not explicitly omitted.  Specifying file or user statistics will generate an error message and terminate the ANALYZE.&amp;lt;/td&amp;gt;&lt;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;RENAME &amp;lt;i&amp;gt;name&amp;lt;/i&amp;gt;=&amp;lt;i&amp;gt;newname&amp;lt;/i&amp;gt;&amp;lt;/var&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;New names to since-last statistics as column headings for an analysis report.&amp;lt;/td&amp;gt;&lt;br /&gt;
&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;TIME [&amp;lt;i&amp;gt;yydddhhmmss&amp;lt;/i&amp;gt; / &amp;lt;i&amp;gt;yydddhhmmss&amp;lt;/i&amp;gt; | &amp;lt;i&amp;gt;cyydddhhmmss&amp;lt;/i&amp;gt; / &amp;lt;i&amp;gt;cyyddhhmmss&amp;lt;/i&amp;gt;]&amp;lt;/var&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Time range from which since-last evaluation lines are 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&amp;gt;&amp;lt;var&amp;gt;SYS&amp;lt;/var&amp;gt; (the default)&lt;br /&gt;
&amp;lt;br&amp;gt;or &amp;lt;var&amp;gt;NOSYS&amp;lt;/var&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Whether or not to do a systemwide analysis using since-last evaluation lines of accounts for which an individual analysis is done. &amp;lt;/td&amp;gt;&lt;br /&gt;
&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;USERID&amp;lt;/var&amp;gt; (the default)&lt;br /&gt;
&amp;lt;br&amp;gt;or &amp;lt;var&amp;gt;NOUSERID&amp;lt;/var&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Performing or suppressing an individual user ID analysis. Totals for a systemwide analysis are still accumulated if &amp;lt;var&amp;gt;NOUSERID&amp;lt;/var&amp;gt; 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;&amp;lt;var&amp;gt;USERIDS&amp;lt;/var&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;User(s) for which analysis is requested.&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The &amp;lt;var&amp;gt;USERIDS&amp;lt;/var&amp;gt; keyword is required in addition to the &amp;lt;var&amp;gt;USERID&amp;lt;/var&amp;gt; keyword. If neither &amp;lt;var&amp;gt;USERID&amp;lt;/var&amp;gt; nor &amp;lt;var&amp;gt;NOUSERID&amp;lt;/var&amp;gt; has been specified, specifying &amp;lt;var&amp;gt;USERIDS&amp;lt;/var&amp;gt; sets the &amp;lt;var&amp;gt;USERID&amp;lt;/var&amp;gt; parameter.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Reports are produced only for the specified users and only the since-last evaluation lines for those users who are included in the systemwide report. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
AUDIT204 uses the values specified in the &amp;lt;var&amp;gt;USERID&amp;lt;/var&amp;gt; parameter as a pattern and finds all values that match. For example, &amp;lt;code&amp;gt;USERIDS NANCY KATHY&amp;lt;/code&amp;gt; is equivalent to &amp;lt;code&amp;gt;REPORT USERID USERIDS NANCY* KATHY*&amp;lt;/code&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;
===FORMAT command===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
&amp;lt;var&amp;gt;FORMAT&amp;lt;/var&amp;gt; prints an audit trail (CCAAUDIT) from CCAJRNL or CCAJLOG. &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;FORMAT TIME {&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;yydddhhmmss/yydddhhmmss&amp;lt;/span&amp;gt; | &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;cyydddhhmmss/cyydddhhmmss&amp;lt;/span&amp;gt;}&lt;br /&gt;
       TIMEHH &lt;br /&gt;
       TYPE &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;type1&amp;lt;/span&amp;gt;&lt;br /&gt;
       USER &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;usernum&amp;lt;/span&amp;gt;&lt;br /&gt;
       USERID &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;userid&amp;lt;/span&amp;gt;&lt;br /&gt;
       YEARFORM {2 | 4}&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;
You use the following parameters with the &amp;lt;var&amp;gt;FORMAT&amp;lt;/var&amp;gt; command:&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;&amp;lt;var&amp;gt;TIME&amp;lt;/var&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Time range to print. The format of the time specification corresponds to the time stamp printed with each audit trail line.&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can specify start and end times in either order. If either time is out of the range covered by the journal, it is corrected to match the actual start or end of the journal. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If both specified times are before and after the period covered by the journal, nothing is printed.&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;yyddd&amp;lt;/var&amp;gt; is the year and Julian date; &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;cyyddd&amp;lt;/var&amp;gt; is the century, year and Julian date (0=20th century, 1=21st century).&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;hhmmss&amp;lt;/var&amp;gt; is time based on a 24-hour clock. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;b&amp;gt;NOTE:&amp;lt;/b&amp;gt; TIME may be specified with no time range or with a time range in the form noted above.  No time range selects the entire journal/jlog for printing.&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;td&amp;gt;&amp;lt;var&amp;gt;TIMEHH&amp;lt;/var&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Indicates that timestamps, printed at the beginning of each line of output, should include hundredths of a second.  Requires no other arguments.  &lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;b&amp;gt;NOTE:&amp;lt;/b&amp;gt; This parameter and the 78 version of AUDIT204 may be used against a 77 or 78 CCAJRNL or CCAJLOG.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;b&amp;gt;NOTE:&amp;lt;/b&amp;gt; TIMEHH may be specified with no time range or with a time range in the form noted above.  No time range selects the entire journal/jlog for printing.&amp;lt;/p&amp;gt;  &lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;var&amp;gt;TYPE&amp;lt;/var&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Type of lines to print, such as AD or MS (see the [[#Example|&amp;quot;Types of audit trail lines&amp;quot; table]]).&amp;lt;/td&amp;gt;&lt;br /&gt;
&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;USER&amp;lt;/var&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;User for whom the printed audit trail lines are generated. Specify user numbers with or without leading 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;&amp;lt;var&amp;gt;USERID&amp;lt;/var&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;One- to ten-character name that identifies the &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; user about whom the printed audit trail lines are generated.&amp;lt;/td&amp;gt;&lt;br /&gt;
&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;YEARFORM&amp;lt;/var&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Two- or four-digit year output. The default is 2.&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;
The options specified in the following example restrict the printing of the audit trail to &amp;lt;code&amp;gt;MS&amp;lt;/code&amp;gt; (message) lines for &amp;lt;code&amp;gt;USER 01&amp;lt;/code&amp;gt; created on September 22, 1998 between 10:41 A.M. and 10:45 A.M.:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;FORMAT TYPE MS, ER&lt;br /&gt;
TIME 98265104100/98265104500&lt;br /&gt;
USER 01&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;
The &amp;lt;var&amp;gt;FORMAT&amp;lt;/var&amp;gt; command can be used against a CCAJRNL or CCAJLOG data set. Examine the code examples that begin in [[#Samples of a z/OS job stream|Samples of a z/OS job stream]]. &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===REPORT command===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The &amp;lt;var&amp;gt;REPORT&amp;lt;/var&amp;gt; command prints user and file statistics in a tabular format and computes costs by account or by file for billing purposes. AUDIT204 reports have a two-line header, as shown in the following example, that reflect the circumstances of your site.    &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;AUDIT204 UTILITY - VERSION 7.6.0D&lt;br /&gt;
DATE/TIME OF RUN: 10/11/2016 12:25:50&lt;br /&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;REPORT &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;parameters&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;type&amp;lt;/var&amp;gt; is a subcommand that specifies the type of report to print:&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;Subcommand &amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Specifies printing a report from...&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;ACCOUNT&amp;lt;/var&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;User statistics for all accounts &amp;lt;/td&amp;gt;&lt;br /&gt;
&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;ACCOUNTS&amp;lt;/var&amp;gt; &amp;lt;i&amp;gt;account1 account2&amp;lt;/i&amp;gt; ...&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;User statistics for specified accounts&amp;lt;/td&amp;gt;&lt;br /&gt;
&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;USERID&amp;lt;/var&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;User statistics for all users&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;var&amp;gt;USERID USERIDS &amp;lt;i&amp;gt;user1 user2&amp;lt;/i&amp;gt; ...&amp;lt;/var&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;User statistics for users listed&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&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;File statistics for all files&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;var&amp;gt;FILE FILES &amp;lt;i&amp;gt;fname1 fname2&amp;lt;/i&amp;gt; ...&amp;lt;/var&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;File statistics for files listed&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&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;parameters&amp;lt;/var&amp;gt; is one or  more of &lt;br /&gt;
the following, which can be used with &amp;lt;var&amp;gt;USERID&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;ACCOUNT&amp;lt;/var&amp;gt;, or &amp;lt;var&amp;gt;FILE&amp;lt;/var&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;&amp;lt;var&amp;gt;IND&amp;lt;/var&amp;gt; (the default)&lt;br /&gt;
&amp;lt;br&amp;gt;or &amp;lt;var&amp;gt;NOIND&amp;lt;/var&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Printing or not printing individual lines. Totals are still accumulated if &amp;lt;var&amp;gt;NOIND&amp;lt;/var&amp;gt; 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;&amp;lt;var&amp;gt;OMIT&amp;lt;/var&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Statistic(s) to omit from the report. You must enter the actual name of the statistic, not what appears in a column header in a report. Only file statistics are valid for FILE reports and only since-last and logout stats are valid for USERID reports.  See [[Using system statistics#Description of statistics|Description of statistics]] for an alphabetical listing of statistics.&amp;lt;/td&amp;gt;&lt;br /&gt;
&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;PARTIAL&amp;lt;/var&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;or &amp;lt;var&amp;gt;NOPARTIAL&amp;lt;/var&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Generation of partial or complete statistics lines. Use:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;PARTIAL&amp;lt;/var&amp;gt; when a report is generated from a journal that did not terminate successfully.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;NOPARTIAL&amp;lt;/var&amp;gt; to avoid processing overhead, when a complete journal is available.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;var&amp;gt;PRICE&amp;lt;/var&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Dollar charge up to five decimal places to any statistic. Decimal point, and leading and trailing zeros are optional. For example:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;PRICE CPU=0.05 DKRD=.03 DKWR=.035&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;td&amp;gt;&amp;lt;var&amp;gt;RENAME&amp;lt;/var&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Column heading names up to nine characters without truncation. The new name completely replaces the old name and must be used if name is specified on other parameters.&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;TIME&amp;lt;/var&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Time range for statistics line reporting. One of the following formats is required:&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;yydddhhmmss&amp;lt;/var&amp;gt;&amp;lt;b&amp;gt;&amp;lt;tt&amp;gt;/&amp;lt;/tt&amp;gt;&amp;lt;/b&amp;gt;&amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;yydddhhmmss&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;cyydddhhmmss&amp;lt;/var&amp;gt;&amp;lt;b&amp;gt;&amp;lt;tt&amp;gt;/&amp;lt;/tt&amp;gt;&amp;lt;/b&amp;gt;&amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;cyydddhhmmss&amp;lt;/var&amp;gt; &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td nowrap&amp;gt;&amp;lt;var&amp;gt;TOTAL&amp;lt;/var&amp;gt; (the default)&lt;br /&gt;
&amp;lt;br&amp;gt;or &amp;lt;var&amp;gt;NOTOTAL&amp;lt;/var&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Totalling or suppression of totalling for individual statistics and costs. &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;
Totals are printed after individual statistics lines if both &amp;lt;var&amp;gt;IND&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;TOTAL&amp;lt;/var&amp;gt; are in effect. Each line must contain only one parameter, as in the following examples:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;REPORT USERID NOIND&lt;br /&gt;
              PARTIAL&lt;br /&gt;
              TIME &amp;lt;i&amp;gt;yydddhhmmss/yydddhhmmss&amp;lt;/i&amp;gt;&lt;br /&gt;
              RENAME &amp;lt;i&amp;gt;name=newname&amp;lt;/i&amp;gt;&lt;br /&gt;
              NOTOTAL&lt;br /&gt;
              USERIDS &amp;lt;i&amp;gt;account&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
REPORT FILE FILES &amp;lt;i&amp;gt;fname1 fname2 fname3 ...&amp;lt;/i&amp;gt;&lt;br /&gt;
       OMIT &amp;lt;i&amp;gt;statistic&amp;lt;/i&amp;gt;&lt;br /&gt;
       PRICE &amp;lt;i&amp;gt;statistic=xx.xx&amp;lt;/i&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The subkeywords &amp;lt;var&amp;gt;ACCOUNTS&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;FILES&amp;lt;/var&amp;gt;, and &amp;lt;var&amp;gt;USERIDS&amp;lt;/var&amp;gt; can be used with &amp;lt;var&amp;gt;REPORT&amp;lt;/var&amp;gt; subcommands &amp;lt;var&amp;gt;ACCOUNT&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;FILE&amp;lt;/var&amp;gt;, and &amp;lt;var&amp;gt;USERID&amp;lt;/var&amp;gt; as in the following examples:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;REPORT USERID USERIDS JAMES STEVE SANDRA&lt;br /&gt;
       ACCOUNT ACCOUNTS JAMES STEVE SANDRA&lt;br /&gt;
       FILE FILES CLIENTS VEHICLES DAILY&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; The &amp;lt;var&amp;gt;REPORT&amp;lt;/var&amp;gt; command for AUDIT204 can process only a single journal: CCAJRNL. You cannot use against a CCAJOG file.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Using the AUDIT204 utility==&lt;br /&gt;
 &lt;br /&gt;
===CCAJRNL and CCAJLOG data sets as input to utilities===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When you need a CCAAUDIT report, use the CCAJLOG data set as input to the AUDIT204 utility, under the ddname of CCAJRNL. You can also use CCAJLOG as input to the UTILJ utility, again under the ddname of CCAJRNL; however, the only useful report produced is a histogram of the number of blocks and block sizes that were written to the CCAJLOG data set.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
CCAJRNL is the input data set provided to roll forward recovery (ddname=CCARF), media recovery (ddname= CCAGEN), and UTILJ (ddname=CCAJRNL).&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;caption&amp;quot; style=&amp;quot;width:457px&amp;quot;&amp;gt;Utilities using CCAJLOG and CCAJRNL data sets as input&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;figure&amp;quot;&amp;gt;[[File:SM13ccaprint3_sep.gif|457px]] &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Journal stream configurations===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
AUDIT204 can process only basic journal streams (single data sets). Members of concatenated, parallel, ring, or GDG streams must be processed one at a time.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If there is a wraparound during the output processing of a ring stream, use the offload stream as input to AUDIT204. You can also use regular z/OS concatenation to print the contents of a concatenated stream.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===z/OS JCL for AUDIT204===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The following considerations apply to z/OS JCL for AUDIT204:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Use a SORTLIB DD statement to identify the library in which the sort program is stored, if necessary.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;You might need sort work (SORTWKxx) data sets.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;SORTIN, SORTOUT, and SYSOUT statements are necessary only for statistical reports. A sort program must be available:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SORTIN contains all the user and file statistics entries extracted from the journal. The size of the data set depends on the number of statistics entries extracted. Each user statistics entry is 198 bytes long. Each file entry is 82 bytes long. Partial statistics entries are not copied to SORTIN.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;SORTOUT contains the sorted statistics entries from SORTIN. SORTOUT and SORTIN must be the same size.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;SYSOUT is the SORT message data set.&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;STATIN, STATOUT, and SYSOUT statements are necessary only for statistical analysis reports:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;STATIN contains all the since-last evaluation statistics entries extracted from the journal. The size of the data set depends on the number of since-last evaluation statistics extracted. Each since-last evaluation statistics entry is 188 bytes long.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;STATOUT contains the sorted statistics entries from STATIN. STATOUT and STATIN must be the same size. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Statistics work (STATWKxx) data sets might be needed when using the ANALYZE command, depending on the amount of data generated.&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;CCAJRNL describes the data set containing the journal produced by a &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; run.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;AUDIT204 does not support streams. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;CCAAUDIT contains the audit trail, statistics report, and statistical analysis report. If you request both the audit trail and statistics, the audit trail appears first.&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The value of the BLKSIZE parameter in the CCAAUDIT DD statement is truncated at 4 more than a multiple of 137. A BLKSIZE value of 141 is the default and minimum value.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Any LRECL and RECFM specifications are ignored; these parameter values are forced to be 137 and VBA, respectively.&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Samples of a z/OS job stream===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The following sample job streams run AUDIT204, These examples differ in the use of the journal processed, CCAJRNL or CCAJLOG, and the presence or absence of AUDIT204 commands: &amp;lt;var&amp;gt;ANALYZE&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;FORMAT&amp;lt;/var&amp;gt;, and &amp;lt;var&amp;gt;REPORT&amp;lt;/var&amp;gt;.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Where only CCAJRNL is defined, all AUDIT204 commands are valid====&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt; //AUDIT     EXEC  PGM=AUDIT204&lt;br /&gt;
 //STEPLIB   DD  DSN=M204.LOADLIB,DISP=SHR&lt;br /&gt;
 //SYSUDUMP  DD  SYSOUT=A&lt;br /&gt;
 //CCAJRNL   DD  DSN=M204.CCAJRNL,DISP=SHR&lt;br /&gt;
 //CCAAUDIT  DD  SYSOUT=A&lt;br /&gt;
 //SORTIN    DD  DSN=&amp;amp;amp;&amp;amp;amp;SORTIN,UNIT=SYSDA,SPACE=(TRK,nn),&lt;br /&gt;
 //              DISP=(NEW,DELETE)&lt;br /&gt;
 //SORTOUT   DD  DSN=*.SORTIN,VOL=REF=*.SORTIN,DISP=(OLD,PASS)&lt;br /&gt;
 //STATIN    DD  DSN=&amp;amp;amp;&amp;amp;amp;STATIN,UNIT=SYSDA,SPACE=(TRK,nn),&lt;br /&gt;
 //              DISP=(NEW,DELETE)&lt;br /&gt;
 //STATOUT   DD  DSN=*.STATIN,VOL=REF=*.STATIN,DISP=(OLD,PASS)&lt;br /&gt;
 //SYSOUT    DD  SYSOUT=A&lt;br /&gt;
 //CCAIN     DD  *&lt;br /&gt;
 FORMAT&lt;br /&gt;
 ANALYZE&lt;br /&gt;
 REPORT ACCOUNT&lt;br /&gt;
   .&lt;br /&gt;
   .  ---- &amp;lt;i&amp;gt;user options&amp;lt;/i&amp;gt;&lt;br /&gt;
   .&lt;br /&gt;
 /*&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Where CCAJLOG is defined and you want to extract CCAAUDIT====&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt; //AUDIT     EXEC  PGM=AUDIT204&lt;br /&gt;
 //STEPLIB   DD  DSN=M204.LOADLIB,DISP=SHR&lt;br /&gt;
 //SYSUDUMP  DD  SYSOUT=A&lt;br /&gt;
 //CCAJRNL   DD  DSN=M204.CCAJLOG,DISP=SHR&lt;br /&gt;
 //CCAAUDIT  DD  SYSOUT=A&lt;br /&gt;
 //SORTIN    DD  DSN=&amp;amp;amp;&amp;amp;amp;SORTIN,UNIT=SYSDA,SPACE=(TRK,nn),&lt;br /&gt;
 //              DISP=(NEW,DELETE)&lt;br /&gt;
 //SORTOUT   DD  DSN=*.SORTIN,VOL=REF=*.SORTIN,DISP=(OLD,PASS)&lt;br /&gt;
 //STATIN    DD  DSN=&amp;amp;amp;&amp;amp;amp;STATIN,UNIT=SYSDA,SPACE=(TRK,nn),&lt;br /&gt;
 //              DISP=(NEW,DELETE)&lt;br /&gt;
 //STATOUT   DD  DSN=*.STATIN,VOL=REF=*.STATIN,DISP=(OLD,PASS)&lt;br /&gt;
 //SYSOUT    DD  SYSOUT=A&lt;br /&gt;
 //CCAIN     DD  *&lt;br /&gt;
 FORMAT&lt;br /&gt;
   .&lt;br /&gt;
   .  ---- &amp;lt;i&amp;gt;user options&amp;lt;/i&amp;gt;&lt;br /&gt;
   .&lt;br /&gt;
 /*&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Where both CCAJRNL and CCAJLOG are defined and you want a statistical analysis====&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt; //AUDIT     EXEC  PGM=AUDIT204&lt;br /&gt;
 //STEPLIB   DD  DSN=M204.LOADLIB,DISP=SHR&lt;br /&gt;
 //SYSUDUMP  DD  SYSOUT=A&lt;br /&gt;
 //CCAJRNL   DD  DSN=M204.CCAJRNL,DISP=SHR&lt;br /&gt;
 //CCAAUDIT  DD  SYSOUT=A&lt;br /&gt;
 //SORTIN    DD  DSN=&amp;amp;amp;&amp;amp;amp;SORTIN,UNIT=SYSDA,SPACE=(TRK,nn),&lt;br /&gt;
 //              DISP=(NEW,DELETE)&lt;br /&gt;
 //SORTOUT   DD  DSN=*.SORTIN,VOL=REF=*.SORTIN,DISP=(OLD,PASS)&lt;br /&gt;
 //STATIN    DD  DSN=&amp;amp;amp;&amp;amp;amp;STATIN,UNIT=SYSDA,SPACE=(TRK,nn),&lt;br /&gt;
 //              DISP=(NEW,DELETE)&lt;br /&gt;
 //STATOUT   DD  DSN=*.STATIN,VOL=REF=*.STATIN,DISP=(OLD,PASS)&lt;br /&gt;
 //SYSOUT    DD  SYSOUT=A&lt;br /&gt;
 //CCAIN     DD  *&lt;br /&gt;
 ANALYZE&lt;br /&gt;
 REPORT&lt;br /&gt;
   .&lt;br /&gt;
   .  ---- &amp;lt;i&amp;gt;user options&amp;lt;/i&amp;gt;&lt;br /&gt;
   .&lt;br /&gt;
 /*&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===z/VSE JCL for AUDIT204===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The following considerations apply to z/VSE: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Under z/VSE, output is sent to SYSLST. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;CCAJRNL can be on tape or disk. If CCAJRNL is on tape, SYS004 must be assigned to a tape drive.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Running AUDIT204 might require two sorts:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;REPORT&amp;lt;/var&amp;gt; command requires a SORTIN and a SORTOUT data set.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;ANALYZE&amp;lt;/var&amp;gt; command requires a STATIN and a STATOUT data set. &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;SORTIN, SORTOUT, STATIN, and STATOUT are work files and must be on disk. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;SORTWK1 data set is required.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Statistics work (STATWK1) data set might be needed when using the &amp;lt;var&amp;gt;ANALYZE&amp;lt;/var&amp;gt; command, depending on the amount of data generated. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Sample z/VSE job stream===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The following sample job stream runs AUDIT204:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;// JOB AUDIT204&lt;br /&gt;
// DLBL M204LIB,&#039;M204.PROD.LIBRARY&#039;&lt;br /&gt;
// EXTENT SYS&amp;lt;i&amp;gt;nnn&amp;lt;/i&amp;gt;,...&lt;br /&gt;
// LIBDEF PHASE.SEARCH=M204LIB.V210&lt;br /&gt;
// DLBL CCAJRNL,&#039;CCAJRNL&#039; Note 1&lt;br /&gt;
// EXTENT SYS&amp;lt;i&amp;gt;nnn&amp;lt;/i&amp;gt;,...&lt;br /&gt;
// DLBL SORTIN,&#039;AUDIT204.SORTIN&#039;,0 Note 2&lt;br /&gt;
// EXTENT SYS&amp;lt;i&amp;gt;nnn&amp;lt;/i&amp;gt;,...&lt;br /&gt;
// DLBL SORTOUT,&#039;AUDIT204.SORTOUT&#039;,0 Note 2&lt;br /&gt;
// EXTENT SYS&amp;lt;i&amp;gt;nnn&amp;lt;/i&amp;gt;,...&lt;br /&gt;
// DLBL STATIN,&#039;AUDIT204.STATIN&#039;,0 Note 3&lt;br /&gt;
// EXTENT SYS&amp;lt;i&amp;gt;nnn&amp;lt;/i&amp;gt;,...&lt;br /&gt;
// DLBL STATOUT,&#039;AUDIT204.STATOUT&#039;,0 Note 3&lt;br /&gt;
// EXTENT SYS&amp;lt;i&amp;gt;nnn&amp;lt;/i&amp;gt;,...&lt;br /&gt;
// DLBL SORTWK1,&#039;SORTWK1&#039;,0 Note 4&lt;br /&gt;
// EXTENT SYS&amp;lt;i&amp;gt;nnn&amp;lt;/i&amp;gt;,...&lt;br /&gt;
 &lt;br /&gt;
// EXEC AUDIT204,SIZE=(AUTO,&amp;lt;i&amp;gt;xx&amp;lt;/i&amp;gt;K) Note 5&lt;br /&gt;
INCLUDE IFYLSQRT&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;* &amp;lt;i&amp;gt;Insert AUDIT204 CCAIN commands here&amp;lt;/i&amp;gt;&lt;br /&gt;
FORMAT&lt;br /&gt;
REPORT ACCOUNT&lt;br /&gt;
REPORT FILE&lt;br /&gt;
REPORT ACCOUNT ACCOUNTS MAGGIE MARY DAVE&lt;br /&gt;
/*&lt;br /&gt;
/&amp;amp;amp;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Usage notes====&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;If you use tape instead of the DLBL and EXTENT for CCAJRNL, use the following JCL:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;// TLBL CCAJRNL&lt;br /&gt;
// ASSGN SYS004,X&#039;&amp;lt;i&amp;gt;cuu&amp;lt;/i&amp;gt;&#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;DLBL and EXTENT are necessary if you use either the &amp;lt;var&amp;gt;REPORT&amp;lt;/var&amp;gt; or the &amp;lt;var&amp;gt;ANALYZE&amp;lt;/var&amp;gt; command.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;You must specify a SIZE parameter in the EXEC statement with AUTO and you need some additional storage for the sort program. To determine the amount of additional storage needed for the sort program, refer to IBM&#039;s &amp;lt;var class=&amp;quot;book&amp;quot;&amp;gt;SORT/MERGE Programmer&#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;
===(z/VM) CMS JCL for AUDIT204===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The CMS AUDIT204 utility program prints a &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; journal file and produces a statistical report from information in a journal file:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;If a statistics report is produced, a SORT utility that can be invoked dynamically must be available for use.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;AUDIT204 output is produced either as a printer spool file or in a CMS disk file. &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 following EXEC initiates AUDIT204:&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;AUDIT204 [&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;datasetname&amp;lt;/span&amp;gt;] [&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;filename filetype&amp;lt;/span&amp;gt;] &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;filemode&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;datasetname&amp;lt;/var&amp;gt; specifies the name of the journal data set on a variable-format disk, with the qualifiers separated by blanks. If no data set name is specified, it is presumed that the name of the journal data set is &amp;lt;code&amp;gt;M204.JOURNAL&amp;lt;/code&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;filename&amp;lt;/var&amp;gt; and &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;filetype&amp;lt;/var&amp;gt;&lt;br /&gt;
specify the name and type of the journal file on a CMS-format, or a variable format for z/OS and z/VSE, disk.&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;filemode &amp;lt;/var&amp;gt; specifies the mode of the disk holding the journal file to be processed. The input to AUDIT204 contains the commands selected from those described earlier and is included in the AUDIT204 CCAIN. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Searching multiple tapes for journal and off load data===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When a journal or offload data set is on multiple tapes, you do not need to mount all of them for AUDIT204 processing. You can process a subset of the tapes, as long as you mount them in the order in which they were originally generated.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
For example, suppose that your CCAJRNL data set consists of five tapes labeled &amp;lt;code&amp;gt;TAPE01&amp;lt;/code&amp;gt; through &amp;lt;code&amp;gt;TAPE05&amp;lt;/code&amp;gt;. You are sure that the information you want to analyze begins on the third tape or later. In this case you can save processing time by specifying only &amp;lt;code&amp;gt;TAPE03&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;TAPE04&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;TAPE05&amp;lt;/code&amp;gt; in the DD statement for the CCAJRNL data set.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt; &amp;lt;!-- end of div for toc limit --&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
[[Category:System management]]&lt;br /&gt;
[[Category:Auditing and problem determination]]&lt;br /&gt;
===AUDIT204 Return Codes===&lt;br /&gt;
&amp;lt;p&amp;gt;The following return codes may be issued by AUDIT204 upon completion.&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;Return Code&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;Normal 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&amp;gt;8&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;I/O error reading CCAJRNL or CCAJLOG&lt;br /&gt;
&amp;lt;p&amp;gt;Out of sequence journal block&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Zero length journal block or journal record&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;12&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Invalid parameter - various errors with CCAIN input parameters&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;16&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;CCAAUDIT open failed&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;20&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;CCAJRNL or CCAJLOG open failed&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;24&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;SORTIN open failed&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;28&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;STATIN open failed&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;32&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;CCAIN open failed&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;36&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Operating system does not support Z-architecture&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;/div&gt;</summary>
		<author><name>JDamon</name></author>
	</entry>
	<entry>
		<id>https://m204wiki.rocketsoftware.com/index.php?title=System_requirements_for_Application_Subsystems&amp;diff=120287</id>
		<title>System requirements for Application Subsystems</title>
		<link rel="alternate" type="text/html" href="https://m204wiki.rocketsoftware.com/index.php?title=System_requirements_for_Application_Subsystems&amp;diff=120287"/>
		<updated>2024-09-27T16:32:06Z</updated>

		<summary type="html">&lt;p&gt;JDamon: /* SUBSYSMGMT privileges screen */&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 of CCASYS==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
CCASYS is a system file used in conjunction with [[:Category:Dictionary/204|Dictionary/204]] and the [[Subsystem Management facility]] (SUBSYSMGMT). It contains the procedure names, file names, and parameters that create a [[Application Subsystem development|subsystem]] definition. When a subsystem is executed, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; opens and reads the CCASYS file.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The CCASYS file must be open to use the Subsystem Management facility and to run any user-written subsystem.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Statistics associated with CCASYS processing are written to the CCAAUDIT system file and can be viewed from a terminal or printed to an audit trail.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
This page describes CCASYS and explains how to create and maintain the file.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Maintaining CCASYS==&lt;br /&gt;
&lt;br /&gt;
===Creating CCASYS===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can create CCASYS online as a separate file or as a part of the initial installation of Dictionary and the full-screen interface. Regardless of the approach used to create CCASYS, it must be available before Dictionary and the interface are installed. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
A user with system manager privileges can create CCASYS online (see the &amp;lt;var&amp;gt;[[CREATE command: File|CREATE]]&amp;lt;/var&amp;gt; command).&lt;br /&gt;
The formula for calculating the size of CCASYS is given in the &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; installation guides.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
To create CCASYS during Dictionary installation, follow the instructions given in [[Dictionary/204 installation guide]].&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Reorganizing CCASYS===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
For instructions on reorganizing CCASYS and Dictionary files, refer to [[Dictionary/204 operation and file maintenance]].&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Using CCASYS==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You must be a system manager to run the Subsystem Management facility, as well as having privileges defined in the DICTIONARY to use SUBSYSMGMT. (Refer to the DICTADMIN subsystem to add privileges.)&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
To use the Subsystem Management facility and to run any user-written subsystem, the CCASYS file must be open. &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; opens CCASYS during initialization when the &amp;lt;var&amp;gt;[[SYSOPT parameter|SYSOPT]]&amp;lt;/var&amp;gt; parameter setting includes the X&#039;01&#039; bit (see [[#JCL requirements|JCL requirements]] on this page).&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
CCASYS is opened and locked in share mode. During the process of defining a subsystem, the lock is changed to exclusive mode for the duration of the session. If more than one copy of &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; is using the same CCASYS file, the Subsystem Management facility cannot be entered. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Subsystems available at initialization===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If the CCASYS file is marked as full (the &amp;lt;var&amp;gt;[[FISTAT parameter|FISTAT]]&amp;lt;/var&amp;gt; X&#039;08&#039; bit) during Online initialization, subsystems are now available and the following message is no longer issued:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;M204.1457 UNABLE TO SCAN LIST OF SUBSYSTEM NAMES&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===JCL requirements===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
JCL requirements for CCASYS are:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Set the &amp;lt;var&amp;gt;SYSOPT&amp;lt;/var&amp;gt; X&#039;01&#039; bit on in the JCL PARM field to enable CCASYS.&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The &amp;lt;var&amp;gt;SYSOPT&amp;lt;/var&amp;gt; X&#039;01&#039; bit automatically increments NFILES, NDCBS, and NDIR to allow use of the subsystems.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If the &amp;lt;var&amp;gt;SYSOPT&amp;lt;/var&amp;gt; parameter is set to an even value, CCASYS is not opened by &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; and subsystems are unavailable.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;You must set the &amp;lt;var&amp;gt;SYSOPT&amp;lt;/var&amp;gt; X&#039;01&#039; bit on all nodes that the client subsystem accesses. (For Parallel Query Option/204)&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Specify a CCASYS DD statement for running the subsystem. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===File security===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can add additional file security to the security provided by user privileges in the CCASYS file by:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Resetting the &amp;lt;var&amp;gt;[[OPENCTL parameter|OPENCTL]]&amp;lt;/var&amp;gt; parameter&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Entering passwords for the CCASYS file entries in the password table (CCASTAT). See [[Storing security information (CCASTAT)#Using CCASTAT|Using CCASTAT]].&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Maintaining CCASYS===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Periodically back up CCASYS. Like other &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; files, CCASYS can participate in recovery and transaction back out processing. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
As necessary, include [[File reorganization and table compaction|reorganizations]] in the recovery scheme, such as increasing both Table A and Table C and, sometimes, to recover a file if it is not participating in other recovery options.&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Set up backup and restore jobs to handle all files at once. If need be, you can set up a separate backup job for CCASYS to run with the files. See the Rocket &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; installation guide for your operating system.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Recovering CCASYS===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If CCASYS is used in a run, you can recover it with a &amp;lt;var&amp;gt;[[RESTART command|RESTART]]&amp;lt;/var&amp;gt; command without resetting the &amp;lt;var&amp;gt;SYSOPT&amp;lt;/var&amp;gt; parameter.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Synchronize recovery of CCASYS and Dictionary files. Dictionary subsystems and the Subsystem Management facility must be stopped to perform file maintenance.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
==Activating the APSY Precompiled Procedures in Storage feature==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
z/OS sites can keep precompiled procedures in storage. By removing precompiled procedures from the disk buffer pool, the buffer pool pages are available for &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; files or non-APSY CCATEMP pages. This can reduce disk I/O for both CCATEMP and other &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; files. The &amp;lt;var&amp;gt;[[APSYPAGE parameter|APSYPAGE]]&amp;lt;/var&amp;gt; parameter allows APSY saved compilations to be loaded without having the pages that the compilations are saved on move through the disk buffer pool. This represents a reduced load on page flushing and the HASH LOCK and reduced CPU usage.&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; As of Model&amp;amp;nbsp;204 7.5, it is recommended for performance reasons that customers who have been using the &amp;lt;var&amp;gt;APSYPAGE&amp;lt;/var&amp;gt; parameter &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;disable the APSYPAGE feature&amp;lt;/var&amp;gt; by setting &amp;lt;var&amp;gt;APSYPAGE&amp;lt;/var&amp;gt; to 0. Instead of &amp;lt;var&amp;gt;APSYPAGE&amp;lt;/var&amp;gt;, use the &amp;lt;var&amp;gt;RESPAGE&amp;lt;/var&amp;gt; parameter for [[#APSY precompiled procedures in storage above the bar|storage above the bar]]. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
To activate the APSY Precompiled Procedures in Storage feature in a job, users must set the &amp;lt;var&amp;gt;APSYPAGE&amp;lt;/var&amp;gt; parameter in the User 0 CCAIN stream. The &amp;lt;var&amp;gt;APSYPAGE&amp;lt;/var&amp;gt; parameter specifies the number of virtual storage pages to allocate.&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; While &amp;lt;var&amp;gt;APSYPAGE&amp;lt;/var&amp;gt; looks very much like &amp;lt;var&amp;gt;[[TEMPPAGE parameter|TEMPPAGE]]&amp;lt;/var&amp;gt;, the units are somewhat different: &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;APSYPAGE&amp;lt;/var&amp;gt; refers to 4096-byte virtual storage pages&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;TEMPPAGE&amp;lt;/var&amp;gt; refers to 6184-byte &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; file pages&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
There are several reasons to use the &amp;lt;var&amp;gt;APSYPAGE&amp;lt;/var&amp;gt; parameter instead of, or in addition to, the &amp;lt;var&amp;gt;TEMPPAGE&amp;lt;/var&amp;gt; parameter:&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;APSYPAGE&amp;lt;/var&amp;gt; virtual storage pages do not have to be big enough to hold all of CCATEMP or even all saved compilations. The APSY Precompiled Procedures In Storage feature uses an LRU algorithm to ensure that frequently loaded APSY procedures remain in storage, while infrequently loaded procedures tend to be loaded from CCATEMP. So, if there is not sufficient real storage to back all of CCATEMP, you might set &amp;lt;var&amp;gt;APSYPAGE&amp;lt;/var&amp;gt; to save frequently loaded APSY compilations in real storage. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;The path length for retrieving a page out of storage is significantly lower than for retrieving one out of the disk buffer pool, especially in an MP/204 environment.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;When &amp;lt;var&amp;gt;APSYPAGE&amp;lt;/var&amp;gt; is set, the large &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; server tables are (hardware) page-aligned as are the saved compilations. This makes it possible to use the hardware MVPG (MoVe PaGe) facility to move pages into a server during an APSY load. On some processors, specialized hardware makes the facility significantly faster than byte-oriented data movement.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Storage improvements for APSY subsystem saved precompilation===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If not otherwise set, &amp;lt;var&amp;gt;[[DSPOPT parameter|DSPOPT]]&amp;lt;/var&amp;gt; defaults to X&#039;00&#039;. When a saved compilation page is moved to the &amp;lt;var&amp;gt;APSYPAGE&amp;lt;/var&amp;gt; area, it is no longer also kept in CCATEMP, which eliminates duplicate storage. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
This is particularly useful when you keep CCATEMP in memory, using the &amp;lt;var&amp;gt;TEMPPAGE&amp;lt;/var&amp;gt; parameter. This reduces in-memory CCATEMP storage requirements by approximately (&amp;lt;code&amp;gt;N/1.50&amp;lt;/code&amp;gt;), where &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; is the number of 4K-byte pages of &amp;lt;var&amp;gt;APSYPAGE&amp;lt;/var&amp;gt; that are used. In memory CCATEMP size is defined by the &amp;lt;var&amp;gt;TEMPPAGE&amp;lt;/var&amp;gt; parameter.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Setting the &amp;lt;var&amp;gt;DSPOPT&amp;lt;/var&amp;gt; X&#039;80&#039; bit and setting &amp;lt;var&amp;gt;TEMPPAGE&amp;lt;/var&amp;gt; greater than zero causes saved compilations to be saved in both CCATEMP and &amp;lt;var&amp;gt;APSYPAGE&amp;lt;/var&amp;gt;. Although this is wasteful of storage, it does not cause problems. If you set both parameters, you may see a higher use of CCATEMP in storage.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Setting &amp;lt;var&amp;gt;APSYPAGE&amp;lt;/var&amp;gt; greater than zero causes APSY subsystem precompiled pages to be saved in storage. If &amp;lt;var&amp;gt;TEMPPAGE&amp;lt;/var&amp;gt; is also set to 0, your CCATEMP is kept on disk and all saved compilations are stored in both locations. In-memory APSYPAGE storage can still be reduced if &amp;lt;var&amp;gt;DSPOPT&amp;lt;/var&amp;gt; is set to include the X&#039;80&#039; bit. With both those settings, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; employs the least recently used (LRU) algorithm to keep the more heavily used saved compilations in memory while the less recently used saved compilations migrate to disk.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Storage requirements===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The CCASERVR, CCATEMP, and APSY Precompiled Procedures in Storage features may cause operating system paging. Performance degradation is likely, if real storage frames are insufficient, or expanded storage frames in hiperspaces are used to hold the data saved in this storage. The &amp;lt;var&amp;gt;[[MONITOR DATASPACE command|MONITOR DATASPACE]]&amp;lt;/var&amp;gt; command can provide some information about the storage usage of these features. &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Setting the DSPOPT parameter===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If the APSY precompiled procedures in storage feature is used, or CCASERVR In Storage is used with page-oriented data movement (&amp;lt;var&amp;gt;[[DSPOPT parameter|DSPOPT]]&amp;lt;/var&amp;gt; X&#039;01&#039; set), then certain large server tables and servers themselves are page-aligned. This might require up to five extra hardware pages of real and virtual storage per server, although more typically it requires about three extra pages or 12K bytes per server. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If &amp;lt;var&amp;gt;[[NSERVS parameter|NSERVS]]&amp;lt;/var&amp;gt; is set to 40 and &amp;lt;var&amp;gt;APSYPAGE&amp;lt;/var&amp;gt; is set to a nonzero value, or CCASERVR is kept in storage with &amp;lt;var&amp;gt;DSPOPT&amp;lt;/var&amp;gt; X&#039;01&#039; set, enough real storage frames should be available to hold up to an extra 200 pages or 800K of server data. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The setting of the &amp;lt;var&amp;gt;DSPOPT&amp;lt;/var&amp;gt; parameter depends on your installation: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;If your site has enough expanded storage, you might use it for CCASERVR in Storage and APSY Precompiled Procedures in Storage in a cache hiperspace (&amp;lt;code&amp;gt;DSPOPT=X&#039;43&#039;&amp;lt;/code&amp;gt;). &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;If this decision causes a large number of CCATEMP reads because z/OS steals a lot of pages from the cache hyperspace, then use &amp;lt;code&amp;gt;DSPOPT=X&#039;23&#039;&amp;lt;/code&amp;gt; (no cache hyperspace). &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;If there is an excessive paging, eliminate one or both In Storage features. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;If your installation is z/OS, 64-bit real-storage, do not use any hyperspaces options, but use dataspaces instead. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Users with limited resources should try and test for what feature is the most effective.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
In addition, enough real storage should be available to hold the APSY precompiled procedures and/or CCASERVR data in real or expanded storage.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===APSY load statistics===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
There are three system statistics associated with APSY loads. These statistics are intended to: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Assist in the proper setting of the &amp;lt;var&amp;gt;APSYPAGE&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;RESLTHR&amp;lt;/var&amp;gt; parameters.&amp;lt;/li&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Determine the ratio of requests using precompiled and non-precompiled requests, the percentage of requests which are precompiled being the ratio of APSYLD to REQ. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The APSY load statistics are:&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;Statistic &amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Tracks the number of APSY loads...&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;APSYLD &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Including internal CCASYS procedures that are run as part of APSY 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;APSYLDD &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;From a dataspace. &lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
This statistic is zero unless the APSYPAGE parameter is set. This parameter can be compared with APSYLD and APSYLDT to determine the percentage of eligible APSY loads that are being performed from a dataspace.&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;&lt;br /&gt;
&amp;lt;td&amp;gt;APSYLDT &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;That are tiny.&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
All APSY loads, even those done from dataspaces, read a certain amount of control information from CCATEMP. Immediately following this control information is data that is loaded into NTBL, QTBL, STBL, and VTBL. If this table data does not extend to an extra CCATEMP page beyond the control information, the APSY load is counted as a tiny load. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
This statistic is maintained because tiny APSY loads are not worth saving in dataspaces, so it must be considered when comparing APSYLDD with APSYLD in determining which percentage of pre-compiled procedures are being loaded from dataspaces.&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;
===APSY precompiled procedures in storage above the bar===&lt;br /&gt;
You can store APSY precompiled procedures above the bar by using the &amp;lt;var&amp;gt;[[RESPAGE parameter|RESPAGE]]&amp;lt;/var&amp;gt; parameter to specify a number of 4K operating system pages. See [[Defining_the_runtime_environment_(CCAIN)#ATB_storage_for_APSY_precompiled_procedures|ATB storage for APSY precompiled procedures]] for details.&lt;br /&gt;
&lt;br /&gt;
==Parallel Query Option/204 and scattered subsystems==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Whenever you log in to a service subsystem, you must reset the &amp;lt;var&amp;gt;[[LGTBL parameter|LGTBL]]&amp;lt;/var&amp;gt; parameter on the service thread to at least 288. This sets the size of the global variable table (GTBL). GTBL contains name/value strings for global variables and is used by procedures that are included by APSY to support subsystem processing. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The subsystem designer will have to place the &amp;lt;var&amp;gt;UTABLE&amp;lt;/var&amp;gt; command into the LOGIN procedure, if &amp;lt;var&amp;gt;LGTBL&amp;lt;/var&amp;gt; is insufficient before entering the subsystem.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Overview of the Subsystem Management facility==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The Subsystem Management facility (SUBSYSMGMT) is a full-screen &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; Dictionary interface. It is used as a tool to define user-written applications that run under the Application Subsystem facility (APSY). &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Subsystem characteristics and components are defined by means of a series of screens and stored in the CCASYS file. Data in the CCASYS file is used by the application subsystem to control the processing required by the subsystem. &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; Dictionary entries are maintained for the operational parameters, procedure specifications, and subsystem files. The Subsystem Management facility makes SOUL applications easier to use, easier to maintain, and more efficient.              &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The following sections provide an overview of subsystem processing and explains how to use the SUBSYSMGMT interface to define a subsystem, establish user privileges, and migrate subsystem definitions from one &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; environment to another.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
For more information on subsystems, requirements, and options, refer to: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[[Dictionary/204 installation guide]] and [[Dictionary/204 operation and file maintenance]], which discuss the installation and preparation of CCASYS, D204SYS, and Dictionary files&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;[[Dictionary/204 entity type definitions#SUBSYSTEM|SUBSYSTEM]], which describes the dictionary entries relating to subsystems&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;[[PQO: Overview of Parallel Query Option/204]], which describes 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&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;[[Application Subsystem development]], which gives detailed instructions for designing, developing, and debugging a subsystem&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Components of a subsystem==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
A subsystem is an application consisting of a collection of procedures, files, and assigned characteristics that are defined as a subsystem to &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; through the &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; Dictionary interface, SUBSYSMGMT.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The collection of procedures that make up a subsystem perform system startup, login processing, main processing, disconnect processing, and error-handling tasks. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Control is passed from procedure to procedure by setting a defined communications global variable in each procedure. The communications global variable contains the name of the next procedure to be executed. Detailed information about subsystem design and procedure development is given in [[Application Subsystem development]].&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Assigned characteristics of a subsystem include security and system operation options, such as locking files and groups for subsystem use, automatic login and logout, automatic COMMIT for outstanding updates, message displays, and the response of the subsystem when files are unavailable.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The members of an APSY subsystem are files and permanent groups. With &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;PQO&amp;lt;/var&amp;gt;, members can be either automatic or manual:   &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;An automatic member is a subsystem group or file that is opened automatically when the subsystem is started or when a user enters the subsystem. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;A manual member is a group or file that must be opened explicitly by the &amp;lt;var&amp;gt;OPEN&amp;lt;/var&amp;gt; or &amp;lt;var&amp;gt;OPENC&amp;lt;/var&amp;gt; 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;
Members can also be either mandatory or optional:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;A mandatory member must be open in order to access a subsystem. Mandatory members cannot be manual.   &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;An optional member is not required for subsystem access (start and login processing can succeed without it).   &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
At any given time, a member can be open or closed to a subsystem or to a user within a subsystem. The following sections explain the conditions under which the different kinds of members are accessible to APSY subsystems and their users.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
==File and group availability==&lt;br /&gt;
&lt;br /&gt;
===Member availability to APSY subsystems===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Automatic members of APSY subsystems are always opened by the &amp;lt;var&amp;gt;START SUBSYSTEM&amp;lt;/var&amp;gt; command or by SUBSYSTEM LOGIN. At the end of &amp;lt;var&amp;gt;START&amp;lt;/var&amp;gt; processing, each automatic member is open unless either the &amp;lt;var&amp;gt;START&amp;lt;/var&amp;gt; or &amp;lt;var&amp;gt;OPEN&amp;lt;/var&amp;gt; failed. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Manual members of APSY subsystems are in the closed state at the completion of &amp;lt;var&amp;gt;START SUBSYSTEM&amp;lt;/var&amp;gt; processing and must be explicitly opened by the user. Manual members become open to the subsystem if an OPEN operation succeeds. If &amp;lt;var&amp;gt;OPEN&amp;lt;/var&amp;gt; fails due to node unavailability or for user-specific reasons (for example, if the user&#039;s line goes down), the member remains closed to the subsystem.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;If a node becomes unavailable to a subsystem, all automatic subsystem members and all open manual subsystem members residing on the unavailable node are marked disabled.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;If a &amp;lt;var&amp;gt;STOP FILE&amp;lt;/var&amp;gt; (or &amp;lt;var&amp;gt;STOP GROUP&amp;lt;/var&amp;gt;) command is issued for a manual member on the client subsystem&#039;s node, the member is closed to the client subsystem when the last user closes it. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;If the member is located on the service subsystem node, the file is closed to the service subsystem when either the &amp;lt;var&amp;gt;STOP&amp;lt;/var&amp;gt; is complete or the last user closes the file.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Member availability to subsystem users===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When a user enters a subsystem, automatic subsystem members are opened.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If a user &amp;lt;var&amp;gt;LOGIN&amp;lt;/var&amp;gt; or &amp;lt;var&amp;gt;OPEN&amp;lt;/var&amp;gt; operation fails for an optional member, the member is left closed for the user but remains open to the subsystem. If a mandatory member cannot be opened, the user is denied access to the subsystem.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If a user &amp;lt;var&amp;gt;LOGIN&amp;lt;/var&amp;gt; or &amp;lt;var&amp;gt;OPEN&amp;lt;/var&amp;gt; operation fails for an already open member, the member is left disabled for the user, but remains open to the subsystem. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If an automatic mandatory member is closed to the subsystem, new users are not allowed to enter the subsystem.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Manual members of APSY subsystems are closed for a user within a subsystem until the user issues an &amp;lt;var&amp;gt;OPEN&amp;lt;/var&amp;gt; command or statement. In this case, it does not matter whether the member is open or closed to the subsystem.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If compilation and/or loading of a request fails due to a communications failure, previously opened members on the failing node become disabled to the user. A user can close optional members at any time by issuing the &amp;lt;var&amp;gt;CLOSE&amp;lt;/var&amp;gt; command.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Enabling a disabled subsystem file===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If a file is marked as disabled to the subsystem, you can use the &amp;lt;var&amp;gt;ENABLE SUBSYSTEM FILE&amp;lt;/var&amp;gt; command to make the file available again. If necessary, correct any communications problem. Then enter this command:&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;ENABLE SUBSYSTEM &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;subsysname&amp;lt;/span&amp;gt; [FILE | GROUP] &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;name&amp;lt;/span&amp;gt; AT &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;location&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
Where:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;subsysname &amp;lt;/var&amp;gt;is the name of the client subsystem.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;name&amp;lt;/var&amp;gt; specifies the file or group that supports &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;subsysname&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;location&amp;lt;/var&amp;gt; is the value of the client CCAIN LOCATION parameter (which is also the value of the CLNT field in the &amp;lt;var&amp;gt;[[LOGWHO command|LOGWHO]]&amp;lt;/var&amp;gt; command output).&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 must specify the location; you cannot include local files in an &amp;lt;var&amp;gt;ENABLE SUBSYSTEM&amp;lt;/var&amp;gt; command.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Disabling a subsystem file===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can disable a subsystem file to keep the file itself, or the subsystem to which it belongs, inaccessible for a short period of time, without shutting down the subsystem by using the &amp;lt;var&amp;gt;DISABLE SUBSYSTEM&amp;lt;/var&amp;gt; command.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
To disable a subsystem file, use this command:&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;DISABLE &amp;lt;var&amp;gt;SUBSYS&amp;lt;/var&amp;gt;TEM &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;subsysname&amp;lt;/span&amp;gt; [FILE | GROUP] &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;name&amp;lt;/span&amp;gt; AT &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;location&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
Where:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;subsysname &amp;lt;/var&amp;gt;is the name of the client subsystem. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;name&amp;lt;/var&amp;gt; specifies the file or group that supports &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;subsysname&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;location&amp;lt;/var&amp;gt; is the value of the client CCAIN LOCATION parameter (which is also the value of the CLNT field in the &amp;lt;var&amp;gt;LOGWHO&amp;lt;/var&amp;gt; command output).&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 consequence of disabling a subsystem file depends on whether the file is an optional or mandatory group member: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;If you disable a mandatory file, you effectively disable the subsystem, because users attempting to access the disabled file cannot access the subsystem. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;If you disable an optional file, users can log in to the subsystem, but cannot access the disabled file.   &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
==Application subsystem processing==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Subsystem processing includes startup, login processing, locating, compiling and/or loading procedures (main or driver processing), disconnect processing, and error processing. User-written procedures are required for each processing step.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
For startup and processing considerations specific to scattered subsystems, see [[PQO: Scattered APSY subsystems#Subsystem command processing|PQO subsystem command processing]]. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Subsystem startup===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
To start the subsystem, either issue the &amp;lt;var&amp;gt;[[START command: Starting an application subsystem|START]]&amp;lt;/var&amp;gt; command. Or, optionally, the first user starts the subsystem automatically, if the Auto Start option is in effect. During subsystem startup, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; performs the following tasks:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Finds the subsystem definition stored in CCASYS.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Builds an in-core subsystem definition control block.&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
For z/OS operating systems, application subsystem control blocks reside above the 16-megabyte line.&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Opens all required files and groups.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Scans the procedure file for locked members that have precompiled procedure prefixes (see [[#Procedure Specifications screen|Procedure Specifications screen]]).&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Enters an entry for each precompiled procedure in the in-core procedure dictionary.&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 maximum size of the in-core procedure dictionary is 16 megabytes.&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Adds the subsystem name to the list of active subsystems, if no error occurs.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Performs a user-written initialization procedure (optional).&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Closes all associated files and groups, unless the Auto Start option is in effect. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Login processing===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Each time the subsystem is invoked, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; automatically performs the following steps:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Searches CCASYS for the user&#039;s class definition that assigns user privileges.&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The subsystem invocation is rejected if privileges consistent with the subsystem invoked are not found.&amp;lt;/p&amp;gt; &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Logs the user in to &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; with the subsystem name as the user, account, and record security ID, if the automatic login option (see [[#Operational Parameters screen|Operational Parameters screen]]) is set in the subsystem definition.&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If the automatic login option is not set, 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; ID is retained.&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Opens required subsystem files and groups with the found privileges.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Executes the commands and requests, as specified by the login procedure programmed by the user. The login procedure might consist of:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Storing current server table sizes in the global variable table for later reference&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Issuing UTABLE commands to set compiler table sizes for subsystem use&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Setting the communications global variable to the name of the procedure that displays the initial menu &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;Begins main processing as long as the login procedure specifies the next procedure to include in the communications global variable. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Main processing===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Main processing consists of locating subsystem eligible procedures, compiling procedures (if necessary), and loading procedures until an exit value is encountered. You can have as many main processing procedures as necessary. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Procedure names are stored in the in-core procedure dictionary that is built during system startup. Procedures are retrieved by examining the communications global variable for the name of the procedure and then locating the procedure name in the in-core dictionary.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If the procedure name is not found, the subsystem error procedure is executed. If the procedure is not found and no error procedure is specified in the subsystem definition, the user is disconnected from the subsystem.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If the procedure name is found, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; checks to see if the procedure has been precompiled:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;If the procedure is not a precompilable procedure, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; includes it for compilation and evaluation. Compilation and evaluation are reported in the audit trail under the CMPL and EVAL since-last statistics.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;If the procedure is a precompilable procedure, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; checks to see if the procedure was previously compiled with the set of privileges defined for the user&#039;s subsystem class.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;If the procedure is precompiled for the user&#039;s privilege set, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; loads the contents of the compiler tables from CCATEMP and evaluates the request. Loading and evaluation are reported in the audit trail as LOAD and EVAL since-last statistics.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;If the procedure is not precompiled, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; includes the procedure for compilation and evaluation. Contents of compiler tables are saved in CCATEMP, if the compile is successful and the tables are not already saved for another user class.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;If the procedure is already precompiled for some other privilege set, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; validates whether this user&#039;s privilege set is authorized to compile and validate. If successful, the request is loaded and then evaluated. If unsuccessful (for example, if the privilege set fails), the error procedure is executed.&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;
Main processing continues until the value of the communications global variable is set to the exit value specified in the subsystem definition. Once the exit value is set, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; proceeds to disconnect processing.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;warn&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Warning:&amp;lt;/b&amp;gt; Rocket advises that when using an &amp;lt;var&amp;gt;INCLUDE&amp;lt;/var&amp;gt; statement in a precompiled procedure that the included procedure is the same for all users. Unpredictable results may occur if the procedure is different when compiling for different [[SCLASS]]es.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Requirements for using temporary groups===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If a precompiled procedure includes an &amp;lt;var&amp;gt;OPEN&amp;lt;/var&amp;gt; of a temporary group, an attempt to load that procedure fails (with the &amp;lt;code&amp;gt;GRP NOT OPEN&amp;lt;/code&amp;gt; error) if the procedure contains an unreferenced list in the context of that group. An unreferenced list is a list that is declared but not referred to and, therefore, its declaration is not evaluated. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
To avoid an error in this situation, make sure of the following: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Any temporary group in this situation must be open at the time of the load.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Such a temporary group must be a TBO group if the procedure accesses a TBO file for update.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Disconnect processing===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Disconnect processing is invoked when one of the following conditions occurs: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Communications global variable is set to the exit value.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Error occurs with no subsystem error procedure defined.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;User is restarted by &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt;.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Logout or disconnect commands are issued from a subsystem procedure. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
All open subsystem files and groups are closed for the user during disconnect processing. If the subsystem definition includes the automatic logout option (&amp;lt;b&amp;gt;Log User out of M204&amp;lt;/b&amp;gt; on the Operational Parameters screen), the user is logged out of &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt;.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If the subsystem definition includes the automatic login option (&amp;lt;b&amp;gt;Log User in to M204&amp;lt;/b&amp;gt;) but not the automatic logout option (&amp;lt;b&amp;gt;Log User out of M204&amp;lt;/b&amp;gt;), the user is exited out of the subsystem, logged in again under the original &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; ID (if previously logged in), and returned to &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; command level.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Error processing===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Error processing, an optional procedure, is invoked when an error occurs that cannot be handled by the procedure executing at the time. &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Recoverable errors====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
A subsystem can recover from most errors when an error procedure is used. Recoverable errors include:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Compilation errors&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Record locking or table-full errors&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Attention interrupts and *CANCEL if no ON ATTENTION unit is specified in the application&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
An error procedure must test for different error conditions. The resulting value stored in the error global variable helps the application programmer determine the type of error that occurred.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Considerations for the communications global variable====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The communications global variable is ignored and disconnect processing completed when one of the following conditions occurs:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Error is a soft restart, a hard restart, or a phone hang-up condition.&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If you attempt to set the communications global variable to the name of another procedure, the procedure is not executed.&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;No error procedure is specified in the subsystem definition. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Subsystem operating requirements==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Meet the following requirements to define and execute a subsystem:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Install CCASYS, the &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; Dictionary, and the subsystem interface SUBSYSMGMT&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Allocate sufficient space for subsystem use in the resource locking table, server tables, CCATEMP, and spare core (SPCORE) &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Required files===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Dictionary/204, with the files shown in the table below, must be installed to define a subsystem; see the [[Dictionary/204 installation guide]]. Dictionary entries pertaining to subsystems are for reference purposes only. The subsystem is executed by using the data stored in CCASYS.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;caption&amp;gt;Dictionary/204 files required for subsystem management&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;File&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;CCASYS&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Subsystem definition&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;D204SYS&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Migrating definitions&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;DATALINK&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Dictionary 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;M204PROC&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Procedure 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;M204TEMP&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Internal work 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;METADATA&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Dictionary file&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;
===Resource locking table space===&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; locks in share mode on subsystem procedure names or permanent group names. Locking ensures that the procedures or group definitions do not change while the subsystem is running and prevents any user from issuing the &amp;lt;var&amp;gt;PROCEDURE&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;DELETE PROCEDURE&amp;lt;/var&amp;gt;, or &amp;lt;var&amp;gt;RENAME PROCEDURE&amp;lt;/var&amp;gt; commands. Procedures cannot be updated with the editor while the subsystem is active. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Separate locks are not required if the subsystem definition specifies locked files during processing.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Additional space might be required in the resource-locking table for running a subsystem with groups defined or files unlocked. Use the following formula as a guide:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;Number of additional resource-locking entries =&lt;br /&gt;
Number of groups + number of procedures (if files are unlocked)&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
where additional resources include:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Seven additional entries for application subsystem procedures in CCASYS&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;One additional entry for each subsystem and permanent group&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;One additional entry for each subsystem procedure if LOCK FILE (or GROUP) options are chosen &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Minimum server table sizes===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Minimum server table lengths, exclusive of any application procedures, for all users invoking subsystems are:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;LGTBL = 288&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;LNTBL = 50&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;LQTBL = 120&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;LSTBL = 250&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;LVTBL = 256 &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
During application programming, you must determine actual table lengths for specific procedures. Make adjustments to table lengths in the login procedure to ensure successful execution.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===CCATEMP space===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
CCATEMP requires additional space to accommodate the compiler tables for precompiled procedures. The data stored in CCATEMP consists of a header section and the contents of GTBL, NTBL, QTBL, STBL, and VTBL.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Use the following calculation to determine the additional CCATEMP space required for one precompiled request:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;94 + (32 * VTBL HWM) + (12 * NTBL HWM) + (STBL HWM)&lt;br /&gt;
   + NFILES + NRMTFILE + (16 * QTBL HWM)&lt;br /&gt;
   + (ad hoc group FTBL space)&lt;br /&gt;
   + ((30 + (7 + NRMTLOCS)/8) * #groups)&lt;br /&gt;
   + (8 * (#fields referenced in group))&lt;br /&gt;
   + (the sum of the length of the names of all the fields referenced in the group)&lt;br /&gt;
   + #screens + #images&lt;br /&gt;
   + (unavailable-file space) + (XVAR space)&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;code&amp;gt;HWM&amp;lt;/code&amp;gt; refers to the highwater mark found in the audit trail&#039;s since-last compilation statistic for the indicated table.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;ad hoc group FTBL space&amp;lt;/code&amp;gt; depends on whether ad hoc scattered groups (PQO) are included. If no ad hoc groups are scattered, ad hoc group FTBL space is:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;62 * (#ad hoc groups)&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If some ad hoc groups are scattered, ad hoc group FTBL space is:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;(62 + (#open files in ad hoc groups)) * (#ad hoc groups)&lt;br /&gt;
&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;unavailable-file space&amp;lt;/code&amp;gt; is the following quantity, not knowable in advance, which you need to estimate (PQO only):&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;(4 + (#unavailable group files)) * (#groups with unavailable members)&lt;br /&gt;
&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;XVAR space&amp;lt;/code&amp;gt; is required for these SOUL request elements: found sets, lists, and &amp;lt;var&amp;gt;FOR&amp;lt;/var&amp;gt; statements with a &amp;lt;var&amp;gt;WHERE&amp;lt;/var&amp;gt; clause. The number of bytes per element depends on the file or group context, as follows: &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;Transaction context &amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Bytes required per element&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;Single file&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;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Ad hoc or permanent group&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;8 * (#files in group) &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&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;4 + (8 * (#files in 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;
&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 number of additional CCATEMP pages required is:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;The result of the above calculation / (PAGESZ - 40)&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===SPCORE size===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Control blocks are allocated from spare core for use by active subsystems. Use the following calculation to determine the number of bytes required for one subsystem. The calculation includes PQO remote file subsystem members:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;228 + NRMTFILE + NFILES + (40 * SCLASSes) + NRMTLOCS&lt;br /&gt;
    + (93 * filemembers)&lt;br /&gt;
    + ((36 + (7 + SCLASSes) / 8) * (procedures + 1))&lt;br /&gt;
    + 40 bytes for each stopped file or group&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&amp;gt;NRMTFILE&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;NRMTLOCS&amp;lt;/var&amp;gt; are CCAIN parameters that apply to Parallel Query Option/204.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;filemembers&amp;lt;/code&amp;gt; are the files that belong to the subsystem. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;SCLASSes&amp;lt;/code&amp;gt; is the number of subsystem user privilege classes.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;procedures&amp;lt;/code&amp;gt; is the number of precompiled procedures used by the subsystem.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;40 bytes for each stopped file or group&amp;lt;/code&amp;gt; is the number of bytes returned to spare core if the subsystem is stopped or the file or group is started.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
==Subsystem operating options==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Subsystem operating options consist of commands entered on the command line, the &amp;lt;var&amp;gt;[[AUTOSYS parameter|AUTOSYS]]&amp;lt;/var&amp;gt; parameter entered on user lines in CCAIN, and values entered on screens provided by the Application Subsystem. Options can be entered on the command line only if the subsystem is already started or if the subsystem is defined with the Auto Start option. A summary of the available options is given in the following table.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
More detailed information about the operating options follows the table.&lt;br /&gt;
Options entered through interface screens are discussed throughout this article.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;caption&amp;gt;Summary of subsystem operating 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;Option&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Method of entry&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;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;Auto Commit&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td nowrap&amp;gt;Operational Parm screen&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Controls automatic &amp;lt;var&amp;gt;COMMIT&amp;lt;/var&amp;gt;s at the &amp;lt;var&amp;gt;END&amp;lt;/var&amp;gt; of each procedure&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Auto Start&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Operational Parm screen&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Automatically starts the subsystem when the first user logs in&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Automatic Login (Log user in...) &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Operational Parm screen&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Logs the user in to the subsystem with an account value of the subsystem name&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Automatic Logout (Log user out...)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Operational Parm screen&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Controls user logout from &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;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;AUTOSYS&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;CCAIN user line&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Invokes the specified subsystem for individual users upon &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; login&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td colspan=&amp;quot;3&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Commands&amp;lt;/b&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;DEBUG SUBSYSTEM&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Command line&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Allows the user issuing the command to change subsystem procedures without stopping and restarting the subsystem&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td nowrap&amp;gt;DISABLE SUBSYSTEM FILE&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Command line&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Makes a file or subsystem temporarily inaccessible&amp;lt;/td&amp;gt;&lt;br /&gt;
&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 FILE &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Command line&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Makes a file available again after being disabled&amp;lt;/td&amp;gt;&lt;br /&gt;
&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&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Command line&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Allows a file to be opened and removes the stop flag (if any)&amp;lt;/td&amp;gt;&lt;br /&gt;
&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 SUBSYSTEM&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Command line&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Activates the subsystem, opens files, and performs subsystem startup&amp;lt;/td&amp;gt;&lt;br /&gt;
&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&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Command line&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Prevents opening a specified file or permanent group&amp;lt;/td&amp;gt;&lt;br /&gt;
&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 SUBSYSTEM&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Command line&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Stops the subsystem&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;TEST&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Command line&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Creates a single user test environment&amp;lt;/td&amp;gt;&lt;br /&gt;
&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/Group&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Command line&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Specifies the name and attributes of&lt;br /&gt;
files and groups used by the subsystem&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td colspan=&amp;quot;3&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Global variables&amp;lt;/b&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;Communication&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Procedure Spec screen&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Specifies the variable name of the next procedure to be executed&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Exit Value&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Procedure Spec screen&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Specifies the communication variable setting for exiting the subsystem&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Error Variable&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Procedure Spec screen&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Names the variable containing the error 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;Iterations&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Operational Parm screen&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Specifies the maximum number of times a procedure can execute consecutively&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Lock File/Groups&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Operational Parm screen&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Controls outside user access to subsystem files when the subsystem is active&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td colspan=&amp;quot;3&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Message display&amp;lt;/b&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;Disconnect&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Operational Parm screen&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Controls disconnect message display&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Informational&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Operational Parm screen&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Controls the display of informational 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&amp;gt;Error&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Operational Parm screen&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Controls error message display&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Numlk&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;File Use screen&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Specifies the number of files participating in procedure locking &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td colspan=&amp;quot;3&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Proc names&amp;lt;/b&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;Initialization&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Procedure Spec screen&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Names the first procedure used upon subsystem startup&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Login&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Procedure Spec screen&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Names the first procedure executed for each 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;Error&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Procedure Spec screen&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Names the procedure invoked when an error occurs&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 colspan=&amp;quot;3&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Proc prefixes&amp;lt;/b&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;Non-precompiled &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Procedure Spec screen&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Identifies the prefix used for procedures compiled each time they are 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;Precompiled&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Procedure Spec screen&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Identifies the prefix used for procedures that are saved in CCATEMP for reuse&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Procs&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;File Use screen&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Names the file or group containing the subsystem procedures &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td colspan=&amp;quot;3&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Security&amp;lt;/b&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;Account&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Operational Parm screen&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Specifies an account value that overrides the login account&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&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;Subsys Class screen&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Specifies an account associated with a specific user class (overrides the account specified on the Operational Parameters screen)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&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;User Matrix screen&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Changes an account in any subsystem user class&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Command Priv.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Subsys Class screen &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Specifies whether the class of users can issue the START, TEST, STOP, and DEBUG subsystem commands&amp;lt;/td&amp;gt;&lt;br /&gt;
&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 Priv.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Subsys Class screen &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Specifies values for procedure, file, and field-level security parameters&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Login Priv.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Subsys Class screen &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Overrides privileges on entry to the subsystem and privileges specified on the Operational Parameters screen&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Privileges&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Operational Parm screen&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Specifies user privileges independent of the &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; login privileges&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Record Security&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Subsys Class screen &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Overrides the record security ID held upon entry into the subsystem&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Start Login&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Operational Parm screen&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Controls login privileges while starting a subsystem&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Status&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Operational Parm screen&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Specifies the level of availability of the subsystem to users&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Sys Class&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Subsys Class screen&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Specifies the number and name of a subsystem user class that is assigned specific privileges&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Subsys Class&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Subsys Class Users screen&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Specifies subsystem class changes for individual users&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Subsys Class&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Userdef screen&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Identifies a group of subsystem users and specifies the command privilege level applicable to that 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;
===Subsystem commands===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The following list summarizes commands relating to a subsystem.&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;[[DEBUG command|DEBUG SUBSYSTEM]]&amp;lt;/var&amp;gt; allows login to a specified subsystem with the &amp;lt;var&amp;gt;DEBUG&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;STATS&amp;lt;/var&amp;gt; options of the &amp;lt;var&amp;gt;[[TEST command|TEST]]&amp;lt;/var&amp;gt; command. Individual programmer changes to subsystem procedures can be made without stopping and restarting the subsystem. Changes are limited to the programmer issuing the &amp;lt;var&amp;gt;DEBUG SUBSYSTEM&amp;lt;/var&amp;gt; command. More than one user can execute the &amp;lt;var&amp;gt;DEBUG&amp;lt;/var&amp;gt; command against the same subsystem at the same time.&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
&amp;lt;var&amp;gt;DEBUG SUBSYSTEM&amp;lt;/var&amp;gt; displays the value of the communications global variable and since-last statistics. Prompts are issued for changes to the variable.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
&amp;lt;var&amp;gt;DEBUG&amp;lt;/var&amp;gt; is limited to users with either &amp;lt;var&amp;gt;TEST&amp;lt;/var&amp;gt; or &amp;lt;var&amp;gt;DEBUG&amp;lt;/var&amp;gt; privileges. The &amp;lt;var&amp;gt;DEBUG&amp;lt;/var&amp;gt; privilege does not entitle use of the &amp;lt;var&amp;gt;TEST&amp;lt;/var&amp;gt; command.&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;[[DISABLE command|DISABLE SUBSYSTEM FILE]]&amp;lt;/var&amp;gt; makes a file or the subsystem to which it belongs inaccessible for a short period of time without shutting down the subsystem by using the &amp;lt;var&amp;gt;STOP SUBSYSTEM&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&amp;gt;[[ENABLE command|ENABLE SUBSYSTEM FILE]]&amp;lt;/var&amp;gt; makes a file marked as disabled to the subsystem available again.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;START FILE&amp;lt;/var&amp;gt; removes the &amp;lt;var&amp;gt;OPEN&amp;lt;/var&amp;gt; restriction set by the &amp;lt;var&amp;gt;STOP&amp;lt;/var&amp;gt; command at the system and subsystem levels.     &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;[[START command: Starting an application subsystem|START SUBSYSTEM]]&amp;lt;/var&amp;gt; activates the subsystem and makes it available for use. &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; opens all the files and performs subsystem startup. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;[[STOP command: Making a file or group unavailable|STOP FILE]]&amp;lt;/var&amp;gt; prevents the reopening of a specified file or permanent group. Files or groups open at the time &amp;lt;var&amp;gt;STOP FILE&amp;lt;/var&amp;gt; is issued are not affected until they are closed and an attempt is made to reopen them.&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When the stopped file is closed by all users, all precompiled code in CCATEMP that refers to the file is discarded and pages in the temporary file are reclaimed. &amp;lt;var&amp;gt;STOP FILE&amp;lt;/var&amp;gt; affects only one copy of &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt;. Another copy of &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; can process the file or group. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
&amp;lt;var&amp;gt;STOP FILE&amp;lt;/var&amp;gt; verifies the presence of the named file or group in any active subsystem. Files or groups not required by the subsystem become unavailable for future use.&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;[[STOP command: Stopping an application subsystem|STOP SUBSYSTEM]]&amp;lt;/var&amp;gt; stops the subsystem and makes it unavailable for use. Files and groups are closed. Groups and procedures are released when the subsystem is completely stopped. &lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If &amp;lt;var&amp;gt;STOP SUBSYSTEM&amp;lt;/var&amp;gt; is issued when there are active users, the system remains active until the last user disconnects (drain state).&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;TEST&amp;lt;/var&amp;gt; creates a single user test environment. The subsystem must be stopped to enter the TEST mode and the user must have &amp;lt;var&amp;gt;TEST&amp;lt;/var&amp;gt; privileges. &amp;lt;var&amp;gt;DEBUG&amp;lt;/var&amp;gt; privileges are not sufficient to execute the &amp;lt;var&amp;gt;TEST&amp;lt;/var&amp;gt; command. &lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
&amp;lt;var&amp;gt;TEST&amp;lt;/var&amp;gt; without the &amp;lt;var&amp;gt;DEBUG&amp;lt;/var&amp;gt; option simulates execution of the subsystem. &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;
===AUTOSYS parameter===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The &amp;lt;var&amp;gt;[[AUTOSYS parameter|AUTOSYS]]&amp;lt;/var&amp;gt; parameter, specified on user lines in CCAIN, invokes a subsystem for individual users upon login to &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt;. The same subsystem is generated for each subsequent user line until a different subsystem name is specified, or &amp;lt;var&amp;gt;AUTOSYS&amp;lt;/var&amp;gt; is set to &amp;lt;code&amp;gt;C&#039; &#039;.&amp;lt;/code&amp;gt; &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
In the following example, all IUCV users enter the subsystem VMCFPROF whenever they log in. The AUTOSYS parameter is turned off for all other users.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;IODEV=41,POLLNO=1,NOTERM=50,AUTOSYS=C&#039;VMCFPROF&#039;&lt;br /&gt;
IODEV=41,POLLNO=2&lt;br /&gt;
IODEV=41,POLLNO=3&lt;br /&gt;
 .&lt;br /&gt;
 .&lt;br /&gt;
 .&lt;br /&gt;
IODEV=43,AUTOSYS=C&#039; &#039;&lt;br /&gt;
IODEV=43&lt;br /&gt;
IODEV=43&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
==Overview of the SUBSYSMGMT interface==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
SUBSYSMGMT is the full-screen interface used to define user-written applications that run under the Application Subsystem facility. In addition to accessing from command line the TN3270 interface described below on this page, SUBSYSMGMT is accessible both from the [[RKTools#mainmenu|RKTools main menu]] and from the [[RKWeb#Manage|RKWeb]] browser GUI as of RKTools version 7.7. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
To issue a command from the SUBSYSMGMT screens, press the assigned PF key or enter the command on the command line (&amp;lt;code&amp;gt;===&amp;gt;&amp;lt;/code&amp;gt;). Abbreviations for commands are indicated by the uppercase portion of the command listed for PF keys. The following table describes common commands and PF keys for SUBSYSMGMT screens: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;caption&amp;gt;Commands common to SUBSYSMGMT screens&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;PF key&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;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;HELP&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;F1&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Displays online Help text for the screen.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;QUIT&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;F3&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Terminates processing without saving screen input. QUIT returns to the previous level.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;END&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;F12&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Saves input and returns to the previous level.&amp;lt;/td&amp;gt;&lt;br /&gt;
&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;F11&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Generally used to move to the next screen when adding, modifying, or browsing a subsystem. The command name depends upon the name of the screen. &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 messages are issued from all screens. Messages can be general and issued from any screen, or specific and issued from a particular screen. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===SUBSYSMGMT facility screen summary===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The following table summarizes the SUBSYSMGMT facility screens. The screens are described in detail in the sections that follow. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;caption&amp;gt;SUBSYSMGMT facility screens&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;Screen &amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;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 style=&amp;quot;border-right:none&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Primary screen&amp;lt;/b&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;border-left:none&amp;quot;&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;Activity&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Provides a menu from which to select subsystem definition activities&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;border-right:none&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Secondary screens&amp;lt;/b&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;border-left:none&amp;quot;&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;Command Privileges&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Changes the command privileges for a set of subsystems&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Operational Parameters&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Defines the subsystem operating parameters&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Procedure Specifications&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Defines subsystem procedure specifications&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Subsystem File Use&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Defines file names used by the subsystem&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Subsystem Classes&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Defines command and file privileges for each class of subsystem 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;User Definitions&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Defines the users of the subsystem when used in conjunction with the Subsystem Class User screen &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Subsystem Class Users&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Defines assignments of specific user accounts to specific user classes&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;User Matrix&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Changes the definition of a single account in a user class&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td nowrap&amp;gt;Subsystem Administration&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Defines user and administrative privileges&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Subsystem Trust&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;(PQO only) Views or manages trusted subsystem definitions&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 secondary screens===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The following considerations apply to all secondary screens:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Use secondary screens in any order.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Use PF keys to move from screen to screen.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;You must fill in all screens, except those for public and semi-public subsystems with only one class, to complete a subsystem definition.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Public and semi-public subsystems with only one class do not require the use of the User Definitions (Userdef) screen.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;The &amp;lt;b&amp;gt;END&amp;lt;/b&amp;gt; command (F12) stops and saves the definition when it is complete. If you use the &amp;lt;b&amp;gt;END&amp;lt;/b&amp;gt; command with an incomplete definition, you receive a warning message. Issuing a second &amp;lt;b&amp;gt;END&amp;lt;/b&amp;gt; command allows you to exit and you can complete the definition in another session. (Do not use an incompletely defined subsystem.) &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Sample screens and PQO===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
For screens that have changed since the previous release, the sample screens shown in the following sections represent definitions for a client subsystem in a PQO application. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
PQO-specific fields are explained briefly but their use is not described in detail. Not shown here is the Subsystem Trust screen, which is specific to PQO.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
For full explanations of client and server definitions in PQO applications, see [[PQO: Defining a PQO network]].&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==SUBSYSMGMT Activity screen==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The Activity screen is the primary SUBSYSMGMT screen. Use it to access all SUBSYSMGMT functions.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;caption&amp;quot; style=&amp;quot;width:575px&amp;quot;&amp;gt;Subsystem Activity screen&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;figure&amp;quot;&amp;gt;[[File:sm8-2Activity.gif|575px]] &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Commands and options===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The F2, F4, F5, F6, F7, or F9 keys are used with &amp;lt;b&amp;gt;Add&amp;lt;/b&amp;gt;, &amp;lt;b&amp;gt;Modify&amp;lt;/b&amp;gt;, or &amp;lt;b&amp;gt;Browse&amp;lt;/b&amp;gt; to specify the appropriate secondary screen. F10 invokes the PQO-specific Subsystem Trust screen. The &amp;lt;b&amp;gt;EXPortlist&amp;lt;/b&amp;gt; option (F11) is described below in the [[#Exportlist|Exportlist]] section.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Overview of activities===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The following options are initiated from the Activity screen and completed through the selected secondary screens:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;Add&amp;lt;/b&amp;gt; a new subsystem definition&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;Modify&amp;lt;/b&amp;gt; an existing subsystem definition&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;Browse&amp;lt;/b&amp;gt; without updating an existing subsystem definition &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 following options are initiated and completed from the Activity screen:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;Copy&amp;lt;/b&amp;gt; an existing subsystem definition to a newly named subsystem definition&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;Rename&amp;lt;/b&amp;gt; an existing subsystem with a new, unique name&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;Delete&amp;lt;/b&amp;gt; an entire existing subsystem definition&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;Import&amp;lt;/b&amp;gt; subsystem definitions&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;Export&amp;lt;/b&amp;gt; subsystem definitions&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;Export Delete&amp;lt;/b&amp;gt; a subsystem from the D204SYS file&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 &amp;lt;b&amp;gt;ADMIN&amp;lt;/b&amp;gt; option (option 10) displays secondary screens on which the system manager can define privileges and assign and copy [[SCLASS]] membership. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===From fields (PQO only)===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The &amp;lt;b&amp;gt;From&amp;lt;/b&amp;gt; fields (used when defining a PQO service subsystem) specify the location of the client subsystem. If you specify a &amp;lt;b&amp;gt;From&amp;lt;/b&amp;gt; field, you cannot leave the &amp;lt;b&amp;gt;Subsystem Name&amp;lt;/b&amp;gt; field blank. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The &amp;lt;b&amp;gt;From&amp;lt;/b&amp;gt; field is prefilled on all the secondary screens and protected from input.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Revising command privileges===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can revise command privileges, if you have privileges to use the SUBSYSMGMT facility as well as the privileges to update the individual subsystems.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Using the main screen of the SUBSYSMGMT facility you can enter a pattern in the &amp;lt;b&amp;gt;Subsystem Name&amp;lt;/b&amp;gt; field and select the F7 key to change the command privileges for a set of subsystems. Another screen appears where you can enter a pattern for a subsystem class along with the new command privileges for the &amp;lt;var&amp;gt;START&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;STOP&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;TEST&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;DEBUG&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;RESUME&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;SUSPEND&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;REFRESH&amp;lt;/var&amp;gt; commands. You can also obtain a list of all of the subsystem classes and subsystem definitions that fit the pattern criteria.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
To update the command privileges, select the &amp;lt;b&amp;gt;2. MODIFY&amp;lt;/b&amp;gt; option on the main menu, enter a subsystem name or pattern in the &amp;lt;b&amp;gt;Subsystem Name&amp;lt;/b&amp;gt; field, and press F7. The COMMAND PRIVILEGES screen is displayed next. However:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;If you enter a pattern in the name field, but press another function key, the pattern is treated as an individual name, not a pattern. F7 is only valid with the MODIFY option. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;If F7 is pressed, but the MODIFY option was not specified, then the following error message is displayed: &lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;SUMnnn: PFkey or command only valid with Modify option.&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 &amp;lt;b&amp;gt;Subsystem Name&amp;lt;/b&amp;gt; is left blank, the following error message is displayed:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;SUMnnn: Subsystem name or pattern is required.&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;
==SUBSYSMGMT Command Privileges screen==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The subsystem management command privileges screen is shown below:&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;caption&amp;quot; style=&amp;quot;width:532px&amp;quot;&amp;gt;Subsystem COMMAND PRIVILEGES screen&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;figure&amp;quot;&amp;gt;[[File:sm8-3CmdPriv.gif|532px]] &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
After your screen entries are read, a list of subsystem names and subsystem classes based on the pattern criteria is displayed. The pattern criteria used for the subsystem name is the value that was specified on the main screen. The pattern criteria for the subsystem class defaults to asterisk (&amp;lt;tt&amp;gt;*&amp;lt;/tt&amp;gt;) when the screen is initially read.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If any of the subsystems in the list are enqueued by other users then the command privileges for the subsystem cannot be updated. In this case, &amp;lt;b&amp;gt;6=DISplay&amp;lt;/b&amp;gt; appears on the screen to display the list of subsystems that are enqueued.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Choosing other classes or names&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
To refine the list of subsystem classes or subsystem names, enter a new pattern in the &amp;lt;b&amp;gt;Subsystem Name&amp;lt;/b&amp;gt; or &amp;lt;b&amp;gt;Subsystem Class&amp;lt;/b&amp;gt; field, and press F4 to view the new list.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The maximum number of subsystem classes that may be processed at one time is 1000. If the list exceeds 1000, then 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;SUM096: Refine criteria: # of subsystems classes, exceeds max(1000).&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Entering changes in the COMMAND PRIVILEGES screen===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
To update the command privileges for a particular subsystem class, the command privilege must be set to &amp;lt;code&amp;gt;Y&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; in one or more of the subsystem command privilege fields. In addition, the subsystem class must be selected by putting an &amp;lt;code&amp;gt;X&amp;lt;/code&amp;gt; in front of the subsystem name and the class name. You can also update more than one subsystem class at a time by specifying a command privilege of one of the &amp;lt;b&amp;gt;Change all selected&amp;lt;/b&amp;gt; columns. If the subsystem name and class are not selected, the command privileges are not updated for that particular subsystem class. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
At this point, you press F11 (&amp;lt;b&amp;gt;UPDate priv&amp;lt;/b&amp;gt; or F12 (&amp;lt;b&amp;gt;END&amp;lt;/b&amp;gt;) to update the command privileges for the entire set of selected subsystem classes. If a record enqueuing conflict occurs during the update process, only a partial update can be performed. If this occurs, you can press F6 (&amp;lt;b&amp;gt;DISplay&amp;lt;/b&amp;gt;) to display the list of subsystem classes that are enqueued and cannot be updated at this time. You also can press F11 (&amp;lt;b&amp;gt;UPDate&amp;lt;/b&amp;gt;) or F12 (&amp;lt;b&amp;gt;END&amp;lt;/b&amp;gt;) a second time to apply the partial update, or press F3 (&amp;lt;b&amp;gt;QUIt&amp;lt;/b&amp;gt;) to &amp;lt;i&amp;gt;not&amp;lt;/i&amp;gt; apply the update.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Command privileges are in effect immediately after they are updated and can be changed if the subsystem is active or not.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You may also deselect particular subsystems or classes on the list by deleting the &amp;lt;code&amp;gt;X&amp;lt;/code&amp;gt; that precedes the subsystem or class name. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The following table displays the list of PF key options and commands that are alternatives that accomplish the same thing. (Commands are used with the Enter key.) Each PF key function can also be performed by adding 12 to that PF key&#039;s number and using the resulting PF key. Commands shown may be abbreviated to the first three characters, which are capitalized.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;caption&amp;gt;PF keys&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;PF Key &amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Command&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;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 align=&amp;quot;right&amp;quot;&amp;gt;1 &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;HELp&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Display Help information on this screen&amp;lt;/td&amp;gt;&lt;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;QUIt&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Exit from Command Privileges Screen, return to main menu for SUBSYSMGMT.&amp;lt;/td&amp;gt;&lt;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;LISt&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Displays a list of subsystems and classes based on the pattern specification in the &amp;lt;b&amp;gt;Subsystem&amp;lt;/b&amp;gt; name and &amp;lt;b&amp;gt;Class&amp;lt;/b&amp;gt; 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 align=&amp;quot;right&amp;quot;&amp;gt;5 &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td nowrap&amp;gt;DESelect all&amp;lt;br&amp;gt;&lt;br /&gt;
SELect all&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;De-select all subsystem names on the list.&amp;lt;br&amp;gt;&lt;br /&gt;
Select all subsystem names on the list.&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Toggles between DESelect and SELect. &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;6 &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;DISplay&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Displays a list of subsystems or classes that are enqueued by another user. The command privileges for the subsystems and classes on the list cannot be updated at this time.&amp;lt;/td&amp;gt;&lt;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;7 &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;BACkward&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Scroll up on subsystem names list.&amp;lt;/td&amp;gt;&lt;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;FORward&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Scroll down on subsystem names list.&amp;lt;/td&amp;gt;&lt;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;11&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;UPDate&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Update all subsystem classes with new command privilege. Only the command privileges that are changed are updated.&amp;lt;/td&amp;gt;&lt;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;12&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;END&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Return to the main menu after updating the command privileges that are specified. If a particular command privilege is left blank then it is not updated.&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;
Command privileges can be changed regardless of whether a subsystem is active or not. The new privileges are in effect immediately once they are changed.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Operational Parameters screen==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Selecting F4 from the Activity screen brings up the Operational Parameters screen. Use it to specify the operating parameters of the subsystem. You access the [[RKWeb#Operational|RKWeb version of this screen]] by selecting &amp;lt;code&amp;gt;Manage &amp;gt; Subsystem Management &amp;gt; Operational&amp;lt;/code&amp;gt;. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
On this screen, only system managers can modify &amp;lt;b&amp;gt;Account&amp;lt;/b&amp;gt;, &amp;lt;b&amp;gt;Privileges&amp;lt;/b&amp;gt;, and &amp;lt;b&amp;gt;Start Login privileges&amp;lt;/b&amp;gt; fields.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;caption&amp;quot; style=&amp;quot;width:561px&amp;quot;&amp;gt;Operational Parameters screen&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;figure&amp;quot;&amp;gt;[[File:Sm8-4OperParm.gif|561px]] &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Commands===&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;F2, F6, F9 and F11 validate and save input and display other secondary screens. You must use a PF key to quit, save the input, or move to a different screen.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Pressing the Enter key validates screen input.&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 description of each parameter follows.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Parameter descriptions===&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;Status&amp;lt;/b&amp;gt; (1, 2, and 3) determines access availability:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;PUBLIC&amp;lt;/b&amp;gt; (default) allows any user to access the subsystem.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;SEMI-PUBLIC&amp;lt;/b&amp;gt; allows all users to access the subsystem, but permits different privileges for each class of users.&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
A semi-public subsystem generally has more than one user class. One class is designated as the default (see the [[#Subsystem Classes screen|Subsystem Classes screen]]).&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;PRIVATE&amp;lt;/b&amp;gt; requires all users to have an assigned class. No default is allowed.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;Auto Start&amp;lt;/b&amp;gt; automatically starts the subsystem when the first user enters the subsystem name. The &amp;lt;var&amp;gt;START&amp;lt;/var&amp;gt; command is not required.&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; (the default) is specified, only a user having the appropriate privileges, as defined on the Subsystem Classes screen, can issue the &amp;lt;var&amp;gt;START&amp;lt;/var&amp;gt; command to open the subsystem. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;Lock File/Groups&amp;lt;/b&amp;gt; provides control for file access to users outside the subsystem.&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If &amp;lt;code&amp;gt;Y&amp;lt;/code&amp;gt; is specified, the subsystem files and groups are available only to users running in the subsystem after the subsystem is started.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
A subsystem file can be opened by a non-subsystem user if the subsystem is not started. If any user has the file open when the subsystem is being started, the subsystem start fails.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If a group is defined, all member files of the group are locked. No explicit lock is held on the group.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; (default) is specified, users outside the subsystem can open any subsystem file, but cannot &amp;lt;var&amp;gt;DELETE&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;RENAME&amp;lt;/var&amp;gt;, or &amp;lt;var&amp;gt;REDEFINE&amp;lt;/var&amp;gt; fields. &amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;Log user into M204&amp;lt;/b&amp;gt; controls the method of logging the user in to &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;
If &amp;lt;code&amp;gt;Y&amp;lt;/code&amp;gt; is specified, 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 then logged back in to &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; with the subsystem name as the user ID when entering the system.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; (default) is specified, the user remains logged in under the same &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; account name used before subsystem processing. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;Log user out of M204&amp;lt;/b&amp;gt; controls the method of logging 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;. &lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If &amp;lt;code&amp;gt;Y&amp;lt;/code&amp;gt; is specified, the user is logged out of &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; upon leaving the subsystem. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; (default) is specified and &amp;lt;b&amp;gt;Log user into M204&amp;lt;/b&amp;gt; is &amp;lt;code&amp;gt;Y&amp;lt;/code&amp;gt;, the user&#039;s logon, account, and record security ID are restored to the values that were present before entering the subsystem.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;Auto Commit&amp;lt;/b&amp;gt; controls the issuing of &amp;lt;var&amp;gt;COMMIT&amp;lt;/var&amp;gt; statements: &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;If &amp;lt;code&amp;gt;Y&amp;lt;/code&amp;gt; (default) is specified, a SOUL &amp;lt;var&amp;gt;COMMIT&amp;lt;/var&amp;gt; statement is executed by &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; at each procedure &amp;lt;var&amp;gt;END&amp;lt;/var&amp;gt; in the subsystem during execution.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;If &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; is specified, transactions can span request boundaries (see [[System and media recovery#Transaction boundaries|Transaction boundaries]]). The application must issue &amp;lt;var&amp;gt;COMMIT&amp;lt;/var&amp;gt; statements to commit updates to the database. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;Maximum Iterations&amp;lt;/b&amp;gt; specifies the maximum number of consecutive times the subsystem allows the same procedure to be invoked before interrupting the processing. Valid values are 1 to 99999. &amp;lt;code&amp;gt;NULL&amp;lt;/code&amp;gt; (default) indicates no limit. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;Account&amp;lt;/b&amp;gt; (optional) specifies an account value other than that used at logon. As many as 10 characters can be entered. &amp;lt;code&amp;gt;NULL&amp;lt;/code&amp;gt; can be used to specify the logon account value.&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The original value is restored when the user exits the subsystem.&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;Privileges (in HEX)&amp;lt;/b&amp;gt; (optional) specifies a user&#039;s privileges while in the subsystem. Privileges specified before logging into the subsystem are overridden, regardless of the value of the &amp;lt;b&amp;gt;Log user into M204&amp;lt;/b&amp;gt; field. The original value is restored when the user exits the subsystem.&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The privilege option is expressed as a hexadecimal value within the range of X&#039;00&#039; to X&#039;FF&#039;, as described in [[Establishing and maintaining security#File security|File security]]. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;Start Login Privileges (in HEX)&amp;lt;/b&amp;gt; specifies user login privileges for use while running the subsystem initialization procedure. If specified, &amp;lt;b&amp;gt;Start Login Privileges in (HEX)&amp;lt;/b&amp;gt; overrides both the user&#039;s previous privileges and other privilege fields in the subsystem definition.&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
In the case of automatic login, the starting user&#039;s privileges are reset to those set on the Operational Parameters or Subsystem Classes screens prior to continuing execution within the subsystem.   &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The privilege option is expressed as a hexadecimal value within the range of X&#039;00&#039; to X&#039;FF&#039;, as described in [[Establishing and maintaining security#File security|File security]]. &amp;lt;code&amp;gt;NULL&amp;lt;/code&amp;gt; indicates that other privilege specifications are not to be overridden. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;Subsystem can access Remote Files&amp;lt;/b&amp;gt; pertains to PQO applications. &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; is the default. Change the value to &amp;lt;code&amp;gt;Y&amp;lt;/code&amp;gt;, if you want the subsystem to access remote files. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Message display options===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
At the bottom of the screen are the message display options: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;Disconnect&amp;lt;/b&amp;gt; controls the display of subsystem disconnect messages:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;If you specify &amp;lt;code&amp;gt;Y&amp;lt;/code&amp;gt; (default), the subsystem disconnect message is displayed.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;If you specify &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt;, the subsystem disconnect message is suppressed.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;Informational&amp;lt;/b&amp;gt; controls the display of informational messages:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;If you specify &amp;lt;code&amp;gt;Y&amp;lt;/code&amp;gt; (default), &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; informational messages are displayed. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;If you specify &amp;lt;code&amp;gt;N&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; informational messages are suppressed on the user&#039;s terminal and only subsystem messages are displayed. &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; messages continue to be printed on the audit trail.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;Error&amp;lt;/b&amp;gt; controls the display of error messages on the user&#039;s terminal.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;If you specify &amp;lt;code&amp;gt;Y&amp;lt;/code&amp;gt; (default), &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; error messages are displayed.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;If you specify &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt;, error messages are suppressed, but are still printed on the audit trail. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Procedure Specifications screen==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Enter specifications for subsystem procedures on the Procedure Specifications screen. You access the [[RKWeb#Procedure|RKWeb version of this screen]] by selecting &amp;lt;code&amp;gt;Manage &amp;gt; Subsystem Management &amp;gt; Procedure&amp;lt;/code&amp;gt;.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;caption&amp;quot; style=&amp;quot;width:564px&amp;quot;&amp;gt;Procedure Specifications screen&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;figure&amp;quot;&amp;gt;[[File:Sm8-5Procedure.gif|564px]] &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Commands===&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;F4, F6, F9, and F11 each validate, save the input, and provide the next secondary screen selection.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;You must use a PF key to quit, save input, or move to a different screen.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Pressing Enter validates the screen.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Procedure prefixes===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The &amp;lt;b&amp;gt;PROCEDURE PREFIXES&amp;lt;/b&amp;gt; option requires each procedure used in a subsystem to have a prefix or be included in a procedure with a prefix.   &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Subsystem procedures can contain &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; commands, requests, continued requests, or sections of SOUL code in any combination. A procedure containing commands cannot be precompiled. Procedures included in a precompiled procedure are also precompiled.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;Non-precompiled&amp;lt;/b&amp;gt; specifies a prefix that identifies procedures that are compiled each time they are invoked.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;Precompiled&amp;lt;/b&amp;gt; specifies a prefix that identifies precompiled procedures, which are included in the in-core dictionary for reuse. Precompiled procedures save CPU and elapsed time. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Procedure names===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;PROCEDURE NAMES&amp;lt;/b&amp;gt; require assigned prefixes that indicate if the procedure is or is not precompiled:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;Initialization&amp;lt;/b&amp;gt; (optional) is the procedure invoked once when the subsystem is first started. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;Login&amp;lt;/b&amp;gt; (required) is the name of the first procedure executed for every user. &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; automatically includes a subsystem login procedure when a user enters a subsystem. This procedure must issue &amp;lt;var&amp;gt;UTABLE&amp;lt;/var&amp;gt; commands to set compiler table sizes. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Control must be passed to an initial main menu screen if the subsystem is an Online application.   &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;Error&amp;lt;/b&amp;gt; (optional) is the name of the procedure invoked if an error occurs during execution of a subsystem, or if an attention interrupt occurs when no &amp;lt;var&amp;gt;ON ATTENTION&amp;lt;/var&amp;gt; unit is active.  &lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If no error procedure is supplied, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; disconnects the user from the subsystem when an error occurs. &amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Global variables===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;GLOBAL VARIABLES&amp;lt;/b&amp;gt; enable you to pass information from one request to another and conditionally include procedures at the &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; command level: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt; &lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;Command Line Variable&amp;lt;/b&amp;gt; specifies the name of an optional global variable containing parameter input that you can enter upon logon. The command line can contain up to 255 characters.&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When a user logs in to a subsystem by entering the subsystem name followed by a number of parameters, the parameter input is placed into a global variable that is available to the subsystem procedures. If not defined, the command line is discarded.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Command line variables are not destroyed when control is transferred to another subsystem through the subsystem transfer (XFER) facility.&amp;lt;/p&amp;gt; &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;Communications variable&amp;lt;/b&amp;gt; (required) passes control from one procedure to the next. Each procedure sets the communications variable to the name of the next procedure executed in the subsystem.&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can transfer control from one procedure to another by using a user-designated global variable.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can transfer control between subsystems by using the reserved global variable &amp;lt;code&amp;gt;XFER&amp;lt;/code&amp;gt;. For more details about transferring control, see [[Application Subsystem development#Transferring control|Transferring control]].&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When the application is ready to terminate, a subsystem procedure must set the communications global to the exit value.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;Exit Value&amp;lt;/b&amp;gt; (required) specifies the setting of the communications variable for exiting the subsystem.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;Error Variable&amp;lt;/b&amp;gt; (required) specifies the variable in which an error code is stored. The value of the error variable, which is used by the error procedure, indicates the type of error. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Subsystem File Use screen==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The Subsystem File Use screen defines the files, including the procedure file used by the subsystem. You access the [[RKWeb#Files|RKWeb version of this screen]] by selecting &amp;lt;code&amp;gt;Manage &amp;gt; Subsystem Management &amp;gt; Files&amp;lt;/code&amp;gt;.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;caption&amp;quot; style=&amp;quot;width:537px&amp;quot;&amp;gt;Subsystem File Use screen&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;figure&amp;quot;&amp;gt;[[File:Sm8-6FileUse.gif|537px]] &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
It is useful to define a subsystem procedure file as a multiple-file procedure group. This will let you modify procedures in the group members without stopping the subsystem because of the following interactions of subsystems and procedure groups: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;All members of a procedure group are searched for subsystem procedures. The search, determined by the order in which the files were specified in the &amp;lt;var&amp;gt;[[CREATE command: Permanent group|CREATE]]&amp;lt;/var&amp;gt; command that defined the group, begins with the leftmost specified member and proceeds to the right. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;The &amp;lt;b&amp;gt;NUMLK&amp;lt;/b&amp;gt; parameter, on the Subsystem File Use screen, lets you determine how many and which members of a procedure group are locked (a member in which procedures cannot be modified). The locked members&lt;br /&gt;
are the &amp;lt;b&amp;gt;Procs NUMLK&amp;lt;/b&amp;gt; number of consecutive members beginning with the rightmost member of the group and counting to the left.  &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;You can add new procedures to any member of a procedure file group, but only procedures added to unlocked members are visible to the subsystem without restarting the subsystem.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A consequence of the above-listed factors is that you can&lt;br /&gt;
copy a procedure from a locked member to a (further-to-the-left) unlocked member designated for this purpose, modify that procedure copy, then let future APSY &amp;lt;var&amp;gt;INCLUDE&amp;lt;/var&amp;gt; commands use that copy instead of the version in the locked member.   &lt;br /&gt;
&lt;br /&gt;
For example, the search for procedures in the group defined by the following &amp;lt;var&amp;gt;CREATE&amp;lt;/var&amp;gt; command always starts with the leftmost file,  &amp;lt;code&amp;gt;TESTPROC&amp;lt;/code&amp;gt;, and proceeds to the right:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;CREATE PERM GROUP PROCGRUP FROM TESTPROC, DEVPROC, QAPROC1, QAPROC2, PROD1, PRODPROC&lt;br /&gt;
PARAMETER PROCFILE=*&lt;br /&gt;
END CREATE&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If the Subsystem File Use screen value of NUMLK is 3, procedures (with names starting with the pre-compiled prefix) in the three consecutive files beginning with the rightmost file, &amp;lt;code&amp;gt;PRODPROC&amp;lt;/code&amp;gt;, are locked and cannot be modified&lt;br /&gt;
while their subsystem is active. But a procedure that is a member of &amp;lt;code&amp;gt;PROD1&amp;lt;/code&amp;gt;, for example, can be copied, modified, added to &amp;lt;code&amp;gt;TESTPROC&amp;lt;/code&amp;gt; and then included in the subsystem while it is still running.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
For more information about the &amp;lt;var&amp;gt;PROCFILE&amp;lt;/var&amp;gt; option, see its description in the &amp;lt;var&amp;gt;[[CREATE command: Temporary group#Temporary group parameters|CREATE TEMP GROUP]]&amp;lt;/var&amp;gt; command.&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; Procedures found in unlocked members are &amp;lt;i&amp;gt;always&amp;lt;/i&amp;gt; recompiled on each include, imposing a significant performance penalty.  That performance penalty can be eliminated by setting the &amp;lt;var&amp;gt;[[SIRAPSYF parameter|SIRAPSYF]]&amp;lt;/var&amp;gt; parameter to X&#039;03&#039;.  &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The in-core procedure dictionary is built during initialization by searching the locked members of a procedure file group for procedures with the precompiled prefix.  If a subsystem procedure is present in more than one locked member of the procedure group, only the first procedure located in a left-to-right search of the locked members is included in the in-core procedure dictionary.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
For further information, see also: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[[Application Subsystem development#Permanent vs. temporary groups in subsystem definitions|Substituting a temporary group for the permanent group defined to the subsystem]]&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Defining a multiple procedure file to the &amp;lt;var&amp;gt;[[$LstProc]]&amp;lt;/var&amp;gt; function &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;[[Application Subsystem development#Guidelines and restrictions|Restrictions on using certain commands with multiple procedure files]] &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; Non-system managers can add files to a subsystem if they have been assigned modify privileges (see [[#Administrative Privileges screen|Administrative Privileges screen]]).&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Commands===&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;F4, F5, F9, and F11 each validate, save the input, and provide the next secondary screen selection.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;You must use a PF key to quit, save input, or move to a different screen.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;F7 and F8 provide scrolling to and from the first to last Subsystem File Use screen when more than one is used. Input is validated before the screen scrolls.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Pressing Enter validates the screen.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;You must issue the &amp;lt;code&amp;gt;TOP&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;BOTTOM&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;MAXIMUM&amp;lt;/code&amp;gt; commands on the command line. These commands have no corresponding PF keys.&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;TOP&amp;lt;/code&amp;gt; scrolls to the first file.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;BOTTOM&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;MAXIMUM&amp;lt;/code&amp;gt; scroll to the last file.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;MAXIMUM&amp;lt;/code&amp;gt; used with F7 and F8 is equivalent to &amp;lt;code&amp;gt;TOP&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;BOTTOM&amp;lt;/code&amp;gt;, respectively.&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;
===File specifications===&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;You must specify file or group names in the column labeled &amp;lt;b&amp;gt;File/Group Name&amp;lt;/b&amp;gt;.&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When using a group procedure file, the name specified must correspond to the permanent group. Note that an individual user can create or open a temporary group having the same name as the permanent group defined to the subsystem. If the temporary group is open before login to the subsystem, the subsystem uses the temporary group instead of the defined permanent group.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The following restrictions apply to the use of temporary groups as application subsystem procedure files:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;TEST or DEBUG privilege is required.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;The last files of the permanent group must correspond exactly to the last files of the temporary group. The number of files used in both groups is specified on the &amp;lt;b&amp;gt;NUMLK&amp;lt;/b&amp;gt; parameter. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;File Location&amp;lt;/b&amp;gt; (PQO only) specifies the location of each file. If this field is omitted, the file is assumed to be local. Specify location only for client subsystems.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;Group Y/N&amp;lt;/b&amp;gt; indicates whether or not the data file is a group. The default is &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt;.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;Auto Y/N&amp;lt;/b&amp;gt; indicates automatic members (opened automatically at subsystem startup). &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;Mandatory Y/N&amp;lt;/b&amp;gt; indicates mandatory members (which must be open to access the subsystem).&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;Procs&amp;lt;/b&amp;gt; specifies the name of the procedure file or group for the subsystem. You can use up to eight characters for each entry.&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;NUMLK&amp;lt;/b&amp;gt; specifies the number of files in a group that participate in procedure locking. Valid values are between 0 and 255, but must be less than the number of files in the group. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If &amp;lt;b&amp;gt;Group&amp;lt;/b&amp;gt; is &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt;, the value of &amp;lt;b&amp;gt;NUMLK&amp;lt;/b&amp;gt; must be &amp;lt;code&amp;gt;NULL&amp;lt;/code&amp;gt;. If &amp;lt;b&amp;gt;Group&amp;lt;/b&amp;gt; is &amp;lt;code&amp;gt;Y&amp;lt;/code&amp;gt;, &amp;lt;b&amp;gt;NUMLK&amp;lt;/b&amp;gt; must be given a value. &amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;Deferred Name&amp;lt;/b&amp;gt; specifies an optional deferred update data set that can be a z/OS ddname, a z/VSE DLBL name, or a CMS FILEDEF name. If a deferred name is specified, the file is opened in deferred update mode when the subsystem is started. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;Ordered-Index Deferred Name&amp;lt;/b&amp;gt; specifies an optional Ordered Index deferred update data set that can be a z/OS ddname, a z/VSE DLBL name, or a CMS FILEDEF name. If an ordered-index deferred name is specified, the file is opened in deferred update mode when the subsystem is started. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Subsystem Classes screen==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Define command and file privileges for each class of subsystem users on the Subsystem Classes screen. You access the [[RKWeb#System_Classes|RKWeb version of this screen]] by selecting &amp;lt;code&amp;gt;Manage &amp;gt; Subsystem Management &amp;gt; System Classes&amp;lt;/code&amp;gt;. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Each class of user requires a separate screen. User class privileges defined to the subsystem override settings for &amp;lt;var&amp;gt;OPENCTL&amp;lt;/var&amp;gt; and file privileges that reside in the password table.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Only the system manager can update the &amp;lt;b&amp;gt;Logon Privilege&amp;lt;/b&amp;gt;, &amp;lt;b&amp;gt;Record Security ID&amp;lt;/b&amp;gt;, and &amp;lt;b&amp;gt;Account&amp;lt;/b&amp;gt; fields.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;caption&amp;quot; style=&amp;quot;width:559px&amp;quot;&amp;gt;Subsystem Classes screen&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;figure&amp;quot;&amp;gt;[[File:Sm8-7SysClass.gif|559px]] &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Commands===&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;F2, F4, F5, and F9 each validate, save the input, and provide the next secondary screen selection.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Use a PF key to quit, save input, or move to a different screen.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;F6 displays current &amp;lt;var&amp;gt;PRIVDEF&amp;lt;/var&amp;gt; parameter settings and lists options, described in [[#&amp;lt;Security specifications|Security specifications]], below.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;F7 and F8 provide backward and forward scrolling when the list of files or groups exceeds one page. Input is validated before the screen scrolls.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;F10 returns to the previous subsystem class. Input is validated and saved before moving to a different class.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;F11 moves to the next subsystem class. Input is validated and saved before moving to a different class.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Pressing Enter validates the screen.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;You must issue the TOP, BOTTOM, and MAXIMUM commands on the command line. These commands have no corresponding PF keys:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;TOP&amp;lt;/code&amp;gt; scrolls to the first file in this class.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;BOTTOM&amp;lt;/code&amp;gt; scrolls to the last file in this class.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;MAXIMUM&amp;lt;/code&amp;gt; used with F7 or F8 is equivalent to &amp;lt;code&amp;gt;TOP&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;BOTTOM&amp;lt;/code&amp;gt;.&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;
===Subsystem name and class===&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;Subsystem Name&amp;lt;/b&amp;gt; specifies the name of the subsystem affected by the definitions entered on the screen.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;Subsystem Class&amp;lt;/b&amp;gt; is a system-assigned numeric identifier that specifies the user class being defined. As each new class is added, numeric identifiers are increased by an increment of 1.&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
In a semi-public subsystem, the first class is automatically assigned the class name &amp;lt;code&amp;gt;DEFAULT&amp;lt;/code&amp;gt;, which you can change.&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;
===Security specifications===&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;Command Privileges&amp;lt;/b&amp;gt; determines if the user class (SCLASS) can issue the subsystem commands &amp;lt;var&amp;gt;START&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;TEST&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;STOP&amp;lt;/var&amp;gt;, and &amp;lt;var&amp;gt;DEBUG&amp;lt;/var&amp;gt;. The command fields take &amp;lt;code&amp;gt;Y&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt;, and the default for all fields is &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt;.&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Debug&amp;lt;/b&amp;gt; specifies entering the subsystem in &amp;lt;var&amp;gt;DEBUG&amp;lt;/var&amp;gt; mode. &amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;Login Privilege&amp;lt;/b&amp;gt; (optional) specifies the user class login privileges for all, some, or none of the subsystem user classes.&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Any individual user login privilege held at entry to the subsystem or specified on the Operational Parameters screen is overridden. The original value is restored when the user exits the subsystem.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The privilege option is expressed as a hexadecimal value within the range of X&#039;00&#039; to X&#039;FF&#039;, as described in [[Establishing and maintaining security#PRIVDEF parameter settings|PRIVDEF parameter settings]]. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;NULL&amp;lt;/code&amp;gt; indicates default privileges from the Operational Parameters screen. &amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;Record Security ID&amp;lt;/b&amp;gt; (optional) overrides any individual user record security ID held on entry to the subsystem. You can enter a maximum of eight characters. &lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;NULL&amp;lt;/code&amp;gt; indicates the security activated on login.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The original value of the record security ID is restored when the user exits the subsystem. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;Account&amp;lt;/b&amp;gt; (optional) specifies an account associated with specific user classes. &amp;lt;b&amp;gt;Account&amp;lt;/b&amp;gt; can be specified for all, some, or none of the user classes. You can enter as many as ten characters.&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Any individual value of &amp;lt;b&amp;gt;Account&amp;lt;/b&amp;gt; held at entry to the subsystem or specified on the Operational Parameters screen is overridden. The original value is restored when the user exits the subsystem.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;NULL&amp;lt;/code&amp;gt; indicates the user&#039;s login account or the value from the Operational Parameters screen.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;File/Group&amp;lt;/b&amp;gt; specifies files or groups that can be accessed by the defined class of users.&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Define the set of files or groups belonging to the subsystem on the File Use screen and display them on this screen. &amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;Location&amp;lt;/b&amp;gt; (PQO only) refers to the node where a file is located. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;Prcldef&amp;lt;/b&amp;gt; specifies &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; procedure security. Values must be between 0 (default) and 255:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;0 specifies no procedure security.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;255 specifies the highest security. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;Privdef&amp;lt;/b&amp;gt; specifies file privileges. Values are hexadecimal 0 to X&#039;BFFF&#039; (default). &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;Sellvl&amp;lt;/b&amp;gt;, &amp;lt;b&amp;gt;Readvl&amp;lt;/b&amp;gt;, &amp;lt;b&amp;gt;Updtvl&amp;lt;/b&amp;gt;, and &amp;lt;b&amp;gt;Addvl&amp;lt;/b&amp;gt; specify values for field-level security parameters. Values must be between 0 (default) and 255:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;0 specifies all users can access field values.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;255 restricts access of field values to users having certain privileges.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;PR&amp;lt;/b&amp;gt; specifies the name of the procedure file or group for the subsystem.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==User Definitions screen==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
List user classes on the User Definitions (USErdef) screen for updating or browsing class definitions. You access the [[RKWeb#Operational|RKWeb version of this screen]] by selecting &amp;lt;code&amp;gt;Manage &amp;gt; Subsystem Management &amp;gt; Operational&amp;lt;/code&amp;gt;.  &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;caption&amp;quot; style=&amp;quot;width:562px&amp;quot;&amp;gt;User Definitions screen&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;figure&amp;quot;&amp;gt;[[File:Sm8-8UserDef.gif|562px]] &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Commands===&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;F2, F4, F5, and F6 display the next secondary screen.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;F7 and F8 allow scrolling backward and forward for listing next or previous subsystem classes.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Pressing Enter displays the Subsystem Class Users screen for the class selected.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;You must issue the TOP, BOTTOM, and MAXIMUM commands on the command line. These commands have no corresponding PF keys:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;TOP&amp;lt;/code&amp;gt; scrolls to the first class.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;BOTTOM&amp;lt;/code&amp;gt; scrolls to the last class.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;MAXIMUM&amp;lt;/code&amp;gt; used with F7 and F8, is equivalent to &amp;lt;code&amp;gt;TOP&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;BOTTOM&amp;lt;/code&amp;gt;, respectively.&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;
===Screen specifications===&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;Subsystem Name&amp;lt;/b&amp;gt; specifies the applicable subsystem.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;Subsystem Classes&amp;lt;/b&amp;gt; displays a listing, by class number and name, of the user classes defined on the Subsystem Classes screens.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;ENTER SUBSYSTEM CLASS NUMBER&amp;lt;/b&amp;gt; accepts the number of the Subsystem Class whose user list is to be browsed/updated.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Subsystem Class Users screen==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Define user accounts assigned to a specific class on the Subsystem Class Users screen. You access the [[RKWeb#classUsers|RKWeb version of this screen]] by selecting &amp;lt;code&amp;gt;Manage &amp;gt; Subsystem Management &amp;gt; Users&amp;lt;/code&amp;gt;. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
A user can belong to only one class within a subsystem. If using more than one subsystem, the user can belong to a different class (different privileges) in each subsystem.   &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;caption&amp;quot; style=&amp;quot;width:531px&amp;quot;&amp;gt;Subsystem Class Users screen&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;figure&amp;quot;&amp;gt;[[File:Sm8-9SysClassUser.gif|531px]] &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Duplicate account entries result in the display of the class in which the original name resides.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Users can be added to a class, deleted, or replaced by entering, deleting, or typing over the individual &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; user account identification after the&lt;br /&gt;
prompt (&amp;lt;tt&amp;gt;&amp;gt;&amp;lt;/tt&amp;gt;). &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Copy SCLASS option===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The &amp;lt;b&amp;gt;Copy from Sclass&amp;lt;/b&amp;gt; options allow you to copy user IDs from an SCLASS already defined in one subsystem to the current SCLASS being defined. This option is not available in the RKWeb interface.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====PF keys====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The SCLASS copy options are represented by four PF key functions on the Subsystem Class Users screen: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;F4 (&amp;lt;b&amp;gt;DELusers&amp;lt;/b&amp;gt;) deletes all users from a particular SCLASS selected from the User Definitions Screen. To execute this command, press F4. A warning message appears with the name of the SCLASS from which users are about to be deleted. Reenter the command if you are sure that you want to perform the Delete.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;F5 (&amp;lt;b&amp;gt;PREview&amp;lt;/b&amp;gt;) displays a list of all duplicate user IDs common to the copy-from SCLASS and any of the SCLASSes in the copy-to subsystem. The list is displayed on a separate screen, as shown in the [[#Sample Preview screen|Sample Preview screen]] section, below.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;F10 (&amp;lt;b&amp;gt;COPyusers&amp;lt;/b&amp;gt;) copies user IDs from the SCLASS specified in the copy-from field to the SCLASS selected from the User Definitions screen. This SCLASS is displayed on the current screen as a protected field.&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When duplicate user IDs exist in another SCLASS in the copy-to subsystem, a warning message indicates that duplicates have not been copied. As with F4, reenter the command to perform the copy.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;F11 (&amp;lt;b&amp;gt;CPReplace&amp;lt;/b&amp;gt;) copies user IDs as &amp;lt;b&amp;gt;COPyusers&amp;lt;/b&amp;gt; does, but replaces duplicate user IDs. When duplicates exist, a warning message indicates that duplicates are moved from existing SCLASSes. Reenter the command to perform the copy with replacement.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Other PF keys function as in other secondary screens.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Sample Preview screen===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The following screen is an example of the screen that appears when you execute the &amp;lt;b&amp;gt;PREview&amp;lt;/b&amp;gt; command (F5) on the Subsystem Class Users screen:&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;caption&amp;quot; style=&amp;quot;width:493px&amp;quot;&amp;gt;Preview Duplicate USERIDS screen&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;figure&amp;quot;&amp;gt;[[File:8-10Preview.gif|493px]] &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
This screen is purely informational. Press F3 to return to the Subsystem Class Users screen.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Subsystem Import/Export options==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The &amp;lt;b&amp;gt;Import&amp;lt;/b&amp;gt; and &amp;lt;b&amp;gt;Export&amp;lt;/b&amp;gt; functions allow an authorized user to migrate subsystem definitions from one &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; environment to another via the migration file D204SYS, a &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; file created during Dictionary installation.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The &amp;lt;b&amp;gt;Export Delete&amp;lt;/b&amp;gt; function deletes a specified subsystem from the D204SYS file. &amp;lt;b&amp;gt;EXPortlist&amp;lt;/b&amp;gt; displays the list of subsystems that currently reside in D204SYS for which the user has &amp;lt;var&amp;gt;ALL&amp;lt;/var&amp;gt; privileges (otherwise the user is not authorized to export them).&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The four Import/Export options are all accessible from the Activity screen, shown earlier in [[#SUBSYSMGMT Activity screen|SUBSYSMGMT Activity screen]]. &amp;lt;b&amp;gt;Import&amp;lt;/b&amp;gt;, &amp;lt;b&amp;gt;Export&amp;lt;/b&amp;gt;, and &amp;lt;b&amp;gt;Export Delete&amp;lt;/b&amp;gt; are options 7, 8, and 9, respectively. You can display an Exportlist by pressing F11, &amp;lt;b&amp;gt;Export&amp;lt;/b&amp;gt;.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Export===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The &amp;lt;b&amp;gt;Export&amp;lt;/b&amp;gt; option allows authorized users to export subsystem definitions to another &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; Dictionary. To export a subsystem definition:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Select option 8 from the Activity screen.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Specify the subsystem to be exported.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;To export SCLASS users, change the default value &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;Y&amp;lt;/code&amp;gt; on the &amp;lt;b&amp;gt;Export Users&amp;lt;/b&amp;gt; line.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Press Enter.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
A message appears at the bottom of the screen indicating whether the Export has been successful. If the subsystem has already been exported by another user, then you cannot export it until it is deleted from D204SYS (see [[#Export Delete|Export Delete]]). &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Import===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
To import subsystem definitions, you must enter SUBSYSMGMT in the Dictionary to which the definition is to be imported. If the subsystem already exists, you must delete or rename it before importing. To import a subsystem definition:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Select option 7 from the primary menu.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Specify the subsystem to be imported&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Press Enter.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
A message appears at the bottom of the screen indicating whether the Import was successful. After an Import, the subsystem definitions remain in D204SYS until they are deleted.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Export Delete===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
To delete a subsystem from D204SYS:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Select option 9 from the primary menu&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Specify the subsystem to be deleted from D204SYS&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Press Enter.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Exportlist===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
To display the subsystems in D204SYS for which you have ALL privileges, press F11. The list displayed shows the name of each subsystem, the date and time of export, and the exporting user ID. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Exportable data: scope and limitations===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The Import/Export functions export all information in METADATA and DATALINK except for STAGED entities and user-defined links to the subsystem.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
After an import, the LAST UPDATED field for a METADATA entry is changed to the date of import, and the UPDATED-BY field is changed to the importer&#039;s user ID. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
User SCLASSes can be imported (see [[#Export|Export]]); but administrative privileges cannot be imported.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Subsystem Administration screen==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The Subsystem Administration screen appears when the system manager selects option 10 (ADMIN) on the SUBSYSMGMT primary menu. This option is available only to a system manager.   &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;p class=&amp;quot;caption&amp;quot; style=&amp;quot;width:513px&amp;quot;&amp;gt;Subsystem Administration screen&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;figure&amp;quot;&amp;gt;[[File:Sm8-12Admin.gif|513px]] &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Select &amp;lt;b&amp;gt;Usage&amp;lt;/b&amp;gt; privileges by entering &amp;lt;code&amp;gt;U&amp;lt;/code&amp;gt; on the space provided (&amp;lt;code&amp;gt;U&amp;lt;/code&amp;gt; is the default). These privileges correspond exactly to the User Activity privileges in previous releases of &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt;. Selecting &amp;lt;code&amp;gt;U&amp;lt;/code&amp;gt; brings up the User Matrix screen described in [[#User Matrix screen|User Matrix screen]].&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Select Administrative privileges for a &amp;lt;b&amp;gt;User Account&amp;lt;/b&amp;gt; by entering &amp;lt;code&amp;gt;A&amp;lt;/code&amp;gt;. The four &amp;lt;b&amp;gt;Admin&amp;lt;/b&amp;gt; options are explained in the following section, [[#Admin options|Admin options]].&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When setting privileges for specific users, remember that access to SUBSYSMGMT must be authorized via the DICTADMIN facility, as it is for every &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; Dictionary subsystem. The privileges granted here supplement but do not override general access privileges granted through DICTADMIN.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Admin options===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The Subsystem Administration screen offers four options, described in the following sections.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====1. Define Privileges====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The &amp;lt;b&amp;gt;Define Privileges&amp;lt;/b&amp;gt; option lets the system manager grant administrative privileges to specific users for specific subsystems. Selecting this option brings up the [[#Administrative Privileges screen|Administrative Privileges screen]]. To execute &amp;lt;b&amp;gt;Define Privileges&amp;lt;/b&amp;gt;, enter &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; at the selection number prompt, specify the user ID to be assigned privileges in the &amp;lt;b&amp;gt;User Account&amp;lt;/b&amp;gt; field, and press Enter.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====2. Copy====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The &amp;lt;b&amp;gt;Copy&amp;lt;/b&amp;gt; option duplicates a user&#039;s administrative privileges to another user ID. To execute &amp;lt;b&amp;gt;Copy&amp;lt;/b&amp;gt;, enter &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt; at the selection number prompt, specify the user ID to be copied in the &amp;lt;b&amp;gt;User Account&amp;lt;/b&amp;gt; field, specify the name of the user ID to be copied to in the &amp;lt;b&amp;gt;Copy/Rename&amp;lt;/b&amp;gt; field, and press Enter. &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====3. Rename====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The &amp;lt;b&amp;gt;Rename&amp;lt;/b&amp;gt; option changes a user ID associated with a given set of administrative privileges. To execute &amp;lt;b&amp;gt;Rename&amp;lt;/b&amp;gt;, enter &amp;lt;code&amp;gt;3&amp;lt;/code&amp;gt; at the selection number prompt, specify the user ID to be renamed in the &amp;lt;b&amp;gt;User Account&amp;lt;/b&amp;gt; field, specify the new name in the &amp;lt;b&amp;gt;Copy/Rename&amp;lt;/b&amp;gt; field, and press Enter. &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====4. Delete====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The &amp;lt;b&amp;gt;Delete&amp;lt;/b&amp;gt; option takes away all administrative privileges associated with a specific user ID. To execute &amp;lt;b&amp;gt;Delete&amp;lt;/b&amp;gt;, enter &amp;lt;code&amp;gt;4&amp;lt;/code&amp;gt; at the selection number prompt, specify the user ID in the &amp;lt;b&amp;gt;User Account&amp;lt;/b&amp;gt; field, and press Enter.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Subsystem pattern field===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The &amp;lt;b&amp;gt;Subsystem pattern&amp;lt;/b&amp;gt; field applies to all options in both &amp;lt;b&amp;gt;Usage&amp;lt;/b&amp;gt; and &amp;lt;b&amp;gt;Admin&amp;lt;/b&amp;gt; modes. You can leave it blank, enter a single subsystem name, or enter a pattern: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;If you leave this field blank, the next screen displays all subsystems. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;If you select a pattern following the [[Record retrievals#Pattern matching|standard pattern specifications]],&lt;br /&gt;
the found set of subsystems are displayed on the next screen &amp;amp;mdash; the User Matrix screen, if in &amp;lt;b&amp;gt;Usage&amp;lt;/b&amp;gt; mode; the Administrative Privileges screen, if in &amp;lt;b&amp;gt;Admin&amp;lt;/b&amp;gt; mode.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Administrative Privileges screen==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The &amp;lt;b&amp;gt;Define Privileges&amp;lt;/b&amp;gt; option selected in &amp;lt;b&amp;gt;Admin&amp;lt;/b&amp;gt; mode displays the Administrative Privileges screen. To create or delete privileges, type or space over &amp;lt;code&amp;gt;X&amp;lt;/code&amp;gt;s in the appropriate spaces. &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;
Take care when granting &amp;lt;b&amp;gt;All&amp;lt;/b&amp;gt; and &amp;lt;b&amp;gt;Modify&amp;lt;/b&amp;gt; privileges. A user with these privileges can update subsystem file use data.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;p class=&amp;quot;caption&amp;quot; style=&amp;quot;width:535px&amp;quot;&amp;gt;Administrative Privileges screen&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;figure&amp;quot;&amp;gt;[[File:Sm8-13AdminPriv.gif|535px]] &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Hierarchy of privileges===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The &amp;lt;b&amp;gt;ALL SUBSYS&amp;lt;/b&amp;gt; row on this screen grants the account the selected privileges for all subsystems: &amp;lt;b&amp;gt;All&amp;lt;/b&amp;gt;, &amp;lt;b&amp;gt;Modify&amp;lt;/b&amp;gt;, &amp;lt;b&amp;gt;Browse&amp;lt;/b&amp;gt;, &amp;lt;b&amp;gt;Udef&amp;lt;/b&amp;gt;.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If both &amp;lt;b&amp;gt;ALL SUBSYS&amp;lt;/b&amp;gt; and specific subsystem privileges are granted, the higher privilege takes precedence. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
For Import, Add, and Copy privileges, a user must also be a member of the ADDPRIV SCLASS, described in [[#ADDPRIV SCLASS and Add Privileges|ADDPRIV SCLASS and Add Privileges]].&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===PF keys===&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;F1 (&amp;lt;b&amp;gt;HELp&amp;lt;/b&amp;gt;) displays Help text for the screen.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;F2 (&amp;lt;b&amp;gt;TOP&amp;lt;/b&amp;gt;) scrolls to the top of the display.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;F3 (&amp;lt;b&amp;gt;QUIt&amp;lt;/b&amp;gt;) returns the user to the Admin Screen without saving changes. Before exiting, warning messages are displayed indicating that changes have not been saved.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;F5 (&amp;lt;b&amp;gt;LOCate&amp;lt;/b&amp;gt;) locates a specified subsystem on the display list. Specify the name on the command line before pressing F5. If the subsystem name is found, it is highlighted and displayed at the top of the list. If it is not found, the display is unchanged.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;F7 (&amp;lt;b&amp;gt;BACkward&amp;lt;/b&amp;gt;) scrolls backward through the list of subsystems specified. A maximum of ten subsystems are displayed on the screen at once. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;F8 (&amp;lt;b&amp;gt;FORward&amp;lt;/b&amp;gt;) scrolls forward through the list of subsystems specified. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;F12 (&amp;lt;b&amp;gt;END&amp;lt;/b&amp;gt;) saves all screen changes and returns the user to the Admin Screen.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;The Enter key has no effect on this screen.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===ADDPRIV SCLASS and Add Privileges===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
To give a user Add, Copy, or Import privileges, the system manager must add the appropriate user ID to a new SCLASS called ADDPRIV. Do this as shown in [[#User Matrix screen|User Matrix screen]], or in [[#User Definitions screen|User Definitions screen]].&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Summary of subsystem privileges==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The &amp;quot;Summary of subsystem privileges&amp;quot; table shows how the system of assigned privileges relates to the ten functions displayed on the [[#SUBSYSMGMT Activity screen|Subsystem Management Facility screen]]. The columns are privileges granted, including general system manager privileges. The rows are SUBSYSMGMT functions. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;caption&amp;gt;Summary of subsystem privileges&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;Option&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th colspan=&amp;quot;6&amp;quot;&amp;gt;                                    Assigned privilege&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;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;b&amp;gt;ALL&amp;lt;/b&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;b&amp;gt;Modify&amp;lt;/b&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;b&amp;gt;Browse&amp;lt;/b&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;b&amp;gt;Udef&amp;lt;/b&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;b&amp;gt;ADDPRIV member&amp;lt;/b&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;b&amp;gt;System manager&amp;lt;/b&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;&lt;br /&gt;
&amp;lt;b&amp;gt;Add&amp;lt;/b&amp;gt;&lt;br /&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;td&amp;gt;&amp;amp;nbsp;&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;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;X&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;X&amp;lt;/td&amp;gt;&lt;br /&gt;
&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;b&amp;gt;Modify&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;X&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;X&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;X&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;X&amp;lt;/td&amp;gt;&lt;br /&gt;
&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;b&amp;gt;Browse&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;X&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;X&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;X&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;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;X&amp;lt;/td&amp;gt;&lt;br /&gt;
&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;b&amp;gt;Copy&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;X&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;&amp;amp;nbsp;&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;X&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;X&amp;lt;/td&amp;gt;&lt;br /&gt;
&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;b&amp;gt;Rename&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;X&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;&amp;amp;nbsp;&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;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;X&amp;lt;/td&amp;gt;&lt;br /&gt;
&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;b&amp;gt;Delete&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;X&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;&amp;amp;nbsp;&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;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;X&amp;lt;/td&amp;gt;&lt;br /&gt;
&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;b&amp;gt;Import&amp;lt;/b&amp;gt;&lt;br /&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;td&amp;gt;&amp;amp;nbsp;&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;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;X&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;X&amp;lt;/td&amp;gt;&lt;br /&gt;
&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;b&amp;gt;Export&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;X&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;&amp;amp;nbsp;&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;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;X&amp;lt;/td&amp;gt;&lt;br /&gt;
&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;b&amp;gt;Export Delete&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;X&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;&amp;amp;nbsp;&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;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;X&amp;lt;/td&amp;gt;&lt;br /&gt;
&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;b&amp;gt;Admin&amp;lt;/b&amp;gt;&lt;br /&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;td&amp;gt;&amp;amp;nbsp;&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;&amp;amp;nbsp;&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;X&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; Copy privileges require both ALL and ADDPRIV SCLASS membership. A user assigned Udef privileges can update only the Userdef screens.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==User Matrix screen==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
To change a single account in any class of a subsystem, use the User Matrix screen. Access the User Matrix screen by selecting the &amp;lt;b&amp;gt;ADMIN&amp;lt;/b&amp;gt; option (number 10) on the Activity screen, then selection 1 under the &amp;lt;b&amp;gt;Usage&amp;lt;/b&amp;gt; options.   &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;caption&amp;quot; style=&amp;quot;width:533px&amp;quot;&amp;gt;User Matrix screen&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;figure&amp;quot;&amp;gt;[[File:Sm8-14Matrix.gif|533px]] &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Commands===&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;F7 and F8 provide scrolling to and from the first to last Subsystem Class Users screen when more than one screen is required.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;F10 and F11 provide scrolling to the left and to the right to locate all subsystem classes for the subsystem shown in the leftmost column. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Specifications===&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;Subsystem Name&amp;lt;/b&amp;gt; specifies the subsystem in which the user account is defined.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;Account Exists In&amp;lt;/b&amp;gt; specifies the class in which the account is defined.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;Subsystem Classes&amp;lt;/b&amp;gt; commands are entered in a one-character input field that precedes each class displayed:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;A&amp;lt;/code&amp;gt; adds the current account to the class in the subsystem shown.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;C&amp;lt;/code&amp;gt; changes the class in the subsystem to which the current account belongs from the &amp;lt;b&amp;gt;Account Exists In&amp;lt;/b&amp;gt; or default class to the class at the right of the command.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;D&amp;lt;/code&amp;gt; deletes the current account from the class in the subsystem shown. Note that this is one way to change an account&#039;s class from a non-default to the default class in a semi-public subsystem. &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;
==Dynamic APSY support==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
An application subsystem (APSY) is comprised of &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; procedures executed in a logical order. You define the operation of the application using the &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; Subsystem Management facility (SUBSYSMGMT). The &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; procedures determine the contents of the application. You can dynamically modify the following aspects of an APSY, without terminating the APSY and without interrupting service to your users:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;A subset of application subsystem attributes.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Precompiled and non-precompiled procedures in files that participate in procedure locking while the subsystem is active. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can also save compiled procedures that contain commands by saving the commands before and after the BEGIN/END. The commands are saved on a chain of CCATEMP pages in the form of a temporary procedure. The temporary procedure contains pointers to these pages. These temporary procedures are not the user-accessible temporary procedures (0, -1, and so on) and do not interfere with their operation.&lt;br /&gt;
 &lt;br /&gt;
===Changing APSY subsystem attributes===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Subsystem attribute modifications are saved to the permanent subsystem definition in the CCASYS file as well as to the active in-core subsystem definition without interrupting service to the subsystem user.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Updating an active subsystem via SUBSYSMGMT====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The SUBSYSMGMT subsystem maintains all subsystem definitions. You can modify various attributes of a subsystem through a variety of screens provided by SUBSYSMGMT. Once you are satisfied with the modifications that are made, press F12 to end the updates and to save the definition to disk. &lt;br /&gt;
SUBSYSMGMT checks to see if the subsystem is currently active:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;If the subsystem is not active, you return to Subsystem Management Facility screen. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;If the subsystem is active, the following Active Subsystem Update screen is displayed:&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;SUBSYSMGMT                  Active Subsystem Update  &lt;br /&gt;
 &lt;br /&gt;
                            Subsystem: MCC1&lt;br /&gt;
 &lt;br /&gt;
                            is currently active.  &lt;br /&gt;
 &lt;br /&gt;
          Would you like to update the active subsystem definition?&lt;br /&gt;
 &lt;br /&gt;
          PF3 to QUIT/Not update the active subsystem definition &lt;br /&gt;
          PF12 to END/Update the active subsystem definition &lt;br /&gt;
 &lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;===&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
1=HELp       2=           3=QUIt       4=           5=            6=&lt;br /&gt;
7=           8=           9=          10=          11=           12=END&lt;br /&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;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
At this point, the permanent definition in the CCASYS file has been updated. Your response to this screen determines whether the subsystem will be dynamically updated.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;To update the active subsystem definition, press F12. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;To keep the active in-core definition unchanged, press F3. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Only the F1 (&amp;lt;b&amp;gt;HELp&amp;lt;/b&amp;gt;), F3 (&amp;lt;b&amp;gt;QUIt&amp;lt;/b&amp;gt;), and F12 (&amp;lt;b&amp;gt;END&amp;lt;/b&amp;gt;) function keys are active at this time. &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Using Active Subsystem Help====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If you press F1 while in the Active Subsystem Update screen, the following Active Subsystem Help screen is displayed:  &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;table&amp;gt; &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;SUBSYSMGMT              Active Subsystem Help&lt;br /&gt;
 &lt;br /&gt;
 Use this screen to update the active subsystem definition. If the subsystem&lt;br /&gt;
 has been started and is currently active then the user has the option of&lt;br /&gt;
 refreshing the subsystem definition that is currently running. Only the&lt;br /&gt;
 following fields are supported for active update at this time:&lt;br /&gt;
   . Log user into M204&lt;br /&gt;
   . Log user out of M204&lt;br /&gt;
   . Auto Commit&lt;br /&gt;
   . Maximum Iterations&lt;br /&gt;
   . Account&lt;br /&gt;
   . Disconnect&lt;br /&gt;
   . Informational&lt;br /&gt;
   . Error&lt;br /&gt;
   . Login Procedure&lt;br /&gt;
   . Error Procedure&lt;br /&gt;
 In order to update APSY fields that are not supported for active update,&lt;br /&gt;
 the user must stop and restart the subsystem.&lt;br /&gt;
 Use the PF key below to move to the next screen:&lt;br /&gt;
 PF 3 = QUIT      Does NOT UPDATE active subsystem definition.&lt;br /&gt;
                  Returns to Subsystem Management primary screen.&lt;br /&gt;
 PF12 = END       Updates active subsystem definition.&lt;br /&gt;
                  Returns to Subsystem Management primary screen.&lt;br /&gt;
&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;
====Leaving the active subsystem unchanged====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If you press F3 or enter &amp;lt;code&amp;gt;QUIT&amp;lt;/code&amp;gt; in the Active Subsystem Update screen, you leave the active subsystem unchanged and return to the Subsystem Management Facility screen. The changes you made go into effect the next time the subsystem is started&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Updating the active subsystem====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Press F12 or enter &amp;lt;code&amp;gt;END&amp;lt;/code&amp;gt; to update the active subsystem definition. The changes to the dynamic attributes go into effect immediately. Non-dynamic changes do not take effect until the next time the subsystem is started. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;If the update is successful, you are returned to SUBSYSMGMT main menu screen without any confirmation messages displayed.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;If the update is unsuccessful, one of the following messages is displayed on the main menu screen: &lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;SUM014 Unable to update active definition for subsystem: name &lt;br /&gt;
SUM015 Unable to update active definition, name is no longer active&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;
====Understanding the Dictionary/204 data definition errors====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;SUM014&amp;lt;/code&amp;gt; is displayed if an error occurs while attempting to update the active definition. The reason for the error can be found on the audit trail with one of the following errors: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;M204.1457 UNABLE TO SCAN LIST OF SUBSYSTEM names&lt;br /&gt;
 &lt;br /&gt;
M204.1685 SUBSYSTEM name DOES NOT EXIST&lt;br /&gt;
 &lt;br /&gt;
M204.2253 SUBSYSTEM name, record type - RECORD CONTAINS INVALID DATA&lt;br /&gt;
 &lt;br /&gt;
M204.2391 SUBSYSTEM name, record type - TRANSLATION FAILED FOR FIELD fieldname&lt;br /&gt;
 &lt;br /&gt;
M204.2395 SUBSYSTEM name, record type - RECORD MISSING&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;SUM015&amp;lt;/code&amp;gt; is displayed if the subsystem is stopped while attempting to update the active definition. The following error message is generated on the audit trail:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;M204.2647 UNABLE TO UPDATE ACTIVE DEFINITION, &amp;lt;name&amp;gt; IS NO LONGER ACTIVE.&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Limits to dynamic subsystem attribute changes====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The following table lists the subsystem attributes that you can change. You can make changes on the Operational Parameters screen in SUBSYSMGMT: &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;Operational Parameters you can change&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;Operational 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;th&amp;gt;Log user into M204 &amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;The user is logged into &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; with the subsystem name as the USERID&amp;lt;/td&amp;gt;&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;Log user out of M204 &amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;The user is logged out upon leaving subsystem &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Auto Commit &amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; A User Language COMMIT/RELEASE statement is run at the end of each procedure&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Maximum Iterations &amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Maximum number of consecutive times you can invoke the same procedure before the ERROR procedure is 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;th&amp;gt;Account &amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;The account value other than the one used at logon&amp;lt;/td&amp;gt;&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;Disconnect &amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Whether to display a system disconnect 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;Informational &amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Whether to display &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; informational 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;th&amp;gt;Error &amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Whether to display &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; error 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;
You can change the following on the Procedure Specifications screen in SUBSYSMGMT:&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;Procedure &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;th&amp;gt;Login &amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;First procedure that is invoked for every 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;th&amp;gt;Error &amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Procedure that is invoked if an error occurs when a subsystem is running&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 you dynamically change the name of the Login procedure or the Error procedure, the new name must be defined in the in-core procedure dictionary. You cannot add new procedures to a subsystem procedure file that participates in procedure locking once the subsystem has been started and have those procedures included by the subsystem. Therefore, if you change the name of the login or error procedure that resides in a file that participated in procedure locking, then that procedure must have existed when the subsystem was started. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Dynamically refreshing procedure compilation with the REFRESH SUBSYSPROC command===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The &amp;lt;var&amp;gt;[[REFRESH SUBSYSPROC command|REFRESH SUBSYSPROC]]&amp;lt;/var&amp;gt; command discards the existing precompilation and precompiles the first time through for each SYSCLASS. Once a procedure is refreshed, the subsystem includes the new version of the procedure the next time that procedure is invoked.&lt;br /&gt;
The newer version of the procedure is compiled and saved in CCATEMP for subsequent execution. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The &amp;lt;var&amp;gt;REFRESH SUBSYSPROC&amp;lt;/var&amp;gt; command optionally copies a procedure from an open file (or group) into another open subsystem file (or group) and updates the APSY in-core procedure dictionary with the new procedure text page. In group context, the &amp;lt;var&amp;gt;REFRESH SUBSYSPROC&amp;lt;/var&amp;gt; command replaces and refreshes only procedures that participate in procedure locking, based on the &amp;lt;var&amp;gt;NUMLK&amp;lt;/var&amp;gt; parameter. &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Generating success messages====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Successful execution of the &amp;lt;var&amp;gt;REFRESH SUBSYSPROC&amp;lt;/var&amp;gt; command generates the following confirmation messages:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;M204.2665 procname REFRESHED IN SUBSYSTEM &amp;lt;i&amp;gt;subsystem-name&amp;lt;/i&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If a &amp;lt;var&amp;gt;FROM&amp;lt;/var&amp;gt; clause is specified, the following message is produced:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;M204.2666 &amp;lt;i&amp;gt;procname&amp;lt;/i&amp;gt; REPLACED IN FILE &amp;lt;i&amp;gt;filename&amp;lt;/i&amp;gt; [IN GROUP &amp;lt;i&amp;gt;groupname&amp;lt;/i&amp;gt;]&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Generating error messages====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The &amp;lt;var&amp;gt;REFRESH SUBSYSPROC&amp;lt;/var&amp;gt; command may fail under the following circumstances:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;If you do not have Refresh privileges to issue the command, the command fails, the procedure is not refreshed, and the following message is generated:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;M204.0930 REQUIRES SUBSYSTEM COMMAND PRIVILEGE&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 the procedure is not defined in an active subsystem, the command fails, the procedure is not refreshed, and the following message is generated:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;M204.2668: &amp;lt;i&amp;gt;procname&amp;lt;/i&amp;gt; NOT FOUND IN ANY ACTIVE SUBSYSTEM&lt;br /&gt;
&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;If a procedure is not found in the file named in the &amp;lt;var&amp;gt;FROM&amp;lt;/var&amp;gt; clause, or if the user does not have appropriate file privileges to copy procedures, the following message is generated:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;M204.1158: CAN&#039;T COPY PROCEDURE: &amp;lt;i&amp;gt;procname&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;If the subsystem file (or group) is out of space to copy the procedure, the command fails, the procedure is not refreshed, and the following message is generated:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;M204.1483: NOT ENOUGH TABLED SPACE TO STORE PROCEDURE&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 another user is processing the procedure, the following message is generated:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;M204.2669: PROCEDURE &amp;lt;i&amp;gt;procname&amp;lt;/i&amp;gt; IS IN USE BY SUBSYSTEM &amp;lt;i&amp;gt;subsys-name&amp;lt;/i&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;
====Understanding REFRESH SUBSYSPROC command privileges====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Privileges to issue the &amp;lt;var&amp;gt;REFRESH SUBSYSPROC&amp;lt;/var&amp;gt; command are set on the SUBSYSMGMT [[#Subsystem Classes screen|Subsystem Classes screen]] using the &amp;lt;b&amp;gt;Refresh&amp;lt;/b&amp;gt; field on the &amp;lt;b&amp;gt;Command Privileges&amp;lt;/b&amp;gt; line. The input to this field is either &amp;lt;code&amp;gt;Y&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt;, where &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; is the default. To issue the &amp;lt;var&amp;gt;REFRESH SUBSYSPROC&amp;lt;/var&amp;gt; command, set the &amp;lt;b&amp;gt;Refresh&amp;lt;/b&amp;gt; value to &amp;lt;code&amp;gt;Y&amp;lt;/code&amp;gt;.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Subsystem processing====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When you refresh an active subsystem procedure, the following occurs:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Precompiled procedures are recompiled for each SCLASS.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;While a procedure is being refreshed, the procedure is locked. While a procedure is locked, other users cannot access it. The length of time that the procedure is stopped is as short as possible. &lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
However, if a subsystem attempts to include a procedure that is in the process of being refreshed, the APSY tries to invoke the procedure a few times before giving up. If the APSY fails to invoke the procedure, then the subsystem error procedure is invoked with the error global set to &amp;lt;code&amp;gt;RFR&amp;lt;/code&amp;gt;. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You must write an error procedure instructing your subsystem how to respond to various errors.&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;
====Handling a blocked refresh for a subsystem procedure====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If an APSY subsystem procedure with the subsystem precompile prefix is compiled, and the procedure is found in an unlocked subsystem procedure file, the following message is generated:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;M204.0468: COMPILATION NOT SAVED - INCLUDE FROM UNLOCKED FILE&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Using the SUSPEND SUBSYSTEM command====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Rocket Software recommends that you issue the &amp;lt;var&amp;gt;[[SUSPEND SUBSYSTEM command|SUSPEND SUBSYSTEM]]&amp;lt;/var&amp;gt; command and wait for the active users to exit. If you do not wait, you could have the following problem. The subsystem, which has logically related procedures, is suspended and a user invokes a procedure whose higher-level or lower-level procedure has not been updated and refreshed yet.&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Privileges to issue the &amp;lt;var&amp;gt;SUSPEND SUBSYSTEM&amp;lt;/var&amp;gt; command are set in the SUBSYSMGMT &amp;quot;Subsystem Classes&amp;quot; screen: &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 you issue a SUSPEND SUBSYSTEM command when... &amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;The subsystem is set 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;No active users are in the application subsystem &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Suspended 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;Active users are in the subsystem &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Suspending state. Current, active users continue to use the subsystem, but new users cannot enter it. After all users exit the subsystem, it is set to the Suspended state.&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;
====Monitoring the subsystem====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can issue a &amp;lt;var&amp;gt;MONITOR SUBSYSTEM&amp;lt;/var&amp;gt; command to check the status &amp;amp;mdash; such as Drain or Suspend &amp;amp;mdash; of the subsystem, as well as the number of users still running. Once a subsystem is fully suspended and the number of users is zero (0), you can safely refresh a set of logical procedures.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If you suspend a subsystem that still has active users, the &amp;lt;var&amp;gt;STATUS&amp;lt;/var&amp;gt; option from the &amp;lt;var&amp;gt;MONITOR SUBSYSTEM&amp;lt;/var&amp;gt; command is set to &amp;lt;var&amp;gt;SUSPENDING&amp;lt;/var&amp;gt;. When a subsystem is fully suspended with no active users, the &amp;lt;var&amp;gt;STATUS&amp;lt;/var&amp;gt; option from the &amp;lt;var&amp;gt;MONITOR SUBSYSTEM&amp;lt;/var&amp;gt; command is set to &amp;lt;var&amp;gt;SUSPENDED&amp;lt;/var&amp;gt;. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If the subsystem is in the process of suspending, the following message is generated:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;M204.2659 &amp;lt;i&amp;gt;subsys-name&amp;lt;/i&amp;gt; SET TO SUSPEND, REMAINING USERS=&amp;lt;i&amp;gt;n&amp;lt;/i&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====SUSPEND SUBSYSTEM command messages====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The &amp;lt;var&amp;gt;SUSPEND SUBSYSTEM&amp;lt;/var&amp;gt; command may produce the following messages:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;When a subsystem is successfully suspended, the following message is generated:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;M204.2661 SUBSYSTEM &amp;lt;i&amp;gt;subsys-name&amp;lt;/i&amp;gt; SUSPENDED&lt;br /&gt;
&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;When there are still active users in the subsystem, the following message is generated:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;M204.2659 &amp;lt;i&amp;gt;subsys-name&amp;lt;/i&amp;gt; SET TO SUSPEND, REMAINING USERS = &amp;lt;n&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;If you issue the &amp;lt;var&amp;gt;SUSPEND SUBSYSTEM&amp;lt;/var&amp;gt; command without Subsystem Suspend privileges defined for your SCLASS, the following message is generated:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;M204.0930 REQUIRES SUBSYSTEM COMMAND PRIVILEGE&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;SUSPEND SUBSYSTEM&amp;lt;/var&amp;gt; command is valid against only an active subsystem. If the subsystem has not been started, the following message is generated:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;M204.1126 SUBSYSTEM &amp;lt;i&amp;gt;name&amp;lt;/i&amp;gt; MUST BE STARTED&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 the subsystem is in &amp;lt;var&amp;gt;TEST&amp;lt;/var&amp;gt; mode, it is locked from other users, so the following message is generated:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;M204.0448 SUBSYSTEM TEST IN PROGRESS, COMMAND REJECTED&lt;br /&gt;
&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;If a subsystem is in the process of starting, but not yet fully active, the following message is generated:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;M204.2311 SUBSYSTEM &amp;lt;i&amp;gt;subsys-name&amp;lt;/i&amp;gt; IS BEING STARTED&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 the subsystem was set to Stop and is waiting for all active users to quit, the following message is generated:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;M204.0446 SUBSYSTEM &amp;lt;i&amp;gt;subsys-name&amp;lt;/i&amp;gt; IS TEMPORARILY DISABLED&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 the subsystem requires users to log into &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; and you are not logged in, the following message is generated:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;M204.1031 PLEASE LOGIN&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 an error prevents the subsystem from being suspended, the following message is generated. The preceding message states the cause of the error.&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;M204.2656 UNABLE TO SUSPEND SUBSYSTEM &amp;lt;i&amp;gt;subsys-name&amp;lt;/i&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;div id=&amp;quot;resume subsystem&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
====Using the RESUME SUBSYSTEM command====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When you have completed refreshing a suspended subsystem, you can reactivate it with a &amp;lt;var&amp;gt;[[RESUME SUBSYSTEM command|RESUME SUBSYSTEM]]&amp;lt;/var&amp;gt; command.&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Privileges to issue the &amp;lt;var&amp;gt;RESUME SUBSYSTEM&amp;lt;/var&amp;gt; command are set in the SUBSYSMGMT &amp;quot;Subsystem Classes&amp;quot; screen.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The &amp;lt;var&amp;gt;RESUME SUBSYSTEM&amp;lt;/var&amp;gt; command may generate the following messages:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;When a subsystem successfully resumes, the following message is generated:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;M204.2657 SUBSYSTEM &amp;lt;i&amp;gt;subsys-name&amp;lt;/i&amp;gt; RESUMED&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 issue the &amp;lt;var&amp;gt;RESUME SUBSYSTEM&amp;lt;/var&amp;gt; command without Subsystem Resume privileges defined for your SCLASS, the following message is generated:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;M204.0930 REQUIRES SUBSYSTEM COMMAND PRIVILEGE&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;RESUME SUBSYSTEM&amp;lt;/var&amp;gt; command is valid against only a suspended subsystem. If the subsystem was not suspended, the following message is generated:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;M204.2658 SUBSYSTEM &amp;lt;i&amp;gt;subsys-name&amp;lt;/i&amp;gt; NOT IN SUSPEND STATE&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;RESUME SUBSYSTEM&amp;lt;/var&amp;gt; command is valid against only a suspended subsystem. If the subsystem has not been started, the following message is generated:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;M204.1126 SUBSYSTEM &amp;lt;i&amp;gt;subsys-name&amp;lt;/i&amp;gt; MUST BE STARTED&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 the subsystem is in Test mode, it is inactive for other users, so the following message is generated:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;M204.0448 SUBSYSTEM TEST IN PROGRESS, COMMAND REJECTED&lt;br /&gt;
&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;If a subsystem is in the process of starting, but not yet fully active, the following message is generated:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;M204.2311 SUBSYSTEM &amp;lt;i&amp;gt;subsys-name&amp;lt;/i&amp;gt; IS BEING STARTED&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 the subsystem was set to stop and is waiting for active users to quit, the following message is generated:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;M204.0446 SUBSYSTEM &amp;lt;i&amp;gt;subsys-name&amp;lt;/i&amp;gt; TEMPORARILY DISABLED&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 the subsystem requires users to be logged in to &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; and you are not logged in, the following message is generated:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;M204.1031 PLEASE LOGIN&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 an error prevents the subsystem from resuming processing, the following message is generated. The previous message states the cause of the error.&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;M204.2655 UNABLE TO RESUME SUBSYSTEM &amp;lt;i&amp;gt;subsys-name&amp;lt;/i&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;
===Using precompilable procedures with commands===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If you want to conditionally compile and save a SOUL request through the use of dummy string comments, then you must ensure that the value of the dummy string is the same for all SOUL statements for that request. Otherwise, unpredictable results occur. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
In addition, the loading user will invoke the request that was conditionally compiled by the compiling user. This behavior is simply noted as a reminder.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If a precompiled procedure issues the &amp;lt;var&amp;gt;INCLUDE&amp;lt;/var&amp;gt; command to compile and run a SOUL request, the &amp;lt;var&amp;gt;INCLUDE&amp;lt;/var&amp;gt; command is saved, not the compilation of the request that was included.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Dummy string substitution does not take place when saving commands that contain dummy strings. Instead, when the saved commands are loaded and executed, the current value of the dummy string is used. For example, if you include the following command in a precompiled procedure, whatever is currently in the global &amp;lt;code&amp;gt;COMMAND&amp;lt;/code&amp;gt; is executed.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;?&amp;amp;amp;COMMAND&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Procedures that include multiple &amp;lt;var&amp;gt;BEGIN&amp;lt;/var&amp;gt;/&amp;lt;var&amp;gt;END&amp;lt;/var&amp;gt; blocks are not eligible for precompilation.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Handling subsystem error procedures===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If a subsystem error procedure is cancelled due to attempted terminal I/O, and the return code is one of the following &amp;amp;mdash; &amp;lt;code&amp;gt;CAN&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;HNG&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;HRD&amp;lt;/code&amp;gt;, or &amp;lt;code&amp;gt;SFT&amp;lt;/code&amp;gt; &amp;amp;mdash; the error procedure cannot attempt to issue any of the following SOUL statements:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;PRINT&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;READ&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;READ MENU&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;SCREEN&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;SKIP&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;$$ prompts&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;$Read&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Or any other statement that writes to the user&#039;s terminal&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
All other SOUL statements are permitted.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt; &amp;lt;!-- end of toclimit 3 div --&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>JDamon</name></author>
	</entry>
	<entry>
		<id>https://m204wiki.rocketsoftware.com/index.php?title=Tracking_system_activity_(CCAJRNL,_CCAAUDIT,_CCAJLOG)&amp;diff=120282</id>
		<title>Tracking system activity (CCAJRNL, CCAAUDIT, CCAJLOG)</title>
		<link rel="alternate" type="text/html" href="https://m204wiki.rocketsoftware.com/index.php?title=Tracking_system_activity_(CCAJRNL,_CCAAUDIT,_CCAJLOG)&amp;diff=120282"/>
		<updated>2024-09-10T21:14:45Z</updated>

		<summary type="html">&lt;p&gt;JDamon: /* Searching multiple tapes for journal and off load data */&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 of the journal data sets==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
This topic discusses the journal data sets you can create and use in &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt;, how to manage them, and the utilities you can use to report on and analyze the &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; information collected. The system manager can set up the following journal data sets, which are not part of &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; installation.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The data sets are CCAJRNL, CCAAUDIT, and CCAJLOG. You set each up as:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;A ddname in z/OS&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;A FILEDEF in z/VM&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;A DLBL in z/VSE&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===CCAJRNL===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The complete repository of &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; system activity and data that would be used in recovery is CCAJRNL. The CCAJRNL file collects all update information used to reconstruct the database during recovery and all other activity history, such as messages and statistics, in an unformatted, therefore unreadable, binary format.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===CCAAUDIT and CCAJLOG===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can also create a CCAAUDIT and/or a CCAJLOG file to track information. CCAAUDIT and CCAJLOG are comprised of the same &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; audit trail data, however, differently. The activity history or audit trail is comprised of:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Important characteristics of a run&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;All error messages encountered during a run&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;All communications with the operator&#039;s console&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Input lines from Online terminals&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;HLI calls&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Utilization statistics&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Information specifically directed to the journal/audit trail by users &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Watching your system in action: CCAAUDIT====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The CCAAUDIT file, also known as the audit trail, logs information about a &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; run and prints the information in readable format for the terminal screen while processes are running or to paper.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Improving recovery performance: CCAJLOG====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The CCAJLOG file off loads the audit trail information into itself, so that the CCAJRNL contains only the information required for RESTART recovery. Recovery performance is improved, because the audit trail information does not have to be read and rejected for recovery.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Version-specific journals===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Journals created by &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; prior to V7R1.0 cannot by processed in V7R1.0. The reverse is also true: journals created in V7R1.0 cannot be processed by an earlier version 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;
 &lt;br /&gt;
==Using Model 204 journal files==&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; system managers and file managers use the journal files in some of the following ways:&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;Task &amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Journal used &amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Utility/command used&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;Generate an audit trail that can be viewed during processing &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;CCAAUDIT&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;Generate an audit trail for printing out later &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td nowrap&amp;gt;CCAJRNL, CCAJLOG &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Audit204 utility&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Regenerate a file to complete media recovery&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;CCAJRNL &amp;lt;br&amp;gt;(ddname CCAGEN) &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;REGENERATE command&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Recover &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; following a system failure &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;CCAJRNL &amp;lt;br&amp;gt;(ddname CCARF) &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;RESTART command&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Extract a report &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;CCAJRNL&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;UTILJ utility&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Performance tuning by analyzing statistics &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;CCAJRNL&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Audit204 utility or site written analysis program&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 &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; system manager is expected to create the CCAJRNL file at their site for recovery purposes. The &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; file manager may be responsible for using the CCAJRNL file to regenerate data files.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Creating and generating CCAJRNL==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
A journal is generated if: &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;SYSOPT&amp;lt;/var&amp;gt; parameter includes the 128 specification.&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You must set &amp;lt;var&amp;gt;BLKSIZE&amp;lt;/var&amp;gt; for CCAJRNL to not less than 6749 on up to 32K. Buffers are written to CCAJRNL either when a transaction is committed or when the buffer fills. Frequent commits may result in many short blocks/buffers being written to CCAJRNL.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;A CCAJRNL is defined with BLKSIZE set to the minimum, 6749, for:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;z/OS, a DD statement&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;z/VM, a FILEDEF&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Statistics generated in an audit trail line are presented in [[Using system statistics#User statistics entries (Type 9)|User statistics entries (Type 9)]]. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The use of CCAJRNL in recovery procedures is explained in [[System and media recovery#Recovery data sets and job control|Recovery data sets and job control]]. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
How to use CCAJRNL to regenerate a data set is discussed&lt;br /&gt;
in [[Media recovery]].&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
CCAJRNL may take multiple extents and may span multiple volumes, since it is read forward-only. Its size cannot be limited in a way similar to the CHKPOINT data set (see [[Checkpoints: Storing before-images of changed pages#Limiting the size of CHKPOINT|Limiting the size of CHKPOINT]]), because CCAJRNL records all update activity in an Online, which may be required in a subsequent REGENERATE or RESTART process.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===CCAJRNL as single data set or stream===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can define CCAJRNL as a single data set or as a stream. Using a &amp;lt;var&amp;gt;[[DEFINE STREAM command|DEFINE STREAM]]&amp;lt;/var&amp;gt; command, you incorporate multiple journal data sets. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;For parallel and ring structures, see [[Configuring checkpoint and journal data streams#Example 1: Ring/parallel journal stream|Example 1: Ring/parallel journal stream]].&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;For GDG structure, see [[Configuring checkpoint and journal data streams#Perpetual journaling for z/OS|Perpetual journaling for z/OS]].  &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
==SWITCH STREAM command==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The &amp;lt;var&amp;gt;[[SWITCH STREAM command|SWITCH STREAM]]&amp;lt;/var&amp;gt; command switches a stream to the next member of a parallel, ring, concatenated, or Generation Data Group (GDG) stream. You can issue the &amp;lt;var&amp;gt;SWITCH STREAM&amp;lt;/var&amp;gt; command for the following streams: CCAJLOG, CCAJRNL, CHKPOINT, or CHKPNTS. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Using the SWITCH STREAM command===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When the &amp;lt;var&amp;gt;SWITCH STREAM&amp;lt;/var&amp;gt; command is issued, the following messages are produced:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;M204.2712: STREAM &amp;lt;i&amp;gt;streamname&amp;lt;/i&amp;gt; IS BEING SWITCHED&lt;br /&gt;
M204.2712: STREAM &amp;lt;i&amp;gt;streamname&amp;lt;/i&amp;gt; SWITCHED VIA COMMAND&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;When switching a journal stream, CCAJRNL or CCAJLOG, the currently active data set in that stream is closed. The next data set defined to the stream is opened when the next write to that stream is required. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;When switching a checkpoint stream, CHKPOINT or CHKPNTS, the currently active data set in that stream is closed after the next record is written to that data set.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If not in an extended quiesce, Rocket Software recommends that you follow a &amp;lt;code&amp;gt;SWITCH STREAM CCAJRNL&amp;lt;/code&amp;gt; command with a &amp;lt;var&amp;gt;CHECKPOINT&amp;lt;/var&amp;gt; command to ensure that you have a checkpoint in the current journal. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The &amp;lt;var&amp;gt;SWITCH STREAM command&amp;lt;/var&amp;gt; is sometimes useful for CCAJLOG and rarely required for CHKPOINT or CHKPNTS.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Journal block header information for SWITCH STREAM===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Some journal analysis utilities require additional journal information at sites that embrace GDG streams and the &amp;lt;var&amp;gt;SWITCH STREAM&amp;lt;/var&amp;gt; command as a means to keep their Onlines up for long periods. &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; includes this additional information in the header for each journal block. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
To ensure that the required information is present in the first block of each journal data set created by the &amp;lt;var&amp;gt;SWITCH STREAM&amp;lt;/var&amp;gt; command, the header has been expanded. This expansion makes the journal up to 4% larger than in previous releases.&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; Due to these changes in journal record layouts, CCAJRNL and CHKPOINT/CHKPNT data sets are not compatible with previous 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;
&amp;lt;p&amp;gt;&lt;br /&gt;
For the complete description of the header entry formats in the journal block, see [[Using system statistics#Header entries (Type 0)|Header entries (Type 0)]].&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
In pre-7.4.0 versions of Rocket &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt;, each Online environment might produce a single merged journal daily. If an Online was bounced during the day, then the various journals for the day were merged into a single daily journal. Usually the daily merged journal contained records from only one run. The single merged journal could be used to automate media recovery, rather than manually assemble the recovery job journal concatenation.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Using the &amp;lt;var&amp;gt;SWITCH STREAM&amp;lt;/var&amp;gt; command, a site can still prepare a daily merged journal. However, when the &amp;lt;var&amp;gt;SWITCH STREAM&amp;lt;/var&amp;gt; command is used, each journal merged does not begin with the initialization of the Online. This means that no Type 12 records or M204.0061 initialization messages are included. Although &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; recovery, including media recovery, can successfully process these merged journals, various journal analysis utilities cannot.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Using a SWITCH STREAM CCAJRNL command during extended quiesce===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
In pre-7.1.0 releases, if you used the checkpoint quiesce feature, a switch to the next journal member at checkpoint quiesce could occur only when CCAJRNL was defined as a ring stream.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
However, a switch at checkpoint quiesce may be desirable for all stream configurations of CCAJRNL: ring, parallel, concatenated, and GDG. The switch marks the point where the CCAJRNL data collected thus far is not needed in subsequent &amp;lt;var&amp;gt;REGENERATE&amp;lt;/var&amp;gt; processing against files backed up during the quiesce. If file backups or dumps are taken during the checkpoint quiesce, only CCAJRNL data collected after checkpoint quiesce is useful for &amp;lt;var&amp;gt;REGENERATE&amp;lt;/var&amp;gt; processing against those files.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
A checkpoint is automatically taken if you issue a &amp;lt;code&amp;gt;SWITCH STREAM CCAJRNL&amp;lt;/code&amp;gt; command while you are in extended quiesce, as shown 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;SWITCH command within extended quiesce&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;td&amp;gt;Step &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Command issued &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Purpose&amp;lt;/td&amp;gt;&lt;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;CHECKPOINT SET EXTENDED QUIESCE &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Enables extended quiesce&amp;lt;/td&amp;gt;&lt;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;CHECKPOINT or automated checkpoint&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The next checkpoint, automated or command initiated, begins the extended quiesce&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When the checkpoint is successful, the extended quiesce is entered. While in extended quiesce, you cannot issue a &amp;lt;var&amp;gt;CHECKPOINT&amp;lt;/var&amp;gt; command. However, you can issue a &amp;lt;var&amp;gt;SWITCH STREAM&amp;lt;/var&amp;gt; command, such as the following:&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;3&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;SWITCH STREAM CCAJRNL &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;When the checkpoint is successful, extended quiesce processing can begin for backups, SnapShots, or any activity that does not involve updating.&amp;lt;/td&amp;gt;&lt;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 nowrap&amp;gt;CHECKPOINT END EXTENDED QUIESCE&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Concludes extended quiesce. Should recovery be required due to a failure during extended quiesce, journals created prior to the &amp;lt;var&amp;gt;SWITCH STREAM&amp;lt;/var&amp;gt; command will not be required, as the last checkpoint resides in the current CCAJRNL member.&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;
This automated checkpoint functionality of &amp;lt;var&amp;gt;SWITCH STREAM CCAJRNL&amp;lt;/var&amp;gt; applies only during checkpoint quiesce. The automated checkpoint functionality is not supported for CCAJLOG, CHKPOINT, or CHKPNTS.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===SWITCH STREAM limitations===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
In order for a stream to be switched, there must be a target data set to switch to. If there is no target data set, 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.2712: MEMBER &amp;lt;i&amp;gt;membername&amp;lt;/i&amp;gt; IS INELIGIBLE FOR SWITCHING&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Consider the following example:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;DEFINE STREAM CCAJRNL WITH SCOPE=SYSTEM PARALLEL=(JRNL1,JRNL2) MINAVAIL=2&lt;br /&gt;
DEFINE DATASET JRNL1  WITH SCOPE=SYSTEM DSN=CCAJRNL.JRNL1 OLD&lt;br /&gt;
DEFINE STREAM  JRNL2  WITH SCOPE=SYSTEM GDG=J2 CONTROL=J2CTL&lt;br /&gt;
DEFINE DATASET J2     WITH SCOPE=SYSTME DSN=CCAJRNL.GDGBASE.JRNL2 CATALOG -&lt;br /&gt;
                      GEN=+1 CYL PRI 500&lt;br /&gt;
DEFINE DATASET J2CTL  WITH SCOPE=SYSTEM DSN=CCAJRNL.GDGBASE.JRNL2.CTL OLD&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Since data set &amp;lt;code&amp;gt;JRNL1&amp;lt;/code&amp;gt; has no target data set for a switch, when the &amp;lt;code&amp;gt;JRNL1&amp;lt;/code&amp;gt; data set is marked full, the number of available parallel stream members (&amp;lt;var&amp;gt;MINAVAIL&amp;lt;/var&amp;gt;) drops to one, since only &amp;lt;code&amp;gt;JRNL2&amp;lt;/code&amp;gt; now has space available. Since the number of available members is now less than &amp;lt;var&amp;gt;MINAVAIL&amp;lt;/var&amp;gt;, the Online would stop with a &amp;quot;CCAJRNL full&amp;quot; message.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If before &amp;lt;code&amp;gt;JRNL1&amp;lt;/code&amp;gt; fills, a &amp;lt;code&amp;gt;SWITCH STREAM CCAJRNL&amp;lt;/code&amp;gt; command were issued, the following messages would be produced:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;M204.2712: MEMBER JRNL1 IS INELIGIBLE FOR SWITCHING&lt;br /&gt;
M204.2712: STREAM JRNL2 IS BEING SWITCHED&lt;br /&gt;
M204.2712: STREAM CCAJRNL - NOT ALL MEMBERS SWITCHED&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Member &amp;lt;code&amp;gt;JRNL1&amp;lt;/code&amp;gt; was not switched. However, if &amp;lt;code&amp;gt;JRNL1&amp;lt;/code&amp;gt; has not filled, the parallel stream will remain open because the number of available members (&amp;lt;var&amp;gt;MINAVAIL&amp;lt;/var&amp;gt;) is still 2. Stream &amp;lt;code&amp;gt;JRNL2&amp;lt;/code&amp;gt; always has a target data set to switch to since it is a GDG. Nevertheless, whenever &amp;lt;code&amp;gt;JRNL1&amp;lt;/code&amp;gt; fills, the minimum available members will be less than &amp;lt;var&amp;gt;MINAVAIL&amp;lt;/var&amp;gt;, the stream will be closed, and the run will terminate.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Because stream members are not locked before switch processing, and because all members are not switched at exactly the same time, the number of records in individual data sets of a parallel stream may not be identical. This is of no consequence to recovery or &amp;lt;var&amp;gt;REGENERATE&amp;lt;/var&amp;gt;, but should be noted. However, the total number of records in each member is identical. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Previously, you had to concatenate all journals into one data set or specify a concatenated &amp;lt;code&amp;gt;CCAGEN DD&amp;lt;/code&amp;gt; statement.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===SWITCH STREAM command for concatenated streams===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The same limitation exists for the last member in a concatenated stream. Since there is no additional member to switch to, 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.2712: STREAM &amp;lt;i&amp;gt;streamname&amp;lt;/i&amp;gt; IS INELIGIBLE FOR SWITCHING&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If all members of a stream are switched, 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.2712: STREAM CCAJRNL SWITCHED VIA COMMAND&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Handling streams without records===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You cannot switch a stream member that contains no records. So in the previous case, if the first G1 stream member has just become full and the newly opened (second) GDG member contains zero records, then a &amp;lt;code&amp;gt;SWITCH STREAM CCAJRNL&amp;lt;/code&amp;gt; command is not processed.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Since &amp;lt;code&amp;gt;J1&amp;lt;/code&amp;gt; is ineligible, and &amp;lt;code&amp;gt;G1&amp;lt;/code&amp;gt; (second member) is empty, no switch occurs. The messages issued are:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;M204.2712: MEMBER J1 IS INELIGIBLE FOR SWITCHING&lt;br /&gt;
M204.2712: MEMBER G1 IS EMPTY AND CANNOT BE SWITCHED&lt;br /&gt;
M204.2712: SWITCH WAS UNSUCCESSFUL&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Recovery parameters===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Use the following recovery parameters when generating a journal:&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;Set &amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Specifies...&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Comments&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;FRCVOPT &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;During file creation or with the &amp;lt;var&amp;gt;RESET&amp;lt;/var&amp;gt; command &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;File recovery options&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;If the file is included in system or media recovery, do not use &amp;lt;code&amp;gt;FRCVOPT=X&#039;04&#039;&amp;lt;/code&amp;gt;, which suppresses roll forward logging. &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;RCVOPT &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;On the JCL EXEC parameter or on User 0&#039;s parameter line &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Type of information written to the journal&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
X&#039;08&#039; writes the roll forward information that is required for system and media recovery to CCAJRNL.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
X&#039;09&#039; also causes preimages to be written to the CHKPOINT data set for roll back recovery. Use this setting if you want to enable full recovery.&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;
===Writing error messages to the journal data set===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can control which error messages or classes of error messages to store in CCAJRNL, CCAAUDIT, or CCAJLOG using &amp;lt;var&amp;gt;[[MSGCTL command|MSGCTL]]&amp;lt;/var&amp;gt; command parameters.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===ERRMSGL: Setting the length of saved error messages===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The &amp;lt;var&amp;gt;[[ERRMSGL parameter|ERRMSGL]]&amp;lt;/var&amp;gt; parameter provides the ability to set the number of bytes to use for saved error messages &amp;amp;mdash; messages 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;. You can set &amp;lt;var&amp;gt;ERRMSGL&amp;lt;/var&amp;gt; to any value from 80 to 256 &amp;amp;mdash; that length includes a count byte. The value is rounded up to an 8-byte multiple. For example, if you set &amp;lt;code&amp;gt;ERRMSGL=99&amp;lt;/code&amp;gt;, it will be rounded to 104, that value is reduced by 1 for the count byte, thus allowing up to 103 characters of an error message to be saved.&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Server size requirements for saved error messages====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Increasing &amp;lt;var&amp;gt;ERRMSGL&amp;lt;/var&amp;gt; increases the requirement of the fixed table size of a server. This may necessitate an increase in you &amp;lt;var&amp;gt;SERVSIZE&amp;lt;/var&amp;gt; settings. The size requirement for &amp;lt;var&amp;gt;ERRMSGL&amp;lt;/var&amp;gt; is:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;3 * (ERRMSGL - 80)&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
For example, increasing &amp;lt;var&amp;gt;ERRMSGL&amp;lt;/var&amp;gt; to its maximum of 256 would increase the fixed server requirement by &amp;lt;code&amp;gt;(3 * (256-80) -1)&amp;lt;/code&amp;gt;, or 527 bytes. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
For a full update to the &amp;lt;var&amp;gt;SERVSIZE&amp;lt;/var&amp;gt; formula, see [[Defining the runtime environment (CCAIN)#Calculating fixed table size|Calculating fixed table size]].&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
==Using the CCAJRNL data set==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
During a production Online run, roll forward recovery information is written to the CCAJRNL data set. Additionally, a substantial amount of unformatted audit trail data is also written. When recovery is required and after roll back recovery has completed, that data set (during recovery its ddname is CCARF) is read and the roll forward information is extracted and used to reapply all committed updates up to the time of the system failure.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;caption&amp;quot; style=&amp;quot;width:468px&amp;quot;&amp;gt;CCAJRNL collecting all roll forward and audit information&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;figure&amp;quot;&amp;gt;[[File:SM13ccaprint1_sep05.gif|468px]] &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Performance efficiencies using CCAJRNL==&lt;br /&gt;
 &lt;br /&gt;
===Choosing whether to define CCAAUDIT===&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; operates more efficiently using CCAJRNL without CCAAUDIT, because it is not also generating a separate audit trail. If you need printed information and your site does not maintain CCAAUDIT, you can extract the audit trail from CCAJRNL in a separate step using AUDIT204. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If you need printed run information immediately upon completion of the job and you also need Roll Forward or Accounting facilities, create both the journal (CCAJRNL) and the audit trail (CCAAUDIT). &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can use CCAJRNL in place of CCAAUDIT when you do not need audit trail data immediately following run termination.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Allocating multiple journal buffers===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Setting &amp;lt;var&amp;gt;NJBUFF&amp;lt;/var&amp;gt; to a value (&amp;lt;code&amp;gt;NSERVS + NSUBTKS + 1&amp;lt;/code&amp;gt;) allocates multiple journal buffers and ensures that a free buffer is always available for the journal. In z/VM, the &amp;lt;var&amp;gt;NJBUFF&amp;lt;/var&amp;gt; parameter is stacked in the EXEC that issues all the FILEDEFs.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Using the CCAJLOG data set===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If you allocate CCAJLOG, the unformatted audit trail data is written to it and only roll forward recovery data is written to CCAJRNL. Reducing the number of records written to CCAJRNL improves recovery performance and also reduces the likelihood of filling CCAJRNL, which would result in run termination.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The number of buffers allocated for CCAJLOG is determined by the parameter, &amp;lt;var&amp;gt;[[NLBUFF parameter|NLBUFF]]&amp;lt;/var&amp;gt;, which defaults to five. Only full blocks/buffers are written to CCAJLOG.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;The size of these buffers is determined by the &amp;lt;var&amp;gt;BLKSIZE&amp;lt;/var&amp;gt; parameter defined for the CCAJLOG data set which may be as large as 32K.&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 produce a formatted CCAAUDIT report from CCAJLOG using the AUDIT204 utility. In this case, the CCAJLOG is referenced via the ddname CCAJRNL. &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;caption&amp;quot; style=&amp;quot;width:466px&amp;quot;&amp;gt;CCAJRNL collecting roll forward data; &amp;lt;br/&amp;gt;CCAJLOG collecting audit trail data&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;figure&amp;quot;&amp;gt;[[File:SM13ccaprint2_sep05.gif|466px]] &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Defining the CCAJLOG stream====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can define a CCAJLOG using any of the stream definitions: concatenate, parallel, ring, or GDG; see [[DEFINE STREAM command]].&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===M204JLOG assembler exit===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The assembler exit, M204JLOG, can be invoked if linked in. This exit is initiated when a &amp;lt;var&amp;gt;SWITCH&amp;lt;/var&amp;gt; command is issued against a CCAJLOG GDG stream. The exit may be any AMODE and need not be reentrant.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Coding considerations====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
On entry, the registers contain:&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:R4  = A(GDG LIOD)&lt;br /&gt;
:R9  = A(new switch control record) (see CRD dsect)&lt;br /&gt;
:R13 = A(OSW save area)&lt;br /&gt;
:R14 = return address&lt;br /&gt;
:R15 = base address&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; expects no output from the exit. All registers must be restored before return. If any &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; data structures are modified by the exit, unpredictable results may occur.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;blockquote class=&amp;quot;note&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;b&amp;gt;Note:&amp;lt;/b&amp;gt; If the user exit abends, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; issues an error and produces a snap. This leaves &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; waiting for the switch to complete. At that point the switch will never complete, no further Online activity is possible, and the Online must be cancelled.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
In addition, while the M204JLOG user exit is running, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; cannot continue normal processing until a return from the exit is accomplished. For this reason, WAITs and I/Os inside the exit are strongly discouraged.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Sample M204JLOG Assembler exit====&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;M204JLOG  CSECT&lt;br /&gt;
M204JLOG  AMODE 31&lt;br /&gt;
M204JLOG  TITLE &#039;TEST THE MODEL 204 CCAJLOG USER EXIT&#039;&lt;br /&gt;
X10       EQU    10&lt;br /&gt;
X11       EQU    11&lt;br /&gt;
X12       EQU    12&lt;br /&gt;
X13       EQU    13&lt;br /&gt;
X14       EQU    14&lt;br /&gt;
X15       EQU    15&lt;br /&gt;
         STM   X14,X12,12(X13)    SAVE CALLERS REGISTERS&lt;br /&gt;
         LR    X12,X15            ESTABLISH BASE REGISTER&lt;br /&gt;
        USING  M204JLOG,X12&lt;br /&gt;
         LA    X10,SAVEAREA       GET A(LOCAL REGISTER SAVEAREA)&lt;br /&gt;
         ST    X10,8(,X13)        CHAIN OUR SAVEAREA TO CALLERS&lt;br /&gt;
         ST    X13,SAVEAREA+4     CHAIN CALLERS SAVEAREA TO OURS&lt;br /&gt;
         LA    X13,SAVEAREA       SET A(OUR SAVEAREA)&lt;br /&gt;
         WTO   &#039;M204JLOG EXIT INVOKED, DOING SOMETHING&#039;&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;* ******************************************************************* *&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;* * CUSTOMERS MAY PLACE CODE HERE TO DO WHATEVER THEY DESIRE.       * *&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;* ******************************************************************* *&lt;br /&gt;
         WTO   &#039;M204JLOG EXIT ENDING&#039;&lt;br /&gt;
         L     X13,4(,X13)        RESTORE CALLERS SAVEAREA ADDRESS&lt;br /&gt;
         ST    X10,16(X13)        SET RETURN CODE (R15)&lt;br /&gt;
         LM    X14,X12,12(X13)    RESTORE CALLERS REGISTERS&lt;br /&gt;
         BR    X14                RETURN TO CALLER&lt;br /&gt;
         DS    0D&lt;br /&gt;
SAVEAREA DS    18F                REGISTER SAVE AREA&lt;br /&gt;
        LTORG&lt;br /&gt;
         END&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Model 204 roll forward recovery with CCAJLOG===&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; operates more efficiently during roll forward recovery, if you have defined CCAJLOG. This is because CCAJRNL now contains only roll forward recovery data; CCAJLOG contains unformatted CCAAUDIT data, which does not have to be read and ignored during the roll forward recovery since it has been removed from CCAJRNL.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Separating transaction (CCAJRNL) and auditing (CCAJLOG) information===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Splitting audit trail records &amp;amp;mdash; messages and statistics &amp;amp;mdash; out from CCAJRNL and writing them to CCAJLOG improves recovery performance by reducing the size of CCAJRNL. This also reduces the likelihood of filling CCAJRNL. However, it does shift the possibility to CCAJLOG and if either CCAJRNL or CCAJLOG fills, the run comes down.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Regenerating files using CCAJRNL and CCAJLOG===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Sending audit trail data to CCAJLOG also speeds up the &amp;lt;var&amp;gt;REGENERATE&amp;lt;/var&amp;gt; processing, if that is required.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Considerations for CCAJLOG===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
By specifying CCAJLOG in the JCL or dynamically at the start of CCAIN, all messages and statistics are written to CCAJLOG. All recovery-type records are written to CCAJRNL. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;If you do not specify CCAJLOG, a CCAJRNL is maintained that collects recovery records, messages, and statistics. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;If CCAJLOG is specified but the open fails, the run terminates initialization.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;If CCAJLOG fills during a run, the run is terminated.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Set the &amp;lt;var&amp;gt;[[NLBUFF parameter|NLBUFF]]&amp;lt;/var&amp;gt; parameter to specify the number of buffers to use for CCAJLOG. If you do not specify a value for &amp;lt;var&amp;gt;NLBUFF&amp;lt;/var&amp;gt;, a default value of five is allocated. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Using the journals correctly===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If you create both a CCAJRNL file and a CCAJLOG file, you must use the CCAJLOG file as input to AUDIT204. And, you must continue to use the CCAJRNL file as input to &amp;lt;var&amp;gt;REGEN&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;RESTART&amp;lt;/var&amp;gt; commands; otherwise, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; issues one of the following messages:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;M204:2515: CCAJRNL DATASET IS INVALID FOR AUDIT 204 &lt;br /&gt;
M204:2515: CCAJLOG DATASET IS INVALID FOR {REGEN | RESTART}&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If you create both a CCAJLOG and CCAJRNL and you use the CCAJRNL as input to AUDIT204, AUDIT204 issues the following message and stops processing:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;NON-MESSAGE DATASET IS INVALID FOR CCAJRNL&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Although UTILJ can handle a CCAJLOG data set, the utility will, of course, find only message and statistics type records in CCAJLOG. So, if you ask for recovery journal entries, type 1-6, the output is empty, since they do not exist on the CCAJLOG.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Because audit trail information is stored in CCAJLOG, if you have written a custom application for statistics reports, use CCAJLOG for input.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
==CCAJRNL data set record layout==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The journal data set is composed of variable length records. Each record consists of a header, one or more journal entries, and a trailer. The format of the journal data set is subject to change with each release 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;
 &lt;br /&gt;
===Journal entry format===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Journal entries contain audit trail, statistical, and control information, or information used for recovery. Statistics are recorded in the journal as fullword hexadecimal counters. Space is allocated in a given journal statistics entry for all possible statistics, even if they are not being kept. The values for statistics that are not maintained, or do not have relevance to the current configuration of &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt;, are represented as hexadecimal zeros.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Each entry has the same general format: &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;Bytes&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;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt; 0-1&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Length&amp;lt;/td&amp;gt;&lt;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;Entry type&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; 3-n&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;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;
&amp;lt;p&amp;gt;&lt;br /&gt;
Offset 0 is a 2-byte hexadecimal field containing the length of the entry. (The only exception to this rule is the header entry, where the length is the length of the entire journal block.)&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Offset 2 is a 1-byte field, which identifies the type of the entry: file, system, or user.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Offset 3 is a variable-length data portion. The size and layout depends upon the type of entry.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The following table summarizes the journal entry types, including formatting layouts and statistical information. Use the layout and statistics tables in [[Using system statistics]] for developing customized software to extract particular information from the journal data set. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;caption&amp;gt;Summary of journal entry 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;Type&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Journal record&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt; X&#039;00&#039; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Header/Trailer&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt; X&#039;01&#039; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Recovery entry&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt; X&#039;02&#039; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Recovery entry&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt; X&#039;03&#039; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Recovery entry&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt; X&#039;04&#039; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Recovery entry&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt; X&#039;05&#039; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Recovery entry&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt; X&#039;06&#039; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Recovery entry&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt; X&#039;07&#039; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Unused&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt; X&#039;08&#039; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;System statistics&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt; X&#039;09&#039; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;User statistics&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt; X&#039;0A&#039; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;File statistics&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt; X&#039;0B&#039; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Discontinued audit trail text&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt; X&#039;0C&#039; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Initialization entry&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt; X&#039;0D&#039; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Possibly continued audit trail text&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt; X&#039;0E&#039; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Timestamp&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt; X&#039;0F&#039; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Merged journal brackets&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;
===Number of lines in the journal data set===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The number of lines in the journal are controlled by the &amp;lt;var&amp;gt;CAUDIT&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;LAUDIT&amp;lt;/var&amp;gt;, and &amp;lt;var&amp;gt;SYSOPT&amp;lt;/var&amp;gt; parameters.  &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====CAUDIT parameter====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The &amp;lt;var&amp;gt;[[CAUDIT parameter|CAUDIT]]&amp;lt;/var&amp;gt; parameter controls physical input lines from a terminal, procedure, some IFAM arguments, or full-screen input. &amp;lt;var&amp;gt;CAUDIT&amp;lt;/var&amp;gt; operates at physical line (card) level. It controls the auditing of input lines after line editing has been performed, but before line continuation is interpreted. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
&amp;lt;var&amp;gt;CAUDIT&amp;lt;/var&amp;gt; is set on any user parameter line at the beginning of CCAIN, and can be reset by a user with system manager privileges who logs in with that user number. (&amp;lt;var&amp;gt;CAUDIT&amp;lt;/var&amp;gt; is generally used only by Technical Support staff in special instances.)&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====LAUDIT parameter====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The &amp;lt;var&amp;gt;[[LAUDIT parameter|LAUDIT]]&amp;lt;/var&amp;gt; parameter controls logical input lines from a terminal or procedure, some IFAM arguments, and full screen information. &amp;lt;var&amp;gt;LAUDIT&amp;lt;/var&amp;gt; is useful in reconstructing events that lead to a system crash. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Set &amp;lt;var&amp;gt;LAUDIT&amp;lt;/var&amp;gt; on any user parameter (&amp;lt;var&amp;gt;IODEV&amp;lt;/var&amp;gt;) line or at the beginning of CCAIN. For example:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;PAGESZ=6184,NUSERS=1,NSERVS=1,NFILES=20,&lt;br /&gt;
LENQTBL=15,LAUDIT=5, ...&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
&amp;lt;var&amp;gt;LAUDIT&amp;lt;/var&amp;gt; can be reset by a user with system manager privileges who logs in with that user number.&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====SYSOPT parameter====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The &amp;lt;var&amp;gt;[[SYSOPT parameter|SYSOPT]]&amp;lt;/var&amp;gt; 32 option controls output of information that relates to system initialization or to an IFAM function call.&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Sizing the journal buffer===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
In z/OS and z/VM only, you can specify the &amp;lt;var&amp;gt;NJBUFF&amp;lt;/var&amp;gt; parameter on the EXEC statement to make journal entries of one user without interrupting other current users. Valid settings are the default &amp;lt;code&amp;gt;NJBUFF=1&amp;lt;/code&amp;gt; or, to ensure the availability of a free buffer:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;NJBUFF = NSERVS + NSUBTKS + 1&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
In z/OS only, if the setting of the NJBUFF parameter is greater than 1, the setting is automatically recalculated using the previous formula and the initial value of &amp;lt;var&amp;gt;NJBUFF&amp;lt;/var&amp;gt; is used to define the number of concurrent I/O operations (NCP) for the journal data set. Sizing &amp;lt;var&amp;gt;NJBUFF&amp;lt;/var&amp;gt; to the value calculated in the formula guarantees the optimal number of Network Control Programs (NCP) for the journal data set.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If you use the &amp;lt;var&amp;gt;NJBUFF&amp;lt;/var&amp;gt; option, specify &amp;lt;code&amp;gt;BLKSIZE=6749&amp;lt;/code&amp;gt; as the minimum journal buffer size to allow a full page to be written to a single journal buffer. The contents of a buffer are automatically written to CCAJRNL before the buffer is completely full.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Messages giving the number of journal buffers and the number of bytes allocated to the buffers are displayed at the end of the run.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Managing space requirements for all operating systems===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The space requirement for CCAJRNL is reduced, if CCAJLOG is enabled. However, CCAJRNL must still be sized to prevent B37, D37, or E37 abends, which will terminate the run and require recovery to get files to a state of logical and physical consistency. The same applies to CCAJLOG: If it fills, the run terminates and recovery is required. Generous secondary extents allocated to these data set also help avoid overflow problems.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Additional managing space requirement on z/OS====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
At a z/OS site, the most comprehensive way to avoid data set full problems is to define both CCAJRNL and CCAJOG as generation data groups (GDGs). See [[Configuring checkpoint and journal data streams#Perpetual journaling for z/OS|Perpetual journaling for z/OS]].&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
==Model 204 statistics==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
A statistic is written to CCAAUDIT only if its value is nonzero. However, all statistics, even those with zero values, are written to CCAJRNL (or CCAJLOG). &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Audit trail and journal statistics lines===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The statistics generated on audit trail lines are valuable in a study of the performance of an individual user or of the &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; system as a whole. The effect of configuration changes within &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; and with other jobs in the operating system can be determined by comparing statistics gathered in &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; runs.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Statistics described as percentages are multiplied by 10 (a value printed as 1000 represents 100 percent). &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Statistics described as averages are multiplied by 1000 (1000 represents 1.000).&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Output lines===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Statistics for each user and file active during a particular run are written to the journal and audit trail files in output lines that begin with &amp;lt;code&amp;gt;ST $$$&amp;lt;/code&amp;gt;. The output lines are written in groups of related lines that include: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;User lines, which you can monitor to identify active users and to help determine if individual applications are efficiently implemented&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;File lines&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;System lines, which you can watch &amp;amp;mdash; together with file lines &amp;amp;mdash; to signal shifting loads on the CPU, disks, and terminals &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 type of line written &amp;amp;mdash; user, file, or system &amp;amp;mdash; is specified by the value of the first parameter after the journal header.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Identifying subtypes===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The subtype &amp;amp;mdash; final, partial, performance, or since-last &amp;amp;mdash; within each type is specified by the value of the second parameter after the journal header. In the audit trail, the subtype is indicated by &amp;lt;code&amp;gt;USERID=&amp;lt;i&amp;gt;user-id&amp;lt;/i&amp;gt;&amp;lt;/code&amp;gt; (user statistics), &amp;lt;code&amp;gt;FILE=&amp;lt;i&amp;gt;filename&amp;lt;/i&amp;gt;&amp;lt;/code&amp;gt; (file statistics), and &amp;lt;code&amp;gt;SYSTEM=&amp;lt;i&amp;gt;Model-204-version&amp;lt;/i&amp;gt;&amp;lt;/code&amp;gt; (system statistics). &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Within each major type of statistics line, subtypes are produced under specified conditions: some are always produced, others are optional. Optional subtypes are produced if the appropriate parameters are set during system initialization. See [[Tracking system activity (CCAJRNL, CCAAUDIT, CCAJLOG)#Setting the NSUBTKS parameter|Setting the NSUBTKS parameter]]. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
==Monitoring statistics==&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; statistics that you can monitor are introduced in [[Using system statistics]]. The statistics are presented in alphabetical order with their stated purpose, followed by tables that identify their position in various layouts.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can monitor statistics using one or more of the following methods:     &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Print out the audit trail. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;View formatted or unformatted displays of all nonzero cumulative statistics for active users &amp;amp;mdash; individual, specified groups, and all users &amp;amp;mdash; and system activities.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Use the AUDIT204 or UTILJ utility program to extract and summarize statistics lines from the journal data set. See [[#AUDIT204 utility|the AUDIT204 utility]] and [[System and media recovery#Using the UTILJ utility|Using the UTILJ utility]]&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Write optional records to the System Management Facilities (SMF) data set; see [[Using system statistics#System Management Facilities|System Management Facilities]]. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Setting the NSUBTKS parameter===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Gathering partial or performance statistics lines requires a &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; pseudo subtask. &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; uses pseudo subtasks to perform actions that must be done regularly but that cannot be assigned to a specific user. To accommodate partial and performance statistics lines you might need to increase the &amp;lt;var&amp;gt;NSUBTKS&amp;lt;/var&amp;gt; parameter on User 0&#039;s parameter line, which controls the maximum number of [[Controlling system operations (CCAIN)#Pseudo subtasks|pseudo subtasks]] that can be allocated. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Setting parameters to collect certain statistics===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You must set various parameters to collect certain statistics. The following table lists the statistics and the corresponding parameter(s):&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;caption&amp;gt;Parameters to set to collect certain statistics&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;Statistic &amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Parameter to set to nonzero&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;BLKCFRE &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;CFRJRNL and CFRLOOK&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;BLKI&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;RPTCNT and SMPLTIM&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;BLKO&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;RPTCNT and SMPLTIM&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;BLKRLK &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;CFRJRNL and CFRLOOK&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;LONGUPDTIME(MS)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;MAXUD&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;LONGUPDTS&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;MAXUD&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;PNDGTIME&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;DKUPDTWT&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;REDY &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;RPTCNT and SMPLTIM&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;RUNG &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;RPTCNT and SMPLTIM&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;SMPLS&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;RPTCNT and SMPLTIM&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;SWPG&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;RPTCNT and SMPLTIM&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;USRS&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;RPTCNT and SMPLTIM&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;WTCFR &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;CFRJRNL and CFRLOOK&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;WTRLK &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;CFRJRNL and CFRLOOK&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;WTSV &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;RPTCNT and SMPLTIM&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;
==Audit trail format==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Whether printed to CCAAUDIT, either directly from ONLINE/BATCH204 (with two exceptions), or from AUDIT204,&lt;br /&gt;
the format of an audit trail line is shown below.  The two exceptions are:&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
The YEARFORM 4 parameter is not available in ONLINE/BATCH204; it is only available in AUDIT204.&lt;br /&gt;
This means that a 4-digit year cannot be printed in a CCAAUDIT generated by ONLINE/BATCH204.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
The TIMEHH parameter is not available in ONLINE/BATCH204; it is only available in AUDIT204.&lt;br /&gt;
This means that the time stamp with hundredths of a second cannot be printed in a CCAAUDIT generated&lt;br /&gt;
by ONLINE/BATCH204.  &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 class=&amp;quot;code&amp;quot;&amp;gt;yydddhhmmss seq sssss uuuuu tt audit-trail-text ... &lt;br /&gt;
or&lt;br /&gt;
yydddhhmmsshu seq sssss uuuuu tt audit-trail-text ... &#039;&#039;&#039;(if TIMEHH was specified)&#039;&#039;&#039;&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;yyddd&amp;lt;/var&amp;gt; is  the Julian year and day.&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;hhmmss&amp;lt;/var&amp;gt; is the time of day in hours, minutes, and seconds.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;hhmmsshu&amp;lt;/var&amp;gt; is the time of day in hours, minutes, seconds, hundredths.&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&amp;lt;/var&amp;gt; sequence number is a counter to distinguish lines produced in the same second.&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;sssss&amp;lt;/var&amp;gt; is the 5-digit server number the user is currently using. (Leading zeros are suppressed.)&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;uuuuu&amp;lt;/var&amp;gt; is the 5-digit user number. (Leading zeros are suppressed.)&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;tt&amp;lt;/var&amp;gt; is code for the type of audit trail line. The tt codes are shown in the&lt;br /&gt;
&amp;quot;Types of audit trail lines&amp;quot; table, below.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Example 1, CCAAUDIT output direct from ONLINE====&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt; &lt;br /&gt;
&#039;&#039;&#039;COLUMN:                       These three lines&#039;&#039;&#039;  &lt;br /&gt;
&#039;&#039;&#039;2           15 18   23 25       are not present&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;&#039;DATE/TIME SEQ# S# USR# TYPE       in actual output&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
23256145406  0  0    0 RK ...  START VERSION =7.8.0A   SMF SYSTEM ID = RS26                                                      XX-&lt;br /&gt;
23256145406  1  0    0 XX                                                                                                           &lt;br /&gt;
23256145406  2  0    0 AD ///  **************************************************************************                           &lt;br /&gt;
23256145406  3  0    0 AD ///  * Model 204 is proprietary to and a registered trademark of Rocket       *                           &lt;br /&gt;
23256145406  4  0    0 AD ///  * Software, Inc. All title, copyright and other proprietary rights shall *                           &lt;br /&gt;
23256145406  5  0    0 AD ///  * be retained by Rocket Software, Inc. Model 204 has been licensed by    *                           &lt;br /&gt;
23256145406  6  0    0 AD ///  * this customer and the use and protection of Model 204 is governed by   *                           &lt;br /&gt;
23256145406  7  0    0 AD ///  * the license agreement between the customer and Rocket Software, Inc.   *                           &lt;br /&gt;
23256145406  8  0    0 AD ///  *                                                                        *                           &lt;br /&gt;
23256145406  9  0    0 AD ///  * Copyright (C) 2016 Rocket Software, Inc.                               *                           &lt;br /&gt;
23256145406 10  0    0 AD ///  * or its affiliates                                                      *                           &lt;br /&gt;
23256145406 11  0    0 AD ///  **************************************************************************                           &lt;br /&gt;
23256145406 12  0    0 AD ///  M204.0060: Model 204 initialization. Version = 7.8.0A 2020/03/06 14.12, RSQL level = 7.8.0A 2020/02/-&lt;br /&gt;
23256145406 13  0    0 XX 12 08.14                                                                                                  &lt;br /&gt;
23256145406 14  0    0 AD ///  M204.0061: SMF system ID = RS26, job name = PSTPC780, step name = TPCBV780, job step =  , JES ID = J-&lt;br /&gt;
23256145406 15  0    0 XX 0130887                                                                                                   &lt;br /&gt;
23256145406 16  0    0 AD ///  M204.0062: Execute parameters: RCVOPT=9,NJBUFF=115,SYSOPT=139,SYSOPT2=64,LIBUFF=6000,XMEMOPT=3,SIRFU-&lt;br /&gt;
23256145406 17  0    0 XX NC=1                                                                                                      &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Example 2, CCAAUDIT output from AUDIT204====&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt; &lt;br /&gt;
AUDIT204 Utility - Version 7.8.0A, Assembly date/time: 20200229 22.08                                                               &lt;br /&gt;
Date/time of run: 09/07/2023 12:56:01                                                                                               &lt;br /&gt;
CCAJRNL or CCAJLOG version: 7.8.0A                                                                                                  &lt;br /&gt;
Zaps: 78Z7759 78Z7891 78Z7973 78Z7975 78Z8066 78Z8075 &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;COLUMN:                              These three lines&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;&#039;2              18    24    30 32       are not present &#039;&#039;&#039; &lt;br /&gt;
&#039;&#039;&#039;DATE/TIME    SEQ# SERV# USER# TYPE       in actual output&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;FORMAT TIMEHH&#039;&#039;&#039;                                                                                                                       &lt;br /&gt;
2216613441420   0     0     0 RK ...  START VERSION =7.8.0A   SMF SYSTEM ID = RS26                                               XX-&lt;br /&gt;
2216613441420   1     0     0 XX                                                                                                    &lt;br /&gt;
2216613441420   2     0     0 AD ///  **************************************************************************                    &lt;br /&gt;
2216613441420   3     0     0 AD ///  * Model 204 is proprietary to and a registered trademark of Rocket       *                    &lt;br /&gt;
2216613441420   4     0     0 AD ///  * Software, Inc. All title, copyright and other proprietary rights shall *                    &lt;br /&gt;
2216613441420   5     0     0 AD ///  * be retained by Rocket Software, Inc. Model 204 has been licensed by    *                    &lt;br /&gt;
2216613441420   6     0     0 AD ///  * this customer and the use and protection of Model 204 is governed by   *                    &lt;br /&gt;
2216613441420   7     0     0 AD ///  * the license agreement between the customer and Rocket Software, Inc.   *                    &lt;br /&gt;
2216613441420   8     0     0 AD ///  *                                                                        *                    &lt;br /&gt;
2216613441420   9     0     0 AD ///  * Copyright (C) 2016 Rocket Software, Inc.                               *                    &lt;br /&gt;
2216613441420  10     0     0 AD ///  * or its affiliates                                                      *                    &lt;br /&gt;
2216613441420  11     0     0 AD ///  **************************************************************************                    &lt;br /&gt;
2216613441420  12     0     0 AD ///  M204.0060: Model 204 initialization. Version = 7.8.0A 2020/03/06 14.12, RSQL level = 7.8.0A 2-&lt;br /&gt;
2216613441420  13     0     0 XX 020/02/12 08.14                                                                                    &lt;br /&gt;
2216613441420  14     0     0 AD ///  M204.0061: SMF system ID = RS26, job name = PSTPC780, step name = TPCBV780, job step =  , JES-&lt;br /&gt;
2216613441420  15     0     0 XX  ID = J0536896                                                                                     &lt;br /&gt;
2216613441420  16     0     0 AD ///  M204.0062: Execute parameters: RCVOPT=9,NJBUFF=115,SYSOPT=139,SYSOPT2=64,LIBUFF=6000,XMEMOPT=-&lt;br /&gt;
2216613441420  17     0     0 XX 3,SIRFUNC=1  &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Example 3, CCAAUDIT output from AUDIT204====&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt; &lt;br /&gt;
AUDIT204 Utility - Version 7.8.0A, Assembly date/time: 20200229 22.08                                                               &lt;br /&gt;
Date/time of run: 09/07/2023 14:09:46                                                                                               &lt;br /&gt;
CCAJRNL or CCAJLOG version: 7.8.0A                                                                                                  &lt;br /&gt;
Zaps: 78Z7759 78Z7891 78Z7973 78Z7975 78Z8066 78Z8075&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;COLUMN:                              These three lines&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;&#039;2              18    24    30 32       are not present &#039;&#039;&#039; &lt;br /&gt;
&#039;&#039;&#039;DATE/TIME    SEQ# SERV# USER# TYPE       in actual output&#039;&#039;&#039;&lt;br /&gt;
                                                                             &lt;br /&gt;
&#039;&#039;&#039;FORMAT&#039;&#039;&#039;                                                                                                                              &lt;br /&gt;
&#039;&#039;&#039;YEARFORM 4&#039;&#039;&#039;                                                                                                                         &lt;br /&gt;
2022166134414   0     0     0 RK ...  START VERSION =7.8.0A   SMF SYSTEM ID = RS26                                               XX-&lt;br /&gt;
2022166134414   1     0     0 XX                                                                                                    &lt;br /&gt;
2022166134414   2     0     0 AD ///  **************************************************************************                    &lt;br /&gt;
2022166134414   3     0     0 AD ///  * Model 204 is proprietary to and a registered trademark of Rocket       *                    &lt;br /&gt;
2022166134414   4     0     0 AD ///  * Software, Inc. All title, copyright and other proprietary rights shall *                    &lt;br /&gt;
2022166134414   5     0     0 AD ///  * be retained by Rocket Software, Inc. Model 204 has been licensed by    *                    &lt;br /&gt;
2022166134414   6     0     0 AD ///  * this customer and the use and protection of Model 204 is governed by   *                    &lt;br /&gt;
2022166134414   7     0     0 AD ///  * the license agreement between the customer and Rocket Software, Inc.   *                    &lt;br /&gt;
2022166134414   8     0     0 AD ///  *                                                                        *                    &lt;br /&gt;
2022166134414   9     0     0 AD ///  * Copyright (C) 2016 Rocket Software, Inc.                               *                    &lt;br /&gt;
2022166134414  10     0     0 AD ///  * or its affiliates                                                      *                    &lt;br /&gt;
2022166134414  11     0     0 AD ///  **************************************************************************                    &lt;br /&gt;
2022166134414  12     0     0 AD ///  M204.0060: Model 204 initialization. Version = 7.8.0A 2020/03/06 14.12, RSQL level = 7.8.0A 2-&lt;br /&gt;
2022166134414  13     0     0 XX 020/02/12 08.14                                                                                    &lt;br /&gt;
2022166134414  14     0     0 AD ///  M204.0061: SMF system ID = RS26, job name = PSTPC780, step name = TPCBV780, job step =  , JES-&lt;br /&gt;
2022166134414  15     0     0 XX  ID = J0536896                                                                                     &lt;br /&gt;
2022166134414  16     0     0 AD ///  M204.0062: Execute parameters: RCVOPT=9,NJBUFF=115,SYSOPT=139,SYSOPT2=64,LIBUFF=6000,XMEMOPT=-&lt;br /&gt;
2022166134414  17     0     0 XX 3,SIRFUNC=1&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Example 4, CCAAUDIT output from AUDIT204====&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt; &lt;br /&gt;
AUDIT204 Utility - Version 7.8.0A, Assembly date/time: 20200229 22.08                                                               &lt;br /&gt;
Date/time of run: 09/13/2023 13:34:45                                                                                               &lt;br /&gt;
CCAJRNL or CCAJLOG version: 7.8.0A                                                                                                  &lt;br /&gt;
Zaps: 78Z7759 78Z7891 78Z7973 78Z7975 78Z8066 78Z8075 &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;COLUMN:                              These three lines&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;&#039;2                20    26    32 34       are not present &#039;&#039;&#039; &lt;br /&gt;
&#039;&#039;&#039;DATE/TIME      SEQ# SERV# USER# TYPE       in actual output&#039;&#039;&#039;&lt;br /&gt;
                                                                              &lt;br /&gt;
&#039;&#039;&#039;FORMAT TIMEHH&#039;&#039;&#039;                                                                                                                       &lt;br /&gt;
&#039;&#039;&#039;YEARFORM 4&#039;&#039;&#039;                                                                                                                          &lt;br /&gt;
202216613441420   0     0     0 RK ...  START VERSION =7.8.0A   SMF SYSTEM ID = RS26                                             XX-&lt;br /&gt;
202216613441420   1     0     0 XX                                                                                                  &lt;br /&gt;
202216613441420   2     0     0 AD ///  **************************************************************************                  &lt;br /&gt;
202216613441420   3     0     0 AD ///  * Model 204 is proprietary to and a registered trademark of Rocket       *                  &lt;br /&gt;
202216613441420   4     0     0 AD ///  * Software, Inc. All title, copyright and other proprietary rights shall *                  &lt;br /&gt;
202216613441420   5     0     0 AD ///  * be retained by Rocket Software, Inc. Model 204 has been licensed by    *                  &lt;br /&gt;
202216613441420   6     0     0 AD ///  * this customer and the use and protection of Model 204 is governed by   *                  &lt;br /&gt;
202216613441420   7     0     0 AD ///  * the license agreement between the customer and Rocket Software, Inc.   *                  &lt;br /&gt;
202216613441420   8     0     0 AD ///  *                                                                        *                  &lt;br /&gt;
202216613441420   9     0     0 AD ///  * Copyright (C) 2016 Rocket Software, Inc.                               *                  &lt;br /&gt;
202216613441420  10     0     0 AD ///  * or its affiliates                                                      *                  &lt;br /&gt;
202216613441420  11     0     0 AD ///  **************************************************************************                  &lt;br /&gt;
202216613441420  12     0     0 AD ///  M204.0060: Model 204 initialization. Version = 7.8.0A 2020/03/06 14.12, RSQL level = 7.8.0A-&lt;br /&gt;
202216613441420  13     0     0 XX  2020/02/12 08.14                                                                                &lt;br /&gt;
202216613441420  14     0     0 AD ///  M204.0061: SMF system ID = RS26, job name = PSTPC780, step name = TPCBV780, job step =  , J-&lt;br /&gt;
202216613441420  15     0     0 XX ES ID = J0536896                                                                                 &lt;br /&gt;
202216613441420  16     0     0 AD ///  M204.0062: Execute parameters: RCVOPT=9,NJBUFF=115,SYSOPT=139,SYSOPT2=64,LIBUFF=6000,XMEMOP-&lt;br /&gt;
202216613441420  17     0     0 XX T=3,SIRFUNC=1                                                                                    &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt; &lt;br /&gt;
The following table lists the code and purpose of the audit trail lines:&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;caption&amp;gt;Types of audit trail lines&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;Displays...&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;AD&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Special information about the run, job step return code, status of &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; files, user or the password table, the SNA Communications Server (formerly VTAM) Interface, or messages sent from an HLI program via the IFERR 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;CI&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Physical input line from a user&#039;s terminal or some IFAM arguments.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;CP&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Physical input line from a procedure.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;CS&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Physical line of full-screen input (see LS below).&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;ER&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Error message sent 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;LI&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Logical input line from a user&#039;s terminal or some HLI arguments.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;LP&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Logical input line from a procedure.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;LR&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Read images from a 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;LS&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Full-screen information. For a screen, each line lists one input value. For a menu, the line provides the menu selection number.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;MS&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Informational message sent to the user (not an 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&amp;gt;OI&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Input line from the operator&#039;s console.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;OO&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Message sent to the operator&#039;s console.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;RK&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Special information that relates to system initialization or to the record of a call to the following types of function:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Connect&amp;lt;sup&amp;gt;&amp;amp;#9733;&amp;lt;/sup&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;HLI&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;MQ/204&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;PQO&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;SQL&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;UL/DB2&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;QT&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Lines of SQL statement level 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;ST&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Utilization statistics (see [[Using system statistics]]).&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;US&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Line of special information directed to the audit trail by means of the SOUL &amp;lt;var&amp;gt;Audit&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;XX&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Continuation of the previous line.&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;
==Generating an audit trail==&lt;br /&gt;
 &lt;br /&gt;
===Overview of audit trail parameters===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
An audit trail is generated if:   &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;SYSOPT&amp;lt;/var&amp;gt; parameter includes the 128 specification&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;CCAAUDIT DD 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;
The &amp;lt;var&amp;gt;[[LAUDPROC parameter|LAUDPROC]]&amp;lt;/var&amp;gt; parameter controls the length of procedure names that appear in since-last statistic lines of the audit trail. You can reset &amp;lt;var&amp;gt;LAUDPROC&amp;lt;/var&amp;gt; to a low or high value. A low value conserves memory. A high value captures long procedure names. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===z/VSE and the audit trail===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
In a z/VSE environment, activate the audit trail by incorporating the following specifications into the JCL:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;You must set UPSI to &amp;lt;code&amp;gt;1xxxxxxx&amp;lt;/code&amp;gt; (&amp;lt;code&amp;gt;SYSOPT=128&amp;lt;/code&amp;gt;).&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;You must write the audit trail file to either a disk device or a print device:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Assign a disk device using a DLBL and EXTENT statement for file name &amp;lt;code&amp;gt;CCAUDIT&amp;lt;/code&amp;gt; (retention 0 is recommended).&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Assign a print device using symbolic unit &amp;lt;code&amp;gt;SYS008&amp;lt;/code&amp;gt;. (You cannot assign &amp;lt;code&amp;gt;SYS008&amp;lt;/code&amp;gt; to the same physical device as SYSLST.)&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If the DLBL and EXTENT for CCAUDIT are provided in the JCL, the audit trail is written to disk regardless of the assignment of &amp;lt;code&amp;gt;SYS008&amp;lt;/code&amp;gt;.&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;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The following example shows a job stream for an &amp;lt;var&amp;gt;ONLINE&amp;lt;/var&amp;gt; configuration with the audit trail on disk:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;// JOB ONLINE&lt;br /&gt;
...&lt;br /&gt;
// DLBL CCAUDIT,&#039;audit trail file-id&#039;,0&lt;br /&gt;
// EXTENT SYSnnn,balance of extent information&lt;br /&gt;
// ASSGN SYSnnn,X&#039;cuu&#039;&lt;br /&gt;
...&lt;br /&gt;
// UPSI 10000000&lt;br /&gt;
// EXEC ONLINE, SIZE=AUTO&lt;br /&gt;
...&lt;br /&gt;
/&amp;amp;amp;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
After the audit trail has been written to disk, you can print it using the UTLA utility program supplied with the &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; DBMS.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Use the following JCL:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;// JOB UTLA PRINT MODEL 204 AUDIT TRAIL&lt;br /&gt;
// DLBL M204LIB,&#039;M204.PROD.LIBRARY&#039;&lt;br /&gt;
// EXTENT SYSnnn,...&lt;br /&gt;
// LIBDEF PHASE.SEARCH=M204LIB.V411&lt;br /&gt;
// DLBL CCAUDIT,&#039;audit trail file-id&#039;&lt;br /&gt;
// EXTENT SYSnnn,balance of extent information&lt;br /&gt;
// ASSGN SYSnnn,X&#039;cuu&#039;&lt;br /&gt;
// ASSGN SYS005,SYSLST&lt;br /&gt;
// EXEC UTLA,SIZE=AUTO&lt;br /&gt;
/&amp;amp;amp;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===z/VM and the audit trail===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
In the z/VM/CMS environment, define CCAAUDIT as 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;CMS file:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;FILEDEF CCAAUDIT DISK ONLN CCAAUDIT A&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Service machine virtual printer:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;FILEDEF CCAAUDIT PRINTER&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
==AUDIT204 utility==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The AUDIT204 utility program produces the following reports, all of which are written to CCAAUDIT:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Complete or partial audit trail from a journal &amp;amp;mdash; CCAJRNL or CCAJLOG, as ddname CCAJRNL &amp;amp;mdash; produced by a &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; run&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Report based on statistics that appear on user logout and partial lines or file closed and partial lines&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Statistical analysis of the evaluation of SOUL requests &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 of AUDIT204 reports is determined by AUDIT204 commands and parameters you enter in:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;z/OS CCAIN data stream&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;z/VM (CMS) AUDIT204 CCAIN file&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;DOS SYSIPT 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;
The basic AUDIT204 input commands are:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;tr class=&amp;quot;head&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;AUDIT204 command &amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;For... &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;ANALYZE &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Statistical analysis of the evaluation of User Language 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;FORMAT &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Printed audit trail&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;REPORT &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Breakdown of user and file statistics lines containing optional price calculations&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 to AUDIT204===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Input to AUDIT204 is free form, located in columns 1-71. The following rules apply:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;The command line may have one parameter and its subparameters.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Type each subsequent parameter on a separate line.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Use blanks to separate subparameters.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;You can type parameters for a single command in any order.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;You can add subparameters for some parameters (PRICE and RENAME) by naming the subparameters in the form of character strings:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;If a name contains a blank or a single quotation mark, you must enclose the name in single quotation marks.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Use double quotation marks within the name.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Use blanks around the equal signs in the PRICE and RENAME parameters.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Use blanks to separate subparameters.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;If more than one line is required for the subparameters, place a nonblank character in column 72 or repeat the parameter on a new line. &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;Any characters appearing in columns 73-80 are ignored. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;You can repeat any parameter. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Precede each comment by an asterisk (&amp;lt;tt&amp;gt;*&amp;lt;/tt&amp;gt;) in column 1.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;The effect of parameters containing lists of subparameters is cumulative. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;The last value of parameters without subparameter lists is the value used. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===ANALYZE command===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The &amp;lt;var&amp;gt;ANALYZE&amp;lt;/var&amp;gt; command produces a statistical analysis report on the evaluation of SOUL requests. The complete report comprises an analysis for each individual account and the system as a whole. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Since-last evaluation lines calculate the mean and standard deviation for each since-last statistic:&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;Measure &amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Represents... &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;Mean &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Center of a set of data points (usually referred to as the average value of the set), obtained by summing the values and dividing by the number of values.&amp;lt;/td&amp;gt;&lt;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;Standard deviation &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;How spread out the data is around the center. In particular, it is useful to know whether the data is tightly clustered around the mean, or more dispersed. &lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
A small standard deviation indicates that any given value is likely to be close to the mean, and a large standard deviation implies that a value is more likely to be far away from the mean. &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;
You can obtain more information about the mean and the standard deviation from any standard statistics textbook.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Syntax====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Use the following syntax for the &amp;lt;var&amp;gt;ANALYZE&amp;lt;/var&amp;gt; command:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;ANALYZE [USERID | NOUSERID] [USERIDS &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;userid1...useridn&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;ANALYZE [ACCOUNT | NOACCOUNT] [ACCOUNTS &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;account1...accountn&amp;lt;/span&amp;gt;] &lt;br /&gt;
        [&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;parameters&amp;lt;/span&amp;gt;]&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
Where:&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Use the following parameters with the &amp;lt;var&amp;gt;ANALYZE&amp;lt;/var&amp;gt; command:&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;&amp;lt;var&amp;gt;ACCOUNT&amp;lt;/var&amp;gt;&lt;br /&gt;
or &amp;lt;var&amp;gt;NOACCOUNT&amp;lt;/var&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Whether or not to do an individual account analysis. The &amp;lt;var&amp;gt;ACCT&amp;lt;/var&amp;gt; or &amp;lt;var&amp;gt;NOACCT&amp;lt;/var&amp;gt; parameters are equivalent to &amp;lt;var&amp;gt;ACCOUNT&amp;lt;/var&amp;gt; or &amp;lt;var&amp;gt;NOACCOUNT&amp;lt;/var&amp;gt;, respectively. &amp;lt;/td&amp;gt;&lt;br /&gt;
&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;ACCOUNTS&amp;lt;/var&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Login account name(s) to list in the analysis report. &lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Reports are produced only for the specified accounts and only the since-last evaluation lines for those accounts that are included in the systemwide report.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Specifying &amp;lt;var&amp;gt;ACCOUNTS&amp;lt;/var&amp;gt; sets the &amp;lt;var&amp;gt;ACCOUNT&amp;lt;/var&amp;gt; parameter when neither &amp;lt;var&amp;gt;ACCOUNT&amp;lt;/var&amp;gt; nor &amp;lt;var&amp;gt;NOACCOUNT&amp;lt;/var&amp;gt; was specified.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;var&amp;gt;OMIT &amp;lt;i&amp;gt;name1 name2&amp;lt;/i&amp;gt;...&amp;lt;/var&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Since-last statistic(s) to list, but omit from the analysis report. The report contains all since-last statistics that are not explicitly omitted.  Specifying file or user statistics will generate an error message and terminate the ANALYZE.&amp;lt;/td&amp;gt;&lt;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;RENAME &amp;lt;i&amp;gt;name&amp;lt;/i&amp;gt;=&amp;lt;i&amp;gt;newname&amp;lt;/i&amp;gt;&amp;lt;/var&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;New names to since-last statistics as column headings for an analysis report.&amp;lt;/td&amp;gt;&lt;br /&gt;
&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;TIME [&amp;lt;i&amp;gt;yydddhhmmss&amp;lt;/i&amp;gt; / &amp;lt;i&amp;gt;yydddhhmmss&amp;lt;/i&amp;gt; | &amp;lt;i&amp;gt;cyydddhhmmss&amp;lt;/i&amp;gt; / &amp;lt;i&amp;gt;cyyddhhmmss&amp;lt;/i&amp;gt;]&amp;lt;/var&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Time range from which since-last evaluation lines are 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&amp;gt;&amp;lt;var&amp;gt;SYS&amp;lt;/var&amp;gt; (the default)&lt;br /&gt;
&amp;lt;br&amp;gt;or &amp;lt;var&amp;gt;NOSYS&amp;lt;/var&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Whether or not to do a systemwide analysis using since-last evaluation lines of accounts for which an individual analysis is done. &amp;lt;/td&amp;gt;&lt;br /&gt;
&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;USERID&amp;lt;/var&amp;gt; (the default)&lt;br /&gt;
&amp;lt;br&amp;gt;or &amp;lt;var&amp;gt;NOUSERID&amp;lt;/var&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Performing or suppressing an individual user ID analysis. Totals for a systemwide analysis are still accumulated if &amp;lt;var&amp;gt;NOUSERID&amp;lt;/var&amp;gt; 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;&amp;lt;var&amp;gt;USERIDS&amp;lt;/var&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;User(s) for which analysis is requested.&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The &amp;lt;var&amp;gt;USERIDS&amp;lt;/var&amp;gt; keyword is required in addition to the &amp;lt;var&amp;gt;USERID&amp;lt;/var&amp;gt; keyword. If neither &amp;lt;var&amp;gt;USERID&amp;lt;/var&amp;gt; nor &amp;lt;var&amp;gt;NOUSERID&amp;lt;/var&amp;gt; has been specified, specifying &amp;lt;var&amp;gt;USERIDS&amp;lt;/var&amp;gt; sets the &amp;lt;var&amp;gt;USERID&amp;lt;/var&amp;gt; parameter.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Reports are produced only for the specified users and only the since-last evaluation lines for those users who are included in the systemwide report. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
AUDIT204 uses the values specified in the &amp;lt;var&amp;gt;USERID&amp;lt;/var&amp;gt; parameter as a pattern and finds all values that match. For example, &amp;lt;code&amp;gt;USERIDS NANCY KATHY&amp;lt;/code&amp;gt; is equivalent to &amp;lt;code&amp;gt;REPORT USERID USERIDS NANCY* KATHY*&amp;lt;/code&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;
===FORMAT command===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
&amp;lt;var&amp;gt;FORMAT&amp;lt;/var&amp;gt; prints an audit trail (CCAAUDIT) from CCAJRNL or CCAJLOG. &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;FORMAT TIME {&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;yydddhhmmss/yydddhhmmss&amp;lt;/span&amp;gt; | &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;cyydddhhmmss/cyydddhhmmss&amp;lt;/span&amp;gt;}&lt;br /&gt;
       TIMEHH &lt;br /&gt;
       TYPE &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;type1&amp;lt;/span&amp;gt;&lt;br /&gt;
       USER &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;usernum&amp;lt;/span&amp;gt;&lt;br /&gt;
       USERID &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;userid&amp;lt;/span&amp;gt;&lt;br /&gt;
       YEARFORM {2 | 4}&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;
You use the following parameters with the &amp;lt;var&amp;gt;FORMAT&amp;lt;/var&amp;gt; command:&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;&amp;lt;var&amp;gt;TIME&amp;lt;/var&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Time range to print. The format of the time specification corresponds to the time stamp printed with each audit trail line.&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can specify start and end times in either order. If either time is out of the range covered by the journal, it is corrected to match the actual start or end of the journal. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If both specified times are before and after the period covered by the journal, nothing is printed.&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;yyddd&amp;lt;/var&amp;gt; is the year and Julian date; &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;cyyddd&amp;lt;/var&amp;gt; is the century, year and Julian date (0=20th century, 1=21st century).&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;hhmmss&amp;lt;/var&amp;gt; is time based on a 24-hour clock. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;b&amp;gt;NOTE:&amp;lt;/b&amp;gt; TIME may be specified with no time range or with a time range in the form noted above.  No time range selects the entire journal/jlog for printing.&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;td&amp;gt;&amp;lt;var&amp;gt;TIMEHH&amp;lt;/var&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Indicates that timestamps, printed at the beginning of each line of output, should include hundredths of a second.  Requires no other arguments.  &lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;b&amp;gt;NOTE:&amp;lt;/b&amp;gt; This parameter and the 78 version of AUDIT204 may be used against a 77 or 78 CCAJRNL or CCAJLOG.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;b&amp;gt;NOTE:&amp;lt;/b&amp;gt; TIMEHH may be specified with no time range or with a time range in the form noted above.  No time range selects the entire journal/jlog for printing.&amp;lt;/p&amp;gt;  &lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;var&amp;gt;TYPE&amp;lt;/var&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Type of lines to print, such as AD or MS (see the [[#Example|&amp;quot;Types of audit trail lines&amp;quot; table]]).&amp;lt;/td&amp;gt;&lt;br /&gt;
&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;USER&amp;lt;/var&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;User for whom the printed audit trail lines are generated. Specify user numbers with or without leading 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;&amp;lt;var&amp;gt;USERID&amp;lt;/var&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;One- to ten-character name that identifies the &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; user about whom the printed audit trail lines are generated.&amp;lt;/td&amp;gt;&lt;br /&gt;
&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;YEARFORM&amp;lt;/var&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Two- or four-digit year output. The default is 2.&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;
The options specified in the following example restrict the printing of the audit trail to &amp;lt;code&amp;gt;MS&amp;lt;/code&amp;gt; (message) lines for &amp;lt;code&amp;gt;USER 01&amp;lt;/code&amp;gt; created on September 22, 1998 between 10:41 A.M. and 10:45 A.M.:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;FORMAT TYPE MS, ER&lt;br /&gt;
TIME 98265104100/98265104500&lt;br /&gt;
USER 01&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;
The &amp;lt;var&amp;gt;FORMAT&amp;lt;/var&amp;gt; command can be used against a CCAJRNL or CCAJLOG data set. Examine the code examples that begin in [[#Samples of a z/OS job stream|Samples of a z/OS job stream]]. &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===REPORT command===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The &amp;lt;var&amp;gt;REPORT&amp;lt;/var&amp;gt; command prints user and file statistics in a tabular format and computes costs by account or by file for billing purposes. AUDIT204 reports have a two-line header, as shown in the following example, that reflect the circumstances of your site.    &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;AUDIT204 UTILITY - VERSION 7.6.0D&lt;br /&gt;
DATE/TIME OF RUN: 10/11/2016 12:25:50&lt;br /&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;REPORT &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;parameters&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;type&amp;lt;/var&amp;gt; is a subcommand that specifies the type of report to print:&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;Subcommand &amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Specifies printing a report from...&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;ACCOUNT&amp;lt;/var&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;User statistics for all accounts &amp;lt;/td&amp;gt;&lt;br /&gt;
&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;ACCOUNTS&amp;lt;/var&amp;gt; &amp;lt;i&amp;gt;account1 account2&amp;lt;/i&amp;gt; ...&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;User statistics for specified accounts&amp;lt;/td&amp;gt;&lt;br /&gt;
&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;USERID&amp;lt;/var&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;User statistics for all users&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;var&amp;gt;USERID USERIDS &amp;lt;i&amp;gt;user1 user2&amp;lt;/i&amp;gt; ...&amp;lt;/var&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;User statistics for users listed&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&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;File statistics for all files&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;var&amp;gt;FILE FILES &amp;lt;i&amp;gt;fname1 fname2&amp;lt;/i&amp;gt; ...&amp;lt;/var&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;File statistics for files listed&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&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;parameters&amp;lt;/var&amp;gt; is one or  more of &lt;br /&gt;
the following, which can be used with &amp;lt;var&amp;gt;USERID&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;ACCOUNT&amp;lt;/var&amp;gt;, or &amp;lt;var&amp;gt;FILE&amp;lt;/var&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;&amp;lt;var&amp;gt;IND&amp;lt;/var&amp;gt; (the default)&lt;br /&gt;
&amp;lt;br&amp;gt;or &amp;lt;var&amp;gt;NOIND&amp;lt;/var&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Printing or not printing individual lines. Totals are still accumulated if &amp;lt;var&amp;gt;NOIND&amp;lt;/var&amp;gt; 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;&amp;lt;var&amp;gt;OMIT&amp;lt;/var&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Statistic(s) to omit from the report. You must enter the actual name of the statistic, not what appears in a column header in a report. Only file statistics are valid for FILE reports and only since-last and logout stats are valid for USERID reports.  See [[Using system statistics#Description of statistics|Description of statistics]] for an alphabetical listing of statistics.&amp;lt;/td&amp;gt;&lt;br /&gt;
&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;PARTIAL&amp;lt;/var&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;or &amp;lt;var&amp;gt;NOPARTIAL&amp;lt;/var&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Generation of partial or complete statistics lines. Use:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;PARTIAL&amp;lt;/var&amp;gt; when a report is generated from a journal that did not terminate successfully.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;NOPARTIAL&amp;lt;/var&amp;gt; to avoid processing overhead, when a complete journal is available.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;var&amp;gt;PRICE&amp;lt;/var&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Dollar charge up to five decimal places to any statistic. Decimal point, and leading and trailing zeros are optional. For example:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;PRICE CPU=0.05 DKRD=.03 DKWR=.035&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;td&amp;gt;&amp;lt;var&amp;gt;RENAME&amp;lt;/var&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Column heading names up to nine characters without truncation. The new name completely replaces the old name and must be used if name is specified on other parameters.&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;TIME&amp;lt;/var&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Time range for statistics line reporting. One of the following formats is required:&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;yydddhhmmss&amp;lt;/var&amp;gt;&amp;lt;b&amp;gt;&amp;lt;tt&amp;gt;/&amp;lt;/tt&amp;gt;&amp;lt;/b&amp;gt;&amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;yydddhhmmss&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;cyydddhhmmss&amp;lt;/var&amp;gt;&amp;lt;b&amp;gt;&amp;lt;tt&amp;gt;/&amp;lt;/tt&amp;gt;&amp;lt;/b&amp;gt;&amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;cyydddhhmmss&amp;lt;/var&amp;gt; &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td nowrap&amp;gt;&amp;lt;var&amp;gt;TOTAL&amp;lt;/var&amp;gt; (the default)&lt;br /&gt;
&amp;lt;br&amp;gt;or &amp;lt;var&amp;gt;NOTOTAL&amp;lt;/var&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Totalling or suppression of totalling for individual statistics and costs. &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;
Totals are printed after individual statistics lines if both &amp;lt;var&amp;gt;IND&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;TOTAL&amp;lt;/var&amp;gt; are in effect. Each line must contain only one parameter, as in the following examples:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;REPORT USERID NOIND&lt;br /&gt;
              PARTIAL&lt;br /&gt;
              TIME &amp;lt;i&amp;gt;yydddhhmmss/yydddhhmmss&amp;lt;/i&amp;gt;&lt;br /&gt;
              RENAME &amp;lt;i&amp;gt;name=newname&amp;lt;/i&amp;gt;&lt;br /&gt;
              NOTOTAL&lt;br /&gt;
              USERIDS &amp;lt;i&amp;gt;account&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
REPORT FILE FILES &amp;lt;i&amp;gt;fname1 fname2 fname3 ...&amp;lt;/i&amp;gt;&lt;br /&gt;
       OMIT &amp;lt;i&amp;gt;statistic&amp;lt;/i&amp;gt;&lt;br /&gt;
       PRICE &amp;lt;i&amp;gt;statistic=xx.xx&amp;lt;/i&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The subkeywords &amp;lt;var&amp;gt;ACCOUNTS&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;FILES&amp;lt;/var&amp;gt;, and &amp;lt;var&amp;gt;USERIDS&amp;lt;/var&amp;gt; can be used with &amp;lt;var&amp;gt;REPORT&amp;lt;/var&amp;gt; subcommands &amp;lt;var&amp;gt;ACCOUNT&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;FILE&amp;lt;/var&amp;gt;, and &amp;lt;var&amp;gt;USERID&amp;lt;/var&amp;gt; as in the following examples:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;REPORT USERID USERIDS JAMES STEVE SANDRA&lt;br /&gt;
       ACCOUNT ACCOUNTS JAMES STEVE SANDRA&lt;br /&gt;
       FILE FILES CLIENTS VEHICLES DAILY&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; The &amp;lt;var&amp;gt;REPORT&amp;lt;/var&amp;gt; command for AUDIT204 can process only a single journal: CCAJRNL. You cannot use against a CCAJOG file.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Using the AUDIT204 utility==&lt;br /&gt;
 &lt;br /&gt;
===CCAJRNL and CCAJLOG data sets as input to utilities===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When you need a CCAAUDIT report, use the CCAJLOG data set as input to the AUDIT204 utility, under the ddname of CCAJRNL. You can also use CCAJLOG as input to the UTILJ utility, again under the ddname of CCAJRNL; however, the only useful report produced is a histogram of the number of blocks and block sizes that were written to the CCAJLOG data set.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
CCAJRNL is the input data set provided to roll forward recovery (ddname=CCARF), media recovery (ddname= CCAGEN), and UTILJ (ddname=CCAJRNL).&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;caption&amp;quot; style=&amp;quot;width:457px&amp;quot;&amp;gt;Utilities using CCAJLOG and CCAJRNL data sets as input&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;figure&amp;quot;&amp;gt;[[File:SM13ccaprint3_sep.gif|457px]] &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Journal stream configurations===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
AUDIT204 can process only basic journal streams (single data sets). Members of concatenated, parallel, ring, or GDG streams must be processed one at a time.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If there is a wraparound during the output processing of a ring stream, use the offload stream as input to AUDIT204. You can also use regular z/OS concatenation to print the contents of a concatenated stream.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===z/OS JCL for AUDIT204===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The following considerations apply to z/OS JCL for AUDIT204:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Use a SORTLIB DD statement to identify the library in which the sort program is stored, if necessary.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;You might need sort work (SORTWKxx) data sets.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;SORTIN, SORTOUT, and SYSOUT statements are necessary only for statistical reports. A sort program must be available:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SORTIN contains all the user and file statistics entries extracted from the journal. The size of the data set depends on the number of statistics entries extracted. Each user statistics entry is 198 bytes long. Each file entry is 82 bytes long. Partial statistics entries are not copied to SORTIN.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;SORTOUT contains the sorted statistics entries from SORTIN. SORTOUT and SORTIN must be the same size.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;SYSOUT is the SORT message data set.&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;STATIN, STATOUT, and SYSOUT statements are necessary only for statistical analysis reports:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;STATIN contains all the since-last evaluation statistics entries extracted from the journal. The size of the data set depends on the number of since-last evaluation statistics extracted. Each since-last evaluation statistics entry is 188 bytes long.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;STATOUT contains the sorted statistics entries from STATIN. STATOUT and STATIN must be the same size. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Statistics work (STATWKxx) data sets might be needed when using the ANALYZE command, depending on the amount of data generated.&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;CCAJRNL describes the data set containing the journal produced by a &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; run.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;AUDIT204 does not support streams. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;CCAAUDIT contains the audit trail, statistics report, and statistical analysis report. If you request both the audit trail and statistics, the audit trail appears first.&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The value of the BLKSIZE parameter in the CCAAUDIT DD statement is truncated at 4 more than a multiple of 137. A BLKSIZE value of 141 is the default and minimum value.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Any LRECL and RECFM specifications are ignored; these parameter values are forced to be 137 and VBA, respectively.&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Samples of a z/OS job stream===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The following sample job streams run AUDIT204, These examples differ in the use of the journal processed, CCAJRNL or CCAJLOG, and the presence or absence of AUDIT204 commands: &amp;lt;var&amp;gt;ANALYZE&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;FORMAT&amp;lt;/var&amp;gt;, and &amp;lt;var&amp;gt;REPORT&amp;lt;/var&amp;gt;.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Where only CCAJRNL is defined, all AUDIT204 commands are valid====&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt; //AUDIT     EXEC  PGM=AUDIT204&lt;br /&gt;
 //STEPLIB   DD  DSN=M204.LOADLIB,DISP=SHR&lt;br /&gt;
 //SYSUDUMP  DD  SYSOUT=A&lt;br /&gt;
 //CCAJRNL   DD  DSN=M204.CCAJRNL,DISP=SHR&lt;br /&gt;
 //CCAAUDIT  DD  SYSOUT=A&lt;br /&gt;
 //SORTIN    DD  DSN=&amp;amp;amp;&amp;amp;amp;SORTIN,UNIT=SYSDA,SPACE=(TRK,nn),&lt;br /&gt;
 //              DISP=(NEW,DELETE)&lt;br /&gt;
 //SORTOUT   DD  DSN=*.SORTIN,VOL=REF=*.SORTIN,DISP=(OLD,PASS)&lt;br /&gt;
 //STATIN    DD  DSN=&amp;amp;amp;&amp;amp;amp;STATIN,UNIT=SYSDA,SPACE=(TRK,nn),&lt;br /&gt;
 //              DISP=(NEW,DELETE)&lt;br /&gt;
 //STATOUT   DD  DSN=*.STATIN,VOL=REF=*.STATIN,DISP=(OLD,PASS)&lt;br /&gt;
 //SYSOUT    DD  SYSOUT=A&lt;br /&gt;
 //CCAIN     DD  *&lt;br /&gt;
 FORMAT&lt;br /&gt;
 ANALYZE&lt;br /&gt;
 REPORT ACCOUNT&lt;br /&gt;
   .&lt;br /&gt;
   .  ---- &amp;lt;i&amp;gt;user options&amp;lt;/i&amp;gt;&lt;br /&gt;
   .&lt;br /&gt;
 /*&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Where CCAJLOG is defined and you want to extract CCAAUDIT====&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt; //AUDIT     EXEC  PGM=AUDIT204&lt;br /&gt;
 //STEPLIB   DD  DSN=M204.LOADLIB,DISP=SHR&lt;br /&gt;
 //SYSUDUMP  DD  SYSOUT=A&lt;br /&gt;
 //CCAJRNL   DD  DSN=M204.CCAJLOG,DISP=SHR&lt;br /&gt;
 //CCAAUDIT  DD  SYSOUT=A&lt;br /&gt;
 //SORTIN    DD  DSN=&amp;amp;amp;&amp;amp;amp;SORTIN,UNIT=SYSDA,SPACE=(TRK,nn),&lt;br /&gt;
 //              DISP=(NEW,DELETE)&lt;br /&gt;
 //SORTOUT   DD  DSN=*.SORTIN,VOL=REF=*.SORTIN,DISP=(OLD,PASS)&lt;br /&gt;
 //STATIN    DD  DSN=&amp;amp;amp;&amp;amp;amp;STATIN,UNIT=SYSDA,SPACE=(TRK,nn),&lt;br /&gt;
 //              DISP=(NEW,DELETE)&lt;br /&gt;
 //STATOUT   DD  DSN=*.STATIN,VOL=REF=*.STATIN,DISP=(OLD,PASS)&lt;br /&gt;
 //SYSOUT    DD  SYSOUT=A&lt;br /&gt;
 //CCAIN     DD  *&lt;br /&gt;
 FORMAT&lt;br /&gt;
   .&lt;br /&gt;
   .  ---- &amp;lt;i&amp;gt;user options&amp;lt;/i&amp;gt;&lt;br /&gt;
   .&lt;br /&gt;
 /*&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Where both CCAJRNL and CCAJLOG are defined and you want a statistical analysis====&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt; //AUDIT     EXEC  PGM=AUDIT204&lt;br /&gt;
 //STEPLIB   DD  DSN=M204.LOADLIB,DISP=SHR&lt;br /&gt;
 //SYSUDUMP  DD  SYSOUT=A&lt;br /&gt;
 //CCAJRNL   DD  DSN=M204.CCAJRNL,DISP=SHR&lt;br /&gt;
 //CCAAUDIT  DD  SYSOUT=A&lt;br /&gt;
 //SORTIN    DD  DSN=&amp;amp;amp;&amp;amp;amp;SORTIN,UNIT=SYSDA,SPACE=(TRK,nn),&lt;br /&gt;
 //              DISP=(NEW,DELETE)&lt;br /&gt;
 //SORTOUT   DD  DSN=*.SORTIN,VOL=REF=*.SORTIN,DISP=(OLD,PASS)&lt;br /&gt;
 //STATIN    DD  DSN=&amp;amp;amp;&amp;amp;amp;STATIN,UNIT=SYSDA,SPACE=(TRK,nn),&lt;br /&gt;
 //              DISP=(NEW,DELETE)&lt;br /&gt;
 //STATOUT   DD  DSN=*.STATIN,VOL=REF=*.STATIN,DISP=(OLD,PASS)&lt;br /&gt;
 //SYSOUT    DD  SYSOUT=A&lt;br /&gt;
 //CCAIN     DD  *&lt;br /&gt;
 ANALYZE&lt;br /&gt;
 REPORT&lt;br /&gt;
   .&lt;br /&gt;
   .  ---- &amp;lt;i&amp;gt;user options&amp;lt;/i&amp;gt;&lt;br /&gt;
   .&lt;br /&gt;
 /*&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===z/VSE JCL for AUDIT204===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The following considerations apply to z/VSE: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Under z/VSE, output is sent to SYSLST. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;CCAJRNL can be on tape or disk. If CCAJRNL is on tape, SYS004 must be assigned to a tape drive.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Running AUDIT204 might require two sorts:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;REPORT&amp;lt;/var&amp;gt; command requires a SORTIN and a SORTOUT data set.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;ANALYZE&amp;lt;/var&amp;gt; command requires a STATIN and a STATOUT data set. &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;SORTIN, SORTOUT, STATIN, and STATOUT are work files and must be on disk. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;SORTWK1 data set is required.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Statistics work (STATWK1) data set might be needed when using the &amp;lt;var&amp;gt;ANALYZE&amp;lt;/var&amp;gt; command, depending on the amount of data generated. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Sample z/VSE job stream===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The following sample job stream runs AUDIT204:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;// JOB AUDIT204&lt;br /&gt;
// DLBL M204LIB,&#039;M204.PROD.LIBRARY&#039;&lt;br /&gt;
// EXTENT SYS&amp;lt;i&amp;gt;nnn&amp;lt;/i&amp;gt;,...&lt;br /&gt;
// LIBDEF PHASE.SEARCH=M204LIB.V210&lt;br /&gt;
// DLBL CCAJRNL,&#039;CCAJRNL&#039; Note 1&lt;br /&gt;
// EXTENT SYS&amp;lt;i&amp;gt;nnn&amp;lt;/i&amp;gt;,...&lt;br /&gt;
// DLBL SORTIN,&#039;AUDIT204.SORTIN&#039;,0 Note 2&lt;br /&gt;
// EXTENT SYS&amp;lt;i&amp;gt;nnn&amp;lt;/i&amp;gt;,...&lt;br /&gt;
// DLBL SORTOUT,&#039;AUDIT204.SORTOUT&#039;,0 Note 2&lt;br /&gt;
// EXTENT SYS&amp;lt;i&amp;gt;nnn&amp;lt;/i&amp;gt;,...&lt;br /&gt;
// DLBL STATIN,&#039;AUDIT204.STATIN&#039;,0 Note 3&lt;br /&gt;
// EXTENT SYS&amp;lt;i&amp;gt;nnn&amp;lt;/i&amp;gt;,...&lt;br /&gt;
// DLBL STATOUT,&#039;AUDIT204.STATOUT&#039;,0 Note 3&lt;br /&gt;
// EXTENT SYS&amp;lt;i&amp;gt;nnn&amp;lt;/i&amp;gt;,...&lt;br /&gt;
// DLBL SORTWK1,&#039;SORTWK1&#039;,0 Note 4&lt;br /&gt;
// EXTENT SYS&amp;lt;i&amp;gt;nnn&amp;lt;/i&amp;gt;,...&lt;br /&gt;
 &lt;br /&gt;
// EXEC AUDIT204,SIZE=(AUTO,&amp;lt;i&amp;gt;xx&amp;lt;/i&amp;gt;K) Note 5&lt;br /&gt;
INCLUDE IFYLSQRT&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;/b&amp;gt;* &amp;lt;i&amp;gt;Insert AUDIT204 CCAIN commands here&amp;lt;/i&amp;gt;&lt;br /&gt;
FORMAT&lt;br /&gt;
REPORT ACCOUNT&lt;br /&gt;
REPORT FILE&lt;br /&gt;
REPORT ACCOUNT ACCOUNTS MAGGIE MARY DAVE&lt;br /&gt;
/*&lt;br /&gt;
/&amp;amp;amp;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Usage notes====&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;If you use tape instead of the DLBL and EXTENT for CCAJRNL, use the following JCL:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;// TLBL CCAJRNL&lt;br /&gt;
// ASSGN SYS004,X&#039;&amp;lt;i&amp;gt;cuu&amp;lt;/i&amp;gt;&#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;DLBL and EXTENT are necessary if you use either the &amp;lt;var&amp;gt;REPORT&amp;lt;/var&amp;gt; or the &amp;lt;var&amp;gt;ANALYZE&amp;lt;/var&amp;gt; command.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;You must specify a SIZE parameter in the EXEC statement with AUTO and you need some additional storage for the sort program. To determine the amount of additional storage needed for the sort program, refer to IBM&#039;s &amp;lt;var class=&amp;quot;book&amp;quot;&amp;gt;SORT/MERGE Programmer&#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;
===(z/VM) CMS JCL for AUDIT204===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The CMS AUDIT204 utility program prints a &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; journal file and produces a statistical report from information in a journal file:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;If a statistics report is produced, a SORT utility that can be invoked dynamically must be available for use.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;AUDIT204 output is produced either as a printer spool file or in a CMS disk file. &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 following EXEC initiates AUDIT204:&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;AUDIT204 [&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;datasetname&amp;lt;/span&amp;gt;] [&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;filename filetype&amp;lt;/span&amp;gt;] &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;filemode&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;datasetname&amp;lt;/var&amp;gt; specifies the name of the journal data set on a variable-format disk, with the qualifiers separated by blanks. If no data set name is specified, it is presumed that the name of the journal data set is &amp;lt;code&amp;gt;M204.JOURNAL&amp;lt;/code&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;filename&amp;lt;/var&amp;gt; and &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;filetype&amp;lt;/var&amp;gt;&lt;br /&gt;
specify the name and type of the journal file on a CMS-format, or a variable format for z/OS and z/VSE, disk.&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;filemode &amp;lt;/var&amp;gt; specifies the mode of the disk holding the journal file to be processed. The input to AUDIT204 contains the commands selected from those described earlier and is included in the AUDIT204 CCAIN. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Searching multiple tapes for journal and off load data===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When a journal or offload data set is on multiple tapes, you do not need to mount all of them for AUDIT204 processing. You can process a subset of the tapes, as long as you mount them in the order in which they were originally generated.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
For example, suppose that your CCAJRNL data set consists of five tapes labeled &amp;lt;code&amp;gt;TAPE01&amp;lt;/code&amp;gt; through &amp;lt;code&amp;gt;TAPE05&amp;lt;/code&amp;gt;. You are sure that the information you want to analyze begins on the third tape or later. In this case you can save processing time by specifying only &amp;lt;code&amp;gt;TAPE03&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;TAPE04&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;TAPE05&amp;lt;/code&amp;gt; in the DD statement for the CCAJRNL data set.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt; &amp;lt;!-- end of div for toc limit --&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
[[Category:System management]]&lt;br /&gt;
[[Category:Auditing and problem determination]]&lt;br /&gt;
===AUDIT204 Return Codes===&lt;br /&gt;
&amp;lt;p&amp;gt;The following return codes may be issued by AUDIT204 upon completion.&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;Return Code&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;Normal 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&amp;gt;8&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;I/O error reading CCAJRNL or CCAJLOG&amp;lt;/td&amp;gt;&lt;br /&gt;
&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;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Out of sequence journal block&amp;lt;/td&amp;gt;&lt;br /&gt;
&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;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Zero length journal block or journal 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;12&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Invalid parameter - various errors with CCAIN input parameters&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;16&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;CCAAUDIT open failed&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;20&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;CCAJRNL or CCAJLOG open failed&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;24&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;SORTIN open failed&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;28&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;STATIN open failed&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;32&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;CCAIN open failed&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;36&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Operating system does not support Z-architecture&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;/div&gt;</summary>
		<author><name>JDamon</name></author>
	</entry>
	<entry>
		<id>https://m204wiki.rocketsoftware.com/index.php?title=LOGCTL_command:_Modifying_group_entries_in_the_password_table&amp;diff=120132</id>
		<title>LOGCTL command: Modifying group entries in the password table</title>
		<link rel="alternate" type="text/html" href="https://m204wiki.rocketsoftware.com/index.php?title=LOGCTL_command:_Modifying_group_entries_in_the_password_table&amp;diff=120132"/>
		<updated>2024-06-13T20:21:11Z</updated>

		<summary type="html">&lt;p&gt;JDamon: Removed an incorrect note.&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;System manager&lt;br /&gt;
&amp;lt;dt&amp;gt;Function&lt;br /&gt;
&amp;lt;dd&amp;gt;Adds, deletes, or changes group entries in the password table&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;LOGCTL {A | D | C} ,&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;groupname&amp;lt;/span&amp;gt; [&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;index&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;table&amp;gt; &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;groupname&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; is the name of the group entry to be added, deleted, or changed (1 to 8 characters). A comma must precede the group name.&amp;lt;/td&amp;gt;&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;index&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt; is a single character indicating which file entry is being modified, and is either a digit 0-9 or a letter A-Z; index must be specified if the file has more than one password.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt; &lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Example==&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;LOGCTL C ,PRMGROUP&lt;br /&gt;
&amp;lt;/p&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 &amp;lt;var&amp;gt;LOGCTL&amp;lt;/var&amp;gt; command adds, deletes, or changes group entries in the password table. If add (&amp;lt;var&amp;gt;A&amp;lt;/var&amp;gt;) or change (&amp;lt;var&amp;gt;C&amp;lt;/var&amp;gt;) is specified, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; prompts for information as shown in the dialog below.&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The system manager can change any of the following specifications in a group entry: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt; &lt;br /&gt;
&amp;lt;li&amp;gt;Password&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Privileges&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;User class&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Field level security levels&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Terminal list&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;Upon entry of the &amp;lt;var&amp;gt;LOGCTL&amp;lt;/var&amp;gt; command, the system responds with a prompt in the following form: &lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;*** M204.0374: ENTER FILE/GROUP PASSWORD, PRIVILEGES, CLASS, SELECT, READ, UPDATE, &amp;lt;br&amp;gt;    ADD &amp;lt;i&amp;gt;password&amp;lt;/i&amp;gt;, X&#039;&amp;lt;i&amp;gt;pppp&amp;lt;/i&amp;gt;&#039;, &amp;lt;i&amp;gt;ccc&amp;lt;/i&amp;gt;, &amp;lt;i&amp;gt;sss&amp;lt;/i&amp;gt;, &amp;lt;i&amp;gt;rrr&amp;lt;/i&amp;gt;, &amp;lt;i&amp;gt;uuu&amp;lt;/i&amp;gt;, &amp;lt;i&amp;gt;aaa&amp;lt;/i&amp;gt; &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
Where:&lt;br /&gt;
&amp;lt;table&amp;gt; &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;password&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;The user&#039;s password (1 to 8 characters). It cannot contain blanks, commas, or colons.&amp;lt;/td&amp;gt;&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;pppp&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;The two-byte representation of the group privileges. (See [[PRIVDEF parameter|PRIVDEF: Default user privileges]].)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;ccc&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;The procedure user class.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;sss&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;The [[Model 204 security features#Field-level security|field-level security]] SELECT level.&amp;lt;/td&amp;gt;&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;rrr&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;The field-level security READ level.&amp;lt;/td&amp;gt;&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;uuu&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;The field-level security UPDATE level.&amp;lt;/td&amp;gt;&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;aaa&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;The field-level security ADD level. &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When a group entry is being added, the password is required and all other specifications are optional. &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; supplies default values of zero.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;When a group entry is being changed, all specifications are optional. If the system manager does not supply a specification in the command, the existing specification in the password table is preserved, as described for login user IDs.&amp;lt;/p&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;[[LOGCTL command: Modifying file entries in the password table]] &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[[LOGCTL command: Modifying user ID entries in the password table]] &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category: System manager commands]]&lt;br /&gt;
[[Category:Commands]]&lt;/div&gt;</summary>
		<author><name>JDamon</name></author>
	</entry>
	<entry>
		<id>https://m204wiki.rocketsoftware.com/index.php?title=Model_204_security_features&amp;diff=120017</id>
		<title>Model 204 security features</title>
		<link rel="alternate" type="text/html" href="https://m204wiki.rocketsoftware.com/index.php?title=Model_204_security_features&amp;diff=120017"/>
		<updated>2023-11-17T19:20:25Z</updated>

		<summary type="html">&lt;p&gt;JDamon: /* Multi-factor Authentication - MFA */&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 variety of security features provide &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; users with protection against unauthorized use of their account names, files, groups, records, fields, procedures, and terminals. This section describes the role of the file manager in maintaining &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; security. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Additional documentation on security features===&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;System manager responsibilities are described in detail in [[Storing security information (CCASTAT)#Overview|Storing security information (CCASTAT)]].&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Rocket Software has add-on interfaces between &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; and a number of security products. These security interfaces are described in the [[:Category:Security interfaces|Security interfaces]] pages.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;SSL/TLS security features for Janus products are described in [[Janus Network Security]]. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Using the Model 204 password table===&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; password table is the backbone to the security features in &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt;. The user must enter a valid password to access the &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; Online, files, groups of files, and subsystems, which in turn affects access to records. The security feature in &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; is not based on a hierarchy, but rather on direct password validation.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The password table, CCASTAT, is set up by the system manager. When the file manager determines which users or groups of users can have access to what data, then the file manager works with the system manager to correctly set up the password table and file access. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Types of security===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
All &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; security features are optional. A site can support any combination of features. The file manager is primarily responsible for file, group, record, field, and procedure security. Both system and file managers handle terminal security. The file manager&#039;s responsibilities are described in this 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;Type of security&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;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&amp;gt;Login (System manager)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Limits access to the &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; system by requiring an individual user to enter a password when logging in. Only users who enter a valid password can gain access to the system. When a user successfully logs in, specified privileges are granted.&lt;br /&gt;
See [[Storing security information (CCASTAT)#Login security|Login security]] and the &amp;lt;var&amp;gt;[[LOGCTL command (user ID entries)|LOGCTL]]&amp;lt;/var&amp;gt; command for modifying user ID entries.&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;[[#File security|File]] (File manager)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Protects certain types of files by requiring a user to specify a valid file password in the OPEN command or OPEN statement. After successfully opening a file, a user is granted particular privileges pertaining to the data and procedures in that file, as well as a user class number for procedure security, and field-level security access levels.    &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;[[#Group security|Group]] (File manager) &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Protects certain types of file groups by requiring a user to specify a valid group password in the OPEN command or OPEN statement. When a user successfully opens a permanent group, the user is granted specified privileges that pertain to the files in the group. When opening a temporary group, the user is granted the privileges that all the member files have in common. &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;[[#Record security|Record]] (File manager) &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Limits access to particular records in a &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; file. When record security is in effect, a user can retrieve and update only those records stored by the user&#039;s login ID or records that other users have agreed to share. &amp;lt;/td&amp;gt;&lt;br /&gt;
&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-level security|Field-level]] (File manager) &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Protects sensitive fields in a &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; file. Field-level security levels are granted when opening a file or group, and they indicate the type of access (for example, READ, UPDATE) to the field that the user is allowed.    &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;[[#Procedure security|Procedure]] (File manager) &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Limits access to the procedures in a file. It indicates whether a user is authorized to access particular procedures and specifies the type of access (for example, DEFINE, DELETE) that the user is allowed in secured procedures.       &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;[[#Subsystem security|Subsystem]] (System manager) &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Controls the privileges that are assigned to users who enter a subsystem. The system manager assigns users subsystem command privileges and privileges for each file and group in the subsystem.  &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td nowrap&amp;gt;[[#Terminal security|Terminal]] (File and system managers) &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Allows specified login user IDs and specified files and file groups to be accessed only from certain hard-wired terminals. &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;
===Multi-factor Authentication - MFA===&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
Support for logon with Multi-factor authentication (MFA) is also provided with no updates or parameter changes required to Model 204.  MFA does require that one of the three security interfaces, listed below, be linked into the Model 204 nucleus.  Once a userid is provisioned under MFA, the user acquires a token from a client, e.g. IBM Security Verify, installed on the user&#039;s mobile device.  That token is then concatenated, with a password or passphrase, to logon to Model 204.  For example: token:password or token:passphrase, where colon (:) is the concatenating character.  That string is passed, unmodified, to the security interface for verification.&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;ACF2&lt;br /&gt;
&amp;lt;li&amp;gt;RACF&lt;br /&gt;
&amp;lt;li&amp;gt;TopSecret&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==File security==&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; file security features allow you to restrict access to particular files to designated users, as well as to limit the operations that can be performed on those files. Although you are primarily responsible for determining the file security scheme in a &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; system, you can allow users to change a password for a file if you provide them with the appropriate login privileges. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Security for files opened in a subsystem operates differently. See [[#Subsystem security|Subsystem security]] for more information.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===File manager&#039;s responsibilities===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Ordinarily, the file manager determines which files and file parameters to protect from unauthorized access and determines the initial passwords and associated privileges for the files. It is then the system manager&#039;s responsibility to add entries for these files to the password table. The password table contains password and privilege information for files, file groups, and login user IDs.&lt;br /&gt;
Maintaining this table is discussed in [[Storing security information (CCASTAT)#Password table data set|Password table data set]]. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Defining access levels for files====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The file manager is responsible for defining the default access levels for public and semipublic &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; files. You are also responsible for determining the four access levels that belong with each file or group password. These levels are then added by the system manager.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===File privileges===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
File privileges determine the type of operations that the user is authorized to perform on the file that is being opened. The types of files are:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;tr class=&amp;quot;head&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;If the file is...&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Then Model 204...&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Public&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Opens the file without asking for a file password and grants the user default file privileges as specified by the &amp;lt;var&amp;gt;PRIVDEF&amp;lt;/var&amp;gt; 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;Semipublic&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Prompts the user to enter a valid password:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;If the user enters a valid password, the user is given the privileges associated with that password. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;If the user does not know the password or enters an incorrect password, the file is still opened but the user is granted the default file privileges associated with the file.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&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;Private&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Prompts the user to enter a valid password: &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;If the user enters a valid password, the file is opened and the user is granted the privileges associated with that password. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;If the user does not know the password or enters an invalid password, the file is not opened. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&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;
====OPEN command and OPEN statement====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
For a discussion of the &amp;lt;var&amp;gt;OPEN&amp;lt;/var&amp;gt; command and the way in which a user specifies a password when opening different types of files,&lt;br /&gt;
refer to [[OPEN FILE command]] and also see [[Files, groups, and reference context#OPEN statement and OPENC_statement|OPEN statement and OPENC statement]]. &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Creating files with file security===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When a file is first created with the CREATE command, you can limit access to the file by setting two system parameters, &amp;lt;var&amp;gt;OPENCTL&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;PRIVDEF&amp;lt;/var&amp;gt;, and by asking the system manager to enter one or more file passwords in the password table. Also, the &amp;lt;var&amp;gt;OPENCTL&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;PRIVDEF&amp;lt;/var&amp;gt; parameters can be reset at a later time.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The following sections provide a further description of file passwords and privileges, as well as the &amp;lt;var&amp;gt;OPENCTL&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;PRIVDEF&amp;lt;/var&amp;gt; parameters. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===File passwords and privileges===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can define several passwords for a file. Each password can have a different set of privileges associated with it. These privileges determine what operations can be performed on the file by the user who opens the file with that password.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If you do not specify values for &amp;lt;var&amp;gt;OPENCTL&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;PRIVDEF&amp;lt;/var&amp;gt; when you create the file, the file is assumed to be a public file that has a full set of default file privileges. This implies that any user can open the file using the &amp;lt;var&amp;gt;OPEN&amp;lt;/var&amp;gt; command or &amp;lt;var&amp;gt;OPEN&amp;lt;/var&amp;gt; statement without having to enter a file password, and can then retrieve and update data, define and run procedures, or access file parameters.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Creating passwords====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Passwords can be up to eight characters long and cannot contain blanks, commas, or colons. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===OPENCTL parameter===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The &amp;lt;var&amp;gt;OPENCTL&amp;lt;/var&amp;gt; parameter determines whether or not a user must enter a file password when opening the file. Except as specified in the following table, &amp;lt;var&amp;gt;OPENCTL&amp;lt;/var&amp;gt; settings can be added together. The first three settings are mutually exclusive and one of them must be included in your &amp;lt;var&amp;gt;OPENCTL&amp;lt;/var&amp;gt; specification. The remaining settings in the table are options that you can add to one of the first three settings. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;tr class=&amp;quot;head&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Setting&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Means file is...&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Password handling&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt;X&#039;80&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Public&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Password is not requested and the file is opened with default privileges. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
This setting cannot be combined with X&#039;40&#039;.&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;X&#039;40&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Semipublic&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
User is asked for a password. For a valid password, the user is given the associated privileges. Otherwise, the user is granted default file privileges. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
This setting cannot be combined with X&#039;80&#039;.&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;X&#039;00&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Private&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Without a valid password the file is not opened.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt;X&#039;20&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Using record security&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
No effect.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The user must have a security level that permits some type of access.&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 class=&amp;quot;head&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;th colspan=&amp;quot;3&amp;quot;&amp;gt;Additional options for Parallel Query Option (PQO)&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt;X&#039;08&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Accessible remotely without a valid password &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
For a public file, no password is requested and the file is opened with default privileges.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
For a semipublic file, a password is requested. If the password is missing or invalid, the user is granted default file privileges.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
For a private file, or a semipublic file that a remote user presents a valid password for, the file is opened if X&#039;02&#039; is set. &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;X&#039;04&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Accessible  remotely as a permanent group member&amp;lt;/td&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; permanent group security is in effect. Password handling for local users is unaffected.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt;X&#039;02&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Accessible remotely with a valid password&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;For a private file, or a semipublic file that a remote user presents a valid password for, the file is opened. &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt;X&#039;00&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Accessible remotely through APSY&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;For any file, no password is requested and the file cannot be opened remotely, except within a trusted subsystem.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
For PQO sites, the OPENCTL parameter determines how a file can be accessed remotely. The PQO remote access settings have no meaning for local files. For more information about PQO remote files, see [[PQO: Remote files and scattered groups]].&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===PRIVDEF parameter and file privileges===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The PRIVDEF parameter summarizes the default file privileges that are assigned when a public file is opened, or when a semipublic file is opened without a password or with an invalid password. Privileges can be set to any combination of the following bit settings. These privileges are identical to the privileges that can be specified for an individual file password in the password 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;Bit&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;User can...&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt; X&#039;8000&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Issue file manager privileged commands such as INITIALIZE, SECURE, and DESECURE. The file manager can also reset file parameters, provided that ad hoc update privileges (X&#039;2000&#039;) are obtained. &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt; X&#039;4000&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Override record security; see [[#Record security|Record security]].&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt; X&#039;2000&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Update data with ad hoc requests or host language programs.   &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt; X&#039;1000&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Make changes to internal procedures, that is, procedures defined in the same file as the data, but cannot delete them.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt; X&#039;0800&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Update data using internal procedures. &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt; X&#039;0400&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Retrieve data with ad hoc requests or host language programs.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt; X&#039;0200&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Display, echo, and copy internal procedures.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt; X&#039;0100&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Retrieve data with internal procedures.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt; X&#039;0080&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Update data using external procedures, that is, procedures defined in a different file from the 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; X&#039;0040&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Retrieve data using external procedures.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt; X&#039;0020&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Include internal procedures.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt; X&#039;0010&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Define internal procedures.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt; X&#039;0008&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Delete internal procedures.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt; X&#039;0001&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Access file related parameters. The affected parameters are described in [[ FPARMS and TABLES file parameters#Setting file parameters|Setting file parameters]].&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;
====PRIVDEF default setting====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The default value for the PRIVDEF parameter is X&#039;BFFF&#039;, that is, all privileges except the ability to override record security.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Combining PRIVDEF settings====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Update privileges, for example, update using ad hoc requests, do not imply corresponding retrieval privileges. Thus, a user who has only the ability to update using ad hoc requests (X&#039;2000&#039; bit set) cannot find any records to update. A user must be given both update and retrieval privileges (X&#039;2400&#039;) to update data effectively.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Similarly, privileges for data retrieval using internal procedures (X&#039;0100&#039;) do not imply that the user can include a procedure from the file. The X&#039;0020&#039; privilege is required for this.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If procedure security is desired, you must relate procedure class numbers to the procedures stored in the file. Also, determine the field-level security levels for any fields in the file that are particularly sensitive and need to be protected against unauthorized access. Field and procedure security features are discussed in [[#Field-level security|Field-level security]] and [[#Procedure security|Procedure security]].&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Resetting PRIVDEF or OPENCTL===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When the OPENCTL parameter is reset to X&#039;80&#039; (public), the assigned privileges are those of the current value of the PRIVDEF parameter. This means that if OPENCTL is reset to X&#039;80&#039; while PRIVDEF is set to less than full file manager privileges, you cannot update the file or reset any file parameters. This can also occur if you reset PRIVDEF while OPENCTL is set to X&#039;80&#039;.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
To avoid this problem, use the VIEW PRIVDEF command to ensure that you have appropriate PRIVDEF privileges before you reset OPENCTL to X&#039;80&#039;. Be very careful about resetting PRIVDEF for a public file.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Regaining access====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If you do accidently lock yourself out of a file, you can regain access as follows:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Have the system manager create a permanent private group that contains the locked file.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Have the system manager add a group password (and tell you that password) to the password table, CCASTAT, with the privileges X&#039;BFFF&#039;.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Then, open the private group and issue one of the following commands:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;IN FILE name RESET OPENCTL=X&#039;40&#039;&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;IN FILE name RESET PRIVDEF=X&#039;BFFF&#039;&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
where &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;name&amp;lt;/var&amp;gt; is the name of the locked file. &amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Securing and desecuring a file===&lt;br /&gt;
 &lt;br /&gt;
====Making files secure====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Securing a file ensures that a user cannot access a file illegally by running a &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; program with a different password table. A special key in the password table serves as the key for securing a file. The key can be changed by the system manager with the LOGKEY command. When a secured file is opened, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; compares the key to a copy placed in the file by the SECURE command. The file is opened if the two fields match. If the fields do not match, the user is logged out and an error message is displayed on the operator&#039;s console. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The SECURE command, which can be issued only by a file manager, provides additional file protection by securing the currently open file. This form of the command is issued without arguments:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;SECURE&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Desecuring a file====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
To desecure a previously secured file, issue the command:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;DESECURE&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
For a description of using the SECURE and DESECURE commands with procedures, refer to [[#Procedure security|Procedure security]].     &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
==Group security==&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; group security features allow access to particular file groups to be limited to certain users.The file manager is primarily responsible for group security and for the file security features discussed in the preceding section.    &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Group passwords===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Ordinarily, the file manager determines which groups to protect from unauthorized access, and indicates the passwords and associated privileges for these groups. It is then&lt;br /&gt;
the system manager&#039;s responsibility to add entries for these groups to the password table and recommend group parameter settings. The system manager, however, is the only user authorized to create permanent groups.&lt;br /&gt;
This is done with the CREATE command, as described in [[Storing and using file group definitions (CCAGRP)#Creating file groups|Creating file groups]].&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Opening permanent file groups====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If passwords are required for a permanent file group, only users who know one of the group passwords can open the group. As with file security, the group password determines the types of operations that the user is authorized to perform on the group that is being opened. The privileges associated with the password determine the extent of these operations. Group security operates differently under the Subsystem Management facility. See [[#Subsystem security|Subsystem security]].      &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Opening temporary file groups====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Opening a temporary group is functionally equivalent to opening a series of files. Only the user who creates a temporary group can open it. To open a temporary group, the user must be able to open each file in the group individually.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Group file privileges====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The types of permanent groups are:&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;Semipublic&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Private       &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 types are the same as described in [[#File manager&#039;s responsibilities|File manager&#039;s responsibilities]].&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When a user opens a semipublic or private group, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; requests that the user enter the password. When the group is opened, the user is granted either the privileges associated with the group password or the default privileges for the group, depending on the password supplied. Default privileges are also supplied when a public group is opened.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Group passwords and privileges===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
A permanent group can have several passwords defined for it. Like a file password, a group password can have up to eight characters and cannot contain blanks, commas, or colons. Each password can have a different set of privileges associated with it. These privileges determine what operations can be performed on the group by the user who opens the group with that password. Privileges are expressed as two hexadecimal bytes, as discussed in [[#PRIVDEF parameter and group privileges|PRIVDEF parameter and group privileges]].      &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===PRIVDEF parameter and group privileges===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If a value for PRIVDEF and a PUBLIC, SEMIPUB, or PRIVATE specification is not specified at the time that the group is created, the group is assumed to be a PUBLIC group that has default privileges of X&#039;3FFF&#039;. The PRIVDEF parameter, which summarizes the default privileges for a group, provides all the privileges shown for files, plus the two group privileges summarized here. These privileges are identical to the privileges that can be specified for an individual group password in the password table. The X&#039;8000&#039; privilege has no meaning for groups, although it can be important for individual references to member files. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;tr class=&amp;quot;head&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Bit&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;User can...&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt; X&#039;0004&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Update data through procedures from the procedure 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 align=&amp;quot;right&amp;quot;&amp;gt; X&#039;0002&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Retrieve data through procedures from the procedure file.&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 group is created, one of its member files can be designated as the procedure file. This is the file in which procedures for the group are stored and from which procedures are retrieved or deleted. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
In a group context, &amp;lt;b&amp;gt;internal&amp;lt;/b&amp;gt; means that a file is a member of the group, while &amp;lt;b&amp;gt;external&amp;lt;/b&amp;gt; means that a file is not a member of the group.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Determining file and group privileges===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When a command or a SOUL statement refers to a file or group, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; checks the file and group privileges to ensure that the operation is allowed. &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; must determine whether a file has been opened as an individual file, as a member of a permanent or temporary group, or as both.&amp;lt;/p&amp;gt;&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 [[Files, groups, and reference context#Reference context|reference context]], as shown 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;Referring to...&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;User&#039;s privileges are...&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;Individual file&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Same as 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 privileges are associated with the specified file password or, if no password is required or is incorrectly specified, the default file privileges.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Temporary or ad hoc group&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;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; compares the privileges of all of the member files; only privileges that are common to every file are granted.   &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&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;Same as 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 is opened. These are the privileges associated with the specified group password or, if no password is required or is incorrectly specified, the default group privileges.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td nowrap&amp;gt;Member of a permanent group &amp;lt;br&amp;gt;(&amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;not&amp;lt;/var&amp;gt; opened individually)&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Those granted for the group.&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If the file is opened individually, its privileges remain those granted when the file was individually 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&amp;gt;Two permanent groups &amp;lt;br&amp;gt;(&amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;not&amp;lt;/var&amp;gt; opened as individual files)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;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; combines the privileges of all open groups of which the file is a member. Any privileges specified for any of the groups are granted.&amp;lt;/td&amp;gt;&lt;br /&gt;
&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 open as both an individual and a group&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Privileges associated with the file, not the group. No open group has an 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;
 &lt;br /&gt;
==Record security==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
In addition to protecting an entire file or group from unauthorized access, you can also protect individual records in a file. When record security is in effect for a particular &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; file, each user can be allowed to retrieve and update only records stored in the file with that user&#039;s ID or records that other users have agreed to share. The user does not know that any other records exist. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Record security can be in effect for one or more of the files in a group, but not for the group as a whole. Access to a single record depends on only the record security field defined for the record&#039;s file.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Record security and login security===&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; record security can be considered as an extension to login security and cannot be used unless the login security feature is in effect at an installation. Login security is primarily the system manager&#039;s responsibility, and it is discussed in detail in [[Storing security information (CCASTAT)#Login security|Login security]]. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===File manager responsibilities===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Record security usually is the responsibility of the file manager. To initiate record security, set the &amp;lt;var&amp;gt;[[OPENCTL parameter|OPENCTL]]&amp;lt;/var&amp;gt; parameter in the &amp;lt;var&amp;gt;CREATE&amp;lt;/var&amp;gt; command to indicate that record security is in effect and describe the special record security field in the &amp;lt;var&amp;gt;INITIALIZE&amp;lt;/var&amp;gt; command, which is discussed in [[Initializing files#Initializing record security files|Initializing record security files]]. You can turn off record security by using the appropriate &amp;lt;var&amp;gt;OPENCTL&amp;lt;/var&amp;gt; setting with the &amp;lt;var&amp;gt;RESET&amp;lt;/var&amp;gt; command, but it cannot be turned on by &amp;lt;var&amp;gt;RESET&amp;lt;/var&amp;gt;. The file must be defined to have record security through the &amp;lt;var&amp;gt;CREATE&amp;lt;/var&amp;gt; command.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Setting record security for remote users===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If your site has the Parallel Query Option/204 product, you can control access to remote files with record security using the &amp;lt;var&amp;gt;[[PQOSYS parameter|PQOSYS]]&amp;lt;/var&amp;gt; CCAIN system parameter.&lt;br /&gt;
If set, &amp;lt;var&amp;gt;PQOSYS&amp;lt;/var&amp;gt; creates a special record security key for remote users.&lt;br /&gt;
For more information about &amp;lt;var&amp;gt;PQOSYS&amp;lt;/var&amp;gt;, see [[PQO: Managing files and groups#Record security for remote users: the PQOSYS parameter|Record security for remote users: the PQOSYS parameter]]. &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Storing and retrieving records===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
After a file has been initialized with a record security key, each record stored in the file with a SOUL &amp;lt;var&amp;gt;STORE RECORD&amp;lt;/var&amp;gt; statement automatically has a record security field added to it, whose value is equal to the current user&#039;s login user ID. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Storing record security fields through File Load or the Host Language Interface====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
For records stored with a Host Language Interface &amp;lt;var&amp;gt;IFBREC&amp;lt;/var&amp;gt; or &amp;lt;var&amp;gt;IFSTOR&amp;lt;/var&amp;gt; function or by a file load program, a record security field must be added explicitly, along with other fields, when the record is created. For example, the following file load statement adds a record security field:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;LDC RECSEC=DARCY=&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Refer to [[File Load utility]] for information about the File Load utility. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Only records that have a record security field whose value is equal to the current user&#039;s login user ID are retrieved by a SOUL &amp;lt;var&amp;gt;FIND&amp;lt;/var&amp;gt; statement or Host Language Interface calls that perform a find function. If the &amp;lt;var&amp;gt;FILE LOAD&amp;lt;/var&amp;gt; statement shown here is executed, for example, only a user logged in under the name &amp;lt;code&amp;gt;DARCY&amp;lt;/code&amp;gt; can retrieve these records.   &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Allowing multiple access===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
To share a record with another user, either you or the user can add an explicit occurrence of the record security field with a value equal to the second user&#039;s login user ID. If the second user has update privileges, that user can delete the first value of the record security field, thus making the record accessible only through the second user&#039;s user ID.   &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Multiple access in 1NF files====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
To allow access to record security fields in &amp;lt;var&amp;gt;1NF&amp;lt;/var&amp;gt; files, you must define the record security field as &amp;lt;var&amp;gt;INVISIBLE&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;REPEATABLE&amp;lt;/var&amp;gt;.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Overriding record security===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Occasionally, it may be necessary to override the &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; record security scheme. To override record security, you must have the appropriate record security override privileges at login time: the X&#039;04&#039; bit must be set. When the file is opened, the X&#039;4000&#039; bit must be set. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If both privileges have been granted, you can retrieve all records, regardless of the record security key value associated with them. However, if you store records from User Language at this time, they still have the record security field with the value of your login ID added to them automatically.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If record security was specified for a file in a permanent group, you can override record security for the file if login and group privileges (X&#039;4000&#039;) allow it. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
For further information regarding login security bit settings, see [[Establishing and maintaining security#File security|File security]]. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
==Field-level security==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Field-level security (FLS) provides an additional level of protection for a user&#039;s data by controlling access to the individual fields of a &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; file. It involves a comparison of the user&#039;s predetermined numeric access level for a field with the field&#039;s own predetermined level, for each of four types of access. Field-level security specifications are put into effect only if access to a data record has been allowed by previous file-level and record-level security checks. The following paragraphs describe in detail how field-level security operates. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
In addition to field-level access for each field, each file has a default access level (that is, all fields within the file are automatically assigned access levels).&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The following parameters determine the default field access:&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;This parameter&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Provides this default field access...&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;SELLVL&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;SELECT &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;READLVL&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;READ &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;UPDTLVL&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;UPDATE &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;ADDLVL&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;ADD &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;
Like PRIVDEF, these parameters can be set when a file is created, or they can be reset later. If not explicitly specified, all of these parameters are set to zero, which allows a user to access only unsecured fields (that is, fields with access levels of 0). The same four parameters can be set for a permanent group when it is created by the system manager.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===File manager responsibilities===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The file manager is responsible for determining the desired field-level security scheme and for assigning security levels to fields that are to be protected. The LEVEL option allows you to indicate the security level for the field. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
For example, if the following command is issued, only users who have access levels of 70 or greater are allowed to access the PERFORM field, which might contain an employee&#039;s performance evaluation code:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;DEFINE FIELD PERFORM WITH LEVEL 70&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Types of field access===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
By using the &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; field-level security scheme, you can protect particularly sensitive data fields from unauthorized access. A field can be accessed in several different ways.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Field-level security features limits access to a field to any combination of the following access types: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;tr class=&amp;quot;head&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;This access type&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Allows you 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;SELECT&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Use the field in a SOUL FIND statement or in an IFFIND 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;READ&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Examine the value of a field, for example, in a SOUL PRINT or assignment statement or an IFGET 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;UPDATE&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Change the value of a previously stored occurrence of a field. This type of access can be granted without a corresponding READ access, which precludes updates of the form shown below:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;CHANGE &amp;lt;i&amp;gt;fieldname&amp;lt;/i&amp;gt; = &amp;lt;i&amp;gt;value&amp;lt;/i&amp;gt; TO &amp;lt;i&amp;gt;value&amp;lt;/i&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;ADD&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Add new occurrences of a field, including those added by a STORE RECORD statement. This type of access allows data entry clerks or other personnel to add new field occurrences or records without being able to change existing occurrences, or possibly even to examine them.&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
This type of access can also provide a user with the ability to add occurrences of the record security field without altering existing occurrences.&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;
Field-level security controls only explicit field references. Implicit references, such as retrieving a record security field with a FIND statement or adding a record security key value with STORE RECORD, are not controlled. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Field levels===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Every field definition can have a security level associated with it. Security levels are numbered from 0 to 255. 0 implies no security for the field; 255 implies the highest security. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Field-level security and field ordering====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
In the &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; field-level security scheme, fields can be assigned security levels in a hierarchical fashion. The fields can be ordered in view of the sensitivity of the data that they contain. An example of such an ordering is shown in [[#Field levels|Field levels]], the fields being listed in order of increasing sensitivity.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;caption&amp;gt;Field-level ordering example&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;Field &amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;FLS READ level&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;Last name&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;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;First name&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;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Employee number&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;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;City&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;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;State&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;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Zip code&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;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Street address&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt;20&amp;lt;/td&amp;gt;&lt;br /&gt;
&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 align=&amp;quot;right&amp;quot;&amp;gt;30&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Telephone number&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt;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;Salary&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt;60&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Performance evaluation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt;70&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;
In [[#Field levels|Field levels]], performance evaluation is considered to be the most sensitive field in the record, followed by salary, and so on. Last name, first name, and employee number have not been assigned field-level security numbers. However, file, record, and procedure security features still can be used to control access to those fields.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===User levels===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Each user has four field-level security access levels associated with each file and group opened. These correspond to the four field access levels defined previously: SELECT, READ, UPDATE, and ADD. User levels also range from 0 to 255.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When a user attempts to access a field in a particular way, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; compares the user&#039;s access level with the level assigned for the field. If the user&#039;s level for the desired type of access, for example, READ, is greater than or equal to the field&#039;s FLS level, the particular type of field access is allowed. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====User-level security example====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
For example, a user who has a READ level of 30 is permitted to print any field that has a READ level between 0 and 30, but cannot print a field that has a higher READ level. Thus, when using the file described above, a user who has a READ level of 30 can print an employee&#039;s position (and all fields that have lower FLS fields), but not the employee&#039;s telephone number, salary, or performance evaluation. An example of a possible set of access levels at an installation is shown below:  &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;caption&amp;gt;User access levels example&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;Employee category&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;SELECT&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;READ&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;UPDATE&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;ADD&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;Data entry clerks&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 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 align=&amp;quot;right&amp;quot;&amp;gt;60&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Personnel department clerks&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt;50&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt;50&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt;40&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;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Personnel department supervisor&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt;70&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt;70&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt;70&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;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Other employees (for example, telephone operators)&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 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;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;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Employee supervisor&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 align=&amp;quot;right&amp;quot;&amp;gt;70&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 align=&amp;quot;right&amp;quot;&amp;gt;70&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 motivations for these assignments easily can be understood in relation to the sample file. Only data entry clerks can add employee records; only supervisors can add performance evaluations; only personnel department supervisors can update salaries, and so on.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Referring to or displaying fields====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When a user&#039;s access levels are lower than permitted for the level of a particular field, a reference to the field is treated as a reference to a nonexistent field. Furthermore, the names of such fields are excluded from the output of the DISPLAY FIELD ALL command. Thus, when using the file shown in [[#User levels|User levels]], only personnel and employee supervisors know that a performance evaluation field even exists in the file. The field is never visible to other users.   &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
=====Limiting access to fields=====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Access to records for particular employees can be controlled in another way. Employee supervisors usually are given a password that allows them to read or add any field in the file. However, procedure- or record-level security can be used to restrict supervisors&#039; access to only the records of their employees.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Determining user access levels===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The access levels assigned for a user are determined when the user opens a file or a group using the&lt;br /&gt;
[[OPEN FILE command]], [[OPEN PERM GROUP command]], or [[OPEN TEMP GROUP command]] or using the &amp;lt;var&amp;gt;[[Files, groups, and reference context#OPEN statement and OPENC statement|OPEN]]&amp;lt;/var&amp;gt; statement.&lt;br /&gt;
Access level assignments are made for various types of files or groups as follows:    &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;If a file or a permanent group is public or semipublic and an incorrect password is specified in the OPEN, the user&#039;s four access levels are taken from the file or group defaults described in [[#Procedure security|Procedure security]]. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;If a private or semipublic file or group is opened with a valid password, the user&#039;s four access levels are the same as those associated with the password. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;If a temporary or ad hoc group is opened, all the member files are opened separately as individual files. Opening these individual files establishes a set of four access levels for each member file.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Access levels for temporary or ad hoc groups====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The four access levels for a temporary or ad hoc group are formed by taking the minimum of each access level across all the member files. Suppose that &amp;lt;code&amp;gt;FILEA&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;FILEB&amp;lt;/code&amp;gt; have the access levels shown 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;File&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;SELECT&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;READ&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;UPDATE&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;ADD&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;FILEA&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt;30&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt;40&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 align=&amp;quot;right&amp;quot;&amp;gt; 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;FILEB&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt;40&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt;30&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 align=&amp;quot;right&amp;quot;&amp;gt;10&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 a temporary group named &amp;lt;code&amp;gt;FILES&amp;lt;/code&amp;gt;, consisting of &amp;lt;code&amp;gt;FILEA&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;FILEB&amp;lt;/code&amp;gt;, is opened, the group is assigned the access levels:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;tr class=&amp;quot;head&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Group &amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt; SELECT&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;READ&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;UPDATE&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;ADD&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;FILES&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt;30&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt;30&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 align=&amp;quot;right&amp;quot;&amp;gt; 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;
&amp;lt;p&amp;gt;&lt;br /&gt;
This is equivalent to the comparison of file privileges that occurs when opening a temporary or ad hoc group; see [[#Group security|Group security]].&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 examples show how your user access levels for a file can change as the reference context changes. In the examples, the four user-access levels, SELECT, READ, UPDATE, and ADD, are represented by their first letters.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
A field reference occurs in single file context, and the file is opened as a single file:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;                    S      R      U      A&lt;br /&gt;
OPEN FILE FILEA     100    100    10     20&lt;br /&gt;
BEGIN&lt;br /&gt;
  FPC NAME=JONES&lt;br /&gt;
END&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The four access levels used in checking field references (100, 100, 10, 20) are those assigned when &amp;lt;code&amp;gt;FILEA&amp;lt;/code&amp;gt; was opened as a single file.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
A field reference occurs in group context:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;                    S      R      U      A&lt;br /&gt;
OPEN FILE GROUPA    50     75     20     0&lt;br /&gt;
BEGIN&lt;br /&gt;
  FPC NAME=JONES&lt;br /&gt;
END&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The four access levels used for checking field references in any file of the group (50, 75, 20, 0) are the four assigned when the group was opened. All the files in a group receive the same four access levels.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
A field reference occurs in single file context, but the file was opened only as a member of one or more permanent groups. &amp;lt;code&amp;gt;FILEA&amp;lt;/code&amp;gt; is a member of the two groups, &amp;lt;code&amp;gt;GROUPA&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;GROUPB&amp;lt;/code&amp;gt;:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;                    S      R      U      A&lt;br /&gt;
CLOSE FILE FILEA&lt;br /&gt;
 OPEN GROUP GROUPA  50     75     20     0&lt;br /&gt;
 OPEN GROUP GROUPB  50     50     0      100&lt;br /&gt;
 BEGIN&lt;br /&gt;
   IN FILEA FPC NAME=JONES&lt;br /&gt;
 END&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The four access levels used in checking field references (50, 75, 20, 100) are formed by taking the maximum level defined for the file by every group containing the file that the user has opened. &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Procedure security==&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; procedure security limits access to a file&#039;s procedures in the following ways:     &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;By allowing you to specify user privileges that control the type of functions that can be performed on the procedures within a file, for example, to display, define, or delete the procedure.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;By limiting access to a procedure to only a particular class of users. This is done by assigning a procedure class number to the procedure that is being secured and a user class to the users allowed to manipulate the procedures. &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 security features are discussed in greater detail in the following sections. In addition, [[#File security|File security]] and [[#Group security|Group security]] discuss the privileges that enable users to access the data in a file or group through procedures.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Accessing procedures===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
At the time a file or group is opened, particular privileges are established that concern the text of the procedures stored in the file or group. These privileges, or access rights, enable a user to manipulate a procedure in any 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;Use the procedure, for example, by specifying it in an INCLUDE command.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Display and copy the procedure. This includes echoing the procedure and using the EDIT command to display or copy it. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Change the procedure, usually with the Editor.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Define a new procedure in the file with the PROCEDURE command or the Editor. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Delete a procedure by means of the DELETE 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;
For information about the basic procedure functions, see the $Prc* and $Proc* functions in [[List of $functions]]; and for information about procedure related commands, see [[:Category:Commands]].&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Securing procedures===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The privileges established for procedure access discussed in [[#PRIVDEF parameter and file privileges|PRIVDEF parameter and file privileges]] are used to limit the way in which the procedures associated with a file or group can be accessed. &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; provides an additional facility that allows particular procedures to be secured and thus protected from unauthorized access. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===User and procedure classes===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can limit user access to procedures by assigning user classes that have access to procedures in a particular procedure class.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
User and procedure classes are usually put in place as part of the security scheme for a file or group. Although every user and procedure could have a distinct class number (UCLASS and PCLASS), this approach is too complex and cumbersome for most installations. Thus, sets of procedures and users more often are handled together. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====User classes (UCLASS)====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Examples of typical user classes are:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;All employees in a department&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;All managers, regardless of department&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;All data entry personnel &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Procedure classes (PCLASS)====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Examples of typical procedure classes include procedures that:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Display salary data&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Update personnel records&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Perform general utility operations&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Access sensitive fields in files &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Procedure classes and user classes are arbitrary numbers that range from 1 to 255. Their only significance is in their relationship to each other. The numbers are assigned as described in [[#User and procedure classes|User and procedure classes]].&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When a user opens a file or group, the user is given the privileges and user class determined by the OPEN: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;If the file or group is opened with a password, the user class is obtained from the password table, where it is stored with the privilege bytes and field-level security levels for the password.&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The user class normally is provided by the file manager and entered into the password table by the system manager, as discussed in [[Storing security information (CCASTAT)#Password table maintenance|Password table maintenance]]. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;If the file or group is opened without a password, the user is granted default privileges and a default user class. This default user class is the value of the PRCLDEF system parameter, which has a default value of zero and can be set by the file manager.     &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Relationship between user and procedure classes====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
An access control table (ACT) stored in each file assigns to particular user classes the access rights to particular procedure classes. These mappings from user class to procedure class in the ACT are created using the SECURE command described in [[#SECURE command, definition format|SECURE command, definition format]]. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The user class established for a group applies to all its member files. If a file is opened only as part of a permanent group, any reference to a secured procedure compares the user class specified for the group against the procedure&#039;s class to determine the available access rights. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
=====Example=====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The association of user classes and procedure classes can be explained best by an example: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Suppose that a user whose user class is 8 includes a procedure named &amp;lt;code&amp;gt;CENTEST&amp;lt;/code&amp;gt;, which has a procedure class of 20. &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; must determine whether users of class 8 are allowed to include procedures of class 20. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; checks the ACT in the file in which &amp;lt;code&amp;gt;CENTEST&amp;lt;/code&amp;gt; is defined and finds that an INCLUDE is permitted, the procedure is included. If, however, INCLUDE is not permitted for users of class 8, the INCLUDE does not take place and an error message is issued. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
This mapping of user and procedure classes is discussed in greater detail in the sections that follow.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Assigning procedure classes====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
A procedure class can be specified for a procedure by the file manager or by an individual user. The class can be assigned:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;By the user when defining the procedure with the PROCEDURE command&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;By the file manager when securing the procedure with the SECURE command   &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
=====User-defined procedure classes=====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When defining a procedure, the user can specify a procedure class number in the following format:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;PROCEDURE &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;name&amp;lt;/span&amp;gt; PCLASS=&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;n&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;p&amp;gt;&lt;br /&gt;
&amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;n&amp;lt;/var&amp;gt; is any number in the range 1 through 255.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
A user&#039;s access rights to procedures are checked first at the file level and then at the procedure level. Thus, if the user is to be allowed to change a secured procedure, the user must have procedure update file privileges, and the appropriate entry must have been made in the ACT.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
=====File manager-defined procedure classes=====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
File manager-defined procedure classes are discussed in the following sections, in context of the commands that the file manager uses for this purpose.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===SECURE command, definition format===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If you have appropriate file manager privileges, you can use the SECURE command in the following form to:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Secure both files and procedures&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Define privileges for procedures that already have been secured&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Make entries in the access control table&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 is:&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;SECURE [PROCEDURE]&lt;br /&gt;
   NAME=&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;procname&amp;lt;/span&amp;gt; [,&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;procname&amp;lt;/span&amp;gt; ...] PCLASS=&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;pclass&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;procname&amp;lt;/var&amp;gt; is the name of an existing procedure to be secured.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;pclass&amp;lt;/var&amp;gt; is the procedure class number to assign to the procedure(s); the number must be in the range 1 to 255. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The SECURE command must be issued in file context, that is, the current default must be a file, not a group.&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 is a SECURE command used to secure a procedure:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;SECURE PROCEDURE NAME = PAY PCLASS = 7&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
After this command is issued, the procedure PAY is secured with the procedure class number 7. An entry for PCLASS=7 is made in the procedure dictionary. If PAY is currently secured, its old procedure class is changed to the new class.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===SECURE command, mapping format===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The SECURE command lets you map particular access privileges and user classes to particular procedure classes. This command creates entries in the access control table. Issue the following form of the command:&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;SECURE &amp;lt;span class=&amp;quot;squareb&amp;quot;&amp;gt;[&amp;lt;/span&amp;gt;PROCEDURE&amp;lt;span class=&amp;quot;squareb&amp;quot;&amp;gt;]&amp;lt;/span&amp;gt;&lt;br /&gt;
   ACCESS = &amp;lt;span class=&amp;quot;squareb&amp;quot;&amp;gt;{&amp;lt;/span&amp;gt;ALL &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;access&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;access&amp;lt;/span&amp;gt;...&amp;lt;span class=&amp;quot;squareb&amp;quot;&amp;gt;]&amp;lt;/span&amp;gt;) &amp;lt;span class=&amp;quot;squareb&amp;quot;&amp;gt;|&amp;lt;/span&amp;gt; NONE&amp;lt;span class=&amp;quot;squareb&amp;quot;&amp;gt;}&amp;lt;/span&amp;gt;&lt;br /&gt;
   UCLASS = &amp;lt;span class=&amp;quot;squareb&amp;quot;&amp;gt;{&amp;lt;/span&amp;gt;ALL &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;uclass&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;uclass&amp;lt;/span&amp;gt;...&amp;lt;span class=&amp;quot;squareb&amp;quot;&amp;gt;]&amp;lt;/span&amp;gt;)&amp;lt;span class=&amp;quot;squareb&amp;quot;&amp;gt;}&amp;lt;/span&amp;gt;&lt;br /&gt;
   PCLASS = &amp;lt;span class=&amp;quot;squareb&amp;quot;&amp;gt;{&amp;lt;/span&amp;gt;ALL &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;pclass&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;pclass&amp;lt;/span&amp;gt;...&amp;lt;span class=&amp;quot;squareb&amp;quot;&amp;gt;]&amp;lt;/span&amp;gt;)&amp;lt;span class=&amp;quot;squareb&amp;quot;&amp;gt;}&amp;lt;/span&amp;gt;&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;access&amp;lt;/var&amp;gt; is a particular privilege associated with the procedures in the procedure class. It can be 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;Privilege&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Users can...&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;USE &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Include procedures.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;COPY &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Display and edit (copy only) procedures.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;CHANGE &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Edit procedures.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;DEFINE &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Create new procedures (PROCEDURE and EDIT).&amp;lt;/td&amp;gt;&lt;br /&gt;
&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 &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Delete procedures.&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;li&amp;gt;&amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;uclass&amp;lt;/var&amp;gt; is the user class number whose users have access to the procedures in PCLASS; the number must be in the range 1 to 255. Parentheses are optional in the uclass 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;pclass&amp;lt;/var&amp;gt; is the procedure class number to which users in UCLASS have access; the number must be in the range 1 to 255. Parentheses are optional in the pclass definition. &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;
In the following example, only users in the Payroll Department (user class 90) are allowed to use procedures that manipulate salary fields in a file (procedure class 20 and 30):&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;SECURE PROC ACCESS = (USE) UCLASS = 90 PCLASS = 20,30&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The entries in the ACT do not take effect for users that have the file open when the &amp;lt;var&amp;gt;SECURE&amp;lt;/var&amp;gt; command is issued until they reopen the file. This includes the user who issues the command. See [[SECURE PROCEDURE ACCESS command]] for the complete syntax and description of the &amp;lt;var&amp;gt;SECURE&amp;lt;/var&amp;gt; command.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
To complete procedure security implementation, the system manager updates the password table using the &amp;lt;var&amp;gt;LOGCTL&amp;lt;/var&amp;gt; command to assign user classes to the appropriate passwords.   &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Procedure-related commands and required privileges===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The following list is a summary of &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; procedure or procedure-related commands that require particular privileges. All these commands are described in 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.  &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;caption&amp;gt;Privileges for procedure or procedure-related commands&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 colspan=&amp;quot;2&amp;quot;&amp;gt;Required privileges&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;INCLUDE&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;USE&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;EDIT&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;COPY&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;DISPLAY&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;COPY (to display text)&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;DELETE&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;DELETE&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;ASSIGN&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;CHANGE&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;DEASSIGN&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;CHANGE&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;RENAME&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;CHANGE&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 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;New procedure&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Old procedure&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;PROCEDURE&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;DEFINE&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;CHANGE&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;EDIT commands:&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
GO&amp;lt;br&amp;gt;END&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;DEFINE, USE* DEFINE&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;CHANGE, USE* CHANGE&amp;lt;/td&amp;gt;&lt;br /&gt;
&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;/td&amp;gt;&lt;br /&gt;
&amp;lt;td colspan=&amp;quot;2&amp;quot;&amp;gt;*COPY privileges are required in addition to USE to echo text lines of a procedure to a journal.&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;
===Displaying user and procedure classes===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The SECURE command constructs entries in the access control table for any user classes specified in the UCLASS clause. &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 important to display procedure security and save it before reorganizing a file, so that you can reestablish the same security. You might have to upgrade your file manager privileges to include COPY, which is not part of the default privileges of a file manager.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
To determine a user&#039;s access rights for various procedure classes, issue the following form of the DISPLAY command: &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;DISPLAY [PROCEDURE (PRIVILEGES [,NOUSE])&lt;br /&gt;
   [ALL &amp;lt;span class=&amp;quot;squareb&amp;quot;&amp;gt;|&amp;lt;/span&amp;gt; UCLASS = &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;uclass&amp;lt;/var&amp;gt;[,&amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;uclass&amp;lt;/var&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;ALL displays information for all user classes. &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;uclass&amp;lt;/var&amp;gt; displays information only for the specified classes.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;If neither is specified, your current class and privileges are displayed. &lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Privileges are displayed in the following format:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;UCLASS=&amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;u&amp;lt;/var&amp;gt; PCLASS=&amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;pc&amp;lt;/var&amp;gt;,X&#039;&amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;nn&amp;lt;/var&amp;gt;&#039;&lt;br /&gt;
      .&lt;br /&gt;
      .&lt;br /&gt;
      .&lt;br /&gt;
 PCLASS=&amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;pc&amp;lt;/var&amp;gt;,X&#039;&amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;nn&amp;lt;/var&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;u&amp;lt;/var&amp;gt; is the user class.&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;pc&amp;lt;/var&amp;gt; is a procedure class defined for that user class.&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;nn&amp;lt;/var&amp;gt; is a privilege byte constructed from combinations of the following bit settings:&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;tr class=&amp;quot;head&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt; Bit &amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Privilege&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt; X&#039;80&#039; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;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; X&#039;40&#039; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;COPY&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt; X&#039;20&#039; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;CHANGE &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt; X&#039;10&#039; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;DEFINE&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt; X&#039;08&#039; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;DELETE&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;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;If NOUSE is specified, information is displayed at your terminal even if a USE command preceded the DISPLAY command. The device specified by the USE command is not used but is left open.&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 discussion of other DISPLAY command capabilities in [[ Field display and message broadcast#Overview|Overview]].&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Sample security scheme===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
A simplified example of a security scheme at an installation is presented in this section. At this installation, the following access rules are established:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Most users are allowed to include all secured procedures.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Only programmers in the data processing department are allowed to define procedures. However, they cannot use them. These programmers can have user classes 8 or 9.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Only users in the payroll department are allowed to use procedures that manipulate salary fields in the file. Payroll users are assigned class 90, and the payroll procedures are in procedure classes 20 and 30.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Other users are assigned user classes 25, 30, or 31.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Other procedures are in procedure classes 40, 50, 60, or 70. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Sample SECURE commands===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
To create the security scheme in this example, issue the following commands:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;SECURE PROC ACCESS=(CHANGE,DEFINE,DELETE,COPY) UCLASS=8,9 PCLASS=20,30,40,50,60,70&lt;br /&gt;
SECURE PROC ACCESS=(USE) UCLASS=90 PCLASS=20,30&lt;br /&gt;
SECURE PROC ACCESS=(USE) UCLASS=25,30,31,90 -&lt;br /&gt;
  PCLASS=40,50,60,70&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Importance of SECURE command order====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
In this example, the order of the SECURE commands is unimportant. However, the order becomes significant when a UCLASS=ALL or PCLASS=ALL clause is included in the command. UCLASS=ALL affects only user classes already mentioned in the ACT. This might be completely different from the list of user classes that actually can be assigned to users from the password table or default file or group settings.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When PCLASS=ALL is included in the command, no new entries are added to the ACT. Instead, for each user class in the UCLASS list, access rights for each procedure class already mentioned for that user are replaced by the new ACCESS rights. Again, the classes affected in the ACT may be completely different from those actually used for secured procedures in the file. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Changing and adding access privileges===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Suppose, in this sample security, that the payroll users now need to be able to display all the procedures that they use. Also, suppose that a new set of procedures (of class 15) is developed that all users (including the programmers) can include. The following commands are issued in the order shown to modify the ACT entries already built:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;SECURE PROC ACCESS=(USE) UCLASS=ALL PCLASS=15&lt;br /&gt;
SECURE PROC ACCESS=(USE,COPY) UCLASS=90 PCLASS=ALL &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If these commands are reversed, the payroll users cannot display members of the new class of procedures.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Removing procedure security for procedures or user classes===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
To remove the procedure access defined for user class/procedure class pairs, use the DESECURE command:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Remove the security for the procedure involved. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Delete the procedure class number assigned to the procedure in the procedure dictionary by issuing the form of the DESECURE command immediately below. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&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 you do not do this, no one can access the procedure, even though the entry might have been removed from the ACT (see the second form of DESECURE below). &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Only file managers can issue the DESECURE command and it must be issued in file context (that is, the current default must be a file, not a group). &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The format of the DESECURE command is:&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;DESECURE &amp;lt;b&amp;gt;PROC&amp;lt;/b&amp;gt;EDURE {ALL &amp;lt;span class=&amp;quot;squareb&amp;quot;&amp;gt;|&amp;lt;/span&amp;gt; NAME=(&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;procname&amp;lt;/span&amp;gt;[,&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;procname&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;p&amp;gt;&lt;br /&gt;
&amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;procname&amp;lt;/var&amp;gt; is the name of an existing secured procedure.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
To remove particular access privileges for particular procedure classes, use the following form of the DESECURE command to delete entries from the ACT. You must specify either UCLASS or PCLASS, or both.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The format is:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;DESECURE &amp;lt;var&amp;gt;PROC&amp;lt;/var&amp;gt;EDURE&lt;br /&gt;
   {[UCLASS= {ALL &amp;lt;span class=&amp;quot;squareb&amp;quot;&amp;gt;|&amp;lt;/span&amp;gt; (uclass[,uclass...])}] &amp;lt;span class=&amp;quot;squareb&amp;quot;&amp;gt;|&amp;lt;/span&amp;gt;&lt;br /&gt;
    [PCLASS= {ALL &amp;lt;span class=&amp;quot;squareb&amp;quot;&amp;gt;|&amp;lt;/span&amp;gt; (pclass[,pclass...])}]}&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;uclass&amp;lt;/var&amp;gt; is the number of an existing user class whose users have access to the procedure in &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;pclass&amp;lt;/var&amp;gt;; the number must be in the range 1-255. If only UCLASS is specified, all references to the specified user classes are removed from the ACT.&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Parentheses are optional with &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;uclass&amp;lt;/var&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;var class=&amp;quot;term&amp;quot;&amp;gt;pclass&amp;lt;/var&amp;gt; is the number of an existing procedure class to which users in &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;uclass&amp;lt;/var&amp;gt; have access; the number must be in the range 1-255. If only &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;pclass&amp;lt;/var&amp;gt; is specified, all references to the specified procedure classes are removed from the ACT.&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Parentheses are optional with &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;pclass&amp;lt;/var&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;
===Desecuring both UCLASS and PCLASS===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If both UCLASS and PCLASS are specified, the entries for all combinations of the specified user and procedure class pairs are removed from the ACT. For example:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;DESECURE PROC UCLASS=8,9 PCLASS=1,2,3&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
removes access entries for:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;UCLASS 8 and PCLASS 1&lt;br /&gt;
UCLASS 8 and PCLASS 2&lt;br /&gt;
UCLASS 8 and PCLASS 3&lt;br /&gt;
UCLASS 9 and PCLASS 1&lt;br /&gt;
UCLASS 9 and PCLASS 2&lt;br /&gt;
UCLASS 9 and PCLASS 3&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===System manager responsibilities===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The final step in the desecuring process is to have the system manager remove the password(s) with associated uclasses from the password table. If they are not removed, you must remember not to use them when opening the file.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Privileges required===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You must have file-level privileges of at least X&#039;A000&#039; (file manager and ad hoc data update) to issue SECURE and DESECURE commands. In this case, you actually need update but not retrieve privileges. (Refer to [[#File security|File security]] for a discussion of these privileges.)    &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===File and group references===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When an explicit reference is made to a file with an IN clause and that file is opened only as a member of one or more permanent groups, the file-level privileges to be checked must be obtained from the group privileges, as defined for every group of which the file is a member. If any group&#039;s privileges allow the access in question, then the operation proceeds.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If the access is to a secured procedure, for every group in which the file is opened and the access is allowed by the group privileges, the user&#039;s user class in that group is used to determine privileges for that procedure&#039;s class. If any group&#039;s user class has the privilege, the operation proceeds.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
See the discussion of reference context in the example on [[#Determining user access levels|Determining user access levels]] and see [[Files, groups, and reference context]] for more information. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
==Subsystem security==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When a user enters a subsystem, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; opens and determines privileges for all subsystem files and groups for that user. The files that are opened and the privileges that are assigned are based on a combination of the user&#039;s subsystem user class and the subsystem&#039;s status, both specified by the system manager in the subsystem definition. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The system manager assigns a user to a subsystem user class by entering 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; login user ID in the appropriate subsystem user class. Whenever the user invokes the subsystem, the user is assigned the subsystem command privileges and the file and group privileges of that subsystem user class.   &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The system manager controls access to the subsystem through the subsystem status: public, semipublic, or private. The status determines which user classes can enter a particular subsystem and whether or not users without a user class assignment are permitted entry. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
For more information about subsystems, see [[System requirements for Application Subsystems]].&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Terminal security==&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; terminal security allows access to certain login user IDs, files, or groups to be restricted to users at certain terminals. For example, you might want a particular MEDICAL file to be accessible only through terminals located physically in doctors&#039; offices.     &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The terminal security feature allows a list of terminal numbers to be associated with each login, file, or group password. A terminal number is determined during &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; initialization by the order of the user parameter lines and the way in which they are assigned to specific telecommunications unit numbers in the JCL. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The batch user (User 0) is considered to be terminal 0 (zero). A user at a particular terminal whose number is n can log in to a specific user ID or open a specific file or group only if the terminal number, n, is in the terminal list associated with the password for that user ID, file, or group. If it is not, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; responds as though the user had entered an invalid password.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Terminal security is generally used with only hard-wired terminals, that is, terminals on leased lines. If an installation has dialup terminals, the terminal can be connected to a number of similar telecommunications units and user parameter lines. In this case, although the location of the terminal can be fixed, its terminal number can change every time it is dialed up. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The entries in the ACT do not take effect for users that have the file open when the SECURE command is issued until they reopen the file. This includes the user who issues the command. The complete syntax and description of the SECURE command is located in the ry time it is dialed up.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
By controlling the assignment of terminal numbers to physical terminals, the system manager determines the appropriate terminal security scheme. You provide assistance in limiting file and group access through file passwords and privileges, and group passwords and privileges.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;/div&amp;gt; &amp;lt;!-- end of toclimit div --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Model 204 files]]&lt;/div&gt;</summary>
		<author><name>JDamon</name></author>
	</entry>
	<entry>
		<id>https://m204wiki.rocketsoftware.com/index.php?title=HLI:_Model_204_security&amp;diff=120016</id>
		<title>HLI: Model 204 security</title>
		<link rel="alternate" type="text/html" href="https://m204wiki.rocketsoftware.com/index.php?title=HLI:_Model_204_security&amp;diff=120016"/>
		<updated>2023-11-17T19:16:56Z</updated>

		<summary type="html">&lt;p&gt;JDamon: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
==Overview==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
This topic briefly describes Model 204 security for application programmers who are using the Host Language Interface facility. &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
For more information about Model 204 security, see the [[Security interfaces overview]]. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
See also:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;[[Storing security information (CCASTAT)]]&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;[[Establishing and maintaining security]]&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Using Model 204 security==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Model 204 provides a variety of security features that prevent unauthorized use of IDs, files, groups, records, and fields. When a particular security feature is operational, the corresponding access restrictions apply. &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Login security===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Login security requires you to enter a password when logging in. Only a valid password can gain access to the system. After successfully logging in, you are granted particular privileges. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When login security is in effect, specify login information using the following HLI calls:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
For an IFSTRT thread in IFAM1, use the IFLOG call to provide login information, as necessary, where the user authorization is to be validated by a security interface.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
In IFAM2 and IFAM4, specify the login parameter in the IFSTRT call to supply the user ID and password that permit entry to the system. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
For an IFDIAL thread, supply the login information, as necessary, using the IFWRITE call.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===File security===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
File security requires you to specify a legal password in the IFOPEN call. After you successfully open the file, Model 204 grants you particular file privileges, a user class number, and field security levels. &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Group security===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Group security requires you to specify a legal password in the IFOPEN for the file group. &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Record security===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Record security limits access to records by allowing you to retrieve and update only records that you have stored in the file or that users can share.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Field-level security===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Field-level security protects fields in a file. Field access levels are assigned when you open a file or group. Specify the security level associated with a field in the IFDFLD call. &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Terminal security===&lt;br /&gt;
&amp;lt;p&amp;gt;Terminal security allows particular login user IDs and particular files and file groups to be accessed only from specific Model 204 threads.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
{{Template: HLI programming topic list}}&lt;br /&gt;
&lt;br /&gt;
[[Category: Host Language Interface]]&lt;/div&gt;</summary>
		<author><name>JDamon</name></author>
	</entry>
	<entry>
		<id>https://m204wiki.rocketsoftware.com/index.php?title=Model_204_security_features&amp;diff=120015</id>
		<title>Model 204 security features</title>
		<link rel="alternate" type="text/html" href="https://m204wiki.rocketsoftware.com/index.php?title=Model_204_security_features&amp;diff=120015"/>
		<updated>2023-11-17T19:13:34Z</updated>

		<summary type="html">&lt;p&gt;JDamon: /* Multi-factor Authentication - MFA */&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 variety of security features provide &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; users with protection against unauthorized use of their account names, files, groups, records, fields, procedures, and terminals. This section describes the role of the file manager in maintaining &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; security. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Additional documentation on security features===&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;System manager responsibilities are described in detail in [[Storing security information (CCASTAT)#Overview|Storing security information (CCASTAT)]].&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Rocket Software has add-on interfaces between &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; and a number of security products. These security interfaces are described in the [[:Category:Security interfaces|Security interfaces]] pages.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;SSL/TLS security features for Janus products are described in [[Janus Network Security]]. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Using the Model 204 password table===&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; password table is the backbone to the security features in &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt;. The user must enter a valid password to access the &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; Online, files, groups of files, and subsystems, which in turn affects access to records. The security feature in &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; is not based on a hierarchy, but rather on direct password validation.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The password table, CCASTAT, is set up by the system manager. When the file manager determines which users or groups of users can have access to what data, then the file manager works with the system manager to correctly set up the password table and file access. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Types of security===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
All &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; security features are optional. A site can support any combination of features. The file manager is primarily responsible for file, group, record, field, and procedure security. Both system and file managers handle terminal security. The file manager&#039;s responsibilities are described in this 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;Type of security&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;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&amp;gt;Login (System manager)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Limits access to the &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; system by requiring an individual user to enter a password when logging in. Only users who enter a valid password can gain access to the system. When a user successfully logs in, specified privileges are granted.&lt;br /&gt;
See [[Storing security information (CCASTAT)#Login security|Login security]] and the &amp;lt;var&amp;gt;[[LOGCTL command (user ID entries)|LOGCTL]]&amp;lt;/var&amp;gt; command for modifying user ID entries.&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;[[#File security|File]] (File manager)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Protects certain types of files by requiring a user to specify a valid file password in the OPEN command or OPEN statement. After successfully opening a file, a user is granted particular privileges pertaining to the data and procedures in that file, as well as a user class number for procedure security, and field-level security access levels.    &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;[[#Group security|Group]] (File manager) &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Protects certain types of file groups by requiring a user to specify a valid group password in the OPEN command or OPEN statement. When a user successfully opens a permanent group, the user is granted specified privileges that pertain to the files in the group. When opening a temporary group, the user is granted the privileges that all the member files have in common. &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;[[#Record security|Record]] (File manager) &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Limits access to particular records in a &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; file. When record security is in effect, a user can retrieve and update only those records stored by the user&#039;s login ID or records that other users have agreed to share. &amp;lt;/td&amp;gt;&lt;br /&gt;
&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-level security|Field-level]] (File manager) &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Protects sensitive fields in a &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; file. Field-level security levels are granted when opening a file or group, and they indicate the type of access (for example, READ, UPDATE) to the field that the user is allowed.    &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;[[#Procedure security|Procedure]] (File manager) &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Limits access to the procedures in a file. It indicates whether a user is authorized to access particular procedures and specifies the type of access (for example, DEFINE, DELETE) that the user is allowed in secured procedures.       &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;[[#Subsystem security|Subsystem]] (System manager) &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Controls the privileges that are assigned to users who enter a subsystem. The system manager assigns users subsystem command privileges and privileges for each file and group in the subsystem.  &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td nowrap&amp;gt;[[#Terminal security|Terminal]] (File and system managers) &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Allows specified login user IDs and specified files and file groups to be accessed only from certain hard-wired terminals. &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;
====Multi-factor Authentication - MFA====&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
Support for logon with Multi-factor authentication (MFA) is also provided with no updates or parameter changes required to Model 204.  MFA does require that one of the three security interfaces, listed below, be linked into the Model 204 nucleus.  Once a userid is provisioned under MFA, the user acquires a token from a client, e.g. IBM Security Verify, installed on the user&#039;s mobile device.  That token is then concatenated, with a password or passphrase, to logon to Model 204.  For example: token:password or token:passphrase, where colon (:) is the concatenating character.  That string is passed, unmodified, to the security interface for verification.&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;ACF2&lt;br /&gt;
&amp;lt;li&amp;gt;RACF&lt;br /&gt;
&amp;lt;li&amp;gt;TopSecret&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==File security==&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; file security features allow you to restrict access to particular files to designated users, as well as to limit the operations that can be performed on those files. Although you are primarily responsible for determining the file security scheme in a &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; system, you can allow users to change a password for a file if you provide them with the appropriate login privileges. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Security for files opened in a subsystem operates differently. See [[#Subsystem security|Subsystem security]] for more information.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===File manager&#039;s responsibilities===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Ordinarily, the file manager determines which files and file parameters to protect from unauthorized access and determines the initial passwords and associated privileges for the files. It is then the system manager&#039;s responsibility to add entries for these files to the password table. The password table contains password and privilege information for files, file groups, and login user IDs.&lt;br /&gt;
Maintaining this table is discussed in [[Storing security information (CCASTAT)#Password table data set|Password table data set]]. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Defining access levels for files====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The file manager is responsible for defining the default access levels for public and semipublic &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; files. You are also responsible for determining the four access levels that belong with each file or group password. These levels are then added by the system manager.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===File privileges===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
File privileges determine the type of operations that the user is authorized to perform on the file that is being opened. The types of files are:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;tr class=&amp;quot;head&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;If the file is...&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Then Model 204...&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Public&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Opens the file without asking for a file password and grants the user default file privileges as specified by the &amp;lt;var&amp;gt;PRIVDEF&amp;lt;/var&amp;gt; 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;Semipublic&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Prompts the user to enter a valid password:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;If the user enters a valid password, the user is given the privileges associated with that password. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;If the user does not know the password or enters an incorrect password, the file is still opened but the user is granted the default file privileges associated with the file.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&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;Private&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Prompts the user to enter a valid password: &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;If the user enters a valid password, the file is opened and the user is granted the privileges associated with that password. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;If the user does not know the password or enters an invalid password, the file is not opened. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&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;
====OPEN command and OPEN statement====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
For a discussion of the &amp;lt;var&amp;gt;OPEN&amp;lt;/var&amp;gt; command and the way in which a user specifies a password when opening different types of files,&lt;br /&gt;
refer to [[OPEN FILE command]] and also see [[Files, groups, and reference context#OPEN statement and OPENC_statement|OPEN statement and OPENC statement]]. &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Creating files with file security===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When a file is first created with the CREATE command, you can limit access to the file by setting two system parameters, &amp;lt;var&amp;gt;OPENCTL&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;PRIVDEF&amp;lt;/var&amp;gt;, and by asking the system manager to enter one or more file passwords in the password table. Also, the &amp;lt;var&amp;gt;OPENCTL&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;PRIVDEF&amp;lt;/var&amp;gt; parameters can be reset at a later time.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The following sections provide a further description of file passwords and privileges, as well as the &amp;lt;var&amp;gt;OPENCTL&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;PRIVDEF&amp;lt;/var&amp;gt; parameters. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===File passwords and privileges===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can define several passwords for a file. Each password can have a different set of privileges associated with it. These privileges determine what operations can be performed on the file by the user who opens the file with that password.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If you do not specify values for &amp;lt;var&amp;gt;OPENCTL&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;PRIVDEF&amp;lt;/var&amp;gt; when you create the file, the file is assumed to be a public file that has a full set of default file privileges. This implies that any user can open the file using the &amp;lt;var&amp;gt;OPEN&amp;lt;/var&amp;gt; command or &amp;lt;var&amp;gt;OPEN&amp;lt;/var&amp;gt; statement without having to enter a file password, and can then retrieve and update data, define and run procedures, or access file parameters.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Creating passwords====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Passwords can be up to eight characters long and cannot contain blanks, commas, or colons. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===OPENCTL parameter===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The &amp;lt;var&amp;gt;OPENCTL&amp;lt;/var&amp;gt; parameter determines whether or not a user must enter a file password when opening the file. Except as specified in the following table, &amp;lt;var&amp;gt;OPENCTL&amp;lt;/var&amp;gt; settings can be added together. The first three settings are mutually exclusive and one of them must be included in your &amp;lt;var&amp;gt;OPENCTL&amp;lt;/var&amp;gt; specification. The remaining settings in the table are options that you can add to one of the first three settings. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;tr class=&amp;quot;head&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Setting&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Means file is...&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Password handling&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt;X&#039;80&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Public&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Password is not requested and the file is opened with default privileges. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
This setting cannot be combined with X&#039;40&#039;.&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;X&#039;40&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Semipublic&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
User is asked for a password. For a valid password, the user is given the associated privileges. Otherwise, the user is granted default file privileges. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
This setting cannot be combined with X&#039;80&#039;.&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;X&#039;00&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Private&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Without a valid password the file is not opened.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt;X&#039;20&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Using record security&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
No effect.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The user must have a security level that permits some type of access.&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 class=&amp;quot;head&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;th colspan=&amp;quot;3&amp;quot;&amp;gt;Additional options for Parallel Query Option (PQO)&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt;X&#039;08&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Accessible remotely without a valid password &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
For a public file, no password is requested and the file is opened with default privileges.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
For a semipublic file, a password is requested. If the password is missing or invalid, the user is granted default file privileges.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
For a private file, or a semipublic file that a remote user presents a valid password for, the file is opened if X&#039;02&#039; is set. &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;X&#039;04&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Accessible  remotely as a permanent group member&amp;lt;/td&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; permanent group security is in effect. Password handling for local users is unaffected.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt;X&#039;02&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Accessible remotely with a valid password&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;For a private file, or a semipublic file that a remote user presents a valid password for, the file is opened. &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt;X&#039;00&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Accessible remotely through APSY&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;For any file, no password is requested and the file cannot be opened remotely, except within a trusted subsystem.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
For PQO sites, the OPENCTL parameter determines how a file can be accessed remotely. The PQO remote access settings have no meaning for local files. For more information about PQO remote files, see [[PQO: Remote files and scattered groups]].&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===PRIVDEF parameter and file privileges===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The PRIVDEF parameter summarizes the default file privileges that are assigned when a public file is opened, or when a semipublic file is opened without a password or with an invalid password. Privileges can be set to any combination of the following bit settings. These privileges are identical to the privileges that can be specified for an individual file password in the password 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;Bit&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;User can...&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt; X&#039;8000&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Issue file manager privileged commands such as INITIALIZE, SECURE, and DESECURE. The file manager can also reset file parameters, provided that ad hoc update privileges (X&#039;2000&#039;) are obtained. &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt; X&#039;4000&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Override record security; see [[#Record security|Record security]].&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt; X&#039;2000&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Update data with ad hoc requests or host language programs.   &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt; X&#039;1000&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Make changes to internal procedures, that is, procedures defined in the same file as the data, but cannot delete them.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt; X&#039;0800&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Update data using internal procedures. &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt; X&#039;0400&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Retrieve data with ad hoc requests or host language programs.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt; X&#039;0200&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Display, echo, and copy internal procedures.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt; X&#039;0100&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Retrieve data with internal procedures.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt; X&#039;0080&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Update data using external procedures, that is, procedures defined in a different file from the 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; X&#039;0040&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Retrieve data using external procedures.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt; X&#039;0020&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Include internal procedures.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt; X&#039;0010&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Define internal procedures.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt; X&#039;0008&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Delete internal procedures.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt; X&#039;0001&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Access file related parameters. The affected parameters are described in [[ FPARMS and TABLES file parameters#Setting file parameters|Setting file parameters]].&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;
====PRIVDEF default setting====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The default value for the PRIVDEF parameter is X&#039;BFFF&#039;, that is, all privileges except the ability to override record security.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Combining PRIVDEF settings====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Update privileges, for example, update using ad hoc requests, do not imply corresponding retrieval privileges. Thus, a user who has only the ability to update using ad hoc requests (X&#039;2000&#039; bit set) cannot find any records to update. A user must be given both update and retrieval privileges (X&#039;2400&#039;) to update data effectively.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Similarly, privileges for data retrieval using internal procedures (X&#039;0100&#039;) do not imply that the user can include a procedure from the file. The X&#039;0020&#039; privilege is required for this.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If procedure security is desired, you must relate procedure class numbers to the procedures stored in the file. Also, determine the field-level security levels for any fields in the file that are particularly sensitive and need to be protected against unauthorized access. Field and procedure security features are discussed in [[#Field-level security|Field-level security]] and [[#Procedure security|Procedure security]].&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Resetting PRIVDEF or OPENCTL===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When the OPENCTL parameter is reset to X&#039;80&#039; (public), the assigned privileges are those of the current value of the PRIVDEF parameter. This means that if OPENCTL is reset to X&#039;80&#039; while PRIVDEF is set to less than full file manager privileges, you cannot update the file or reset any file parameters. This can also occur if you reset PRIVDEF while OPENCTL is set to X&#039;80&#039;.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
To avoid this problem, use the VIEW PRIVDEF command to ensure that you have appropriate PRIVDEF privileges before you reset OPENCTL to X&#039;80&#039;. Be very careful about resetting PRIVDEF for a public file.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Regaining access====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If you do accidently lock yourself out of a file, you can regain access as follows:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Have the system manager create a permanent private group that contains the locked file.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Have the system manager add a group password (and tell you that password) to the password table, CCASTAT, with the privileges X&#039;BFFF&#039;.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Then, open the private group and issue one of the following commands:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;IN FILE name RESET OPENCTL=X&#039;40&#039;&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;IN FILE name RESET PRIVDEF=X&#039;BFFF&#039;&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
where &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;name&amp;lt;/var&amp;gt; is the name of the locked file. &amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Securing and desecuring a file===&lt;br /&gt;
 &lt;br /&gt;
====Making files secure====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Securing a file ensures that a user cannot access a file illegally by running a &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; program with a different password table. A special key in the password table serves as the key for securing a file. The key can be changed by the system manager with the LOGKEY command. When a secured file is opened, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; compares the key to a copy placed in the file by the SECURE command. The file is opened if the two fields match. If the fields do not match, the user is logged out and an error message is displayed on the operator&#039;s console. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The SECURE command, which can be issued only by a file manager, provides additional file protection by securing the currently open file. This form of the command is issued without arguments:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;SECURE&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Desecuring a file====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
To desecure a previously secured file, issue the command:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;DESECURE&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
For a description of using the SECURE and DESECURE commands with procedures, refer to [[#Procedure security|Procedure security]].     &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
==Group security==&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; group security features allow access to particular file groups to be limited to certain users.The file manager is primarily responsible for group security and for the file security features discussed in the preceding section.    &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Group passwords===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Ordinarily, the file manager determines which groups to protect from unauthorized access, and indicates the passwords and associated privileges for these groups. It is then&lt;br /&gt;
the system manager&#039;s responsibility to add entries for these groups to the password table and recommend group parameter settings. The system manager, however, is the only user authorized to create permanent groups.&lt;br /&gt;
This is done with the CREATE command, as described in [[Storing and using file group definitions (CCAGRP)#Creating file groups|Creating file groups]].&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Opening permanent file groups====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If passwords are required for a permanent file group, only users who know one of the group passwords can open the group. As with file security, the group password determines the types of operations that the user is authorized to perform on the group that is being opened. The privileges associated with the password determine the extent of these operations. Group security operates differently under the Subsystem Management facility. See [[#Subsystem security|Subsystem security]].      &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Opening temporary file groups====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Opening a temporary group is functionally equivalent to opening a series of files. Only the user who creates a temporary group can open it. To open a temporary group, the user must be able to open each file in the group individually.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Group file privileges====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The types of permanent groups are:&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;Semipublic&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Private       &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 types are the same as described in [[#File manager&#039;s responsibilities|File manager&#039;s responsibilities]].&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When a user opens a semipublic or private group, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; requests that the user enter the password. When the group is opened, the user is granted either the privileges associated with the group password or the default privileges for the group, depending on the password supplied. Default privileges are also supplied when a public group is opened.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Group passwords and privileges===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
A permanent group can have several passwords defined for it. Like a file password, a group password can have up to eight characters and cannot contain blanks, commas, or colons. Each password can have a different set of privileges associated with it. These privileges determine what operations can be performed on the group by the user who opens the group with that password. Privileges are expressed as two hexadecimal bytes, as discussed in [[#PRIVDEF parameter and group privileges|PRIVDEF parameter and group privileges]].      &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===PRIVDEF parameter and group privileges===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If a value for PRIVDEF and a PUBLIC, SEMIPUB, or PRIVATE specification is not specified at the time that the group is created, the group is assumed to be a PUBLIC group that has default privileges of X&#039;3FFF&#039;. The PRIVDEF parameter, which summarizes the default privileges for a group, provides all the privileges shown for files, plus the two group privileges summarized here. These privileges are identical to the privileges that can be specified for an individual group password in the password table. The X&#039;8000&#039; privilege has no meaning for groups, although it can be important for individual references to member files. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;tr class=&amp;quot;head&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Bit&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;User can...&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt; X&#039;0004&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Update data through procedures from the procedure 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 align=&amp;quot;right&amp;quot;&amp;gt; X&#039;0002&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Retrieve data through procedures from the procedure file.&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 group is created, one of its member files can be designated as the procedure file. This is the file in which procedures for the group are stored and from which procedures are retrieved or deleted. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
In a group context, &amp;lt;b&amp;gt;internal&amp;lt;/b&amp;gt; means that a file is a member of the group, while &amp;lt;b&amp;gt;external&amp;lt;/b&amp;gt; means that a file is not a member of the group.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Determining file and group privileges===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When a command or a SOUL statement refers to a file or group, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; checks the file and group privileges to ensure that the operation is allowed. &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; must determine whether a file has been opened as an individual file, as a member of a permanent or temporary group, or as both.&amp;lt;/p&amp;gt;&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 [[Files, groups, and reference context#Reference context|reference context]], as shown 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;Referring to...&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;User&#039;s privileges are...&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;Individual file&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Same as 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 privileges are associated with the specified file password or, if no password is required or is incorrectly specified, the default file privileges.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Temporary or ad hoc group&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;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; compares the privileges of all of the member files; only privileges that are common to every file are granted.   &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&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;Same as 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 is opened. These are the privileges associated with the specified group password or, if no password is required or is incorrectly specified, the default group privileges.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td nowrap&amp;gt;Member of a permanent group &amp;lt;br&amp;gt;(&amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;not&amp;lt;/var&amp;gt; opened individually)&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Those granted for the group.&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If the file is opened individually, its privileges remain those granted when the file was individually 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&amp;gt;Two permanent groups &amp;lt;br&amp;gt;(&amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;not&amp;lt;/var&amp;gt; opened as individual files)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;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; combines the privileges of all open groups of which the file is a member. Any privileges specified for any of the groups are granted.&amp;lt;/td&amp;gt;&lt;br /&gt;
&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 open as both an individual and a group&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Privileges associated with the file, not the group. No open group has an 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;
 &lt;br /&gt;
==Record security==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
In addition to protecting an entire file or group from unauthorized access, you can also protect individual records in a file. When record security is in effect for a particular &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; file, each user can be allowed to retrieve and update only records stored in the file with that user&#039;s ID or records that other users have agreed to share. The user does not know that any other records exist. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Record security can be in effect for one or more of the files in a group, but not for the group as a whole. Access to a single record depends on only the record security field defined for the record&#039;s file.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Record security and login security===&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; record security can be considered as an extension to login security and cannot be used unless the login security feature is in effect at an installation. Login security is primarily the system manager&#039;s responsibility, and it is discussed in detail in [[Storing security information (CCASTAT)#Login security|Login security]]. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===File manager responsibilities===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Record security usually is the responsibility of the file manager. To initiate record security, set the &amp;lt;var&amp;gt;[[OPENCTL parameter|OPENCTL]]&amp;lt;/var&amp;gt; parameter in the &amp;lt;var&amp;gt;CREATE&amp;lt;/var&amp;gt; command to indicate that record security is in effect and describe the special record security field in the &amp;lt;var&amp;gt;INITIALIZE&amp;lt;/var&amp;gt; command, which is discussed in [[Initializing files#Initializing record security files|Initializing record security files]]. You can turn off record security by using the appropriate &amp;lt;var&amp;gt;OPENCTL&amp;lt;/var&amp;gt; setting with the &amp;lt;var&amp;gt;RESET&amp;lt;/var&amp;gt; command, but it cannot be turned on by &amp;lt;var&amp;gt;RESET&amp;lt;/var&amp;gt;. The file must be defined to have record security through the &amp;lt;var&amp;gt;CREATE&amp;lt;/var&amp;gt; command.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Setting record security for remote users===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If your site has the Parallel Query Option/204 product, you can control access to remote files with record security using the &amp;lt;var&amp;gt;[[PQOSYS parameter|PQOSYS]]&amp;lt;/var&amp;gt; CCAIN system parameter.&lt;br /&gt;
If set, &amp;lt;var&amp;gt;PQOSYS&amp;lt;/var&amp;gt; creates a special record security key for remote users.&lt;br /&gt;
For more information about &amp;lt;var&amp;gt;PQOSYS&amp;lt;/var&amp;gt;, see [[PQO: Managing files and groups#Record security for remote users: the PQOSYS parameter|Record security for remote users: the PQOSYS parameter]]. &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Storing and retrieving records===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
After a file has been initialized with a record security key, each record stored in the file with a SOUL &amp;lt;var&amp;gt;STORE RECORD&amp;lt;/var&amp;gt; statement automatically has a record security field added to it, whose value is equal to the current user&#039;s login user ID. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Storing record security fields through File Load or the Host Language Interface====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
For records stored with a Host Language Interface &amp;lt;var&amp;gt;IFBREC&amp;lt;/var&amp;gt; or &amp;lt;var&amp;gt;IFSTOR&amp;lt;/var&amp;gt; function or by a file load program, a record security field must be added explicitly, along with other fields, when the record is created. For example, the following file load statement adds a record security field:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;LDC RECSEC=DARCY=&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Refer to [[File Load utility]] for information about the File Load utility. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Only records that have a record security field whose value is equal to the current user&#039;s login user ID are retrieved by a SOUL &amp;lt;var&amp;gt;FIND&amp;lt;/var&amp;gt; statement or Host Language Interface calls that perform a find function. If the &amp;lt;var&amp;gt;FILE LOAD&amp;lt;/var&amp;gt; statement shown here is executed, for example, only a user logged in under the name &amp;lt;code&amp;gt;DARCY&amp;lt;/code&amp;gt; can retrieve these records.   &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Allowing multiple access===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
To share a record with another user, either you or the user can add an explicit occurrence of the record security field with a value equal to the second user&#039;s login user ID. If the second user has update privileges, that user can delete the first value of the record security field, thus making the record accessible only through the second user&#039;s user ID.   &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Multiple access in 1NF files====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
To allow access to record security fields in &amp;lt;var&amp;gt;1NF&amp;lt;/var&amp;gt; files, you must define the record security field as &amp;lt;var&amp;gt;INVISIBLE&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;REPEATABLE&amp;lt;/var&amp;gt;.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Overriding record security===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Occasionally, it may be necessary to override the &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; record security scheme. To override record security, you must have the appropriate record security override privileges at login time: the X&#039;04&#039; bit must be set. When the file is opened, the X&#039;4000&#039; bit must be set. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If both privileges have been granted, you can retrieve all records, regardless of the record security key value associated with them. However, if you store records from User Language at this time, they still have the record security field with the value of your login ID added to them automatically.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If record security was specified for a file in a permanent group, you can override record security for the file if login and group privileges (X&#039;4000&#039;) allow it. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
For further information regarding login security bit settings, see [[Establishing and maintaining security#File security|File security]]. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
==Field-level security==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Field-level security (FLS) provides an additional level of protection for a user&#039;s data by controlling access to the individual fields of a &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; file. It involves a comparison of the user&#039;s predetermined numeric access level for a field with the field&#039;s own predetermined level, for each of four types of access. Field-level security specifications are put into effect only if access to a data record has been allowed by previous file-level and record-level security checks. The following paragraphs describe in detail how field-level security operates. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
In addition to field-level access for each field, each file has a default access level (that is, all fields within the file are automatically assigned access levels).&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The following parameters determine the default field access:&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;This parameter&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Provides this default field access...&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;SELLVL&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;SELECT &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;READLVL&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;READ &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;UPDTLVL&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;UPDATE &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;ADDLVL&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;ADD &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;
Like PRIVDEF, these parameters can be set when a file is created, or they can be reset later. If not explicitly specified, all of these parameters are set to zero, which allows a user to access only unsecured fields (that is, fields with access levels of 0). The same four parameters can be set for a permanent group when it is created by the system manager.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===File manager responsibilities===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The file manager is responsible for determining the desired field-level security scheme and for assigning security levels to fields that are to be protected. The LEVEL option allows you to indicate the security level for the field. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
For example, if the following command is issued, only users who have access levels of 70 or greater are allowed to access the PERFORM field, which might contain an employee&#039;s performance evaluation code:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;DEFINE FIELD PERFORM WITH LEVEL 70&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Types of field access===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
By using the &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; field-level security scheme, you can protect particularly sensitive data fields from unauthorized access. A field can be accessed in several different ways.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Field-level security features limits access to a field to any combination of the following access types: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;tr class=&amp;quot;head&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;This access type&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Allows you 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;SELECT&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Use the field in a SOUL FIND statement or in an IFFIND 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;READ&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Examine the value of a field, for example, in a SOUL PRINT or assignment statement or an IFGET 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;UPDATE&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Change the value of a previously stored occurrence of a field. This type of access can be granted without a corresponding READ access, which precludes updates of the form shown below:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;CHANGE &amp;lt;i&amp;gt;fieldname&amp;lt;/i&amp;gt; = &amp;lt;i&amp;gt;value&amp;lt;/i&amp;gt; TO &amp;lt;i&amp;gt;value&amp;lt;/i&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;ADD&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Add new occurrences of a field, including those added by a STORE RECORD statement. This type of access allows data entry clerks or other personnel to add new field occurrences or records without being able to change existing occurrences, or possibly even to examine them.&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
This type of access can also provide a user with the ability to add occurrences of the record security field without altering existing occurrences.&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;
Field-level security controls only explicit field references. Implicit references, such as retrieving a record security field with a FIND statement or adding a record security key value with STORE RECORD, are not controlled. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Field levels===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Every field definition can have a security level associated with it. Security levels are numbered from 0 to 255. 0 implies no security for the field; 255 implies the highest security. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Field-level security and field ordering====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
In the &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; field-level security scheme, fields can be assigned security levels in a hierarchical fashion. The fields can be ordered in view of the sensitivity of the data that they contain. An example of such an ordering is shown in [[#Field levels|Field levels]], the fields being listed in order of increasing sensitivity.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;caption&amp;gt;Field-level ordering example&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;Field &amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;FLS READ level&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;Last name&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;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;First name&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;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Employee number&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;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;City&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;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;State&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;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Zip code&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;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Street address&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt;20&amp;lt;/td&amp;gt;&lt;br /&gt;
&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 align=&amp;quot;right&amp;quot;&amp;gt;30&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Telephone number&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt;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;Salary&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt;60&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Performance evaluation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt;70&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;
In [[#Field levels|Field levels]], performance evaluation is considered to be the most sensitive field in the record, followed by salary, and so on. Last name, first name, and employee number have not been assigned field-level security numbers. However, file, record, and procedure security features still can be used to control access to those fields.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===User levels===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Each user has four field-level security access levels associated with each file and group opened. These correspond to the four field access levels defined previously: SELECT, READ, UPDATE, and ADD. User levels also range from 0 to 255.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When a user attempts to access a field in a particular way, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; compares the user&#039;s access level with the level assigned for the field. If the user&#039;s level for the desired type of access, for example, READ, is greater than or equal to the field&#039;s FLS level, the particular type of field access is allowed. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====User-level security example====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
For example, a user who has a READ level of 30 is permitted to print any field that has a READ level between 0 and 30, but cannot print a field that has a higher READ level. Thus, when using the file described above, a user who has a READ level of 30 can print an employee&#039;s position (and all fields that have lower FLS fields), but not the employee&#039;s telephone number, salary, or performance evaluation. An example of a possible set of access levels at an installation is shown below:  &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;caption&amp;gt;User access levels example&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;Employee category&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;SELECT&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;READ&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;UPDATE&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;ADD&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;Data entry clerks&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 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 align=&amp;quot;right&amp;quot;&amp;gt;60&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Personnel department clerks&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt;50&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt;50&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt;40&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;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Personnel department supervisor&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt;70&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt;70&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt;70&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;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Other employees (for example, telephone operators)&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 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;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;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Employee supervisor&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 align=&amp;quot;right&amp;quot;&amp;gt;70&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 align=&amp;quot;right&amp;quot;&amp;gt;70&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 motivations for these assignments easily can be understood in relation to the sample file. Only data entry clerks can add employee records; only supervisors can add performance evaluations; only personnel department supervisors can update salaries, and so on.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Referring to or displaying fields====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When a user&#039;s access levels are lower than permitted for the level of a particular field, a reference to the field is treated as a reference to a nonexistent field. Furthermore, the names of such fields are excluded from the output of the DISPLAY FIELD ALL command. Thus, when using the file shown in [[#User levels|User levels]], only personnel and employee supervisors know that a performance evaluation field even exists in the file. The field is never visible to other users.   &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
=====Limiting access to fields=====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Access to records for particular employees can be controlled in another way. Employee supervisors usually are given a password that allows them to read or add any field in the file. However, procedure- or record-level security can be used to restrict supervisors&#039; access to only the records of their employees.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Determining user access levels===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The access levels assigned for a user are determined when the user opens a file or a group using the&lt;br /&gt;
[[OPEN FILE command]], [[OPEN PERM GROUP command]], or [[OPEN TEMP GROUP command]] or using the &amp;lt;var&amp;gt;[[Files, groups, and reference context#OPEN statement and OPENC statement|OPEN]]&amp;lt;/var&amp;gt; statement.&lt;br /&gt;
Access level assignments are made for various types of files or groups as follows:    &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;If a file or a permanent group is public or semipublic and an incorrect password is specified in the OPEN, the user&#039;s four access levels are taken from the file or group defaults described in [[#Procedure security|Procedure security]]. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;If a private or semipublic file or group is opened with a valid password, the user&#039;s four access levels are the same as those associated with the password. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;If a temporary or ad hoc group is opened, all the member files are opened separately as individual files. Opening these individual files establishes a set of four access levels for each member file.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Access levels for temporary or ad hoc groups====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The four access levels for a temporary or ad hoc group are formed by taking the minimum of each access level across all the member files. Suppose that &amp;lt;code&amp;gt;FILEA&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;FILEB&amp;lt;/code&amp;gt; have the access levels shown 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;File&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;SELECT&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;READ&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;UPDATE&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;ADD&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;FILEA&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt;30&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt;40&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 align=&amp;quot;right&amp;quot;&amp;gt; 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;FILEB&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt;40&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt;30&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 align=&amp;quot;right&amp;quot;&amp;gt;10&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 a temporary group named &amp;lt;code&amp;gt;FILES&amp;lt;/code&amp;gt;, consisting of &amp;lt;code&amp;gt;FILEA&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;FILEB&amp;lt;/code&amp;gt;, is opened, the group is assigned the access levels:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;tr class=&amp;quot;head&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Group &amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt; SELECT&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;READ&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;UPDATE&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;ADD&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;FILES&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt;30&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt;30&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 align=&amp;quot;right&amp;quot;&amp;gt; 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;
&amp;lt;p&amp;gt;&lt;br /&gt;
This is equivalent to the comparison of file privileges that occurs when opening a temporary or ad hoc group; see [[#Group security|Group security]].&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 examples show how your user access levels for a file can change as the reference context changes. In the examples, the four user-access levels, SELECT, READ, UPDATE, and ADD, are represented by their first letters.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
A field reference occurs in single file context, and the file is opened as a single file:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;                    S      R      U      A&lt;br /&gt;
OPEN FILE FILEA     100    100    10     20&lt;br /&gt;
BEGIN&lt;br /&gt;
  FPC NAME=JONES&lt;br /&gt;
END&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The four access levels used in checking field references (100, 100, 10, 20) are those assigned when &amp;lt;code&amp;gt;FILEA&amp;lt;/code&amp;gt; was opened as a single file.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
A field reference occurs in group context:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;                    S      R      U      A&lt;br /&gt;
OPEN FILE GROUPA    50     75     20     0&lt;br /&gt;
BEGIN&lt;br /&gt;
  FPC NAME=JONES&lt;br /&gt;
END&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The four access levels used for checking field references in any file of the group (50, 75, 20, 0) are the four assigned when the group was opened. All the files in a group receive the same four access levels.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
A field reference occurs in single file context, but the file was opened only as a member of one or more permanent groups. &amp;lt;code&amp;gt;FILEA&amp;lt;/code&amp;gt; is a member of the two groups, &amp;lt;code&amp;gt;GROUPA&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;GROUPB&amp;lt;/code&amp;gt;:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;                    S      R      U      A&lt;br /&gt;
CLOSE FILE FILEA&lt;br /&gt;
 OPEN GROUP GROUPA  50     75     20     0&lt;br /&gt;
 OPEN GROUP GROUPB  50     50     0      100&lt;br /&gt;
 BEGIN&lt;br /&gt;
   IN FILEA FPC NAME=JONES&lt;br /&gt;
 END&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The four access levels used in checking field references (50, 75, 20, 100) are formed by taking the maximum level defined for the file by every group containing the file that the user has opened. &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Procedure security==&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; procedure security limits access to a file&#039;s procedures in the following ways:     &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;By allowing you to specify user privileges that control the type of functions that can be performed on the procedures within a file, for example, to display, define, or delete the procedure.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;By limiting access to a procedure to only a particular class of users. This is done by assigning a procedure class number to the procedure that is being secured and a user class to the users allowed to manipulate the procedures. &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 security features are discussed in greater detail in the following sections. In addition, [[#File security|File security]] and [[#Group security|Group security]] discuss the privileges that enable users to access the data in a file or group through procedures.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Accessing procedures===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
At the time a file or group is opened, particular privileges are established that concern the text of the procedures stored in the file or group. These privileges, or access rights, enable a user to manipulate a procedure in any 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;Use the procedure, for example, by specifying it in an INCLUDE command.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Display and copy the procedure. This includes echoing the procedure and using the EDIT command to display or copy it. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Change the procedure, usually with the Editor.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Define a new procedure in the file with the PROCEDURE command or the Editor. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Delete a procedure by means of the DELETE 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;
For information about the basic procedure functions, see the $Prc* and $Proc* functions in [[List of $functions]]; and for information about procedure related commands, see [[:Category:Commands]].&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Securing procedures===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The privileges established for procedure access discussed in [[#PRIVDEF parameter and file privileges|PRIVDEF parameter and file privileges]] are used to limit the way in which the procedures associated with a file or group can be accessed. &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; provides an additional facility that allows particular procedures to be secured and thus protected from unauthorized access. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===User and procedure classes===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can limit user access to procedures by assigning user classes that have access to procedures in a particular procedure class.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
User and procedure classes are usually put in place as part of the security scheme for a file or group. Although every user and procedure could have a distinct class number (UCLASS and PCLASS), this approach is too complex and cumbersome for most installations. Thus, sets of procedures and users more often are handled together. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====User classes (UCLASS)====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Examples of typical user classes are:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;All employees in a department&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;All managers, regardless of department&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;All data entry personnel &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Procedure classes (PCLASS)====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Examples of typical procedure classes include procedures that:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Display salary data&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Update personnel records&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Perform general utility operations&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Access sensitive fields in files &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Procedure classes and user classes are arbitrary numbers that range from 1 to 255. Their only significance is in their relationship to each other. The numbers are assigned as described in [[#User and procedure classes|User and procedure classes]].&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When a user opens a file or group, the user is given the privileges and user class determined by the OPEN: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;If the file or group is opened with a password, the user class is obtained from the password table, where it is stored with the privilege bytes and field-level security levels for the password.&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The user class normally is provided by the file manager and entered into the password table by the system manager, as discussed in [[Storing security information (CCASTAT)#Password table maintenance|Password table maintenance]]. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;If the file or group is opened without a password, the user is granted default privileges and a default user class. This default user class is the value of the PRCLDEF system parameter, which has a default value of zero and can be set by the file manager.     &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Relationship between user and procedure classes====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
An access control table (ACT) stored in each file assigns to particular user classes the access rights to particular procedure classes. These mappings from user class to procedure class in the ACT are created using the SECURE command described in [[#SECURE command, definition format|SECURE command, definition format]]. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The user class established for a group applies to all its member files. If a file is opened only as part of a permanent group, any reference to a secured procedure compares the user class specified for the group against the procedure&#039;s class to determine the available access rights. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
=====Example=====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The association of user classes and procedure classes can be explained best by an example: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Suppose that a user whose user class is 8 includes a procedure named &amp;lt;code&amp;gt;CENTEST&amp;lt;/code&amp;gt;, which has a procedure class of 20. &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; must determine whether users of class 8 are allowed to include procedures of class 20. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; checks the ACT in the file in which &amp;lt;code&amp;gt;CENTEST&amp;lt;/code&amp;gt; is defined and finds that an INCLUDE is permitted, the procedure is included. If, however, INCLUDE is not permitted for users of class 8, the INCLUDE does not take place and an error message is issued. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
This mapping of user and procedure classes is discussed in greater detail in the sections that follow.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Assigning procedure classes====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
A procedure class can be specified for a procedure by the file manager or by an individual user. The class can be assigned:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;By the user when defining the procedure with the PROCEDURE command&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;By the file manager when securing the procedure with the SECURE command   &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
=====User-defined procedure classes=====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When defining a procedure, the user can specify a procedure class number in the following format:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;PROCEDURE &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;name&amp;lt;/span&amp;gt; PCLASS=&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;n&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;p&amp;gt;&lt;br /&gt;
&amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;n&amp;lt;/var&amp;gt; is any number in the range 1 through 255.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
A user&#039;s access rights to procedures are checked first at the file level and then at the procedure level. Thus, if the user is to be allowed to change a secured procedure, the user must have procedure update file privileges, and the appropriate entry must have been made in the ACT.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
=====File manager-defined procedure classes=====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
File manager-defined procedure classes are discussed in the following sections, in context of the commands that the file manager uses for this purpose.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===SECURE command, definition format===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If you have appropriate file manager privileges, you can use the SECURE command in the following form to:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Secure both files and procedures&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Define privileges for procedures that already have been secured&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Make entries in the access control table&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 is:&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;SECURE [PROCEDURE]&lt;br /&gt;
   NAME=&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;procname&amp;lt;/span&amp;gt; [,&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;procname&amp;lt;/span&amp;gt; ...] PCLASS=&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;pclass&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;procname&amp;lt;/var&amp;gt; is the name of an existing procedure to be secured.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;pclass&amp;lt;/var&amp;gt; is the procedure class number to assign to the procedure(s); the number must be in the range 1 to 255. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The SECURE command must be issued in file context, that is, the current default must be a file, not a group.&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 is a SECURE command used to secure a procedure:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;SECURE PROCEDURE NAME = PAY PCLASS = 7&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
After this command is issued, the procedure PAY is secured with the procedure class number 7. An entry for PCLASS=7 is made in the procedure dictionary. If PAY is currently secured, its old procedure class is changed to the new class.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===SECURE command, mapping format===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The SECURE command lets you map particular access privileges and user classes to particular procedure classes. This command creates entries in the access control table. Issue the following form of the command:&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;SECURE &amp;lt;span class=&amp;quot;squareb&amp;quot;&amp;gt;[&amp;lt;/span&amp;gt;PROCEDURE&amp;lt;span class=&amp;quot;squareb&amp;quot;&amp;gt;]&amp;lt;/span&amp;gt;&lt;br /&gt;
   ACCESS = &amp;lt;span class=&amp;quot;squareb&amp;quot;&amp;gt;{&amp;lt;/span&amp;gt;ALL &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;access&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;access&amp;lt;/span&amp;gt;...&amp;lt;span class=&amp;quot;squareb&amp;quot;&amp;gt;]&amp;lt;/span&amp;gt;) &amp;lt;span class=&amp;quot;squareb&amp;quot;&amp;gt;|&amp;lt;/span&amp;gt; NONE&amp;lt;span class=&amp;quot;squareb&amp;quot;&amp;gt;}&amp;lt;/span&amp;gt;&lt;br /&gt;
   UCLASS = &amp;lt;span class=&amp;quot;squareb&amp;quot;&amp;gt;{&amp;lt;/span&amp;gt;ALL &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;uclass&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;uclass&amp;lt;/span&amp;gt;...&amp;lt;span class=&amp;quot;squareb&amp;quot;&amp;gt;]&amp;lt;/span&amp;gt;)&amp;lt;span class=&amp;quot;squareb&amp;quot;&amp;gt;}&amp;lt;/span&amp;gt;&lt;br /&gt;
   PCLASS = &amp;lt;span class=&amp;quot;squareb&amp;quot;&amp;gt;{&amp;lt;/span&amp;gt;ALL &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;pclass&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;pclass&amp;lt;/span&amp;gt;...&amp;lt;span class=&amp;quot;squareb&amp;quot;&amp;gt;]&amp;lt;/span&amp;gt;)&amp;lt;span class=&amp;quot;squareb&amp;quot;&amp;gt;}&amp;lt;/span&amp;gt;&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;access&amp;lt;/var&amp;gt; is a particular privilege associated with the procedures in the procedure class. It can be 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;Privilege&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Users can...&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;USE &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Include procedures.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;COPY &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Display and edit (copy only) procedures.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;CHANGE &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Edit procedures.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;DEFINE &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Create new procedures (PROCEDURE and EDIT).&amp;lt;/td&amp;gt;&lt;br /&gt;
&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 &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Delete procedures.&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;li&amp;gt;&amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;uclass&amp;lt;/var&amp;gt; is the user class number whose users have access to the procedures in PCLASS; the number must be in the range 1 to 255. Parentheses are optional in the uclass 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;pclass&amp;lt;/var&amp;gt; is the procedure class number to which users in UCLASS have access; the number must be in the range 1 to 255. Parentheses are optional in the pclass definition. &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;
In the following example, only users in the Payroll Department (user class 90) are allowed to use procedures that manipulate salary fields in a file (procedure class 20 and 30):&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;SECURE PROC ACCESS = (USE) UCLASS = 90 PCLASS = 20,30&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The entries in the ACT do not take effect for users that have the file open when the &amp;lt;var&amp;gt;SECURE&amp;lt;/var&amp;gt; command is issued until they reopen the file. This includes the user who issues the command. See [[SECURE PROCEDURE ACCESS command]] for the complete syntax and description of the &amp;lt;var&amp;gt;SECURE&amp;lt;/var&amp;gt; command.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
To complete procedure security implementation, the system manager updates the password table using the &amp;lt;var&amp;gt;LOGCTL&amp;lt;/var&amp;gt; command to assign user classes to the appropriate passwords.   &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Procedure-related commands and required privileges===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The following list is a summary of &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; procedure or procedure-related commands that require particular privileges. All these commands are described in 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.  &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;caption&amp;gt;Privileges for procedure or procedure-related commands&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 colspan=&amp;quot;2&amp;quot;&amp;gt;Required privileges&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;INCLUDE&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;USE&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;EDIT&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;COPY&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;DISPLAY&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;COPY (to display text)&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;DELETE&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;DELETE&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;ASSIGN&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;CHANGE&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;DEASSIGN&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;CHANGE&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;RENAME&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;CHANGE&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 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;New procedure&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Old procedure&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;PROCEDURE&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;DEFINE&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;CHANGE&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;EDIT commands:&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
GO&amp;lt;br&amp;gt;END&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;DEFINE, USE* DEFINE&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;CHANGE, USE* CHANGE&amp;lt;/td&amp;gt;&lt;br /&gt;
&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;/td&amp;gt;&lt;br /&gt;
&amp;lt;td colspan=&amp;quot;2&amp;quot;&amp;gt;*COPY privileges are required in addition to USE to echo text lines of a procedure to a journal.&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;
===Displaying user and procedure classes===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The SECURE command constructs entries in the access control table for any user classes specified in the UCLASS clause. &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 important to display procedure security and save it before reorganizing a file, so that you can reestablish the same security. You might have to upgrade your file manager privileges to include COPY, which is not part of the default privileges of a file manager.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
To determine a user&#039;s access rights for various procedure classes, issue the following form of the DISPLAY command: &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;DISPLAY [PROCEDURE (PRIVILEGES [,NOUSE])&lt;br /&gt;
   [ALL &amp;lt;span class=&amp;quot;squareb&amp;quot;&amp;gt;|&amp;lt;/span&amp;gt; UCLASS = &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;uclass&amp;lt;/var&amp;gt;[,&amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;uclass&amp;lt;/var&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;ALL displays information for all user classes. &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;uclass&amp;lt;/var&amp;gt; displays information only for the specified classes.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;If neither is specified, your current class and privileges are displayed. &lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Privileges are displayed in the following format:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;UCLASS=&amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;u&amp;lt;/var&amp;gt; PCLASS=&amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;pc&amp;lt;/var&amp;gt;,X&#039;&amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;nn&amp;lt;/var&amp;gt;&#039;&lt;br /&gt;
      .&lt;br /&gt;
      .&lt;br /&gt;
      .&lt;br /&gt;
 PCLASS=&amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;pc&amp;lt;/var&amp;gt;,X&#039;&amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;nn&amp;lt;/var&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;u&amp;lt;/var&amp;gt; is the user class.&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;pc&amp;lt;/var&amp;gt; is a procedure class defined for that user class.&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;nn&amp;lt;/var&amp;gt; is a privilege byte constructed from combinations of the following bit settings:&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;tr class=&amp;quot;head&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt; Bit &amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Privilege&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt; X&#039;80&#039; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;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; X&#039;40&#039; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;COPY&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt; X&#039;20&#039; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;CHANGE &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt; X&#039;10&#039; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;DEFINE&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt; X&#039;08&#039; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;DELETE&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;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;If NOUSE is specified, information is displayed at your terminal even if a USE command preceded the DISPLAY command. The device specified by the USE command is not used but is left open.&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 discussion of other DISPLAY command capabilities in [[ Field display and message broadcast#Overview|Overview]].&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Sample security scheme===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
A simplified example of a security scheme at an installation is presented in this section. At this installation, the following access rules are established:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Most users are allowed to include all secured procedures.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Only programmers in the data processing department are allowed to define procedures. However, they cannot use them. These programmers can have user classes 8 or 9.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Only users in the payroll department are allowed to use procedures that manipulate salary fields in the file. Payroll users are assigned class 90, and the payroll procedures are in procedure classes 20 and 30.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Other users are assigned user classes 25, 30, or 31.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Other procedures are in procedure classes 40, 50, 60, or 70. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Sample SECURE commands===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
To create the security scheme in this example, issue the following commands:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;SECURE PROC ACCESS=(CHANGE,DEFINE,DELETE,COPY) UCLASS=8,9 PCLASS=20,30,40,50,60,70&lt;br /&gt;
SECURE PROC ACCESS=(USE) UCLASS=90 PCLASS=20,30&lt;br /&gt;
SECURE PROC ACCESS=(USE) UCLASS=25,30,31,90 -&lt;br /&gt;
  PCLASS=40,50,60,70&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Importance of SECURE command order====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
In this example, the order of the SECURE commands is unimportant. However, the order becomes significant when a UCLASS=ALL or PCLASS=ALL clause is included in the command. UCLASS=ALL affects only user classes already mentioned in the ACT. This might be completely different from the list of user classes that actually can be assigned to users from the password table or default file or group settings.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When PCLASS=ALL is included in the command, no new entries are added to the ACT. Instead, for each user class in the UCLASS list, access rights for each procedure class already mentioned for that user are replaced by the new ACCESS rights. Again, the classes affected in the ACT may be completely different from those actually used for secured procedures in the file. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Changing and adding access privileges===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Suppose, in this sample security, that the payroll users now need to be able to display all the procedures that they use. Also, suppose that a new set of procedures (of class 15) is developed that all users (including the programmers) can include. The following commands are issued in the order shown to modify the ACT entries already built:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;SECURE PROC ACCESS=(USE) UCLASS=ALL PCLASS=15&lt;br /&gt;
SECURE PROC ACCESS=(USE,COPY) UCLASS=90 PCLASS=ALL &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If these commands are reversed, the payroll users cannot display members of the new class of procedures.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Removing procedure security for procedures or user classes===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
To remove the procedure access defined for user class/procedure class pairs, use the DESECURE command:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Remove the security for the procedure involved. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Delete the procedure class number assigned to the procedure in the procedure dictionary by issuing the form of the DESECURE command immediately below. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&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 you do not do this, no one can access the procedure, even though the entry might have been removed from the ACT (see the second form of DESECURE below). &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Only file managers can issue the DESECURE command and it must be issued in file context (that is, the current default must be a file, not a group). &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The format of the DESECURE command is:&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;DESECURE &amp;lt;b&amp;gt;PROC&amp;lt;/b&amp;gt;EDURE {ALL &amp;lt;span class=&amp;quot;squareb&amp;quot;&amp;gt;|&amp;lt;/span&amp;gt; NAME=(&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;procname&amp;lt;/span&amp;gt;[,&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;procname&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;p&amp;gt;&lt;br /&gt;
&amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;procname&amp;lt;/var&amp;gt; is the name of an existing secured procedure.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
To remove particular access privileges for particular procedure classes, use the following form of the DESECURE command to delete entries from the ACT. You must specify either UCLASS or PCLASS, or both.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The format is:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;DESECURE &amp;lt;var&amp;gt;PROC&amp;lt;/var&amp;gt;EDURE&lt;br /&gt;
   {[UCLASS= {ALL &amp;lt;span class=&amp;quot;squareb&amp;quot;&amp;gt;|&amp;lt;/span&amp;gt; (uclass[,uclass...])}] &amp;lt;span class=&amp;quot;squareb&amp;quot;&amp;gt;|&amp;lt;/span&amp;gt;&lt;br /&gt;
    [PCLASS= {ALL &amp;lt;span class=&amp;quot;squareb&amp;quot;&amp;gt;|&amp;lt;/span&amp;gt; (pclass[,pclass...])}]}&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;uclass&amp;lt;/var&amp;gt; is the number of an existing user class whose users have access to the procedure in &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;pclass&amp;lt;/var&amp;gt;; the number must be in the range 1-255. If only UCLASS is specified, all references to the specified user classes are removed from the ACT.&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Parentheses are optional with &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;uclass&amp;lt;/var&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;var class=&amp;quot;term&amp;quot;&amp;gt;pclass&amp;lt;/var&amp;gt; is the number of an existing procedure class to which users in &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;uclass&amp;lt;/var&amp;gt; have access; the number must be in the range 1-255. If only &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;pclass&amp;lt;/var&amp;gt; is specified, all references to the specified procedure classes are removed from the ACT.&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Parentheses are optional with &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;pclass&amp;lt;/var&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;
===Desecuring both UCLASS and PCLASS===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If both UCLASS and PCLASS are specified, the entries for all combinations of the specified user and procedure class pairs are removed from the ACT. For example:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;DESECURE PROC UCLASS=8,9 PCLASS=1,2,3&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
removes access entries for:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;UCLASS 8 and PCLASS 1&lt;br /&gt;
UCLASS 8 and PCLASS 2&lt;br /&gt;
UCLASS 8 and PCLASS 3&lt;br /&gt;
UCLASS 9 and PCLASS 1&lt;br /&gt;
UCLASS 9 and PCLASS 2&lt;br /&gt;
UCLASS 9 and PCLASS 3&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===System manager responsibilities===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The final step in the desecuring process is to have the system manager remove the password(s) with associated uclasses from the password table. If they are not removed, you must remember not to use them when opening the file.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Privileges required===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You must have file-level privileges of at least X&#039;A000&#039; (file manager and ad hoc data update) to issue SECURE and DESECURE commands. In this case, you actually need update but not retrieve privileges. (Refer to [[#File security|File security]] for a discussion of these privileges.)    &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===File and group references===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When an explicit reference is made to a file with an IN clause and that file is opened only as a member of one or more permanent groups, the file-level privileges to be checked must be obtained from the group privileges, as defined for every group of which the file is a member. If any group&#039;s privileges allow the access in question, then the operation proceeds.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If the access is to a secured procedure, for every group in which the file is opened and the access is allowed by the group privileges, the user&#039;s user class in that group is used to determine privileges for that procedure&#039;s class. If any group&#039;s user class has the privilege, the operation proceeds.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
See the discussion of reference context in the example on [[#Determining user access levels|Determining user access levels]] and see [[Files, groups, and reference context]] for more information. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
==Subsystem security==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When a user enters a subsystem, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; opens and determines privileges for all subsystem files and groups for that user. The files that are opened and the privileges that are assigned are based on a combination of the user&#039;s subsystem user class and the subsystem&#039;s status, both specified by the system manager in the subsystem definition. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The system manager assigns a user to a subsystem user class by entering 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; login user ID in the appropriate subsystem user class. Whenever the user invokes the subsystem, the user is assigned the subsystem command privileges and the file and group privileges of that subsystem user class.   &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The system manager controls access to the subsystem through the subsystem status: public, semipublic, or private. The status determines which user classes can enter a particular subsystem and whether or not users without a user class assignment are permitted entry. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
For more information about subsystems, see [[System requirements for Application Subsystems]].&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Terminal security==&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; terminal security allows access to certain login user IDs, files, or groups to be restricted to users at certain terminals. For example, you might want a particular MEDICAL file to be accessible only through terminals located physically in doctors&#039; offices.     &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The terminal security feature allows a list of terminal numbers to be associated with each login, file, or group password. A terminal number is determined during &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; initialization by the order of the user parameter lines and the way in which they are assigned to specific telecommunications unit numbers in the JCL. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The batch user (User 0) is considered to be terminal 0 (zero). A user at a particular terminal whose number is n can log in to a specific user ID or open a specific file or group only if the terminal number, n, is in the terminal list associated with the password for that user ID, file, or group. If it is not, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; responds as though the user had entered an invalid password.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Terminal security is generally used with only hard-wired terminals, that is, terminals on leased lines. If an installation has dialup terminals, the terminal can be connected to a number of similar telecommunications units and user parameter lines. In this case, although the location of the terminal can be fixed, its terminal number can change every time it is dialed up. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The entries in the ACT do not take effect for users that have the file open when the SECURE command is issued until they reopen the file. This includes the user who issues the command. The complete syntax and description of the SECURE command is located in the ry time it is dialed up.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
By controlling the assignment of terminal numbers to physical terminals, the system manager determines the appropriate terminal security scheme. You provide assistance in limiting file and group access through file passwords and privileges, and group passwords and privileges.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;/div&amp;gt; &amp;lt;!-- end of toclimit div --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Model 204 files]]&lt;/div&gt;</summary>
		<author><name>JDamon</name></author>
	</entry>
	<entry>
		<id>https://m204wiki.rocketsoftware.com/index.php?title=Model_204_security_features&amp;diff=120014</id>
		<title>Model 204 security features</title>
		<link rel="alternate" type="text/html" href="https://m204wiki.rocketsoftware.com/index.php?title=Model_204_security_features&amp;diff=120014"/>
		<updated>2023-11-17T19:12:41Z</updated>

		<summary type="html">&lt;p&gt;JDamon: /* Types of security */&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 variety of security features provide &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; users with protection against unauthorized use of their account names, files, groups, records, fields, procedures, and terminals. This section describes the role of the file manager in maintaining &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; security. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Additional documentation on security features===&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;System manager responsibilities are described in detail in [[Storing security information (CCASTAT)#Overview|Storing security information (CCASTAT)]].&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Rocket Software has add-on interfaces between &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; and a number of security products. These security interfaces are described in the [[:Category:Security interfaces|Security interfaces]] pages.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;SSL/TLS security features for Janus products are described in [[Janus Network Security]]. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Using the Model 204 password table===&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; password table is the backbone to the security features in &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt;. The user must enter a valid password to access the &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; Online, files, groups of files, and subsystems, which in turn affects access to records. The security feature in &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; is not based on a hierarchy, but rather on direct password validation.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The password table, CCASTAT, is set up by the system manager. When the file manager determines which users or groups of users can have access to what data, then the file manager works with the system manager to correctly set up the password table and file access. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Types of security===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
All &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; security features are optional. A site can support any combination of features. The file manager is primarily responsible for file, group, record, field, and procedure security. Both system and file managers handle terminal security. The file manager&#039;s responsibilities are described in this 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;Type of security&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;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&amp;gt;Login (System manager)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Limits access to the &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; system by requiring an individual user to enter a password when logging in. Only users who enter a valid password can gain access to the system. When a user successfully logs in, specified privileges are granted.&lt;br /&gt;
See [[Storing security information (CCASTAT)#Login security|Login security]] and the &amp;lt;var&amp;gt;[[LOGCTL command (user ID entries)|LOGCTL]]&amp;lt;/var&amp;gt; command for modifying user ID entries.&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;[[#File security|File]] (File manager)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Protects certain types of files by requiring a user to specify a valid file password in the OPEN command or OPEN statement. After successfully opening a file, a user is granted particular privileges pertaining to the data and procedures in that file, as well as a user class number for procedure security, and field-level security access levels.    &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;[[#Group security|Group]] (File manager) &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Protects certain types of file groups by requiring a user to specify a valid group password in the OPEN command or OPEN statement. When a user successfully opens a permanent group, the user is granted specified privileges that pertain to the files in the group. When opening a temporary group, the user is granted the privileges that all the member files have in common. &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;[[#Record security|Record]] (File manager) &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Limits access to particular records in a &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; file. When record security is in effect, a user can retrieve and update only those records stored by the user&#039;s login ID or records that other users have agreed to share. &amp;lt;/td&amp;gt;&lt;br /&gt;
&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-level security|Field-level]] (File manager) &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Protects sensitive fields in a &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; file. Field-level security levels are granted when opening a file or group, and they indicate the type of access (for example, READ, UPDATE) to the field that the user is allowed.    &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;[[#Procedure security|Procedure]] (File manager) &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Limits access to the procedures in a file. It indicates whether a user is authorized to access particular procedures and specifies the type of access (for example, DEFINE, DELETE) that the user is allowed in secured procedures.       &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;[[#Subsystem security|Subsystem]] (System manager) &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Controls the privileges that are assigned to users who enter a subsystem. The system manager assigns users subsystem command privileges and privileges for each file and group in the subsystem.  &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td nowrap&amp;gt;[[#Terminal security|Terminal]] (File and system managers) &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Allows specified login user IDs and specified files and file groups to be accessed only from certain hard-wired terminals. &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;
====Multi-factor Authentication - MFA====&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
Support for logon with Multi-factor authentication (MFA) is also provided with no updates or parameter changes required to Model 204.  MFA does require that one of the three security interfaces, listed below, be linked into the Model 204 nucleus.  Once a userid is provisioned under MFA, the user acquires a token from a client, e.g. IBM Security Verify, installed on the user&#039;s mobile device.  That token is then concatenated, with a password or passphrase, to logon to Model 204.  For example: token:password or token:passphrase, where colon (:) is the concatenating character.  That string is passed, unmodified, to the security interface for verification.&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;ACF2&lt;br /&gt;
&amp;lt;li&amp;gt;RACF&lt;br /&gt;
&amp;lt;li&amp;gt;TopSecret&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==File security==&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; file security features allow you to restrict access to particular files to designated users, as well as to limit the operations that can be performed on those files. Although you are primarily responsible for determining the file security scheme in a &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; system, you can allow users to change a password for a file if you provide them with the appropriate login privileges. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Security for files opened in a subsystem operates differently. See [[#Subsystem security|Subsystem security]] for more information.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===File manager&#039;s responsibilities===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Ordinarily, the file manager determines which files and file parameters to protect from unauthorized access and determines the initial passwords and associated privileges for the files. It is then the system manager&#039;s responsibility to add entries for these files to the password table. The password table contains password and privilege information for files, file groups, and login user IDs.&lt;br /&gt;
Maintaining this table is discussed in [[Storing security information (CCASTAT)#Password table data set|Password table data set]]. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Defining access levels for files====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The file manager is responsible for defining the default access levels for public and semipublic &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; files. You are also responsible for determining the four access levels that belong with each file or group password. These levels are then added by the system manager.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===File privileges===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
File privileges determine the type of operations that the user is authorized to perform on the file that is being opened. The types of files are:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;tr class=&amp;quot;head&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;If the file is...&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Then Model 204...&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Public&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Opens the file without asking for a file password and grants the user default file privileges as specified by the &amp;lt;var&amp;gt;PRIVDEF&amp;lt;/var&amp;gt; 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;Semipublic&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Prompts the user to enter a valid password:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;If the user enters a valid password, the user is given the privileges associated with that password. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;If the user does not know the password or enters an incorrect password, the file is still opened but the user is granted the default file privileges associated with the file.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&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;Private&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Prompts the user to enter a valid password: &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;If the user enters a valid password, the file is opened and the user is granted the privileges associated with that password. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;If the user does not know the password or enters an invalid password, the file is not opened. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&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;
====OPEN command and OPEN statement====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
For a discussion of the &amp;lt;var&amp;gt;OPEN&amp;lt;/var&amp;gt; command and the way in which a user specifies a password when opening different types of files,&lt;br /&gt;
refer to [[OPEN FILE command]] and also see [[Files, groups, and reference context#OPEN statement and OPENC_statement|OPEN statement and OPENC statement]]. &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Creating files with file security===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When a file is first created with the CREATE command, you can limit access to the file by setting two system parameters, &amp;lt;var&amp;gt;OPENCTL&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;PRIVDEF&amp;lt;/var&amp;gt;, and by asking the system manager to enter one or more file passwords in the password table. Also, the &amp;lt;var&amp;gt;OPENCTL&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;PRIVDEF&amp;lt;/var&amp;gt; parameters can be reset at a later time.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The following sections provide a further description of file passwords and privileges, as well as the &amp;lt;var&amp;gt;OPENCTL&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;PRIVDEF&amp;lt;/var&amp;gt; parameters. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===File passwords and privileges===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can define several passwords for a file. Each password can have a different set of privileges associated with it. These privileges determine what operations can be performed on the file by the user who opens the file with that password.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If you do not specify values for &amp;lt;var&amp;gt;OPENCTL&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;PRIVDEF&amp;lt;/var&amp;gt; when you create the file, the file is assumed to be a public file that has a full set of default file privileges. This implies that any user can open the file using the &amp;lt;var&amp;gt;OPEN&amp;lt;/var&amp;gt; command or &amp;lt;var&amp;gt;OPEN&amp;lt;/var&amp;gt; statement without having to enter a file password, and can then retrieve and update data, define and run procedures, or access file parameters.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Creating passwords====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Passwords can be up to eight characters long and cannot contain blanks, commas, or colons. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===OPENCTL parameter===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The &amp;lt;var&amp;gt;OPENCTL&amp;lt;/var&amp;gt; parameter determines whether or not a user must enter a file password when opening the file. Except as specified in the following table, &amp;lt;var&amp;gt;OPENCTL&amp;lt;/var&amp;gt; settings can be added together. The first three settings are mutually exclusive and one of them must be included in your &amp;lt;var&amp;gt;OPENCTL&amp;lt;/var&amp;gt; specification. The remaining settings in the table are options that you can add to one of the first three settings. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;tr class=&amp;quot;head&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Setting&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Means file is...&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Password handling&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt;X&#039;80&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Public&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Password is not requested and the file is opened with default privileges. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
This setting cannot be combined with X&#039;40&#039;.&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;X&#039;40&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Semipublic&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
User is asked for a password. For a valid password, the user is given the associated privileges. Otherwise, the user is granted default file privileges. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
This setting cannot be combined with X&#039;80&#039;.&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;X&#039;00&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Private&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Without a valid password the file is not opened.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt;X&#039;20&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Using record security&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
No effect.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The user must have a security level that permits some type of access.&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 class=&amp;quot;head&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;th colspan=&amp;quot;3&amp;quot;&amp;gt;Additional options for Parallel Query Option (PQO)&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt;X&#039;08&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Accessible remotely without a valid password &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
For a public file, no password is requested and the file is opened with default privileges.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
For a semipublic file, a password is requested. If the password is missing or invalid, the user is granted default file privileges.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
For a private file, or a semipublic file that a remote user presents a valid password for, the file is opened if X&#039;02&#039; is set. &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;X&#039;04&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Accessible  remotely as a permanent group member&amp;lt;/td&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; permanent group security is in effect. Password handling for local users is unaffected.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt;X&#039;02&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Accessible remotely with a valid password&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;For a private file, or a semipublic file that a remote user presents a valid password for, the file is opened. &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt;X&#039;00&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Accessible remotely through APSY&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;For any file, no password is requested and the file cannot be opened remotely, except within a trusted subsystem.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
For PQO sites, the OPENCTL parameter determines how a file can be accessed remotely. The PQO remote access settings have no meaning for local files. For more information about PQO remote files, see [[PQO: Remote files and scattered groups]].&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===PRIVDEF parameter and file privileges===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The PRIVDEF parameter summarizes the default file privileges that are assigned when a public file is opened, or when a semipublic file is opened without a password or with an invalid password. Privileges can be set to any combination of the following bit settings. These privileges are identical to the privileges that can be specified for an individual file password in the password 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;Bit&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;User can...&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt; X&#039;8000&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Issue file manager privileged commands such as INITIALIZE, SECURE, and DESECURE. The file manager can also reset file parameters, provided that ad hoc update privileges (X&#039;2000&#039;) are obtained. &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt; X&#039;4000&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Override record security; see [[#Record security|Record security]].&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt; X&#039;2000&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Update data with ad hoc requests or host language programs.   &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt; X&#039;1000&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Make changes to internal procedures, that is, procedures defined in the same file as the data, but cannot delete them.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt; X&#039;0800&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Update data using internal procedures. &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt; X&#039;0400&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Retrieve data with ad hoc requests or host language programs.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt; X&#039;0200&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Display, echo, and copy internal procedures.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt; X&#039;0100&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Retrieve data with internal procedures.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt; X&#039;0080&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Update data using external procedures, that is, procedures defined in a different file from the 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; X&#039;0040&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Retrieve data using external procedures.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt; X&#039;0020&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Include internal procedures.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt; X&#039;0010&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Define internal procedures.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt; X&#039;0008&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Delete internal procedures.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt; X&#039;0001&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Access file related parameters. The affected parameters are described in [[ FPARMS and TABLES file parameters#Setting file parameters|Setting file parameters]].&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;
====PRIVDEF default setting====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The default value for the PRIVDEF parameter is X&#039;BFFF&#039;, that is, all privileges except the ability to override record security.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Combining PRIVDEF settings====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Update privileges, for example, update using ad hoc requests, do not imply corresponding retrieval privileges. Thus, a user who has only the ability to update using ad hoc requests (X&#039;2000&#039; bit set) cannot find any records to update. A user must be given both update and retrieval privileges (X&#039;2400&#039;) to update data effectively.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Similarly, privileges for data retrieval using internal procedures (X&#039;0100&#039;) do not imply that the user can include a procedure from the file. The X&#039;0020&#039; privilege is required for this.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If procedure security is desired, you must relate procedure class numbers to the procedures stored in the file. Also, determine the field-level security levels for any fields in the file that are particularly sensitive and need to be protected against unauthorized access. Field and procedure security features are discussed in [[#Field-level security|Field-level security]] and [[#Procedure security|Procedure security]].&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Resetting PRIVDEF or OPENCTL===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When the OPENCTL parameter is reset to X&#039;80&#039; (public), the assigned privileges are those of the current value of the PRIVDEF parameter. This means that if OPENCTL is reset to X&#039;80&#039; while PRIVDEF is set to less than full file manager privileges, you cannot update the file or reset any file parameters. This can also occur if you reset PRIVDEF while OPENCTL is set to X&#039;80&#039;.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
To avoid this problem, use the VIEW PRIVDEF command to ensure that you have appropriate PRIVDEF privileges before you reset OPENCTL to X&#039;80&#039;. Be very careful about resetting PRIVDEF for a public file.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Regaining access====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If you do accidently lock yourself out of a file, you can regain access as follows:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Have the system manager create a permanent private group that contains the locked file.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Have the system manager add a group password (and tell you that password) to the password table, CCASTAT, with the privileges X&#039;BFFF&#039;.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Then, open the private group and issue one of the following commands:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;IN FILE name RESET OPENCTL=X&#039;40&#039;&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;IN FILE name RESET PRIVDEF=X&#039;BFFF&#039;&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
where &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;name&amp;lt;/var&amp;gt; is the name of the locked file. &amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Securing and desecuring a file===&lt;br /&gt;
 &lt;br /&gt;
====Making files secure====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Securing a file ensures that a user cannot access a file illegally by running a &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; program with a different password table. A special key in the password table serves as the key for securing a file. The key can be changed by the system manager with the LOGKEY command. When a secured file is opened, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; compares the key to a copy placed in the file by the SECURE command. The file is opened if the two fields match. If the fields do not match, the user is logged out and an error message is displayed on the operator&#039;s console. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The SECURE command, which can be issued only by a file manager, provides additional file protection by securing the currently open file. This form of the command is issued without arguments:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;SECURE&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Desecuring a file====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
To desecure a previously secured file, issue the command:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;DESECURE&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
For a description of using the SECURE and DESECURE commands with procedures, refer to [[#Procedure security|Procedure security]].     &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
==Group security==&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; group security features allow access to particular file groups to be limited to certain users.The file manager is primarily responsible for group security and for the file security features discussed in the preceding section.    &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Group passwords===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Ordinarily, the file manager determines which groups to protect from unauthorized access, and indicates the passwords and associated privileges for these groups. It is then&lt;br /&gt;
the system manager&#039;s responsibility to add entries for these groups to the password table and recommend group parameter settings. The system manager, however, is the only user authorized to create permanent groups.&lt;br /&gt;
This is done with the CREATE command, as described in [[Storing and using file group definitions (CCAGRP)#Creating file groups|Creating file groups]].&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Opening permanent file groups====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If passwords are required for a permanent file group, only users who know one of the group passwords can open the group. As with file security, the group password determines the types of operations that the user is authorized to perform on the group that is being opened. The privileges associated with the password determine the extent of these operations. Group security operates differently under the Subsystem Management facility. See [[#Subsystem security|Subsystem security]].      &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Opening temporary file groups====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Opening a temporary group is functionally equivalent to opening a series of files. Only the user who creates a temporary group can open it. To open a temporary group, the user must be able to open each file in the group individually.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Group file privileges====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The types of permanent groups are:&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;Semipublic&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Private       &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 types are the same as described in [[#File manager&#039;s responsibilities|File manager&#039;s responsibilities]].&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When a user opens a semipublic or private group, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; requests that the user enter the password. When the group is opened, the user is granted either the privileges associated with the group password or the default privileges for the group, depending on the password supplied. Default privileges are also supplied when a public group is opened.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Group passwords and privileges===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
A permanent group can have several passwords defined for it. Like a file password, a group password can have up to eight characters and cannot contain blanks, commas, or colons. Each password can have a different set of privileges associated with it. These privileges determine what operations can be performed on the group by the user who opens the group with that password. Privileges are expressed as two hexadecimal bytes, as discussed in [[#PRIVDEF parameter and group privileges|PRIVDEF parameter and group privileges]].      &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===PRIVDEF parameter and group privileges===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If a value for PRIVDEF and a PUBLIC, SEMIPUB, or PRIVATE specification is not specified at the time that the group is created, the group is assumed to be a PUBLIC group that has default privileges of X&#039;3FFF&#039;. The PRIVDEF parameter, which summarizes the default privileges for a group, provides all the privileges shown for files, plus the two group privileges summarized here. These privileges are identical to the privileges that can be specified for an individual group password in the password table. The X&#039;8000&#039; privilege has no meaning for groups, although it can be important for individual references to member files. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;tr class=&amp;quot;head&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Bit&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;User can...&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt; X&#039;0004&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Update data through procedures from the procedure 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 align=&amp;quot;right&amp;quot;&amp;gt; X&#039;0002&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Retrieve data through procedures from the procedure file.&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 group is created, one of its member files can be designated as the procedure file. This is the file in which procedures for the group are stored and from which procedures are retrieved or deleted. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
In a group context, &amp;lt;b&amp;gt;internal&amp;lt;/b&amp;gt; means that a file is a member of the group, while &amp;lt;b&amp;gt;external&amp;lt;/b&amp;gt; means that a file is not a member of the group.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Determining file and group privileges===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When a command or a SOUL statement refers to a file or group, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; checks the file and group privileges to ensure that the operation is allowed. &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; must determine whether a file has been opened as an individual file, as a member of a permanent or temporary group, or as both.&amp;lt;/p&amp;gt;&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 [[Files, groups, and reference context#Reference context|reference context]], as shown 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;Referring to...&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;User&#039;s privileges are...&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;Individual file&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Same as 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 privileges are associated with the specified file password or, if no password is required or is incorrectly specified, the default file privileges.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Temporary or ad hoc group&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;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; compares the privileges of all of the member files; only privileges that are common to every file are granted.   &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&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;Same as 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 is opened. These are the privileges associated with the specified group password or, if no password is required or is incorrectly specified, the default group privileges.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td nowrap&amp;gt;Member of a permanent group &amp;lt;br&amp;gt;(&amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;not&amp;lt;/var&amp;gt; opened individually)&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Those granted for the group.&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If the file is opened individually, its privileges remain those granted when the file was individually 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&amp;gt;Two permanent groups &amp;lt;br&amp;gt;(&amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;not&amp;lt;/var&amp;gt; opened as individual files)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;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; combines the privileges of all open groups of which the file is a member. Any privileges specified for any of the groups are granted.&amp;lt;/td&amp;gt;&lt;br /&gt;
&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 open as both an individual and a group&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Privileges associated with the file, not the group. No open group has an 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;
 &lt;br /&gt;
==Record security==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
In addition to protecting an entire file or group from unauthorized access, you can also protect individual records in a file. When record security is in effect for a particular &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; file, each user can be allowed to retrieve and update only records stored in the file with that user&#039;s ID or records that other users have agreed to share. The user does not know that any other records exist. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Record security can be in effect for one or more of the files in a group, but not for the group as a whole. Access to a single record depends on only the record security field defined for the record&#039;s file.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Record security and login security===&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; record security can be considered as an extension to login security and cannot be used unless the login security feature is in effect at an installation. Login security is primarily the system manager&#039;s responsibility, and it is discussed in detail in [[Storing security information (CCASTAT)#Login security|Login security]]. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===File manager responsibilities===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Record security usually is the responsibility of the file manager. To initiate record security, set the &amp;lt;var&amp;gt;[[OPENCTL parameter|OPENCTL]]&amp;lt;/var&amp;gt; parameter in the &amp;lt;var&amp;gt;CREATE&amp;lt;/var&amp;gt; command to indicate that record security is in effect and describe the special record security field in the &amp;lt;var&amp;gt;INITIALIZE&amp;lt;/var&amp;gt; command, which is discussed in [[Initializing files#Initializing record security files|Initializing record security files]]. You can turn off record security by using the appropriate &amp;lt;var&amp;gt;OPENCTL&amp;lt;/var&amp;gt; setting with the &amp;lt;var&amp;gt;RESET&amp;lt;/var&amp;gt; command, but it cannot be turned on by &amp;lt;var&amp;gt;RESET&amp;lt;/var&amp;gt;. The file must be defined to have record security through the &amp;lt;var&amp;gt;CREATE&amp;lt;/var&amp;gt; command.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Setting record security for remote users===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If your site has the Parallel Query Option/204 product, you can control access to remote files with record security using the &amp;lt;var&amp;gt;[[PQOSYS parameter|PQOSYS]]&amp;lt;/var&amp;gt; CCAIN system parameter.&lt;br /&gt;
If set, &amp;lt;var&amp;gt;PQOSYS&amp;lt;/var&amp;gt; creates a special record security key for remote users.&lt;br /&gt;
For more information about &amp;lt;var&amp;gt;PQOSYS&amp;lt;/var&amp;gt;, see [[PQO: Managing files and groups#Record security for remote users: the PQOSYS parameter|Record security for remote users: the PQOSYS parameter]]. &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Storing and retrieving records===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
After a file has been initialized with a record security key, each record stored in the file with a SOUL &amp;lt;var&amp;gt;STORE RECORD&amp;lt;/var&amp;gt; statement automatically has a record security field added to it, whose value is equal to the current user&#039;s login user ID. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Storing record security fields through File Load or the Host Language Interface====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
For records stored with a Host Language Interface &amp;lt;var&amp;gt;IFBREC&amp;lt;/var&amp;gt; or &amp;lt;var&amp;gt;IFSTOR&amp;lt;/var&amp;gt; function or by a file load program, a record security field must be added explicitly, along with other fields, when the record is created. For example, the following file load statement adds a record security field:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;LDC RECSEC=DARCY=&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Refer to [[File Load utility]] for information about the File Load utility. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Only records that have a record security field whose value is equal to the current user&#039;s login user ID are retrieved by a SOUL &amp;lt;var&amp;gt;FIND&amp;lt;/var&amp;gt; statement or Host Language Interface calls that perform a find function. If the &amp;lt;var&amp;gt;FILE LOAD&amp;lt;/var&amp;gt; statement shown here is executed, for example, only a user logged in under the name &amp;lt;code&amp;gt;DARCY&amp;lt;/code&amp;gt; can retrieve these records.   &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Allowing multiple access===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
To share a record with another user, either you or the user can add an explicit occurrence of the record security field with a value equal to the second user&#039;s login user ID. If the second user has update privileges, that user can delete the first value of the record security field, thus making the record accessible only through the second user&#039;s user ID.   &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Multiple access in 1NF files====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
To allow access to record security fields in &amp;lt;var&amp;gt;1NF&amp;lt;/var&amp;gt; files, you must define the record security field as &amp;lt;var&amp;gt;INVISIBLE&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;REPEATABLE&amp;lt;/var&amp;gt;.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Overriding record security===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Occasionally, it may be necessary to override the &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; record security scheme. To override record security, you must have the appropriate record security override privileges at login time: the X&#039;04&#039; bit must be set. When the file is opened, the X&#039;4000&#039; bit must be set. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If both privileges have been granted, you can retrieve all records, regardless of the record security key value associated with them. However, if you store records from User Language at this time, they still have the record security field with the value of your login ID added to them automatically.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If record security was specified for a file in a permanent group, you can override record security for the file if login and group privileges (X&#039;4000&#039;) allow it. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
For further information regarding login security bit settings, see [[Establishing and maintaining security#File security|File security]]. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
==Field-level security==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Field-level security (FLS) provides an additional level of protection for a user&#039;s data by controlling access to the individual fields of a &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; file. It involves a comparison of the user&#039;s predetermined numeric access level for a field with the field&#039;s own predetermined level, for each of four types of access. Field-level security specifications are put into effect only if access to a data record has been allowed by previous file-level and record-level security checks. The following paragraphs describe in detail how field-level security operates. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
In addition to field-level access for each field, each file has a default access level (that is, all fields within the file are automatically assigned access levels).&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The following parameters determine the default field access:&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;This parameter&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Provides this default field access...&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;SELLVL&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;SELECT &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;READLVL&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;READ &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;UPDTLVL&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;UPDATE &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;ADDLVL&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;ADD &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;
Like PRIVDEF, these parameters can be set when a file is created, or they can be reset later. If not explicitly specified, all of these parameters are set to zero, which allows a user to access only unsecured fields (that is, fields with access levels of 0). The same four parameters can be set for a permanent group when it is created by the system manager.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===File manager responsibilities===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The file manager is responsible for determining the desired field-level security scheme and for assigning security levels to fields that are to be protected. The LEVEL option allows you to indicate the security level for the field. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
For example, if the following command is issued, only users who have access levels of 70 or greater are allowed to access the PERFORM field, which might contain an employee&#039;s performance evaluation code:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;DEFINE FIELD PERFORM WITH LEVEL 70&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Types of field access===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
By using the &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; field-level security scheme, you can protect particularly sensitive data fields from unauthorized access. A field can be accessed in several different ways.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Field-level security features limits access to a field to any combination of the following access types: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;tr class=&amp;quot;head&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;This access type&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Allows you 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;SELECT&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Use the field in a SOUL FIND statement or in an IFFIND 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;READ&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Examine the value of a field, for example, in a SOUL PRINT or assignment statement or an IFGET 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;UPDATE&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Change the value of a previously stored occurrence of a field. This type of access can be granted without a corresponding READ access, which precludes updates of the form shown below:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;CHANGE &amp;lt;i&amp;gt;fieldname&amp;lt;/i&amp;gt; = &amp;lt;i&amp;gt;value&amp;lt;/i&amp;gt; TO &amp;lt;i&amp;gt;value&amp;lt;/i&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;ADD&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Add new occurrences of a field, including those added by a STORE RECORD statement. This type of access allows data entry clerks or other personnel to add new field occurrences or records without being able to change existing occurrences, or possibly even to examine them.&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
This type of access can also provide a user with the ability to add occurrences of the record security field without altering existing occurrences.&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;
Field-level security controls only explicit field references. Implicit references, such as retrieving a record security field with a FIND statement or adding a record security key value with STORE RECORD, are not controlled. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Field levels===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Every field definition can have a security level associated with it. Security levels are numbered from 0 to 255. 0 implies no security for the field; 255 implies the highest security. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Field-level security and field ordering====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
In the &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; field-level security scheme, fields can be assigned security levels in a hierarchical fashion. The fields can be ordered in view of the sensitivity of the data that they contain. An example of such an ordering is shown in [[#Field levels|Field levels]], the fields being listed in order of increasing sensitivity.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;caption&amp;gt;Field-level ordering example&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;Field &amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;FLS READ level&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;Last name&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;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;First name&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;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Employee number&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;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;City&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;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;State&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;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Zip code&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;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Street address&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt;20&amp;lt;/td&amp;gt;&lt;br /&gt;
&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 align=&amp;quot;right&amp;quot;&amp;gt;30&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Telephone number&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt;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;Salary&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt;60&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Performance evaluation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt;70&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;
In [[#Field levels|Field levels]], performance evaluation is considered to be the most sensitive field in the record, followed by salary, and so on. Last name, first name, and employee number have not been assigned field-level security numbers. However, file, record, and procedure security features still can be used to control access to those fields.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===User levels===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Each user has four field-level security access levels associated with each file and group opened. These correspond to the four field access levels defined previously: SELECT, READ, UPDATE, and ADD. User levels also range from 0 to 255.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When a user attempts to access a field in a particular way, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; compares the user&#039;s access level with the level assigned for the field. If the user&#039;s level for the desired type of access, for example, READ, is greater than or equal to the field&#039;s FLS level, the particular type of field access is allowed. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====User-level security example====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
For example, a user who has a READ level of 30 is permitted to print any field that has a READ level between 0 and 30, but cannot print a field that has a higher READ level. Thus, when using the file described above, a user who has a READ level of 30 can print an employee&#039;s position (and all fields that have lower FLS fields), but not the employee&#039;s telephone number, salary, or performance evaluation. An example of a possible set of access levels at an installation is shown below:  &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;caption&amp;gt;User access levels example&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;Employee category&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;SELECT&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;READ&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;UPDATE&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;ADD&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;Data entry clerks&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 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 align=&amp;quot;right&amp;quot;&amp;gt;60&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Personnel department clerks&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt;50&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt;50&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt;40&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;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Personnel department supervisor&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt;70&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt;70&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt;70&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;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Other employees (for example, telephone operators)&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 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;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;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Employee supervisor&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 align=&amp;quot;right&amp;quot;&amp;gt;70&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 align=&amp;quot;right&amp;quot;&amp;gt;70&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 motivations for these assignments easily can be understood in relation to the sample file. Only data entry clerks can add employee records; only supervisors can add performance evaluations; only personnel department supervisors can update salaries, and so on.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Referring to or displaying fields====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When a user&#039;s access levels are lower than permitted for the level of a particular field, a reference to the field is treated as a reference to a nonexistent field. Furthermore, the names of such fields are excluded from the output of the DISPLAY FIELD ALL command. Thus, when using the file shown in [[#User levels|User levels]], only personnel and employee supervisors know that a performance evaluation field even exists in the file. The field is never visible to other users.   &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
=====Limiting access to fields=====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Access to records for particular employees can be controlled in another way. Employee supervisors usually are given a password that allows them to read or add any field in the file. However, procedure- or record-level security can be used to restrict supervisors&#039; access to only the records of their employees.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Determining user access levels===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The access levels assigned for a user are determined when the user opens a file or a group using the&lt;br /&gt;
[[OPEN FILE command]], [[OPEN PERM GROUP command]], or [[OPEN TEMP GROUP command]] or using the &amp;lt;var&amp;gt;[[Files, groups, and reference context#OPEN statement and OPENC statement|OPEN]]&amp;lt;/var&amp;gt; statement.&lt;br /&gt;
Access level assignments are made for various types of files or groups as follows:    &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;If a file or a permanent group is public or semipublic and an incorrect password is specified in the OPEN, the user&#039;s four access levels are taken from the file or group defaults described in [[#Procedure security|Procedure security]]. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;If a private or semipublic file or group is opened with a valid password, the user&#039;s four access levels are the same as those associated with the password. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;If a temporary or ad hoc group is opened, all the member files are opened separately as individual files. Opening these individual files establishes a set of four access levels for each member file.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Access levels for temporary or ad hoc groups====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The four access levels for a temporary or ad hoc group are formed by taking the minimum of each access level across all the member files. Suppose that &amp;lt;code&amp;gt;FILEA&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;FILEB&amp;lt;/code&amp;gt; have the access levels shown 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;File&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;SELECT&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;READ&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;UPDATE&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;ADD&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;FILEA&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt;30&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt;40&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 align=&amp;quot;right&amp;quot;&amp;gt; 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;FILEB&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt;40&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt;30&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 align=&amp;quot;right&amp;quot;&amp;gt;10&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 a temporary group named &amp;lt;code&amp;gt;FILES&amp;lt;/code&amp;gt;, consisting of &amp;lt;code&amp;gt;FILEA&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;FILEB&amp;lt;/code&amp;gt;, is opened, the group is assigned the access levels:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;tr class=&amp;quot;head&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Group &amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt; SELECT&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;READ&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;UPDATE&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;ADD&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;FILES&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt;30&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt;30&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 align=&amp;quot;right&amp;quot;&amp;gt; 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;
&amp;lt;p&amp;gt;&lt;br /&gt;
This is equivalent to the comparison of file privileges that occurs when opening a temporary or ad hoc group; see [[#Group security|Group security]].&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 examples show how your user access levels for a file can change as the reference context changes. In the examples, the four user-access levels, SELECT, READ, UPDATE, and ADD, are represented by their first letters.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
A field reference occurs in single file context, and the file is opened as a single file:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;                    S      R      U      A&lt;br /&gt;
OPEN FILE FILEA     100    100    10     20&lt;br /&gt;
BEGIN&lt;br /&gt;
  FPC NAME=JONES&lt;br /&gt;
END&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The four access levels used in checking field references (100, 100, 10, 20) are those assigned when &amp;lt;code&amp;gt;FILEA&amp;lt;/code&amp;gt; was opened as a single file.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
A field reference occurs in group context:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;                    S      R      U      A&lt;br /&gt;
OPEN FILE GROUPA    50     75     20     0&lt;br /&gt;
BEGIN&lt;br /&gt;
  FPC NAME=JONES&lt;br /&gt;
END&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The four access levels used for checking field references in any file of the group (50, 75, 20, 0) are the four assigned when the group was opened. All the files in a group receive the same four access levels.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
A field reference occurs in single file context, but the file was opened only as a member of one or more permanent groups. &amp;lt;code&amp;gt;FILEA&amp;lt;/code&amp;gt; is a member of the two groups, &amp;lt;code&amp;gt;GROUPA&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;GROUPB&amp;lt;/code&amp;gt;:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;                    S      R      U      A&lt;br /&gt;
CLOSE FILE FILEA&lt;br /&gt;
 OPEN GROUP GROUPA  50     75     20     0&lt;br /&gt;
 OPEN GROUP GROUPB  50     50     0      100&lt;br /&gt;
 BEGIN&lt;br /&gt;
   IN FILEA FPC NAME=JONES&lt;br /&gt;
 END&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The four access levels used in checking field references (50, 75, 20, 100) are formed by taking the maximum level defined for the file by every group containing the file that the user has opened. &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Procedure security==&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; procedure security limits access to a file&#039;s procedures in the following ways:     &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;By allowing you to specify user privileges that control the type of functions that can be performed on the procedures within a file, for example, to display, define, or delete the procedure.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;By limiting access to a procedure to only a particular class of users. This is done by assigning a procedure class number to the procedure that is being secured and a user class to the users allowed to manipulate the procedures. &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 security features are discussed in greater detail in the following sections. In addition, [[#File security|File security]] and [[#Group security|Group security]] discuss the privileges that enable users to access the data in a file or group through procedures.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Accessing procedures===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
At the time a file or group is opened, particular privileges are established that concern the text of the procedures stored in the file or group. These privileges, or access rights, enable a user to manipulate a procedure in any 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;Use the procedure, for example, by specifying it in an INCLUDE command.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Display and copy the procedure. This includes echoing the procedure and using the EDIT command to display or copy it. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Change the procedure, usually with the Editor.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Define a new procedure in the file with the PROCEDURE command or the Editor. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Delete a procedure by means of the DELETE 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;
For information about the basic procedure functions, see the $Prc* and $Proc* functions in [[List of $functions]]; and for information about procedure related commands, see [[:Category:Commands]].&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Securing procedures===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The privileges established for procedure access discussed in [[#PRIVDEF parameter and file privileges|PRIVDEF parameter and file privileges]] are used to limit the way in which the procedures associated with a file or group can be accessed. &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; provides an additional facility that allows particular procedures to be secured and thus protected from unauthorized access. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===User and procedure classes===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can limit user access to procedures by assigning user classes that have access to procedures in a particular procedure class.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
User and procedure classes are usually put in place as part of the security scheme for a file or group. Although every user and procedure could have a distinct class number (UCLASS and PCLASS), this approach is too complex and cumbersome for most installations. Thus, sets of procedures and users more often are handled together. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====User classes (UCLASS)====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Examples of typical user classes are:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;All employees in a department&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;All managers, regardless of department&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;All data entry personnel &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Procedure classes (PCLASS)====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Examples of typical procedure classes include procedures that:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Display salary data&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Update personnel records&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Perform general utility operations&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Access sensitive fields in files &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Procedure classes and user classes are arbitrary numbers that range from 1 to 255. Their only significance is in their relationship to each other. The numbers are assigned as described in [[#User and procedure classes|User and procedure classes]].&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When a user opens a file or group, the user is given the privileges and user class determined by the OPEN: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;If the file or group is opened with a password, the user class is obtained from the password table, where it is stored with the privilege bytes and field-level security levels for the password.&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The user class normally is provided by the file manager and entered into the password table by the system manager, as discussed in [[Storing security information (CCASTAT)#Password table maintenance|Password table maintenance]]. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;If the file or group is opened without a password, the user is granted default privileges and a default user class. This default user class is the value of the PRCLDEF system parameter, which has a default value of zero and can be set by the file manager.     &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Relationship between user and procedure classes====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
An access control table (ACT) stored in each file assigns to particular user classes the access rights to particular procedure classes. These mappings from user class to procedure class in the ACT are created using the SECURE command described in [[#SECURE command, definition format|SECURE command, definition format]]. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The user class established for a group applies to all its member files. If a file is opened only as part of a permanent group, any reference to a secured procedure compares the user class specified for the group against the procedure&#039;s class to determine the available access rights. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
=====Example=====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The association of user classes and procedure classes can be explained best by an example: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Suppose that a user whose user class is 8 includes a procedure named &amp;lt;code&amp;gt;CENTEST&amp;lt;/code&amp;gt;, which has a procedure class of 20. &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; must determine whether users of class 8 are allowed to include procedures of class 20. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; checks the ACT in the file in which &amp;lt;code&amp;gt;CENTEST&amp;lt;/code&amp;gt; is defined and finds that an INCLUDE is permitted, the procedure is included. If, however, INCLUDE is not permitted for users of class 8, the INCLUDE does not take place and an error message is issued. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
This mapping of user and procedure classes is discussed in greater detail in the sections that follow.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Assigning procedure classes====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
A procedure class can be specified for a procedure by the file manager or by an individual user. The class can be assigned:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;By the user when defining the procedure with the PROCEDURE command&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;By the file manager when securing the procedure with the SECURE command   &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
=====User-defined procedure classes=====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When defining a procedure, the user can specify a procedure class number in the following format:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;PROCEDURE &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;name&amp;lt;/span&amp;gt; PCLASS=&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;n&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;p&amp;gt;&lt;br /&gt;
&amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;n&amp;lt;/var&amp;gt; is any number in the range 1 through 255.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
A user&#039;s access rights to procedures are checked first at the file level and then at the procedure level. Thus, if the user is to be allowed to change a secured procedure, the user must have procedure update file privileges, and the appropriate entry must have been made in the ACT.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
=====File manager-defined procedure classes=====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
File manager-defined procedure classes are discussed in the following sections, in context of the commands that the file manager uses for this purpose.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===SECURE command, definition format===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If you have appropriate file manager privileges, you can use the SECURE command in the following form to:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Secure both files and procedures&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Define privileges for procedures that already have been secured&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Make entries in the access control table&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 is:&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;SECURE [PROCEDURE]&lt;br /&gt;
   NAME=&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;procname&amp;lt;/span&amp;gt; [,&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;procname&amp;lt;/span&amp;gt; ...] PCLASS=&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;pclass&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;procname&amp;lt;/var&amp;gt; is the name of an existing procedure to be secured.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;pclass&amp;lt;/var&amp;gt; is the procedure class number to assign to the procedure(s); the number must be in the range 1 to 255. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The SECURE command must be issued in file context, that is, the current default must be a file, not a group.&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 is a SECURE command used to secure a procedure:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;SECURE PROCEDURE NAME = PAY PCLASS = 7&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
After this command is issued, the procedure PAY is secured with the procedure class number 7. An entry for PCLASS=7 is made in the procedure dictionary. If PAY is currently secured, its old procedure class is changed to the new class.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===SECURE command, mapping format===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The SECURE command lets you map particular access privileges and user classes to particular procedure classes. This command creates entries in the access control table. Issue the following form of the command:&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;SECURE &amp;lt;span class=&amp;quot;squareb&amp;quot;&amp;gt;[&amp;lt;/span&amp;gt;PROCEDURE&amp;lt;span class=&amp;quot;squareb&amp;quot;&amp;gt;]&amp;lt;/span&amp;gt;&lt;br /&gt;
   ACCESS = &amp;lt;span class=&amp;quot;squareb&amp;quot;&amp;gt;{&amp;lt;/span&amp;gt;ALL &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;access&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;access&amp;lt;/span&amp;gt;...&amp;lt;span class=&amp;quot;squareb&amp;quot;&amp;gt;]&amp;lt;/span&amp;gt;) &amp;lt;span class=&amp;quot;squareb&amp;quot;&amp;gt;|&amp;lt;/span&amp;gt; NONE&amp;lt;span class=&amp;quot;squareb&amp;quot;&amp;gt;}&amp;lt;/span&amp;gt;&lt;br /&gt;
   UCLASS = &amp;lt;span class=&amp;quot;squareb&amp;quot;&amp;gt;{&amp;lt;/span&amp;gt;ALL &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;uclass&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;uclass&amp;lt;/span&amp;gt;...&amp;lt;span class=&amp;quot;squareb&amp;quot;&amp;gt;]&amp;lt;/span&amp;gt;)&amp;lt;span class=&amp;quot;squareb&amp;quot;&amp;gt;}&amp;lt;/span&amp;gt;&lt;br /&gt;
   PCLASS = &amp;lt;span class=&amp;quot;squareb&amp;quot;&amp;gt;{&amp;lt;/span&amp;gt;ALL &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;pclass&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;pclass&amp;lt;/span&amp;gt;...&amp;lt;span class=&amp;quot;squareb&amp;quot;&amp;gt;]&amp;lt;/span&amp;gt;)&amp;lt;span class=&amp;quot;squareb&amp;quot;&amp;gt;}&amp;lt;/span&amp;gt;&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;access&amp;lt;/var&amp;gt; is a particular privilege associated with the procedures in the procedure class. It can be 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;Privilege&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Users can...&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;USE &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Include procedures.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;COPY &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Display and edit (copy only) procedures.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;CHANGE &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Edit procedures.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;DEFINE &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Create new procedures (PROCEDURE and EDIT).&amp;lt;/td&amp;gt;&lt;br /&gt;
&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 &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Delete procedures.&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;li&amp;gt;&amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;uclass&amp;lt;/var&amp;gt; is the user class number whose users have access to the procedures in PCLASS; the number must be in the range 1 to 255. Parentheses are optional in the uclass 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;pclass&amp;lt;/var&amp;gt; is the procedure class number to which users in UCLASS have access; the number must be in the range 1 to 255. Parentheses are optional in the pclass definition. &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;
In the following example, only users in the Payroll Department (user class 90) are allowed to use procedures that manipulate salary fields in a file (procedure class 20 and 30):&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;SECURE PROC ACCESS = (USE) UCLASS = 90 PCLASS = 20,30&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The entries in the ACT do not take effect for users that have the file open when the &amp;lt;var&amp;gt;SECURE&amp;lt;/var&amp;gt; command is issued until they reopen the file. This includes the user who issues the command. See [[SECURE PROCEDURE ACCESS command]] for the complete syntax and description of the &amp;lt;var&amp;gt;SECURE&amp;lt;/var&amp;gt; command.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
To complete procedure security implementation, the system manager updates the password table using the &amp;lt;var&amp;gt;LOGCTL&amp;lt;/var&amp;gt; command to assign user classes to the appropriate passwords.   &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Procedure-related commands and required privileges===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The following list is a summary of &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; procedure or procedure-related commands that require particular privileges. All these commands are described in 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.  &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;caption&amp;gt;Privileges for procedure or procedure-related commands&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 colspan=&amp;quot;2&amp;quot;&amp;gt;Required privileges&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;INCLUDE&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;USE&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;EDIT&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;COPY&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;DISPLAY&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;COPY (to display text)&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;DELETE&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;DELETE&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;ASSIGN&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;CHANGE&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;DEASSIGN&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;CHANGE&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;RENAME&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;CHANGE&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 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;New procedure&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Old procedure&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;PROCEDURE&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;DEFINE&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;CHANGE&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;EDIT commands:&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
GO&amp;lt;br&amp;gt;END&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;DEFINE, USE* DEFINE&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;CHANGE, USE* CHANGE&amp;lt;/td&amp;gt;&lt;br /&gt;
&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;/td&amp;gt;&lt;br /&gt;
&amp;lt;td colspan=&amp;quot;2&amp;quot;&amp;gt;*COPY privileges are required in addition to USE to echo text lines of a procedure to a journal.&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;
===Displaying user and procedure classes===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The SECURE command constructs entries in the access control table for any user classes specified in the UCLASS clause. &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 important to display procedure security and save it before reorganizing a file, so that you can reestablish the same security. You might have to upgrade your file manager privileges to include COPY, which is not part of the default privileges of a file manager.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
To determine a user&#039;s access rights for various procedure classes, issue the following form of the DISPLAY command: &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;DISPLAY [PROCEDURE (PRIVILEGES [,NOUSE])&lt;br /&gt;
   [ALL &amp;lt;span class=&amp;quot;squareb&amp;quot;&amp;gt;|&amp;lt;/span&amp;gt; UCLASS = &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;uclass&amp;lt;/var&amp;gt;[,&amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;uclass&amp;lt;/var&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;ALL displays information for all user classes. &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;uclass&amp;lt;/var&amp;gt; displays information only for the specified classes.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;If neither is specified, your current class and privileges are displayed. &lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Privileges are displayed in the following format:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;UCLASS=&amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;u&amp;lt;/var&amp;gt; PCLASS=&amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;pc&amp;lt;/var&amp;gt;,X&#039;&amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;nn&amp;lt;/var&amp;gt;&#039;&lt;br /&gt;
      .&lt;br /&gt;
      .&lt;br /&gt;
      .&lt;br /&gt;
 PCLASS=&amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;pc&amp;lt;/var&amp;gt;,X&#039;&amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;nn&amp;lt;/var&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;u&amp;lt;/var&amp;gt; is the user class.&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;pc&amp;lt;/var&amp;gt; is a procedure class defined for that user class.&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;nn&amp;lt;/var&amp;gt; is a privilege byte constructed from combinations of the following bit settings:&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;tr class=&amp;quot;head&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt; Bit &amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Privilege&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt; X&#039;80&#039; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;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; X&#039;40&#039; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;COPY&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt; X&#039;20&#039; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;CHANGE &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt; X&#039;10&#039; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;DEFINE&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt; X&#039;08&#039; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;DELETE&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;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;If NOUSE is specified, information is displayed at your terminal even if a USE command preceded the DISPLAY command. The device specified by the USE command is not used but is left open.&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 discussion of other DISPLAY command capabilities in [[ Field display and message broadcast#Overview|Overview]].&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Sample security scheme===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
A simplified example of a security scheme at an installation is presented in this section. At this installation, the following access rules are established:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Most users are allowed to include all secured procedures.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Only programmers in the data processing department are allowed to define procedures. However, they cannot use them. These programmers can have user classes 8 or 9.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Only users in the payroll department are allowed to use procedures that manipulate salary fields in the file. Payroll users are assigned class 90, and the payroll procedures are in procedure classes 20 and 30.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Other users are assigned user classes 25, 30, or 31.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Other procedures are in procedure classes 40, 50, 60, or 70. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Sample SECURE commands===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
To create the security scheme in this example, issue the following commands:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;SECURE PROC ACCESS=(CHANGE,DEFINE,DELETE,COPY) UCLASS=8,9 PCLASS=20,30,40,50,60,70&lt;br /&gt;
SECURE PROC ACCESS=(USE) UCLASS=90 PCLASS=20,30&lt;br /&gt;
SECURE PROC ACCESS=(USE) UCLASS=25,30,31,90 -&lt;br /&gt;
  PCLASS=40,50,60,70&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Importance of SECURE command order====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
In this example, the order of the SECURE commands is unimportant. However, the order becomes significant when a UCLASS=ALL or PCLASS=ALL clause is included in the command. UCLASS=ALL affects only user classes already mentioned in the ACT. This might be completely different from the list of user classes that actually can be assigned to users from the password table or default file or group settings.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When PCLASS=ALL is included in the command, no new entries are added to the ACT. Instead, for each user class in the UCLASS list, access rights for each procedure class already mentioned for that user are replaced by the new ACCESS rights. Again, the classes affected in the ACT may be completely different from those actually used for secured procedures in the file. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Changing and adding access privileges===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Suppose, in this sample security, that the payroll users now need to be able to display all the procedures that they use. Also, suppose that a new set of procedures (of class 15) is developed that all users (including the programmers) can include. The following commands are issued in the order shown to modify the ACT entries already built:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;SECURE PROC ACCESS=(USE) UCLASS=ALL PCLASS=15&lt;br /&gt;
SECURE PROC ACCESS=(USE,COPY) UCLASS=90 PCLASS=ALL &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If these commands are reversed, the payroll users cannot display members of the new class of procedures.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Removing procedure security for procedures or user classes===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
To remove the procedure access defined for user class/procedure class pairs, use the DESECURE command:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Remove the security for the procedure involved. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Delete the procedure class number assigned to the procedure in the procedure dictionary by issuing the form of the DESECURE command immediately below. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&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 you do not do this, no one can access the procedure, even though the entry might have been removed from the ACT (see the second form of DESECURE below). &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Only file managers can issue the DESECURE command and it must be issued in file context (that is, the current default must be a file, not a group). &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The format of the DESECURE command is:&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;DESECURE &amp;lt;b&amp;gt;PROC&amp;lt;/b&amp;gt;EDURE {ALL &amp;lt;span class=&amp;quot;squareb&amp;quot;&amp;gt;|&amp;lt;/span&amp;gt; NAME=(&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;procname&amp;lt;/span&amp;gt;[,&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;procname&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;p&amp;gt;&lt;br /&gt;
&amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;procname&amp;lt;/var&amp;gt; is the name of an existing secured procedure.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
To remove particular access privileges for particular procedure classes, use the following form of the DESECURE command to delete entries from the ACT. You must specify either UCLASS or PCLASS, or both.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The format is:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;DESECURE &amp;lt;var&amp;gt;PROC&amp;lt;/var&amp;gt;EDURE&lt;br /&gt;
   {[UCLASS= {ALL &amp;lt;span class=&amp;quot;squareb&amp;quot;&amp;gt;|&amp;lt;/span&amp;gt; (uclass[,uclass...])}] &amp;lt;span class=&amp;quot;squareb&amp;quot;&amp;gt;|&amp;lt;/span&amp;gt;&lt;br /&gt;
    [PCLASS= {ALL &amp;lt;span class=&amp;quot;squareb&amp;quot;&amp;gt;|&amp;lt;/span&amp;gt; (pclass[,pclass...])}]}&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;uclass&amp;lt;/var&amp;gt; is the number of an existing user class whose users have access to the procedure in &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;pclass&amp;lt;/var&amp;gt;; the number must be in the range 1-255. If only UCLASS is specified, all references to the specified user classes are removed from the ACT.&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Parentheses are optional with &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;uclass&amp;lt;/var&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;var class=&amp;quot;term&amp;quot;&amp;gt;pclass&amp;lt;/var&amp;gt; is the number of an existing procedure class to which users in &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;uclass&amp;lt;/var&amp;gt; have access; the number must be in the range 1-255. If only &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;pclass&amp;lt;/var&amp;gt; is specified, all references to the specified procedure classes are removed from the ACT.&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Parentheses are optional with &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;pclass&amp;lt;/var&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;
===Desecuring both UCLASS and PCLASS===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If both UCLASS and PCLASS are specified, the entries for all combinations of the specified user and procedure class pairs are removed from the ACT. For example:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;DESECURE PROC UCLASS=8,9 PCLASS=1,2,3&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
removes access entries for:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;UCLASS 8 and PCLASS 1&lt;br /&gt;
UCLASS 8 and PCLASS 2&lt;br /&gt;
UCLASS 8 and PCLASS 3&lt;br /&gt;
UCLASS 9 and PCLASS 1&lt;br /&gt;
UCLASS 9 and PCLASS 2&lt;br /&gt;
UCLASS 9 and PCLASS 3&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===System manager responsibilities===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The final step in the desecuring process is to have the system manager remove the password(s) with associated uclasses from the password table. If they are not removed, you must remember not to use them when opening the file.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Privileges required===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You must have file-level privileges of at least X&#039;A000&#039; (file manager and ad hoc data update) to issue SECURE and DESECURE commands. In this case, you actually need update but not retrieve privileges. (Refer to [[#File security|File security]] for a discussion of these privileges.)    &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===File and group references===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When an explicit reference is made to a file with an IN clause and that file is opened only as a member of one or more permanent groups, the file-level privileges to be checked must be obtained from the group privileges, as defined for every group of which the file is a member. If any group&#039;s privileges allow the access in question, then the operation proceeds.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If the access is to a secured procedure, for every group in which the file is opened and the access is allowed by the group privileges, the user&#039;s user class in that group is used to determine privileges for that procedure&#039;s class. If any group&#039;s user class has the privilege, the operation proceeds.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
See the discussion of reference context in the example on [[#Determining user access levels|Determining user access levels]] and see [[Files, groups, and reference context]] for more information. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
==Subsystem security==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When a user enters a subsystem, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; opens and determines privileges for all subsystem files and groups for that user. The files that are opened and the privileges that are assigned are based on a combination of the user&#039;s subsystem user class and the subsystem&#039;s status, both specified by the system manager in the subsystem definition. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The system manager assigns a user to a subsystem user class by entering 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; login user ID in the appropriate subsystem user class. Whenever the user invokes the subsystem, the user is assigned the subsystem command privileges and the file and group privileges of that subsystem user class.   &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The system manager controls access to the subsystem through the subsystem status: public, semipublic, or private. The status determines which user classes can enter a particular subsystem and whether or not users without a user class assignment are permitted entry. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
For more information about subsystems, see [[System requirements for Application Subsystems]].&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Terminal security==&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; terminal security allows access to certain login user IDs, files, or groups to be restricted to users at certain terminals. For example, you might want a particular MEDICAL file to be accessible only through terminals located physically in doctors&#039; offices.     &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The terminal security feature allows a list of terminal numbers to be associated with each login, file, or group password. A terminal number is determined during &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; initialization by the order of the user parameter lines and the way in which they are assigned to specific telecommunications unit numbers in the JCL. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The batch user (User 0) is considered to be terminal 0 (zero). A user at a particular terminal whose number is n can log in to a specific user ID or open a specific file or group only if the terminal number, n, is in the terminal list associated with the password for that user ID, file, or group. If it is not, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; responds as though the user had entered an invalid password.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Terminal security is generally used with only hard-wired terminals, that is, terminals on leased lines. If an installation has dialup terminals, the terminal can be connected to a number of similar telecommunications units and user parameter lines. In this case, although the location of the terminal can be fixed, its terminal number can change every time it is dialed up. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The entries in the ACT do not take effect for users that have the file open when the SECURE command is issued until they reopen the file. This includes the user who issues the command. The complete syntax and description of the SECURE command is located in the ry time it is dialed up.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
By controlling the assignment of terminal numbers to physical terminals, the system manager determines the appropriate terminal security scheme. You provide assistance in limiting file and group access through file passwords and privileges, and group passwords and privileges.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;/div&amp;gt; &amp;lt;!-- end of toclimit div --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Model 204 files]]&lt;/div&gt;</summary>
		<author><name>JDamon</name></author>
	</entry>
	<entry>
		<id>https://m204wiki.rocketsoftware.com/index.php?title=Model_204_security_features&amp;diff=120013</id>
		<title>Model 204 security features</title>
		<link rel="alternate" type="text/html" href="https://m204wiki.rocketsoftware.com/index.php?title=Model_204_security_features&amp;diff=120013"/>
		<updated>2023-11-17T18:59:38Z</updated>

		<summary type="html">&lt;p&gt;JDamon: /* Types of security */&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 variety of security features provide &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; users with protection against unauthorized use of their account names, files, groups, records, fields, procedures, and terminals. This section describes the role of the file manager in maintaining &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; security. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Additional documentation on security features===&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;System manager responsibilities are described in detail in [[Storing security information (CCASTAT)#Overview|Storing security information (CCASTAT)]].&amp;lt;/li&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;li&amp;gt;Rocket Software has add-on interfaces between &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; and a number of security products. These security interfaces are described in the [[:Category:Security interfaces|Security interfaces]] pages.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;SSL/TLS security features for Janus products are described in [[Janus Network Security]]. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Using the Model 204 password table===&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; password table is the backbone to the security features in &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt;. The user must enter a valid password to access the &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; Online, files, groups of files, and subsystems, which in turn affects access to records. The security feature in &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; is not based on a hierarchy, but rather on direct password validation.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The password table, CCASTAT, is set up by the system manager. When the file manager determines which users or groups of users can have access to what data, then the file manager works with the system manager to correctly set up the password table and file access. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Types of security===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
All &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; security features are optional. A site can support any combination of features. The file manager is primarily responsible for file, group, record, field, and procedure security. Both system and file managers handle terminal security. The file manager&#039;s responsibilities are described in this 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;Type of security&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;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&amp;gt;Login (System manager)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Limits access to the &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; system by requiring an individual user to enter a password when logging in. Only users who enter a valid password can gain access to the system. When a user successfully logs in, specified privileges are granted.&lt;br /&gt;
See [[Storing security information (CCASTAT)#Login security|Login security]] and the &amp;lt;var&amp;gt;[[LOGCTL command (user ID entries)|LOGCTL]]&amp;lt;/var&amp;gt; command for modifying user ID entries.&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;Multi-factor authentication - MFA&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
Support for logon with Multi-factor authentication (MFA) is also provided with no updates or parameter changes required to Model 204.  MFA does require that one of the three security interfaces, listed below, be linked into the Model 204 nucleus.  Once a userid is provisioned under MFA, the user acquires a token from a client, e.g. IBM Security Verify, installed on the user&#039;s mobile device.  That token is then concatenated, with a password or passphrase, to logon to Model 204.  For example: token:password or token:passphrase, where colon (:) is the concatenating character.  That string is passed, unmodified, to the security interface for verification.&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;ACF2&lt;br /&gt;
&amp;lt;li&amp;gt;RACF&lt;br /&gt;
&amp;lt;li&amp;gt;TopSecret&lt;br /&gt;
&amp;lt;/ul&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;[[#File security|File]] (File manager)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Protects certain types of files by requiring a user to specify a valid file password in the OPEN command or OPEN statement. After successfully opening a file, a user is granted particular privileges pertaining to the data and procedures in that file, as well as a user class number for procedure security, and field-level security access levels.    &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;[[#Group security|Group]] (File manager) &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Protects certain types of file groups by requiring a user to specify a valid group password in the OPEN command or OPEN statement. When a user successfully opens a permanent group, the user is granted specified privileges that pertain to the files in the group. When opening a temporary group, the user is granted the privileges that all the member files have in common. &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;[[#Record security|Record]] (File manager) &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Limits access to particular records in a &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; file. When record security is in effect, a user can retrieve and update only those records stored by the user&#039;s login ID or records that other users have agreed to share. &amp;lt;/td&amp;gt;&lt;br /&gt;
&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-level security|Field-level]] (File manager) &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Protects sensitive fields in a &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; file. Field-level security levels are granted when opening a file or group, and they indicate the type of access (for example, READ, UPDATE) to the field that the user is allowed.    &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;[[#Procedure security|Procedure]] (File manager) &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Limits access to the procedures in a file. It indicates whether a user is authorized to access particular procedures and specifies the type of access (for example, DEFINE, DELETE) that the user is allowed in secured procedures.       &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;[[#Subsystem security|Subsystem]] (System manager) &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Controls the privileges that are assigned to users who enter a subsystem. The system manager assigns users subsystem command privileges and privileges for each file and group in the subsystem.  &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td nowrap&amp;gt;[[#Terminal security|Terminal]] (File and system managers) &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Allows specified login user IDs and specified files and file groups to be accessed only from certain hard-wired terminals. &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;
==File security==&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; file security features allow you to restrict access to particular files to designated users, as well as to limit the operations that can be performed on those files. Although you are primarily responsible for determining the file security scheme in a &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; system, you can allow users to change a password for a file if you provide them with the appropriate login privileges. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Security for files opened in a subsystem operates differently. See [[#Subsystem security|Subsystem security]] for more information.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===File manager&#039;s responsibilities===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Ordinarily, the file manager determines which files and file parameters to protect from unauthorized access and determines the initial passwords and associated privileges for the files. It is then the system manager&#039;s responsibility to add entries for these files to the password table. The password table contains password and privilege information for files, file groups, and login user IDs.&lt;br /&gt;
Maintaining this table is discussed in [[Storing security information (CCASTAT)#Password table data set|Password table data set]]. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Defining access levels for files====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The file manager is responsible for defining the default access levels for public and semipublic &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; files. You are also responsible for determining the four access levels that belong with each file or group password. These levels are then added by the system manager.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===File privileges===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
File privileges determine the type of operations that the user is authorized to perform on the file that is being opened. The types of files are:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;tr class=&amp;quot;head&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;If the file is...&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Then Model 204...&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Public&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Opens the file without asking for a file password and grants the user default file privileges as specified by the &amp;lt;var&amp;gt;PRIVDEF&amp;lt;/var&amp;gt; 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;Semipublic&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Prompts the user to enter a valid password:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;If the user enters a valid password, the user is given the privileges associated with that password. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;If the user does not know the password or enters an incorrect password, the file is still opened but the user is granted the default file privileges associated with the file.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&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;Private&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Prompts the user to enter a valid password: &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;If the user enters a valid password, the file is opened and the user is granted the privileges associated with that password. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;If the user does not know the password or enters an invalid password, the file is not opened. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&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;
====OPEN command and OPEN statement====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
For a discussion of the &amp;lt;var&amp;gt;OPEN&amp;lt;/var&amp;gt; command and the way in which a user specifies a password when opening different types of files,&lt;br /&gt;
refer to [[OPEN FILE command]] and also see [[Files, groups, and reference context#OPEN statement and OPENC_statement|OPEN statement and OPENC statement]]. &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Creating files with file security===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When a file is first created with the CREATE command, you can limit access to the file by setting two system parameters, &amp;lt;var&amp;gt;OPENCTL&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;PRIVDEF&amp;lt;/var&amp;gt;, and by asking the system manager to enter one or more file passwords in the password table. Also, the &amp;lt;var&amp;gt;OPENCTL&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;PRIVDEF&amp;lt;/var&amp;gt; parameters can be reset at a later time.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The following sections provide a further description of file passwords and privileges, as well as the &amp;lt;var&amp;gt;OPENCTL&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;PRIVDEF&amp;lt;/var&amp;gt; parameters. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===File passwords and privileges===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can define several passwords for a file. Each password can have a different set of privileges associated with it. These privileges determine what operations can be performed on the file by the user who opens the file with that password.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If you do not specify values for &amp;lt;var&amp;gt;OPENCTL&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;PRIVDEF&amp;lt;/var&amp;gt; when you create the file, the file is assumed to be a public file that has a full set of default file privileges. This implies that any user can open the file using the &amp;lt;var&amp;gt;OPEN&amp;lt;/var&amp;gt; command or &amp;lt;var&amp;gt;OPEN&amp;lt;/var&amp;gt; statement without having to enter a file password, and can then retrieve and update data, define and run procedures, or access file parameters.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Creating passwords====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Passwords can be up to eight characters long and cannot contain blanks, commas, or colons. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===OPENCTL parameter===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The &amp;lt;var&amp;gt;OPENCTL&amp;lt;/var&amp;gt; parameter determines whether or not a user must enter a file password when opening the file. Except as specified in the following table, &amp;lt;var&amp;gt;OPENCTL&amp;lt;/var&amp;gt; settings can be added together. The first three settings are mutually exclusive and one of them must be included in your &amp;lt;var&amp;gt;OPENCTL&amp;lt;/var&amp;gt; specification. The remaining settings in the table are options that you can add to one of the first three settings. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;tr class=&amp;quot;head&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Setting&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Means file is...&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Password handling&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt;X&#039;80&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Public&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Password is not requested and the file is opened with default privileges. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
This setting cannot be combined with X&#039;40&#039;.&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;X&#039;40&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Semipublic&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
User is asked for a password. For a valid password, the user is given the associated privileges. Otherwise, the user is granted default file privileges. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
This setting cannot be combined with X&#039;80&#039;.&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;X&#039;00&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Private&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Without a valid password the file is not opened.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt;X&#039;20&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Using record security&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
No effect.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The user must have a security level that permits some type of access.&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 class=&amp;quot;head&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;th colspan=&amp;quot;3&amp;quot;&amp;gt;Additional options for Parallel Query Option (PQO)&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt;X&#039;08&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Accessible remotely without a valid password &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
For a public file, no password is requested and the file is opened with default privileges.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
For a semipublic file, a password is requested. If the password is missing or invalid, the user is granted default file privileges.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
For a private file, or a semipublic file that a remote user presents a valid password for, the file is opened if X&#039;02&#039; is set. &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;X&#039;04&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Accessible  remotely as a permanent group member&amp;lt;/td&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; permanent group security is in effect. Password handling for local users is unaffected.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt;X&#039;02&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Accessible remotely with a valid password&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;For a private file, or a semipublic file that a remote user presents a valid password for, the file is opened. &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt;X&#039;00&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Accessible remotely through APSY&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;For any file, no password is requested and the file cannot be opened remotely, except within a trusted subsystem.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
For PQO sites, the OPENCTL parameter determines how a file can be accessed remotely. The PQO remote access settings have no meaning for local files. For more information about PQO remote files, see [[PQO: Remote files and scattered groups]].&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===PRIVDEF parameter and file privileges===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The PRIVDEF parameter summarizes the default file privileges that are assigned when a public file is opened, or when a semipublic file is opened without a password or with an invalid password. Privileges can be set to any combination of the following bit settings. These privileges are identical to the privileges that can be specified for an individual file password in the password 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;Bit&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;User can...&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt; X&#039;8000&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Issue file manager privileged commands such as INITIALIZE, SECURE, and DESECURE. The file manager can also reset file parameters, provided that ad hoc update privileges (X&#039;2000&#039;) are obtained. &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt; X&#039;4000&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Override record security; see [[#Record security|Record security]].&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt; X&#039;2000&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Update data with ad hoc requests or host language programs.   &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt; X&#039;1000&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Make changes to internal procedures, that is, procedures defined in the same file as the data, but cannot delete them.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt; X&#039;0800&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Update data using internal procedures. &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt; X&#039;0400&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Retrieve data with ad hoc requests or host language programs.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt; X&#039;0200&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Display, echo, and copy internal procedures.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt; X&#039;0100&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Retrieve data with internal procedures.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt; X&#039;0080&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Update data using external procedures, that is, procedures defined in a different file from the 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; X&#039;0040&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Retrieve data using external procedures.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt; X&#039;0020&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Include internal procedures.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt; X&#039;0010&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Define internal procedures.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt; X&#039;0008&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Delete internal procedures.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt; X&#039;0001&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Access file related parameters. The affected parameters are described in [[ FPARMS and TABLES file parameters#Setting file parameters|Setting file parameters]].&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;
====PRIVDEF default setting====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The default value for the PRIVDEF parameter is X&#039;BFFF&#039;, that is, all privileges except the ability to override record security.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Combining PRIVDEF settings====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Update privileges, for example, update using ad hoc requests, do not imply corresponding retrieval privileges. Thus, a user who has only the ability to update using ad hoc requests (X&#039;2000&#039; bit set) cannot find any records to update. A user must be given both update and retrieval privileges (X&#039;2400&#039;) to update data effectively.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Similarly, privileges for data retrieval using internal procedures (X&#039;0100&#039;) do not imply that the user can include a procedure from the file. The X&#039;0020&#039; privilege is required for this.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If procedure security is desired, you must relate procedure class numbers to the procedures stored in the file. Also, determine the field-level security levels for any fields in the file that are particularly sensitive and need to be protected against unauthorized access. Field and procedure security features are discussed in [[#Field-level security|Field-level security]] and [[#Procedure security|Procedure security]].&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Resetting PRIVDEF or OPENCTL===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When the OPENCTL parameter is reset to X&#039;80&#039; (public), the assigned privileges are those of the current value of the PRIVDEF parameter. This means that if OPENCTL is reset to X&#039;80&#039; while PRIVDEF is set to less than full file manager privileges, you cannot update the file or reset any file parameters. This can also occur if you reset PRIVDEF while OPENCTL is set to X&#039;80&#039;.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
To avoid this problem, use the VIEW PRIVDEF command to ensure that you have appropriate PRIVDEF privileges before you reset OPENCTL to X&#039;80&#039;. Be very careful about resetting PRIVDEF for a public file.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Regaining access====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If you do accidently lock yourself out of a file, you can regain access as follows:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Have the system manager create a permanent private group that contains the locked file.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Have the system manager add a group password (and tell you that password) to the password table, CCASTAT, with the privileges X&#039;BFFF&#039;.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Then, open the private group and issue one of the following commands:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;IN FILE name RESET OPENCTL=X&#039;40&#039;&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;IN FILE name RESET PRIVDEF=X&#039;BFFF&#039;&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
where &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;name&amp;lt;/var&amp;gt; is the name of the locked file. &amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Securing and desecuring a file===&lt;br /&gt;
 &lt;br /&gt;
====Making files secure====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Securing a file ensures that a user cannot access a file illegally by running a &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; program with a different password table. A special key in the password table serves as the key for securing a file. The key can be changed by the system manager with the LOGKEY command. When a secured file is opened, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; compares the key to a copy placed in the file by the SECURE command. The file is opened if the two fields match. If the fields do not match, the user is logged out and an error message is displayed on the operator&#039;s console. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The SECURE command, which can be issued only by a file manager, provides additional file protection by securing the currently open file. This form of the command is issued without arguments:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;SECURE&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Desecuring a file====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
To desecure a previously secured file, issue the command:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;DESECURE&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
For a description of using the SECURE and DESECURE commands with procedures, refer to [[#Procedure security|Procedure security]].     &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
==Group security==&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; group security features allow access to particular file groups to be limited to certain users.The file manager is primarily responsible for group security and for the file security features discussed in the preceding section.    &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Group passwords===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Ordinarily, the file manager determines which groups to protect from unauthorized access, and indicates the passwords and associated privileges for these groups. It is then&lt;br /&gt;
the system manager&#039;s responsibility to add entries for these groups to the password table and recommend group parameter settings. The system manager, however, is the only user authorized to create permanent groups.&lt;br /&gt;
This is done with the CREATE command, as described in [[Storing and using file group definitions (CCAGRP)#Creating file groups|Creating file groups]].&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Opening permanent file groups====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If passwords are required for a permanent file group, only users who know one of the group passwords can open the group. As with file security, the group password determines the types of operations that the user is authorized to perform on the group that is being opened. The privileges associated with the password determine the extent of these operations. Group security operates differently under the Subsystem Management facility. See [[#Subsystem security|Subsystem security]].      &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Opening temporary file groups====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Opening a temporary group is functionally equivalent to opening a series of files. Only the user who creates a temporary group can open it. To open a temporary group, the user must be able to open each file in the group individually.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Group file privileges====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The types of permanent groups are:&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;Semipublic&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Private       &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 types are the same as described in [[#File manager&#039;s responsibilities|File manager&#039;s responsibilities]].&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When a user opens a semipublic or private group, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; requests that the user enter the password. When the group is opened, the user is granted either the privileges associated with the group password or the default privileges for the group, depending on the password supplied. Default privileges are also supplied when a public group is opened.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Group passwords and privileges===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
A permanent group can have several passwords defined for it. Like a file password, a group password can have up to eight characters and cannot contain blanks, commas, or colons. Each password can have a different set of privileges associated with it. These privileges determine what operations can be performed on the group by the user who opens the group with that password. Privileges are expressed as two hexadecimal bytes, as discussed in [[#PRIVDEF parameter and group privileges|PRIVDEF parameter and group privileges]].      &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===PRIVDEF parameter and group privileges===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If a value for PRIVDEF and a PUBLIC, SEMIPUB, or PRIVATE specification is not specified at the time that the group is created, the group is assumed to be a PUBLIC group that has default privileges of X&#039;3FFF&#039;. The PRIVDEF parameter, which summarizes the default privileges for a group, provides all the privileges shown for files, plus the two group privileges summarized here. These privileges are identical to the privileges that can be specified for an individual group password in the password table. The X&#039;8000&#039; privilege has no meaning for groups, although it can be important for individual references to member files. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;tr class=&amp;quot;head&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Bit&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;User can...&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt; X&#039;0004&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Update data through procedures from the procedure 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 align=&amp;quot;right&amp;quot;&amp;gt; X&#039;0002&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Retrieve data through procedures from the procedure file.&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 group is created, one of its member files can be designated as the procedure file. This is the file in which procedures for the group are stored and from which procedures are retrieved or deleted. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
In a group context, &amp;lt;b&amp;gt;internal&amp;lt;/b&amp;gt; means that a file is a member of the group, while &amp;lt;b&amp;gt;external&amp;lt;/b&amp;gt; means that a file is not a member of the group.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Determining file and group privileges===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When a command or a SOUL statement refers to a file or group, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; checks the file and group privileges to ensure that the operation is allowed. &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; must determine whether a file has been opened as an individual file, as a member of a permanent or temporary group, or as both.&amp;lt;/p&amp;gt;&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 [[Files, groups, and reference context#Reference context|reference context]], as shown 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;Referring to...&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;User&#039;s privileges are...&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;Individual file&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Same as 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 privileges are associated with the specified file password or, if no password is required or is incorrectly specified, the default file privileges.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Temporary or ad hoc group&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;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; compares the privileges of all of the member files; only privileges that are common to every file are granted.   &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&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;Same as 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 is opened. These are the privileges associated with the specified group password or, if no password is required or is incorrectly specified, the default group privileges.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td nowrap&amp;gt;Member of a permanent group &amp;lt;br&amp;gt;(&amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;not&amp;lt;/var&amp;gt; opened individually)&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Those granted for the group.&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If the file is opened individually, its privileges remain those granted when the file was individually 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&amp;gt;Two permanent groups &amp;lt;br&amp;gt;(&amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;not&amp;lt;/var&amp;gt; opened as individual files)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;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; combines the privileges of all open groups of which the file is a member. Any privileges specified for any of the groups are granted.&amp;lt;/td&amp;gt;&lt;br /&gt;
&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 open as both an individual and a group&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Privileges associated with the file, not the group. No open group has an 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;
 &lt;br /&gt;
==Record security==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
In addition to protecting an entire file or group from unauthorized access, you can also protect individual records in a file. When record security is in effect for a particular &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; file, each user can be allowed to retrieve and update only records stored in the file with that user&#039;s ID or records that other users have agreed to share. The user does not know that any other records exist. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Record security can be in effect for one or more of the files in a group, but not for the group as a whole. Access to a single record depends on only the record security field defined for the record&#039;s file.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Record security and login security===&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; record security can be considered as an extension to login security and cannot be used unless the login security feature is in effect at an installation. Login security is primarily the system manager&#039;s responsibility, and it is discussed in detail in [[Storing security information (CCASTAT)#Login security|Login security]]. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===File manager responsibilities===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Record security usually is the responsibility of the file manager. To initiate record security, set the &amp;lt;var&amp;gt;[[OPENCTL parameter|OPENCTL]]&amp;lt;/var&amp;gt; parameter in the &amp;lt;var&amp;gt;CREATE&amp;lt;/var&amp;gt; command to indicate that record security is in effect and describe the special record security field in the &amp;lt;var&amp;gt;INITIALIZE&amp;lt;/var&amp;gt; command, which is discussed in [[Initializing files#Initializing record security files|Initializing record security files]]. You can turn off record security by using the appropriate &amp;lt;var&amp;gt;OPENCTL&amp;lt;/var&amp;gt; setting with the &amp;lt;var&amp;gt;RESET&amp;lt;/var&amp;gt; command, but it cannot be turned on by &amp;lt;var&amp;gt;RESET&amp;lt;/var&amp;gt;. The file must be defined to have record security through the &amp;lt;var&amp;gt;CREATE&amp;lt;/var&amp;gt; command.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Setting record security for remote users===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If your site has the Parallel Query Option/204 product, you can control access to remote files with record security using the &amp;lt;var&amp;gt;[[PQOSYS parameter|PQOSYS]]&amp;lt;/var&amp;gt; CCAIN system parameter.&lt;br /&gt;
If set, &amp;lt;var&amp;gt;PQOSYS&amp;lt;/var&amp;gt; creates a special record security key for remote users.&lt;br /&gt;
For more information about &amp;lt;var&amp;gt;PQOSYS&amp;lt;/var&amp;gt;, see [[PQO: Managing files and groups#Record security for remote users: the PQOSYS parameter|Record security for remote users: the PQOSYS parameter]]. &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Storing and retrieving records===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
After a file has been initialized with a record security key, each record stored in the file with a SOUL &amp;lt;var&amp;gt;STORE RECORD&amp;lt;/var&amp;gt; statement automatically has a record security field added to it, whose value is equal to the current user&#039;s login user ID. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Storing record security fields through File Load or the Host Language Interface====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
For records stored with a Host Language Interface &amp;lt;var&amp;gt;IFBREC&amp;lt;/var&amp;gt; or &amp;lt;var&amp;gt;IFSTOR&amp;lt;/var&amp;gt; function or by a file load program, a record security field must be added explicitly, along with other fields, when the record is created. For example, the following file load statement adds a record security field:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;LDC RECSEC=DARCY=&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Refer to [[File Load utility]] for information about the File Load utility. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Only records that have a record security field whose value is equal to the current user&#039;s login user ID are retrieved by a SOUL &amp;lt;var&amp;gt;FIND&amp;lt;/var&amp;gt; statement or Host Language Interface calls that perform a find function. If the &amp;lt;var&amp;gt;FILE LOAD&amp;lt;/var&amp;gt; statement shown here is executed, for example, only a user logged in under the name &amp;lt;code&amp;gt;DARCY&amp;lt;/code&amp;gt; can retrieve these records.   &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Allowing multiple access===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
To share a record with another user, either you or the user can add an explicit occurrence of the record security field with a value equal to the second user&#039;s login user ID. If the second user has update privileges, that user can delete the first value of the record security field, thus making the record accessible only through the second user&#039;s user ID.   &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Multiple access in 1NF files====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
To allow access to record security fields in &amp;lt;var&amp;gt;1NF&amp;lt;/var&amp;gt; files, you must define the record security field as &amp;lt;var&amp;gt;INVISIBLE&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;REPEATABLE&amp;lt;/var&amp;gt;.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Overriding record security===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Occasionally, it may be necessary to override the &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; record security scheme. To override record security, you must have the appropriate record security override privileges at login time: the X&#039;04&#039; bit must be set. When the file is opened, the X&#039;4000&#039; bit must be set. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If both privileges have been granted, you can retrieve all records, regardless of the record security key value associated with them. However, if you store records from User Language at this time, they still have the record security field with the value of your login ID added to them automatically.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If record security was specified for a file in a permanent group, you can override record security for the file if login and group privileges (X&#039;4000&#039;) allow it. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
For further information regarding login security bit settings, see [[Establishing and maintaining security#File security|File security]]. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
==Field-level security==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Field-level security (FLS) provides an additional level of protection for a user&#039;s data by controlling access to the individual fields of a &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; file. It involves a comparison of the user&#039;s predetermined numeric access level for a field with the field&#039;s own predetermined level, for each of four types of access. Field-level security specifications are put into effect only if access to a data record has been allowed by previous file-level and record-level security checks. The following paragraphs describe in detail how field-level security operates. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
In addition to field-level access for each field, each file has a default access level (that is, all fields within the file are automatically assigned access levels).&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The following parameters determine the default field access:&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;This parameter&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Provides this default field access...&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;SELLVL&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;SELECT &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;READLVL&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;READ &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;UPDTLVL&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;UPDATE &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;ADDLVL&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;ADD &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;
Like PRIVDEF, these parameters can be set when a file is created, or they can be reset later. If not explicitly specified, all of these parameters are set to zero, which allows a user to access only unsecured fields (that is, fields with access levels of 0). The same four parameters can be set for a permanent group when it is created by the system manager.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===File manager responsibilities===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The file manager is responsible for determining the desired field-level security scheme and for assigning security levels to fields that are to be protected. The LEVEL option allows you to indicate the security level for the field. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
For example, if the following command is issued, only users who have access levels of 70 or greater are allowed to access the PERFORM field, which might contain an employee&#039;s performance evaluation code:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;DEFINE FIELD PERFORM WITH LEVEL 70&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Types of field access===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
By using the &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; field-level security scheme, you can protect particularly sensitive data fields from unauthorized access. A field can be accessed in several different ways.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Field-level security features limits access to a field to any combination of the following access types: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;tr class=&amp;quot;head&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;This access type&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Allows you 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;SELECT&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Use the field in a SOUL FIND statement or in an IFFIND 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;READ&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Examine the value of a field, for example, in a SOUL PRINT or assignment statement or an IFGET 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;UPDATE&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Change the value of a previously stored occurrence of a field. This type of access can be granted without a corresponding READ access, which precludes updates of the form shown below:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;CHANGE &amp;lt;i&amp;gt;fieldname&amp;lt;/i&amp;gt; = &amp;lt;i&amp;gt;value&amp;lt;/i&amp;gt; TO &amp;lt;i&amp;gt;value&amp;lt;/i&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;ADD&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Add new occurrences of a field, including those added by a STORE RECORD statement. This type of access allows data entry clerks or other personnel to add new field occurrences or records without being able to change existing occurrences, or possibly even to examine them.&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
This type of access can also provide a user with the ability to add occurrences of the record security field without altering existing occurrences.&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;
Field-level security controls only explicit field references. Implicit references, such as retrieving a record security field with a FIND statement or adding a record security key value with STORE RECORD, are not controlled. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Field levels===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Every field definition can have a security level associated with it. Security levels are numbered from 0 to 255. 0 implies no security for the field; 255 implies the highest security. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Field-level security and field ordering====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
In the &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; field-level security scheme, fields can be assigned security levels in a hierarchical fashion. The fields can be ordered in view of the sensitivity of the data that they contain. An example of such an ordering is shown in [[#Field levels|Field levels]], the fields being listed in order of increasing sensitivity.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;caption&amp;gt;Field-level ordering example&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;Field &amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;FLS READ level&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;Last name&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;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;First name&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;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Employee number&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;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;City&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;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;State&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;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Zip code&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;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Street address&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt;20&amp;lt;/td&amp;gt;&lt;br /&gt;
&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 align=&amp;quot;right&amp;quot;&amp;gt;30&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Telephone number&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt;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;Salary&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt;60&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Performance evaluation&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt;70&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;
In [[#Field levels|Field levels]], performance evaluation is considered to be the most sensitive field in the record, followed by salary, and so on. Last name, first name, and employee number have not been assigned field-level security numbers. However, file, record, and procedure security features still can be used to control access to those fields.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===User levels===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Each user has four field-level security access levels associated with each file and group opened. These correspond to the four field access levels defined previously: SELECT, READ, UPDATE, and ADD. User levels also range from 0 to 255.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When a user attempts to access a field in a particular way, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; compares the user&#039;s access level with the level assigned for the field. If the user&#039;s level for the desired type of access, for example, READ, is greater than or equal to the field&#039;s FLS level, the particular type of field access is allowed. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====User-level security example====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
For example, a user who has a READ level of 30 is permitted to print any field that has a READ level between 0 and 30, but cannot print a field that has a higher READ level. Thus, when using the file described above, a user who has a READ level of 30 can print an employee&#039;s position (and all fields that have lower FLS fields), but not the employee&#039;s telephone number, salary, or performance evaluation. An example of a possible set of access levels at an installation is shown below:  &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;caption&amp;gt;User access levels example&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;Employee category&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;SELECT&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;READ&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;UPDATE&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;ADD&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;Data entry clerks&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 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 align=&amp;quot;right&amp;quot;&amp;gt;60&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Personnel department clerks&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt;50&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt;50&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt;40&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;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Personnel department supervisor&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt;70&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt;70&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt;70&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;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Other employees (for example, telephone operators)&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 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;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;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Employee supervisor&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 align=&amp;quot;right&amp;quot;&amp;gt;70&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 align=&amp;quot;right&amp;quot;&amp;gt;70&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 motivations for these assignments easily can be understood in relation to the sample file. Only data entry clerks can add employee records; only supervisors can add performance evaluations; only personnel department supervisors can update salaries, and so on.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Referring to or displaying fields====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When a user&#039;s access levels are lower than permitted for the level of a particular field, a reference to the field is treated as a reference to a nonexistent field. Furthermore, the names of such fields are excluded from the output of the DISPLAY FIELD ALL command. Thus, when using the file shown in [[#User levels|User levels]], only personnel and employee supervisors know that a performance evaluation field even exists in the file. The field is never visible to other users.   &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
=====Limiting access to fields=====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Access to records for particular employees can be controlled in another way. Employee supervisors usually are given a password that allows them to read or add any field in the file. However, procedure- or record-level security can be used to restrict supervisors&#039; access to only the records of their employees.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Determining user access levels===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The access levels assigned for a user are determined when the user opens a file or a group using the&lt;br /&gt;
[[OPEN FILE command]], [[OPEN PERM GROUP command]], or [[OPEN TEMP GROUP command]] or using the &amp;lt;var&amp;gt;[[Files, groups, and reference context#OPEN statement and OPENC statement|OPEN]]&amp;lt;/var&amp;gt; statement.&lt;br /&gt;
Access level assignments are made for various types of files or groups as follows:    &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;If a file or a permanent group is public or semipublic and an incorrect password is specified in the OPEN, the user&#039;s four access levels are taken from the file or group defaults described in [[#Procedure security|Procedure security]]. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;If a private or semipublic file or group is opened with a valid password, the user&#039;s four access levels are the same as those associated with the password. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;If a temporary or ad hoc group is opened, all the member files are opened separately as individual files. Opening these individual files establishes a set of four access levels for each member file.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Access levels for temporary or ad hoc groups====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The four access levels for a temporary or ad hoc group are formed by taking the minimum of each access level across all the member files. Suppose that &amp;lt;code&amp;gt;FILEA&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;FILEB&amp;lt;/code&amp;gt; have the access levels shown 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;File&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;SELECT&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;READ&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;UPDATE&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;ADD&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;FILEA&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt;30&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt;40&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 align=&amp;quot;right&amp;quot;&amp;gt; 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;FILEB&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt;40&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt;30&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 align=&amp;quot;right&amp;quot;&amp;gt;10&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 a temporary group named &amp;lt;code&amp;gt;FILES&amp;lt;/code&amp;gt;, consisting of &amp;lt;code&amp;gt;FILEA&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;FILEB&amp;lt;/code&amp;gt;, is opened, the group is assigned the access levels:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;tr class=&amp;quot;head&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Group &amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt; SELECT&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;READ&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;UPDATE&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;ADD&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;FILES&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt;30&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt;30&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 align=&amp;quot;right&amp;quot;&amp;gt; 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;
&amp;lt;p&amp;gt;&lt;br /&gt;
This is equivalent to the comparison of file privileges that occurs when opening a temporary or ad hoc group; see [[#Group security|Group security]].&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 examples show how your user access levels for a file can change as the reference context changes. In the examples, the four user-access levels, SELECT, READ, UPDATE, and ADD, are represented by their first letters.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
A field reference occurs in single file context, and the file is opened as a single file:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;                    S      R      U      A&lt;br /&gt;
OPEN FILE FILEA     100    100    10     20&lt;br /&gt;
BEGIN&lt;br /&gt;
  FPC NAME=JONES&lt;br /&gt;
END&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The four access levels used in checking field references (100, 100, 10, 20) are those assigned when &amp;lt;code&amp;gt;FILEA&amp;lt;/code&amp;gt; was opened as a single file.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
A field reference occurs in group context:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;                    S      R      U      A&lt;br /&gt;
OPEN FILE GROUPA    50     75     20     0&lt;br /&gt;
BEGIN&lt;br /&gt;
  FPC NAME=JONES&lt;br /&gt;
END&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The four access levels used for checking field references in any file of the group (50, 75, 20, 0) are the four assigned when the group was opened. All the files in a group receive the same four access levels.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
A field reference occurs in single file context, but the file was opened only as a member of one or more permanent groups. &amp;lt;code&amp;gt;FILEA&amp;lt;/code&amp;gt; is a member of the two groups, &amp;lt;code&amp;gt;GROUPA&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;GROUPB&amp;lt;/code&amp;gt;:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;                    S      R      U      A&lt;br /&gt;
CLOSE FILE FILEA&lt;br /&gt;
 OPEN GROUP GROUPA  50     75     20     0&lt;br /&gt;
 OPEN GROUP GROUPB  50     50     0      100&lt;br /&gt;
 BEGIN&lt;br /&gt;
   IN FILEA FPC NAME=JONES&lt;br /&gt;
 END&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The four access levels used in checking field references (50, 75, 20, 100) are formed by taking the maximum level defined for the file by every group containing the file that the user has opened. &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Procedure security==&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; procedure security limits access to a file&#039;s procedures in the following ways:     &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;By allowing you to specify user privileges that control the type of functions that can be performed on the procedures within a file, for example, to display, define, or delete the procedure.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;By limiting access to a procedure to only a particular class of users. This is done by assigning a procedure class number to the procedure that is being secured and a user class to the users allowed to manipulate the procedures. &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 security features are discussed in greater detail in the following sections. In addition, [[#File security|File security]] and [[#Group security|Group security]] discuss the privileges that enable users to access the data in a file or group through procedures.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Accessing procedures===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
At the time a file or group is opened, particular privileges are established that concern the text of the procedures stored in the file or group. These privileges, or access rights, enable a user to manipulate a procedure in any 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;Use the procedure, for example, by specifying it in an INCLUDE command.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Display and copy the procedure. This includes echoing the procedure and using the EDIT command to display or copy it. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Change the procedure, usually with the Editor.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Define a new procedure in the file with the PROCEDURE command or the Editor. &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Delete a procedure by means of the DELETE 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;
For information about the basic procedure functions, see the $Prc* and $Proc* functions in [[List of $functions]]; and for information about procedure related commands, see [[:Category:Commands]].&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Securing procedures===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The privileges established for procedure access discussed in [[#PRIVDEF parameter and file privileges|PRIVDEF parameter and file privileges]] are used to limit the way in which the procedures associated with a file or group can be accessed. &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; provides an additional facility that allows particular procedures to be secured and thus protected from unauthorized access. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===User and procedure classes===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You can limit user access to procedures by assigning user classes that have access to procedures in a particular procedure class.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
User and procedure classes are usually put in place as part of the security scheme for a file or group. Although every user and procedure could have a distinct class number (UCLASS and PCLASS), this approach is too complex and cumbersome for most installations. Thus, sets of procedures and users more often are handled together. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====User classes (UCLASS)====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Examples of typical user classes are:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;All employees in a department&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;All managers, regardless of department&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;All data entry personnel &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Procedure classes (PCLASS)====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Examples of typical procedure classes include procedures that:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Display salary data&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Update personnel records&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Perform general utility operations&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Access sensitive fields in files &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Procedure classes and user classes are arbitrary numbers that range from 1 to 255. Their only significance is in their relationship to each other. The numbers are assigned as described in [[#User and procedure classes|User and procedure classes]].&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When a user opens a file or group, the user is given the privileges and user class determined by the OPEN: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;If the file or group is opened with a password, the user class is obtained from the password table, where it is stored with the privilege bytes and field-level security levels for the password.&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The user class normally is provided by the file manager and entered into the password table by the system manager, as discussed in [[Storing security information (CCASTAT)#Password table maintenance|Password table maintenance]]. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;If the file or group is opened without a password, the user is granted default privileges and a default user class. This default user class is the value of the PRCLDEF system parameter, which has a default value of zero and can be set by the file manager.     &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Relationship between user and procedure classes====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
An access control table (ACT) stored in each file assigns to particular user classes the access rights to particular procedure classes. These mappings from user class to procedure class in the ACT are created using the SECURE command described in [[#SECURE command, definition format|SECURE command, definition format]]. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The user class established for a group applies to all its member files. If a file is opened only as part of a permanent group, any reference to a secured procedure compares the user class specified for the group against the procedure&#039;s class to determine the available access rights. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
=====Example=====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The association of user classes and procedure classes can be explained best by an example: &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Suppose that a user whose user class is 8 includes a procedure named &amp;lt;code&amp;gt;CENTEST&amp;lt;/code&amp;gt;, which has a procedure class of 20. &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; must determine whether users of class 8 are allowed to include procedures of class 20. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; checks the ACT in the file in which &amp;lt;code&amp;gt;CENTEST&amp;lt;/code&amp;gt; is defined and finds that an INCLUDE is permitted, the procedure is included. If, however, INCLUDE is not permitted for users of class 8, the INCLUDE does not take place and an error message is issued. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
This mapping of user and procedure classes is discussed in greater detail in the sections that follow.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Assigning procedure classes====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
A procedure class can be specified for a procedure by the file manager or by an individual user. The class can be assigned:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;By the user when defining the procedure with the PROCEDURE command&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;By the file manager when securing the procedure with the SECURE command   &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
=====User-defined procedure classes=====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When defining a procedure, the user can specify a procedure class number in the following format:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;PROCEDURE &amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;name&amp;lt;/span&amp;gt; PCLASS=&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;n&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;p&amp;gt;&lt;br /&gt;
&amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;n&amp;lt;/var&amp;gt; is any number in the range 1 through 255.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
A user&#039;s access rights to procedures are checked first at the file level and then at the procedure level. Thus, if the user is to be allowed to change a secured procedure, the user must have procedure update file privileges, and the appropriate entry must have been made in the ACT.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
=====File manager-defined procedure classes=====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
File manager-defined procedure classes are discussed in the following sections, in context of the commands that the file manager uses for this purpose.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===SECURE command, definition format===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If you have appropriate file manager privileges, you can use the SECURE command in the following form to:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Secure both files and procedures&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Define privileges for procedures that already have been secured&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Make entries in the access control table&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 is:&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;SECURE [PROCEDURE]&lt;br /&gt;
   NAME=&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;procname&amp;lt;/span&amp;gt; [,&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;procname&amp;lt;/span&amp;gt; ...] PCLASS=&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;pclass&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;procname&amp;lt;/var&amp;gt; is the name of an existing procedure to be secured.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;pclass&amp;lt;/var&amp;gt; is the procedure class number to assign to the procedure(s); the number must be in the range 1 to 255. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The SECURE command must be issued in file context, that is, the current default must be a file, not a group.&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 is a SECURE command used to secure a procedure:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;SECURE PROCEDURE NAME = PAY PCLASS = 7&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
After this command is issued, the procedure PAY is secured with the procedure class number 7. An entry for PCLASS=7 is made in the procedure dictionary. If PAY is currently secured, its old procedure class is changed to the new class.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===SECURE command, mapping format===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The SECURE command lets you map particular access privileges and user classes to particular procedure classes. This command creates entries in the access control table. Issue the following form of the command:&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;SECURE &amp;lt;span class=&amp;quot;squareb&amp;quot;&amp;gt;[&amp;lt;/span&amp;gt;PROCEDURE&amp;lt;span class=&amp;quot;squareb&amp;quot;&amp;gt;]&amp;lt;/span&amp;gt;&lt;br /&gt;
   ACCESS = &amp;lt;span class=&amp;quot;squareb&amp;quot;&amp;gt;{&amp;lt;/span&amp;gt;ALL &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;access&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;access&amp;lt;/span&amp;gt;...&amp;lt;span class=&amp;quot;squareb&amp;quot;&amp;gt;]&amp;lt;/span&amp;gt;) &amp;lt;span class=&amp;quot;squareb&amp;quot;&amp;gt;|&amp;lt;/span&amp;gt; NONE&amp;lt;span class=&amp;quot;squareb&amp;quot;&amp;gt;}&amp;lt;/span&amp;gt;&lt;br /&gt;
   UCLASS = &amp;lt;span class=&amp;quot;squareb&amp;quot;&amp;gt;{&amp;lt;/span&amp;gt;ALL &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;uclass&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;uclass&amp;lt;/span&amp;gt;...&amp;lt;span class=&amp;quot;squareb&amp;quot;&amp;gt;]&amp;lt;/span&amp;gt;)&amp;lt;span class=&amp;quot;squareb&amp;quot;&amp;gt;}&amp;lt;/span&amp;gt;&lt;br /&gt;
   PCLASS = &amp;lt;span class=&amp;quot;squareb&amp;quot;&amp;gt;{&amp;lt;/span&amp;gt;ALL &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;pclass&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;pclass&amp;lt;/span&amp;gt;...&amp;lt;span class=&amp;quot;squareb&amp;quot;&amp;gt;]&amp;lt;/span&amp;gt;)&amp;lt;span class=&amp;quot;squareb&amp;quot;&amp;gt;}&amp;lt;/span&amp;gt;&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;access&amp;lt;/var&amp;gt; is a particular privilege associated with the procedures in the procedure class. It can be 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;Privilege&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Users can...&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;USE &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Include procedures.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;COPY &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Display and edit (copy only) procedures.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;CHANGE &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Edit procedures.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;DEFINE &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Create new procedures (PROCEDURE and EDIT).&amp;lt;/td&amp;gt;&lt;br /&gt;
&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 &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Delete procedures.&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;li&amp;gt;&amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;uclass&amp;lt;/var&amp;gt; is the user class number whose users have access to the procedures in PCLASS; the number must be in the range 1 to 255. Parentheses are optional in the uclass 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;pclass&amp;lt;/var&amp;gt; is the procedure class number to which users in UCLASS have access; the number must be in the range 1 to 255. Parentheses are optional in the pclass definition. &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;
In the following example, only users in the Payroll Department (user class 90) are allowed to use procedures that manipulate salary fields in a file (procedure class 20 and 30):&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;SECURE PROC ACCESS = (USE) UCLASS = 90 PCLASS = 20,30&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The entries in the ACT do not take effect for users that have the file open when the &amp;lt;var&amp;gt;SECURE&amp;lt;/var&amp;gt; command is issued until they reopen the file. This includes the user who issues the command. See [[SECURE PROCEDURE ACCESS command]] for the complete syntax and description of the &amp;lt;var&amp;gt;SECURE&amp;lt;/var&amp;gt; command.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
To complete procedure security implementation, the system manager updates the password table using the &amp;lt;var&amp;gt;LOGCTL&amp;lt;/var&amp;gt; command to assign user classes to the appropriate passwords.   &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Procedure-related commands and required privileges===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The following list is a summary of &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; procedure or procedure-related commands that require particular privileges. All these commands are described in 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.  &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;caption&amp;gt;Privileges for procedure or procedure-related commands&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 colspan=&amp;quot;2&amp;quot;&amp;gt;Required privileges&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;INCLUDE&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;USE&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;EDIT&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;COPY&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;DISPLAY&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;COPY (to display text)&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;DELETE&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;DELETE&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;ASSIGN&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;CHANGE&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;DEASSIGN&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;CHANGE&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;RENAME&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;CHANGE&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 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;New procedure&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Old procedure&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;PROCEDURE&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;DEFINE&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;CHANGE&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;EDIT commands:&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
GO&amp;lt;br&amp;gt;END&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;DEFINE, USE* DEFINE&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;CHANGE, USE* CHANGE&amp;lt;/td&amp;gt;&lt;br /&gt;
&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;/td&amp;gt;&lt;br /&gt;
&amp;lt;td colspan=&amp;quot;2&amp;quot;&amp;gt;*COPY privileges are required in addition to USE to echo text lines of a procedure to a journal.&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;
===Displaying user and procedure classes===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The SECURE command constructs entries in the access control table for any user classes specified in the UCLASS clause. &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 important to display procedure security and save it before reorganizing a file, so that you can reestablish the same security. You might have to upgrade your file manager privileges to include COPY, which is not part of the default privileges of a file manager.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
To determine a user&#039;s access rights for various procedure classes, issue the following form of the DISPLAY command: &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;DISPLAY [PROCEDURE (PRIVILEGES [,NOUSE])&lt;br /&gt;
   [ALL &amp;lt;span class=&amp;quot;squareb&amp;quot;&amp;gt;|&amp;lt;/span&amp;gt; UCLASS = &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;uclass&amp;lt;/var&amp;gt;[,&amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;uclass&amp;lt;/var&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;ALL displays information for all user classes. &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;uclass&amp;lt;/var&amp;gt; displays information only for the specified classes.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;If neither is specified, your current class and privileges are displayed. &lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Privileges are displayed in the following format:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;UCLASS=&amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;u&amp;lt;/var&amp;gt; PCLASS=&amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;pc&amp;lt;/var&amp;gt;,X&#039;&amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;nn&amp;lt;/var&amp;gt;&#039;&lt;br /&gt;
      .&lt;br /&gt;
      .&lt;br /&gt;
      .&lt;br /&gt;
 PCLASS=&amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;pc&amp;lt;/var&amp;gt;,X&#039;&amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;nn&amp;lt;/var&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;u&amp;lt;/var&amp;gt; is the user class.&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;pc&amp;lt;/var&amp;gt; is a procedure class defined for that user class.&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;nn&amp;lt;/var&amp;gt; is a privilege byte constructed from combinations of the following bit settings:&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;tr class=&amp;quot;head&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt; Bit &amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Privilege&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt; X&#039;80&#039; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;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; X&#039;40&#039; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;COPY&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt; X&#039;20&#039; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;CHANGE &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt; X&#039;10&#039; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;DEFINE&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=&amp;quot;right&amp;quot;&amp;gt; X&#039;08&#039; &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;DELETE&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;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;If NOUSE is specified, information is displayed at your terminal even if a USE command preceded the DISPLAY command. The device specified by the USE command is not used but is left open.&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 discussion of other DISPLAY command capabilities in [[ Field display and message broadcast#Overview|Overview]].&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Sample security scheme===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
A simplified example of a security scheme at an installation is presented in this section. At this installation, the following access rules are established:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Most users are allowed to include all secured procedures.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Only programmers in the data processing department are allowed to define procedures. However, they cannot use them. These programmers can have user classes 8 or 9.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Only users in the payroll department are allowed to use procedures that manipulate salary fields in the file. Payroll users are assigned class 90, and the payroll procedures are in procedure classes 20 and 30.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Other users are assigned user classes 25, 30, or 31.&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;Other procedures are in procedure classes 40, 50, 60, or 70. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Sample SECURE commands===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
To create the security scheme in this example, issue the following commands:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;SECURE PROC ACCESS=(CHANGE,DEFINE,DELETE,COPY) UCLASS=8,9 PCLASS=20,30,40,50,60,70&lt;br /&gt;
SECURE PROC ACCESS=(USE) UCLASS=90 PCLASS=20,30&lt;br /&gt;
SECURE PROC ACCESS=(USE) UCLASS=25,30,31,90 -&lt;br /&gt;
  PCLASS=40,50,60,70&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
====Importance of SECURE command order====&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
In this example, the order of the SECURE commands is unimportant. However, the order becomes significant when a UCLASS=ALL or PCLASS=ALL clause is included in the command. UCLASS=ALL affects only user classes already mentioned in the ACT. This might be completely different from the list of user classes that actually can be assigned to users from the password table or default file or group settings.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When PCLASS=ALL is included in the command, no new entries are added to the ACT. Instead, for each user class in the UCLASS list, access rights for each procedure class already mentioned for that user are replaced by the new ACCESS rights. Again, the classes affected in the ACT may be completely different from those actually used for secured procedures in the file. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Changing and adding access privileges===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Suppose, in this sample security, that the payroll users now need to be able to display all the procedures that they use. Also, suppose that a new set of procedures (of class 15) is developed that all users (including the programmers) can include. The following commands are issued in the order shown to modify the ACT entries already built:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;SECURE PROC ACCESS=(USE) UCLASS=ALL PCLASS=15&lt;br /&gt;
SECURE PROC ACCESS=(USE,COPY) UCLASS=90 PCLASS=ALL &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If these commands are reversed, the payroll users cannot display members of the new class of procedures.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Removing procedure security for procedures or user classes===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
To remove the procedure access defined for user class/procedure class pairs, use the DESECURE command:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Remove the security for the procedure involved. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Delete the procedure class number assigned to the procedure in the procedure dictionary by issuing the form of the DESECURE command immediately below. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&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 you do not do this, no one can access the procedure, even though the entry might have been removed from the ACT (see the second form of DESECURE below). &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Only file managers can issue the DESECURE command and it must be issued in file context (that is, the current default must be a file, not a group). &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The format of the DESECURE command is:&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;DESECURE &amp;lt;b&amp;gt;PROC&amp;lt;/b&amp;gt;EDURE {ALL &amp;lt;span class=&amp;quot;squareb&amp;quot;&amp;gt;|&amp;lt;/span&amp;gt; NAME=(&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;procname&amp;lt;/span&amp;gt;[,&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;procname&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;p&amp;gt;&lt;br /&gt;
&amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;procname&amp;lt;/var&amp;gt; is the name of an existing secured procedure.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
To remove particular access privileges for particular procedure classes, use the following form of the DESECURE command to delete entries from the ACT. You must specify either UCLASS or PCLASS, or both.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The format is:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;DESECURE &amp;lt;var&amp;gt;PROC&amp;lt;/var&amp;gt;EDURE&lt;br /&gt;
   {[UCLASS= {ALL &amp;lt;span class=&amp;quot;squareb&amp;quot;&amp;gt;|&amp;lt;/span&amp;gt; (uclass[,uclass...])}] &amp;lt;span class=&amp;quot;squareb&amp;quot;&amp;gt;|&amp;lt;/span&amp;gt;&lt;br /&gt;
    [PCLASS= {ALL &amp;lt;span class=&amp;quot;squareb&amp;quot;&amp;gt;|&amp;lt;/span&amp;gt; (pclass[,pclass...])}]}&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;uclass&amp;lt;/var&amp;gt; is the number of an existing user class whose users have access to the procedure in &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;pclass&amp;lt;/var&amp;gt;; the number must be in the range 1-255. If only UCLASS is specified, all references to the specified user classes are removed from the ACT.&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Parentheses are optional with &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;uclass&amp;lt;/var&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;var class=&amp;quot;term&amp;quot;&amp;gt;pclass&amp;lt;/var&amp;gt; is the number of an existing procedure class to which users in &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;uclass&amp;lt;/var&amp;gt; have access; the number must be in the range 1-255. If only &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;pclass&amp;lt;/var&amp;gt; is specified, all references to the specified procedure classes are removed from the ACT.&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Parentheses are optional with &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;pclass&amp;lt;/var&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;
===Desecuring both UCLASS and PCLASS===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If both UCLASS and PCLASS are specified, the entries for all combinations of the specified user and procedure class pairs are removed from the ACT. For example:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;DESECURE PROC UCLASS=8,9 PCLASS=1,2,3&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
removes access entries for:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;UCLASS 8 and PCLASS 1&lt;br /&gt;
UCLASS 8 and PCLASS 2&lt;br /&gt;
UCLASS 8 and PCLASS 3&lt;br /&gt;
UCLASS 9 and PCLASS 1&lt;br /&gt;
UCLASS 9 and PCLASS 2&lt;br /&gt;
UCLASS 9 and PCLASS 3&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===System manager responsibilities===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The final step in the desecuring process is to have the system manager remove the password(s) with associated uclasses from the password table. If they are not removed, you must remember not to use them when opening the file.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Privileges required===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
You must have file-level privileges of at least X&#039;A000&#039; (file manager and ad hoc data update) to issue SECURE and DESECURE commands. In this case, you actually need update but not retrieve privileges. (Refer to [[#File security|File security]] for a discussion of these privileges.)    &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===File and group references===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When an explicit reference is made to a file with an IN clause and that file is opened only as a member of one or more permanent groups, the file-level privileges to be checked must be obtained from the group privileges, as defined for every group of which the file is a member. If any group&#039;s privileges allow the access in question, then the operation proceeds.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
If the access is to a secured procedure, for every group in which the file is opened and the access is allowed by the group privileges, the user&#039;s user class in that group is used to determine privileges for that procedure&#039;s class. If any group&#039;s user class has the privilege, the operation proceeds.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
See the discussion of reference context in the example on [[#Determining user access levels|Determining user access levels]] and see [[Files, groups, and reference context]] for more information. &amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
==Subsystem security==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When a user enters a subsystem, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; opens and determines privileges for all subsystem files and groups for that user. The files that are opened and the privileges that are assigned are based on a combination of the user&#039;s subsystem user class and the subsystem&#039;s status, both specified by the system manager in the subsystem definition. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The system manager assigns a user to a subsystem user class by entering 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; login user ID in the appropriate subsystem user class. Whenever the user invokes the subsystem, the user is assigned the subsystem command privileges and the file and group privileges of that subsystem user class.   &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The system manager controls access to the subsystem through the subsystem status: public, semipublic, or private. The status determines which user classes can enter a particular subsystem and whether or not users without a user class assignment are permitted entry. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
For more information about subsystems, see [[System requirements for Application Subsystems]].&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Terminal security==&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; terminal security allows access to certain login user IDs, files, or groups to be restricted to users at certain terminals. For example, you might want a particular MEDICAL file to be accessible only through terminals located physically in doctors&#039; offices.     &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The terminal security feature allows a list of terminal numbers to be associated with each login, file, or group password. A terminal number is determined during &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; initialization by the order of the user parameter lines and the way in which they are assigned to specific telecommunications unit numbers in the JCL. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The batch user (User 0) is considered to be terminal 0 (zero). A user at a particular terminal whose number is n can log in to a specific user ID or open a specific file or group only if the terminal number, n, is in the terminal list associated with the password for that user ID, file, or group. If it is not, &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt; responds as though the user had entered an invalid password.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Terminal security is generally used with only hard-wired terminals, that is, terminals on leased lines. If an installation has dialup terminals, the terminal can be connected to a number of similar telecommunications units and user parameter lines. In this case, although the location of the terminal can be fixed, its terminal number can change every time it is dialed up. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The entries in the ACT do not take effect for users that have the file open when the SECURE command is issued until they reopen the file. This includes the user who issues the command. The complete syntax and description of the SECURE command is located in the ry time it is dialed up.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
By controlling the assignment of terminal numbers to physical terminals, the system manager determines the appropriate terminal security scheme. You provide assistance in limiting file and group access through file passwords and privileges, and group passwords and privileges.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;/div&amp;gt; &amp;lt;!-- end of toclimit div --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Model 204 files]]&lt;/div&gt;</summary>
		<author><name>JDamon</name></author>
	</entry>
	<entry>
		<id>https://m204wiki.rocketsoftware.com/index.php?title=HLI:_Model_204_security&amp;diff=120012</id>
		<title>HLI: Model 204 security</title>
		<link rel="alternate" type="text/html" href="https://m204wiki.rocketsoftware.com/index.php?title=HLI:_Model_204_security&amp;diff=120012"/>
		<updated>2023-11-17T18:34:42Z</updated>

		<summary type="html">&lt;p&gt;JDamon: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
==Overview==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
This topic briefly describes Model 204 security for application programmers who are using the Host Language Interface facility. &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
For more information about Model 204 security, see the [[Security interfaces overview]]. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
See also:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;[[Storing security information (CCASTAT)]]&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;[[Establishing and maintaining security]]&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Using Model 204 security==&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Model 204 provides a variety of security features that prevent unauthorized use of IDs, files, groups, records, and fields. When a particular security feature is operational, the corresponding access restrictions apply. &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Login security===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Login security requires you to enter a password when logging in. Only a valid password can gain access to the system. After successfully logging in, you are granted particular privileges. &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
When login security is in effect, specify login information using the following HLI calls:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
For an IFSTRT thread in IFAM1, use the IFLOG call to provide login information, as necessary, where the user authorization is to be validated by a security interface.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
In IFAM2 and IFAM4, specify the login parameter in the IFSTRT call to supply the user ID and password that permit entry to the system. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
For an IFDIAL thread, supply the login information, as necessary, using the IFWRITE call.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
===Multi-factor authentication - MFA===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Support for Multi-factor authentication (MFA) is provided with no updates or parameter changes required to Model 204.  MFA does require that one of the three security interfaces, listed below, be linked into the Model 204 nucleus.  Once a userid is provisioned under MFA, the user acquires a token from a client like IBM Security Verify, installed on the user&#039;s mobile device.  That token is then concatenated, with a password or passphrase, to logon to Model 204.  For example: token:password or token:passphrase, where colon (:) is the concatenating character.  That string is passed, unmodified, to the security interface for verification.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;ACF2&lt;br /&gt;
&amp;lt;li&amp;gt;RACF&lt;br /&gt;
&amp;lt;li&amp;gt;TopSecret&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===File security===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
File security requires you to specify a legal password in the IFOPEN call. After you successfully open the file, Model 204 grants you particular file privileges, a user class number, and field security levels. &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Group security===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Group security requires you to specify a legal password in the IFOPEN for the file group. &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Record security===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Record security limits access to records by allowing you to retrieve and update only records that you have stored in the file or that users can share.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Field-level security===&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Field-level security protects fields in a file. Field access levels are assigned when you open a file or group. Specify the security level associated with a field in the IFDFLD call. &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Terminal security===&lt;br /&gt;
&amp;lt;p&amp;gt;Terminal security allows particular login user IDs and particular files and file groups to be accessed only from specific Model 204 threads.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
{{Template: HLI programming topic list}}&lt;br /&gt;
&lt;br /&gt;
[[Category: Host Language Interface]]&lt;/div&gt;</summary>
		<author><name>JDamon</name></author>
	</entry>
	<entry>
		<id>https://m204wiki.rocketsoftware.com/index.php?title=MONITOR_command:_SERVSIZE,_LSERVER_and_server_number&amp;diff=120011</id>
		<title>MONITOR command: SERVSIZE, LSERVER and server number</title>
		<link rel="alternate" type="text/html" href="https://m204wiki.rocketsoftware.com/index.php?title=MONITOR_command:_SERVSIZE,_LSERVER_and_server_number&amp;diff=120011"/>
		<updated>2023-11-16T19:52:56Z</updated>

		<summary type="html">&lt;p&gt;JDamon: &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;System administrator&lt;br /&gt;
&amp;lt;dt&amp;gt;Function&lt;br /&gt;
&amp;lt;dd&amp;gt;Displays information regarding servers defined to the Online. &amp;lt;var&amp;gt;TSRVSIZE&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;SIZREQD&amp;lt;/var&amp;gt; are displayed for each server defined, and if the server is currently occupied by a user, standard user information is also provided. &lt;br /&gt;
&amp;lt;/dl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;&#039;&#039;&#039;TSRVSIZE&#039;&#039;&#039; - is the total server size defined using &amp;lt;var&amp;gt;[[SERVSIZE_parameter|SERVSIZE]]&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;[[SERVGSZ_parameter|SERVGSZ]]&amp;lt;/var&amp;gt;, and &amp;lt;var&amp;gt;[[SERVNSSZ_parameter|SERVNSSZ]]&amp;lt;/var&amp;gt;.&lt;br /&gt;
&#039;&#039;&#039;SIZREQD&#039;&#039;&#039;  - is the total server size required using the viewable parameters &amp;lt;var&amp;gt;[[LSERVER_parameter|LSERVER]]&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;[[LSERVERN_parameter|LSERVERN]]&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;[[LSERVERG_parameter|LSERVERG]]&amp;lt;/var&amp;gt;.  Those parameters, &lt;br /&gt;
           in turn, are determined by the size of each of the server tables - LSTBL, LNTBL, LQTBL, LVTBL, etc. and whether&lt;br /&gt;
           they area allocated below-the-bar, above-the-bar or in the non-swappable, above-the-bar area.&lt;br /&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;&amp;lt;b&amp;gt;M&amp;lt;/b&amp;gt;ONITOR (&amp;lt;i&amp;gt;s1, s2, s3&amp;lt;/i&amp;gt;...) SERV [SL] [CHKP | SUBTRAN] [USERLIST] [ACTIVE|ACTV]&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&amp;gt; &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;&amp;lt;var&amp;gt;SERV&amp;lt;/var&amp;gt;&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Display information regarding all servers defined to the Online.&amp;lt;/td&amp;gt;&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 nowrap&amp;gt;&amp;lt;var&amp;gt;(&amp;lt;i&amp;gt;s1&amp;lt;/i&amp;gt;, &amp;lt;i&amp;gt;s2&amp;lt;/i&amp;gt;, &amp;lt;i&amp;gt;s3&amp;lt;/i&amp;gt;...) SERV&amp;lt;/var&amp;gt;&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Display information for only the named servers defined to the Online.&amp;lt;/td&amp;gt;&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;&amp;lt;var&amp;gt;SL&amp;lt;/var&amp;gt;&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Display the since-last statistics.&amp;lt;/td&amp;gt;&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;&amp;lt;var&amp;gt;CHKP | SUBTRAN&amp;lt;/var&amp;gt;&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Display information regarding transaction checkpoints (CHKP) or both transaction and sub-transaction checkpoints (SUBTRAN). See [[MONITOR command: Checkpoints-transaction and sub-transaction|MONITOR: Checkpoints-transaction and sub-transaction]] for more details and examples.&amp;lt;/td&amp;gt;&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;&amp;lt;var&amp;gt;USERLIST&amp;lt;/var&amp;gt;&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Display the basic user line for every user who inhibits checkpoints.&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;&amp;lt;var&amp;gt;ACTIVE | ACTV&amp;lt;/var&amp;gt;&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Display only the Online servers that have active users. &lt;br /&gt;
An active user is one who is executing a command or running a request and that command or request has not yet completed. Such a user is &amp;lt;i&amp;gt;not&amp;lt;/i&amp;gt; OFFI (OFF queue, invisible, blocked In) or OFFO (OFF queue, invisible, blocked Out) as shown by &amp;lt;code&amp;gt;[[MONITOR command|MONITOR ACTIVE]]&amp;lt;/code&amp;gt;.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Usage notes==&lt;br /&gt;
The following syntax is supported: &lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;MONITOR SERV&lt;br /&gt;
MONITOR SERV SL&lt;br /&gt;
MONITOR (s1,s2,s3...) &lt;br /&gt;
MONITOR CHKP USERLIST SERV&lt;br /&gt;
MONITOR SUBTRAN USERLIST SERV SL&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Example==&lt;br /&gt;
Only servers, in order by definition, are reported. If &amp;lt;code&amp;gt;NSERVS=20&amp;lt;/code&amp;gt;, only twenty lines of output are produced. If any server is occupied by a user, standard user information is also provided: &lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;USER SVR USERID    TSRVSIZE SIZREQD FUNC CNCT    CPU  SEQIO QUE  WT FLGS&lt;br /&gt;
       1             111000   77400                         WTUS&lt;br /&gt;
       2             222000  117000                         WTUS&lt;br /&gt;
   5   3 CCAD01      128800   28792 EVAL  320  0.308     25 REDY&lt;br /&gt;
   1   4 CCAD02      777000   97296 DISP    1  0.000      8 BLKI  3  60&lt;br /&gt;
       5              85000   85000                         WTUS&lt;br /&gt;
   6   6 SUPERKLUGE  666000  117000        25  0.021   3814 RUNG&lt;br /&gt;
   9   7 CCAB08      777000  747000 EVAL    0  0.202      3 BLKI 24  68&lt;br /&gt;
   8   8 USER01      840000   47016 EDIT   94  0.003     81 BLKI 3 66&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
This display shows all servers (&amp;lt;code&amp;gt;NSERVS=8&amp;lt;/code&amp;gt;), in order by definition, defined to this Online. Included on each line are the &amp;lt;var&amp;gt;SERVSIZE&amp;lt;/var&amp;gt; for each server and the current number of bytes in use (&amp;lt;var&amp;gt;LSERVER&amp;lt;/var&amp;gt;). Three servers, 1, 2, and 5, are waiting for user WTUS.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category: System administrator commands]]&lt;br /&gt;
[[Category:Commands]]&lt;/div&gt;</summary>
		<author><name>JDamon</name></author>
	</entry>
	<entry>
		<id>https://m204wiki.rocketsoftware.com/index.php?title=MONITOR_command:_SERVSIZE,_LSERVER_and_server_number&amp;diff=120010</id>
		<title>MONITOR command: SERVSIZE, LSERVER and server number</title>
		<link rel="alternate" type="text/html" href="https://m204wiki.rocketsoftware.com/index.php?title=MONITOR_command:_SERVSIZE,_LSERVER_and_server_number&amp;diff=120010"/>
		<updated>2023-11-16T00:04:07Z</updated>

		<summary type="html">&lt;p&gt;JDamon: &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;System administrator&lt;br /&gt;
&amp;lt;dt&amp;gt;Function&lt;br /&gt;
&amp;lt;dd&amp;gt;Displays information regarding servers defined to the Online. &amp;lt;var&amp;gt;TSRVSIZE&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;SIZREQD&amp;lt;/var&amp;gt; are displayed for each server defined, and if the server is currently occupied by a user, standard user information is also provided. &lt;br /&gt;
&amp;lt;/dl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;TSRVSIZE - is the total server size defined using &amp;lt;var&amp;gt;[[SERVSIZE_parameter|SERVSIZE]]&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;[[SERVGSZ_parameter|SERVGSZ]]&amp;lt;/var&amp;gt;, and &amp;lt;var&amp;gt;[[SERVNSSZ_parameter|SERVNSSZ]]&amp;lt;/var&amp;gt;.&lt;br /&gt;
SIZREQD  - is the total server size required using the viewable parameters &amp;lt;var&amp;gt;[[LSERVER_parameter|LSERVER]]&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;[[LSERVERN_parameter|LSERVERN]]&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;[[LSERVERG_parameter|LSERVERG]]&amp;lt;/var&amp;gt;.  Those parameters, &lt;br /&gt;
           in turn, are determined by the size of each of the server tables - LSTBL, LNTBL, LQTBL, LVTBL, etc. and whether&lt;br /&gt;
           they area allocated below-the-bar, above-the-bar or in the non-swappable, above-the-bar area.&lt;br /&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;&amp;lt;b&amp;gt;M&amp;lt;/b&amp;gt;ONITOR (&amp;lt;i&amp;gt;s1, s2, s3&amp;lt;/i&amp;gt;...) SERV [SL] [CHKP | SUBTRAN] [USERLIST] [ACTIVE|ACTV]&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&amp;gt; &lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;&amp;lt;var&amp;gt;SERV&amp;lt;/var&amp;gt;&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Display information regarding all servers defined to the Online.&amp;lt;/td&amp;gt;&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 nowrap&amp;gt;&amp;lt;var&amp;gt;(&amp;lt;i&amp;gt;s1&amp;lt;/i&amp;gt;, &amp;lt;i&amp;gt;s2&amp;lt;/i&amp;gt;, &amp;lt;i&amp;gt;s3&amp;lt;/i&amp;gt;...) SERV&amp;lt;/var&amp;gt;&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Display information for only the named servers defined to the Online.&amp;lt;/td&amp;gt;&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;&amp;lt;var&amp;gt;SL&amp;lt;/var&amp;gt;&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Display the since-last statistics.&amp;lt;/td&amp;gt;&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;&amp;lt;var&amp;gt;CHKP | SUBTRAN&amp;lt;/var&amp;gt;&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Display information regarding transaction checkpoints (CHKP) or both transaction and sub-transaction checkpoints (SUBTRAN). See [[MONITOR command: Checkpoints-transaction and sub-transaction|MONITOR: Checkpoints-transaction and sub-transaction]] for more details and examples.&amp;lt;/td&amp;gt;&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;&amp;lt;var&amp;gt;USERLIST&amp;lt;/var&amp;gt;&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Display the basic user line for every user who inhibits checkpoints.&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;&amp;lt;var&amp;gt;ACTIVE | ACTV&amp;lt;/var&amp;gt;&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Display only the Online servers that have active users. &lt;br /&gt;
An active user is one who is executing a command or running a request and that command or request has not yet completed. Such a user is &amp;lt;i&amp;gt;not&amp;lt;/i&amp;gt; OFFI (OFF queue, invisible, blocked In) or OFFO (OFF queue, invisible, blocked Out) as shown by &amp;lt;code&amp;gt;[[MONITOR command|MONITOR ACTIVE]]&amp;lt;/code&amp;gt;.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Usage notes==&lt;br /&gt;
The following syntax is supported: &lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;MONITOR SERV&lt;br /&gt;
MONITOR SERV SL&lt;br /&gt;
MONITOR (s1,s2,s3...) &lt;br /&gt;
MONITOR CHKP USERLIST SERV&lt;br /&gt;
MONITOR SUBTRAN USERLIST SERV SL&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Example==&lt;br /&gt;
Only servers, in order by definition, are reported. If &amp;lt;code&amp;gt;NSERVS=20&amp;lt;/code&amp;gt;, only twenty lines of output are produced. If any server is occupied by a user, standard user information is also provided: &lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;USER SVR USERID    TSRVSIZE SIZREQD FUNC CNCT    CPU  SEQIO QUE  WT FLGS&lt;br /&gt;
       1             111000   77400                         WTUS&lt;br /&gt;
       2             222000  117000                         WTUS&lt;br /&gt;
   5   3 CCAD01      128800   28792 EVAL  320  0.308     25 REDY&lt;br /&gt;
   1   4 CCAD02      777000   97296 DISP    1  0.000      8 BLKI  3  60&lt;br /&gt;
       5              85000   85000                         WTUS&lt;br /&gt;
   6   6 SUPERKLUGE  666000  117000        25  0.021   3814 RUNG&lt;br /&gt;
   9   7 CCAB08      777000  747000 EVAL    0  0.202      3 BLKI 24  68&lt;br /&gt;
   8   8 USER01      840000   47016 EDIT   94  0.003     81 BLKI 3 66&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
This display shows all servers (&amp;lt;code&amp;gt;NSERVS=8&amp;lt;/code&amp;gt;), in order by definition, defined to this Online. Included on each line are the &amp;lt;var&amp;gt;SERVSIZE&amp;lt;/var&amp;gt; for each server and the current number of bytes in use (&amp;lt;var&amp;gt;LSERVER&amp;lt;/var&amp;gt;). Three servers, 1, 2, and 5, are waiting for user WTUS.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category: System administrator commands]]&lt;br /&gt;
[[Category:Commands]]&lt;/div&gt;</summary>
		<author><name>JDamon</name></author>
	</entry>
</feed>