<?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-07-06T00:41:22Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.43.1</generator>
	<entry>
		<id>https://m204wiki.rocketsoftware.com/index.php?title=DISPLAY_DSNAMES_command&amp;diff=120942</id>
		<title>DISPLAY DSNAMES command</title>
		<link rel="alternate" type="text/html" href="https://m204wiki.rocketsoftware.com/index.php?title=DISPLAY_DSNAMES_command&amp;diff=120942"/>
		<updated>2026-07-02T21:16:56Z</updated>

		<summary type="html">&lt;p&gt;JDamon: /* Example 2 */&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;Displays DSNAME, VOLSER, DSORG, RECFM, BLKSIZE, LRECL UNITS (space), PRIMARY (space) for each DDNAME selected.  &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;&amp;lt;b&amp;gt;D&amp;lt;/b&amp;gt;ISPLAY DSNAMES [&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;pattern&amp;lt;/span&amp;gt;] or&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;&amp;lt;b&amp;gt;D&amp;lt;/b&amp;gt; DSN [&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;pattern&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;var class=&amp;quot;term&amp;quot;&amp;gt;pattern&amp;lt;/var&amp;gt; is a simple pattern that limits the number of DDNAMES displayed. A simple pattern is a character string with no wildcard or special characters. Any DDNAME whose first characters match the pattern is displayed.&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;&amp;lt;var&amp;gt;DISPLAY DSNAMES&amp;lt;/var&amp;gt; is available as of version 8.0 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;li&amp;gt;&amp;lt;var&amp;gt;DISPLAY DSNAMES&amp;lt;/var&amp;gt; is not supported under VSE or CMS. &lt;br /&gt;
&amp;lt;li&amp;gt;Space information is displayed only for Model 204 files and only those that are open.  The space value displayed is for the entire Model 204 file only.  If the file is a multi-dataset file, each dataset is listed but not the space allocated to each dataset - only the space allocated to the entire Model 204 file across all datasets.  If the Model 204 file is a single dataset file, then the space listed will be the space allocated to that single dataset but will appear only on the line that represents the entire Model 204 file. &lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Example 1==&lt;br /&gt;
&amp;lt;p class=&amp;quot;output&amp;quot;&amp;gt;26.182  JUL 01  19.00.34.72     PAGE 20  &lt;br /&gt;
DISPLAY DSNAMES &lt;br /&gt;
JOBNAME=ROCKM80T, STEPNAME=V800TEST  &lt;br /&gt;
&lt;br /&gt;
DDNAME    DSNAME                                        VOLSER DSORG RECFM BLKSIZE LRECL UNITS PRIMARY &lt;br /&gt;
CCAJRNL   ROCKET1.V800.CCAJRNL.M204                     M2P102 PS    U        6749  6749              &lt;br /&gt;
CHKPOINT  ROCKET1.V800.CHKPOINT.M204                    M2P100 PS    F        6184  6184              &lt;br /&gt;
CCAPRINT  ROCKET1.ROCKM80T.J0353345.D0000103.?                 PS    VBA         ?   137              &lt;br /&gt;
CCAAUDIT  ROCKET1.ROCKM80T.J0353345.D0000104.?                 PS    VBA         ?   137              &lt;br /&gt;
CCASNAP   ROCKET1.ROCKM80T.J0353345.D0000105.?                 ?     ?           ?     ?              &lt;br /&gt;
SYSUDUMP  ROCKET1.ROCKM80T.J0353345.D0000106.?                 ?     ?           ?     ?              &lt;br /&gt;
SYSMDUMP  ROCKET1.CCAMDMP0.M204                         M2P103 ?     ?           ?     ?              &lt;br /&gt;
CCASYS                                                                                   CYL         2&lt;br /&gt;
CCASYS    ROCKET1.CCASYS.M204                           M2P103 PS    U        6184  6184              &lt;br /&gt;
CCAGRP                                                                                   CYL         1&lt;br /&gt;
CCAGRP    ROCKET1.CCAGRP.M204                           M2P102 PS    U        6184  6184              &lt;br /&gt;
DSNLIST                                                                                  BLK     20008&lt;br /&gt;
DSNLIST   ROCKET1.DSNLIST.M204                          M2P103 PS    U        6184  6184              &lt;br /&gt;
DSN1MEG                                                                                  TRK      6500&lt;br /&gt;
DSN1MEG   ROCKET1.DSN1MEG.M204                          M2P104 PS    U        6184  6184              &lt;br /&gt;
DSN1OF3   ROCKET1.DSN1MEG.ONEOF3.M204                   M2P104 PS    U        6184  6184              &lt;br /&gt;
DSN2OF3   ROCKET1.DSN1MEG.TWOOF3.M204                   M2P104 PS    U        6184  6184              &lt;br /&gt;
DSN3OF3   ROCKET1.DSN1MEG.THREEOF3.M204                 M2P104 PS    U        6184  6184&lt;br /&gt;
&lt;br /&gt;
==Example 2==&lt;br /&gt;
&amp;lt;p class=&amp;quot;output&amp;quot;&amp;gt;26.182  JUL 01  19.16.58.63     PAGE 31                                                                &lt;br /&gt;
D DSN CCA                                                                                              &lt;br /&gt;
JOBNAME=ROCKM80T, STEPNAME=V800TEST                                                                    &lt;br /&gt;
                                                                                                       &lt;br /&gt;
DDNAME    DSNAME                                        VOLSER DSORG RECFM BLKSIZE LRECL UNITS PRIMARY &lt;br /&gt;
CCAJRNL   ROCKET1.V800.CCAJRNL.M204                     M2P102 PS    U        6749  6749              &lt;br /&gt;
CCAPRINT  ROCKET1.ROCKM80T.J0353345.D0000103.?                 PS    VBA         ?   137              &lt;br /&gt;
CCAAUDIT  ROCKET1.ROCKM80T.J0353345.D0000104.?                 PS    VBA         ?   137              &lt;br /&gt;
CCASNAP   ROCKET1.ROCKM80T.J0353345.D0000105.?                 ?     ?           ?     ?              &lt;br /&gt;
CCASYS                                                                                   CYL         2&lt;br /&gt;
CCASYS    ROCKET1.CCASYS.M204                           M2P103 PS    U        6184  6184              &lt;br /&gt;
CCAGRP                                                                                   CYL         1&lt;br /&gt;
CCAGRP    ROCKET1.CCAGRP.M204                           M2P102 PS    U        6184  6184              &lt;br /&gt;
CCASTAT   ROCKET1.CCASTAT.M204                          M2P103 PS    U       13030 13030              &lt;br /&gt;
CCAIN     ROCKET1.ROCKM80T.J0353345.D0000102.?                 ?     FB         80    80              &lt;br /&gt;
&lt;br /&gt;
[[Category:System manager commands]]&lt;/div&gt;</summary>
		<author><name>JDamon</name></author>
	</entry>
	<entry>
		<id>https://m204wiki.rocketsoftware.com/index.php?title=DISPLAY_DSNAMES_command&amp;diff=120941</id>
		<title>DISPLAY DSNAMES command</title>
		<link rel="alternate" type="text/html" href="https://m204wiki.rocketsoftware.com/index.php?title=DISPLAY_DSNAMES_command&amp;diff=120941"/>
		<updated>2026-07-02T21:14:56Z</updated>

		<summary type="html">&lt;p&gt;JDamon: /* Example 1 */&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;Displays DSNAME, VOLSER, DSORG, RECFM, BLKSIZE, LRECL UNITS (space), PRIMARY (space) for each DDNAME selected.  &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;&amp;lt;b&amp;gt;D&amp;lt;/b&amp;gt;ISPLAY DSNAMES [&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;pattern&amp;lt;/span&amp;gt;] or&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;&amp;lt;b&amp;gt;D&amp;lt;/b&amp;gt; DSN [&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;pattern&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;var class=&amp;quot;term&amp;quot;&amp;gt;pattern&amp;lt;/var&amp;gt; is a simple pattern that limits the number of DDNAMES displayed. A simple pattern is a character string with no wildcard or special characters. Any DDNAME whose first characters match the pattern is displayed.&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;&amp;lt;var&amp;gt;DISPLAY DSNAMES&amp;lt;/var&amp;gt; is available as of version 8.0 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;li&amp;gt;&amp;lt;var&amp;gt;DISPLAY DSNAMES&amp;lt;/var&amp;gt; is not supported under VSE or CMS. &lt;br /&gt;
&amp;lt;li&amp;gt;Space information is displayed only for Model 204 files and only those that are open.  The space value displayed is for the entire Model 204 file only.  If the file is a multi-dataset file, each dataset is listed but not the space allocated to each dataset - only the space allocated to the entire Model 204 file across all datasets.  If the Model 204 file is a single dataset file, then the space listed will be the space allocated to that single dataset but will appear only on the line that represents the entire Model 204 file. &lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Example 1==&lt;br /&gt;
&amp;lt;p class=&amp;quot;output&amp;quot;&amp;gt;26.182  JUL 01  19.00.34.72     PAGE 20  &lt;br /&gt;
DISPLAY DSNAMES &lt;br /&gt;
JOBNAME=ROCKM80T, STEPNAME=V800TEST  &lt;br /&gt;
&lt;br /&gt;
DDNAME    DSNAME                                        VOLSER DSORG RECFM BLKSIZE LRECL UNITS PRIMARY &lt;br /&gt;
CCAJRNL   ROCKET1.V800.CCAJRNL.M204                     M2P102 PS    U        6749  6749              &lt;br /&gt;
CHKPOINT  ROCKET1.V800.CHKPOINT.M204                    M2P100 PS    F        6184  6184              &lt;br /&gt;
CCAPRINT  ROCKET1.ROCKM80T.J0353345.D0000103.?                 PS    VBA         ?   137              &lt;br /&gt;
CCAAUDIT  ROCKET1.ROCKM80T.J0353345.D0000104.?                 PS    VBA         ?   137              &lt;br /&gt;
CCASNAP   ROCKET1.ROCKM80T.J0353345.D0000105.?                 ?     ?           ?     ?              &lt;br /&gt;
SYSUDUMP  ROCKET1.ROCKM80T.J0353345.D0000106.?                 ?     ?           ?     ?              &lt;br /&gt;
SYSMDUMP  ROCKET1.CCAMDMP0.M204                         M2P103 ?     ?           ?     ?              &lt;br /&gt;
CCASYS                                                                                   CYL         2&lt;br /&gt;
CCASYS    ROCKET1.CCASYS.M204                           M2P103 PS    U        6184  6184              &lt;br /&gt;
CCAGRP                                                                                   CYL         1&lt;br /&gt;
CCAGRP    ROCKET1.CCAGRP.M204                           M2P102 PS    U        6184  6184              &lt;br /&gt;
DSNLIST                                                                                  BLK     20008&lt;br /&gt;
DSNLIST   ROCKET1.DSNLIST.M204                          M2P103 PS    U        6184  6184              &lt;br /&gt;
DSN1MEG                                                                                  TRK      6500&lt;br /&gt;
DSN1MEG   ROCKET1.DSN1MEG.M204                          M2P104 PS    U        6184  6184              &lt;br /&gt;
DSN1OF3   ROCKET1.DSN1MEG.ONEOF3.M204                   M2P104 PS    U        6184  6184              &lt;br /&gt;
DSN2OF3   ROCKET1.DSN1MEG.TWOOF3.M204                   M2P104 PS    U        6184  6184              &lt;br /&gt;
DSN3OF3   ROCKET1.DSN1MEG.THREEOF3.M204                 M2P104 PS    U        6184  6184&lt;br /&gt;
&lt;br /&gt;
==Example 2==&lt;br /&gt;
&amp;lt;p class=&amp;quot;output&amp;quot;&amp;gt;26.182  JUL 01  19.16.58.63     PAGE 31                                                                &lt;br /&gt;
D DSN CCA                                                                                              &lt;br /&gt;
JOBNAME=PSDAM80T, STEPNAME=V800TEST                                                                    &lt;br /&gt;
                                                                                                       &lt;br /&gt;
DDNAME    DSNAME                                        VOLSER DSORG RECFM BLKSIZE LRECL UNITS PRIMARY &lt;br /&gt;
CCAJRNL   PSDAMON.V800.CCAJRNL.M204                     M2P102 PS    U        6749  6749               &lt;br /&gt;
CCAPRINT  PSDAMON.PSDAM80T.J0353345.D0000103.?                 PS    VBA         ?   137               &lt;br /&gt;
CCAAUDIT  PSDAMON.PSDAM80T.J0353345.D0000104.?                 PS    VBA         ?   137               &lt;br /&gt;
CCASNAP   PSDAMON.PSDAM80T.J0353345.D0000105.?                 ?     ?           ?     ?               &lt;br /&gt;
CCASYS                                                                                   CYL         2 &lt;br /&gt;
CCASYS    PSDAMON.CCASYS.M204                           M2P103 PS    U        6184  6184               &lt;br /&gt;
CCAGRP                                                                                   CYL         1 &lt;br /&gt;
CCAGRP    PSDAMON.CCAGRP.M204                           M2P102 PS    U        6184  6184               &lt;br /&gt;
CCASTAT   PSDAMON.CCASTAT.M204                          M2P103 PS    U       13030 13030               &lt;br /&gt;
CCAIN     PSDAMON.PSDAM80T.J0353345.D0000102.?                 ?     FB         80    80                         &lt;br /&gt;
&lt;br /&gt;
[[Category:System manager commands]]&lt;/div&gt;</summary>
		<author><name>JDamon</name></author>
	</entry>
	<entry>
		<id>https://m204wiki.rocketsoftware.com/index.php?title=DISPLAY_DSNAMES_command&amp;diff=120940</id>
		<title>DISPLAY DSNAMES command</title>
		<link rel="alternate" type="text/html" href="https://m204wiki.rocketsoftware.com/index.php?title=DISPLAY_DSNAMES_command&amp;diff=120940"/>
		<updated>2026-07-01T23:24:08Z</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;Displays DSNAME, VOLSER, DSORG, RECFM, BLKSIZE, LRECL UNITS (space), PRIMARY (space) for each DDNAME selected.  &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;&amp;lt;b&amp;gt;D&amp;lt;/b&amp;gt;ISPLAY DSNAMES [&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;pattern&amp;lt;/span&amp;gt;] or&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;&amp;lt;b&amp;gt;D&amp;lt;/b&amp;gt; DSN [&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;pattern&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;var class=&amp;quot;term&amp;quot;&amp;gt;pattern&amp;lt;/var&amp;gt; is a simple pattern that limits the number of DDNAMES displayed. A simple pattern is a character string with no wildcard or special characters. Any DDNAME whose first characters match the pattern is displayed.&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;&amp;lt;var&amp;gt;DISPLAY DSNAMES&amp;lt;/var&amp;gt; is available as of version 8.0 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;li&amp;gt;&amp;lt;var&amp;gt;DISPLAY DSNAMES&amp;lt;/var&amp;gt; is not supported under VSE or CMS. &lt;br /&gt;
&amp;lt;li&amp;gt;Space information is displayed only for Model 204 files and only those that are open.  The space value displayed is for the entire Model 204 file only.  If the file is a multi-dataset file, each dataset is listed but not the space allocated to each dataset - only the space allocated to the entire Model 204 file across all datasets.  If the Model 204 file is a single dataset file, then the space listed will be the space allocated to that single dataset but will appear only on the line that represents the entire Model 204 file. &lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Example 1==&lt;br /&gt;
&amp;lt;p class=&amp;quot;output&amp;quot;&amp;gt;26.182  JUL 01  19.00.34.72     PAGE 20  &lt;br /&gt;
DISPLAY DSNAMES &lt;br /&gt;
JOBNAME=PSDAM80T, STEPNAME=V800TEST  &lt;br /&gt;
&lt;br /&gt;
DDNAME    DSNAME                                        VOLSER DSORG RECFM BLKSIZE LRECL UNITS PRIMARY &lt;br /&gt;
CCAJRNL   PSDAMON.V800.CCAJRNL.M204                     M2P102 PS    U        6749  6749              &lt;br /&gt;
CHKPOINT  PSDAMON.V800.CHKPOINT.M204                    M2P100 PS    F        6184  6184              &lt;br /&gt;
CCAPRINT  PSDAMON.PSDAM80T.J0353345.D0000103.?                 PS    VBA         ?   137              &lt;br /&gt;
CCAAUDIT  PSDAMON.PSDAM80T.J0353345.D0000104.?                 PS    VBA         ?   137              &lt;br /&gt;
CCASNAP   PSDAMON.PSDAM80T.J0353345.D0000105.?                 ?     ?           ?     ?              &lt;br /&gt;
SYSUDUMP  PSDAMON.PSDAM80T.J0353345.D0000106.?                 ?     ?           ?     ?              &lt;br /&gt;
SYSMDUMP  PSDAMON.CCAMDMP0.M204                         M2P103 ?     ?           ?     ?              &lt;br /&gt;
CCASYS                                                                                   CYL         2&lt;br /&gt;
CCASYS    PSDAMON.CCASYS.M204                           M2P103 PS    U        6184  6184              &lt;br /&gt;
CCAGRP                                                                                   CYL         1&lt;br /&gt;
CCAGRP    PSDAMON.CCAGRP.M204                           M2P102 PS    U        6184  6184              &lt;br /&gt;
DSNLIST                                                                                  BLK     20008 &lt;br /&gt;
DSNLIST   PSDAMON.DSNLIST.M204                          M2P103 PS    U        6184  6184               &lt;br /&gt;
DSN1MEG                                                                                  TRK      6500 &lt;br /&gt;
DSN1MEG   PSDAMON.DSN1MEG.M204                          M2P104 PS    U        6184  6184               &lt;br /&gt;
DSN1OF3   PSDAMON.DSN1MEG.ONEOF3.M204                   M2P104 PS    U        6184  6184               &lt;br /&gt;
DSN2OF3   PSDAMON.DSN1MEG.TWOOF3.M204                   M2P104 PS    U        6184  6184               &lt;br /&gt;
DSN3OF3   PSDAMON.DSN1MEG.THREEOF3.M204                 M2P104 PS    U        6184  6184    &lt;br /&gt;
&lt;br /&gt;
==Example 2==&lt;br /&gt;
&amp;lt;p class=&amp;quot;output&amp;quot;&amp;gt;26.182  JUL 01  19.16.58.63     PAGE 31                                                                &lt;br /&gt;
D DSN CCA                                                                                              &lt;br /&gt;
JOBNAME=PSDAM80T, STEPNAME=V800TEST                                                                    &lt;br /&gt;
                                                                                                       &lt;br /&gt;
DDNAME    DSNAME                                        VOLSER DSORG RECFM BLKSIZE LRECL UNITS PRIMARY &lt;br /&gt;
CCAJRNL   PSDAMON.V800.CCAJRNL.M204                     M2P102 PS    U        6749  6749               &lt;br /&gt;
CCAPRINT  PSDAMON.PSDAM80T.J0353345.D0000103.?                 PS    VBA         ?   137               &lt;br /&gt;
CCAAUDIT  PSDAMON.PSDAM80T.J0353345.D0000104.?                 PS    VBA         ?   137               &lt;br /&gt;
CCASNAP   PSDAMON.PSDAM80T.J0353345.D0000105.?                 ?     ?           ?     ?               &lt;br /&gt;
CCASYS                                                                                   CYL         2 &lt;br /&gt;
CCASYS    PSDAMON.CCASYS.M204                           M2P103 PS    U        6184  6184               &lt;br /&gt;
CCAGRP                                                                                   CYL         1 &lt;br /&gt;
CCAGRP    PSDAMON.CCAGRP.M204                           M2P102 PS    U        6184  6184               &lt;br /&gt;
CCASTAT   PSDAMON.CCASTAT.M204                          M2P103 PS    U       13030 13030               &lt;br /&gt;
CCAIN     PSDAMON.PSDAM80T.J0353345.D0000102.?                 ?     FB         80    80                         &lt;br /&gt;
&lt;br /&gt;
[[Category:System manager commands]]&lt;/div&gt;</summary>
		<author><name>JDamon</name></author>
	</entry>
	<entry>
		<id>https://m204wiki.rocketsoftware.com/index.php?title=DISPLAY_DSNAMES_command&amp;diff=120939</id>
		<title>DISPLAY DSNAMES command</title>
		<link rel="alternate" type="text/html" href="https://m204wiki.rocketsoftware.com/index.php?title=DISPLAY_DSNAMES_command&amp;diff=120939"/>
		<updated>2026-07-01T23:19:52Z</updated>

		<summary type="html">&lt;p&gt;JDamon: /* Usage notes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Summary==&lt;br /&gt;
&amp;lt;dl&amp;gt;&lt;br /&gt;
&amp;lt;dt&amp;gt;Privileges&lt;br /&gt;
&amp;lt;dd&amp;gt;System manager&lt;br /&gt;
&amp;lt;dt&amp;gt;Function&lt;br /&gt;
&amp;lt;dd&amp;gt;Displays DSNAME, VOLSER, DSORG, RECFM, BLKSIZE, LRECL UNITS (space), PRIMARY (space) for each DDNAME selected.  &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;&amp;lt;b&amp;gt;D&amp;lt;/b&amp;gt;ISPLAY DSNAMES [&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;pattern&amp;lt;/span&amp;gt;] or&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;&amp;lt;b&amp;gt;D&amp;lt;/b&amp;gt; DSN [&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;pattern&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;var class=&amp;quot;term&amp;quot;&amp;gt;pattern&amp;lt;/var&amp;gt; is a simple pattern that limits the number of DDNAMES displayed. A simple pattern is&lt;br /&gt;
a character string with no wildcard or special characters. Any DDNAME whose first characters match the pattern is displayed.&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;&amp;lt;var&amp;gt;DISPLAY DSNAMES&amp;lt;/var&amp;gt; is available as of version 8.0 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;li&amp;gt;&amp;lt;var&amp;gt;DISPLAY DSNAMES&amp;lt;/var&amp;gt; is not supported under VSE or CMS. &lt;br /&gt;
&amp;lt;li&amp;gt;Space information is displayed only for Model 204 files and only those that are open.  The space value displayed is for the entire Model 204 file only.  If the file is a multi-dataset file, each dataset is listed but not the space allocated to each dataset - only the space allocated to the entire Model 204 file across all datasets.  If the Model 204 file is a single dataset file, then the space listed will be the space allocated to that single dataset but will appear only on the line that represents the entire Model 204 file. &lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Example 1==&lt;br /&gt;
&amp;lt;p class=&amp;quot;output&amp;quot;&amp;gt;26.182  JUL 01  19.00.34.72     PAGE 20  &lt;br /&gt;
DISPLAY DSNAMES &lt;br /&gt;
JOBNAME=PSDAM80T, STEPNAME=V800TEST  &lt;br /&gt;
&lt;br /&gt;
DDNAME    DSNAME                                        VOLSER DSORG RECFM BLKSIZE LRECL UNITS PRIMARY &lt;br /&gt;
CCAJRNL   PSDAMON.V800.CCAJRNL.M204                     M2P102 PS    U        6749  6749              &lt;br /&gt;
CHKPOINT  PSDAMON.V800.CHKPOINT.M204                    M2P100 PS    F        6184  6184              &lt;br /&gt;
CCAPRINT  PSDAMON.PSDAM80T.J0353345.D0000103.?                 PS    VBA         ?   137              &lt;br /&gt;
CCAAUDIT  PSDAMON.PSDAM80T.J0353345.D0000104.?                 PS    VBA         ?   137              &lt;br /&gt;
CCASNAP   PSDAMON.PSDAM80T.J0353345.D0000105.?                 ?     ?           ?     ?              &lt;br /&gt;
SYSUDUMP  PSDAMON.PSDAM80T.J0353345.D0000106.?                 ?     ?           ?     ?              &lt;br /&gt;
SYSMDUMP  PSDAMON.CCAMDMP0.M204                         M2P103 ?     ?           ?     ?              &lt;br /&gt;
CCASYS                                                                                   CYL         2&lt;br /&gt;
CCASYS    PSDAMON.CCASYS.M204                           M2P103 PS    U        6184  6184              &lt;br /&gt;
CCAGRP                                                                                   CYL         1&lt;br /&gt;
CCAGRP    PSDAMON.CCAGRP.M204                           M2P102 PS    U        6184  6184              &lt;br /&gt;
DSNLIST                                                                                  BLK     20008 &lt;br /&gt;
DSNLIST   PSDAMON.DSNLIST.M204                          M2P103 PS    U        6184  6184               &lt;br /&gt;
DSN1MEG                                                                                  TRK      6500 &lt;br /&gt;
DSN1MEG   PSDAMON.DSN1MEG.M204                          M2P104 PS    U        6184  6184               &lt;br /&gt;
DSN1OF3   PSDAMON.DSN1MEG.ONEOF3.M204                   M2P104 PS    U        6184  6184               &lt;br /&gt;
DSN2OF3   PSDAMON.DSN1MEG.TWOOF3.M204                   M2P104 PS    U        6184  6184               &lt;br /&gt;
DSN3OF3   PSDAMON.DSN1MEG.THREEOF3.M204                 M2P104 PS    U        6184  6184    &lt;br /&gt;
&lt;br /&gt;
==Example 2==&lt;br /&gt;
&amp;lt;p class=&amp;quot;output&amp;quot;&amp;gt;26.182  JUL 01  19.16.58.63     PAGE 31                                                                &lt;br /&gt;
D DSN CCA                                                                                              &lt;br /&gt;
JOBNAME=PSDAM80T, STEPNAME=V800TEST                                                                    &lt;br /&gt;
                                                                                                       &lt;br /&gt;
DDNAME    DSNAME                                        VOLSER DSORG RECFM BLKSIZE LRECL UNITS PRIMARY &lt;br /&gt;
CCAJRNL   PSDAMON.V800.CCAJRNL.M204                     M2P102 PS    U        6749  6749               &lt;br /&gt;
CCAPRINT  PSDAMON.PSDAM80T.J0353345.D0000103.?                 PS    VBA         ?   137               &lt;br /&gt;
CCAAUDIT  PSDAMON.PSDAM80T.J0353345.D0000104.?                 PS    VBA         ?   137               &lt;br /&gt;
CCASNAP   PSDAMON.PSDAM80T.J0353345.D0000105.?                 ?     ?           ?     ?               &lt;br /&gt;
CCASYS                                                                                   CYL         2 &lt;br /&gt;
CCASYS    PSDAMON.CCASYS.M204                           M2P103 PS    U        6184  6184               &lt;br /&gt;
CCAGRP                                                                                   CYL         1 &lt;br /&gt;
CCAGRP    PSDAMON.CCAGRP.M204                           M2P102 PS    U        6184  6184               &lt;br /&gt;
CCASTAT   PSDAMON.CCASTAT.M204                          M2P103 PS    U       13030 13030               &lt;br /&gt;
CCAIN     PSDAMON.PSDAM80T.J0353345.D0000102.?                 ?     FB         80    80                         &lt;br /&gt;
&lt;br /&gt;
[[Category:System manager commands]]&lt;/div&gt;</summary>
		<author><name>JDamon</name></author>
	</entry>
	<entry>
		<id>https://m204wiki.rocketsoftware.com/index.php?title=DISPLAY_DSNAMES_command&amp;diff=120938</id>
		<title>DISPLAY DSNAMES command</title>
		<link rel="alternate" type="text/html" href="https://m204wiki.rocketsoftware.com/index.php?title=DISPLAY_DSNAMES_command&amp;diff=120938"/>
		<updated>2026-07-01T23:18:43Z</updated>

		<summary type="html">&lt;p&gt;JDamon: /* Example 1 */&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;Displays DSNAME, VOLSER, DSORG, RECFM, BLKSIZE, LRECL UNITS (space), PRIMARY (space) for each DDNAME selected.  &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;&amp;lt;b&amp;gt;D&amp;lt;/b&amp;gt;ISPLAY DSNAMES [&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;pattern&amp;lt;/span&amp;gt;] or&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;&amp;lt;b&amp;gt;D&amp;lt;/b&amp;gt; DSN [&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;pattern&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;var class=&amp;quot;term&amp;quot;&amp;gt;pattern&amp;lt;/var&amp;gt; is a simple pattern that limits the number of DDNAMES displayed. A simple pattern is&lt;br /&gt;
a character string with no wildcard or special characters. Any DDNAME whose first characters match the pattern is displayed.&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;&amp;lt;var&amp;gt;DISPLAY DSNAMES&amp;lt;/var&amp;gt; is available as of version 8.0 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;li&amp;gt;&amp;lt;var&amp;gt;DISPLAY DSNAMES&amp;lt;/var&amp;gt; is not supported under VSE or CMS. &lt;br /&gt;
&amp;lt;li&amp;gt;The following is an example of the listing produced by &amp;lt;var&amp;gt;DISPLAY DSNAMES&amp;lt;/var&amp;gt;.&lt;br /&gt;
&amp;lt;li&amp;gt;Space information is displayed only for Model 204 files and only those that are open.  The space value displayed is for the entire Model 204 file only.  If the file is a multi-dataset file, each dataset is listed but not the space allocated to each dataset - only the space allocated to the entire Model 204 file across all datasets.  If the Model 204 file is a single dataset file, then the space listed will be the space allocated to that single dataset but will appear only on the line that represents the entire Model 204 file. &lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Example 1==&lt;br /&gt;
&amp;lt;p class=&amp;quot;output&amp;quot;&amp;gt;26.182  JUL 01  19.00.34.72     PAGE 20  &lt;br /&gt;
DISPLAY DSNAMES &lt;br /&gt;
JOBNAME=PSDAM80T, STEPNAME=V800TEST  &lt;br /&gt;
&lt;br /&gt;
DDNAME    DSNAME                                        VOLSER DSORG RECFM BLKSIZE LRECL UNITS PRIMARY &lt;br /&gt;
CCAJRNL   PSDAMON.V800.CCAJRNL.M204                     M2P102 PS    U        6749  6749              &lt;br /&gt;
CHKPOINT  PSDAMON.V800.CHKPOINT.M204                    M2P100 PS    F        6184  6184              &lt;br /&gt;
CCAPRINT  PSDAMON.PSDAM80T.J0353345.D0000103.?                 PS    VBA         ?   137              &lt;br /&gt;
CCAAUDIT  PSDAMON.PSDAM80T.J0353345.D0000104.?                 PS    VBA         ?   137              &lt;br /&gt;
CCASNAP   PSDAMON.PSDAM80T.J0353345.D0000105.?                 ?     ?           ?     ?              &lt;br /&gt;
SYSUDUMP  PSDAMON.PSDAM80T.J0353345.D0000106.?                 ?     ?           ?     ?              &lt;br /&gt;
SYSMDUMP  PSDAMON.CCAMDMP0.M204                         M2P103 ?     ?           ?     ?              &lt;br /&gt;
CCASYS                                                                                   CYL         2&lt;br /&gt;
CCASYS    PSDAMON.CCASYS.M204                           M2P103 PS    U        6184  6184              &lt;br /&gt;
CCAGRP                                                                                   CYL         1&lt;br /&gt;
CCAGRP    PSDAMON.CCAGRP.M204                           M2P102 PS    U        6184  6184              &lt;br /&gt;
DSNLIST                                                                                  BLK     20008 &lt;br /&gt;
DSNLIST   PSDAMON.DSNLIST.M204                          M2P103 PS    U        6184  6184               &lt;br /&gt;
DSN1MEG                                                                                  TRK      6500 &lt;br /&gt;
DSN1MEG   PSDAMON.DSN1MEG.M204                          M2P104 PS    U        6184  6184               &lt;br /&gt;
DSN1OF3   PSDAMON.DSN1MEG.ONEOF3.M204                   M2P104 PS    U        6184  6184               &lt;br /&gt;
DSN2OF3   PSDAMON.DSN1MEG.TWOOF3.M204                   M2P104 PS    U        6184  6184               &lt;br /&gt;
DSN3OF3   PSDAMON.DSN1MEG.THREEOF3.M204                 M2P104 PS    U        6184  6184    &lt;br /&gt;
&lt;br /&gt;
==Example 2==&lt;br /&gt;
&amp;lt;p class=&amp;quot;output&amp;quot;&amp;gt;26.182  JUL 01  19.16.58.63     PAGE 31                                                                &lt;br /&gt;
D DSN CCA                                                                                              &lt;br /&gt;
JOBNAME=PSDAM80T, STEPNAME=V800TEST                                                                    &lt;br /&gt;
                                                                                                       &lt;br /&gt;
DDNAME    DSNAME                                        VOLSER DSORG RECFM BLKSIZE LRECL UNITS PRIMARY &lt;br /&gt;
CCAJRNL   PSDAMON.V800.CCAJRNL.M204                     M2P102 PS    U        6749  6749               &lt;br /&gt;
CCAPRINT  PSDAMON.PSDAM80T.J0353345.D0000103.?                 PS    VBA         ?   137               &lt;br /&gt;
CCAAUDIT  PSDAMON.PSDAM80T.J0353345.D0000104.?                 PS    VBA         ?   137               &lt;br /&gt;
CCASNAP   PSDAMON.PSDAM80T.J0353345.D0000105.?                 ?     ?           ?     ?               &lt;br /&gt;
CCASYS                                                                                   CYL         2 &lt;br /&gt;
CCASYS    PSDAMON.CCASYS.M204                           M2P103 PS    U        6184  6184               &lt;br /&gt;
CCAGRP                                                                                   CYL         1 &lt;br /&gt;
CCAGRP    PSDAMON.CCAGRP.M204                           M2P102 PS    U        6184  6184               &lt;br /&gt;
CCASTAT   PSDAMON.CCASTAT.M204                          M2P103 PS    U       13030 13030               &lt;br /&gt;
CCAIN     PSDAMON.PSDAM80T.J0353345.D0000102.?                 ?     FB         80    80                         &lt;br /&gt;
&lt;br /&gt;
[[Category:System manager commands]]&lt;/div&gt;</summary>
		<author><name>JDamon</name></author>
	</entry>
	<entry>
		<id>https://m204wiki.rocketsoftware.com/index.php?title=DISPLAY_DSNAMES_command&amp;diff=120937</id>
		<title>DISPLAY DSNAMES command</title>
		<link rel="alternate" type="text/html" href="https://m204wiki.rocketsoftware.com/index.php?title=DISPLAY_DSNAMES_command&amp;diff=120937"/>
		<updated>2026-07-01T22:58:35Z</updated>

		<summary type="html">&lt;p&gt;JDamon: /* Usage notes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Summary==&lt;br /&gt;
&amp;lt;dl&amp;gt;&lt;br /&gt;
&amp;lt;dt&amp;gt;Privileges&lt;br /&gt;
&amp;lt;dd&amp;gt;System manager&lt;br /&gt;
&amp;lt;dt&amp;gt;Function&lt;br /&gt;
&amp;lt;dd&amp;gt;Displays DSNAME, VOLSER, DSORG, RECFM, BLKSIZE, LRECL UNITS (space), PRIMARY (space) for each DDNAME selected.  &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;&amp;lt;b&amp;gt;D&amp;lt;/b&amp;gt;ISPLAY DSNAMES [&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;pattern&amp;lt;/span&amp;gt;] or&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;&amp;lt;b&amp;gt;D&amp;lt;/b&amp;gt; DSN [&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;pattern&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;var class=&amp;quot;term&amp;quot;&amp;gt;pattern&amp;lt;/var&amp;gt; is a simple pattern that limits the number of DDNAMES displayed. A simple pattern is&lt;br /&gt;
a character string with no wildcard or special characters. Any DDNAME whose first characters match the pattern is displayed.&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;&amp;lt;var&amp;gt;DISPLAY DSNAMES&amp;lt;/var&amp;gt; is available as of version 8.0 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;li&amp;gt;&amp;lt;var&amp;gt;DISPLAY DSNAMES&amp;lt;/var&amp;gt; is not supported under VSE or CMS. &lt;br /&gt;
&amp;lt;li&amp;gt;The following is an example of the listing produced by &amp;lt;var&amp;gt;DISPLAY DSNAMES&amp;lt;/var&amp;gt;.&lt;br /&gt;
&amp;lt;li&amp;gt;Space information is displayed only for Model 204 files and only those that are open.  The space value displayed is for the entire Model 204 file only.  If the file is a multi-dataset file, each dataset is listed but not the space allocated to each dataset - only the space allocated to the entire Model 204 file across all datasets.  If the Model 204 file is a single dataset file, then the space listed will be the space allocated to that single dataset but will appear only on the line that represents the entire Model 204 file. &lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Example 1==&lt;br /&gt;
&amp;lt;code&amp;gt;DISPLAY DSNAMES CCA&amp;lt;/code&amp;gt; displays only those DDNAMES starting with &amp;lt;code&amp;gt;CCA&amp;lt;/code&amp;gt;:&lt;br /&gt;
&amp;lt;p class=&amp;quot;output&amp;quot;&amp;gt;JOBNAME=PSDAM80T, STEPNAME=V800TEST  &lt;br /&gt;
                                                   &lt;br /&gt;
DDNAME    DSNAME                                        VOLSER DSORG RECFM BLKSIZE LRECL &lt;br /&gt;
CCAJRNL   PSDAMON.V800.CCAJRNL.M204                     M2P102 PS    U        6749  6749 &lt;br /&gt;
CCAPRINT  PSDAMON.PSDAM80T.J0171916.D0000103.?                 PS    VBA         ?   137 &lt;br /&gt;
CCAAUDIT  PSDAMON.PSDAM80T.J0171916.D0000104.?                 PS    VBA         ?   137 &lt;br /&gt;
CCASNAP   PSDAMON.PSDAM80T.J0171916.D0000105.?                 ?     ?           ?     ? &lt;br /&gt;
CCASYS    PSDAMON.CCASYS.M204                           M2P103 PS    U        6184  6184 &lt;br /&gt;
CCAGRP    PSDAMON.CCAGRP.M204                           M2P102 PS    U        6184  6184 &lt;br /&gt;
CCASTAT   PSDAMON.CCASTAT.M204                          M2P103 PS    U       13030 13030 &lt;br /&gt;
CCAIN     PSDAMON.PSDAM80T.J0171916.D0000102.?                 ?     FB         80    80 &lt;br /&gt;
PSDAM80T&amp;gt;                                                                                                      &lt;br /&gt;
&lt;br /&gt;
[[Category:System manager commands]]&lt;/div&gt;</summary>
		<author><name>JDamon</name></author>
	</entry>
	<entry>
		<id>https://m204wiki.rocketsoftware.com/index.php?title=DISPLAY_DSNAMES_command&amp;diff=120936</id>
		<title>DISPLAY DSNAMES command</title>
		<link rel="alternate" type="text/html" href="https://m204wiki.rocketsoftware.com/index.php?title=DISPLAY_DSNAMES_command&amp;diff=120936"/>
		<updated>2026-07-01T22:41:41Z</updated>

		<summary type="html">&lt;p&gt;JDamon: /* Summary */&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;Displays DSNAME, VOLSER, DSORG, RECFM, BLKSIZE, LRECL UNITS (space), PRIMARY (space) for each DDNAME selected.  &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;&amp;lt;b&amp;gt;D&amp;lt;/b&amp;gt;ISPLAY DSNAMES [&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;pattern&amp;lt;/span&amp;gt;] or&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;&amp;lt;b&amp;gt;D&amp;lt;/b&amp;gt; DSN [&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;pattern&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;var class=&amp;quot;term&amp;quot;&amp;gt;pattern&amp;lt;/var&amp;gt; is a simple pattern that limits the number of DDNAMES displayed. A simple pattern is&lt;br /&gt;
a character string with no wildcard or special characters. Any DDNAME whose first characters match the pattern is displayed.&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;&amp;lt;var&amp;gt;DISPLAY DSNAMES&amp;lt;/var&amp;gt; is available as of version 8.0 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;li&amp;gt;&amp;lt;var&amp;gt;DISPLAY DSNAMES&amp;lt;/var&amp;gt; is not supported under VSE or CMS. &lt;br /&gt;
&amp;lt;li&amp;gt;The following is an example of the listing produced by &amp;lt;var&amp;gt;DISPLAY DSNAMES&amp;lt;/var&amp;gt;.&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Example 1==&lt;br /&gt;
&amp;lt;code&amp;gt;DISPLAY DSNAMES CCA&amp;lt;/code&amp;gt; displays only those DDNAMES starting with &amp;lt;code&amp;gt;CCA&amp;lt;/code&amp;gt;:&lt;br /&gt;
&amp;lt;p class=&amp;quot;output&amp;quot;&amp;gt;JOBNAME=PSDAM80T, STEPNAME=V800TEST  &lt;br /&gt;
                                                   &lt;br /&gt;
DDNAME    DSNAME                                        VOLSER DSORG RECFM BLKSIZE LRECL &lt;br /&gt;
CCAJRNL   PSDAMON.V800.CCAJRNL.M204                     M2P102 PS    U        6749  6749 &lt;br /&gt;
CCAPRINT  PSDAMON.PSDAM80T.J0171916.D0000103.?                 PS    VBA         ?   137 &lt;br /&gt;
CCAAUDIT  PSDAMON.PSDAM80T.J0171916.D0000104.?                 PS    VBA         ?   137 &lt;br /&gt;
CCASNAP   PSDAMON.PSDAM80T.J0171916.D0000105.?                 ?     ?           ?     ? &lt;br /&gt;
CCASYS    PSDAMON.CCASYS.M204                           M2P103 PS    U        6184  6184 &lt;br /&gt;
CCAGRP    PSDAMON.CCAGRP.M204                           M2P102 PS    U        6184  6184 &lt;br /&gt;
CCASTAT   PSDAMON.CCASTAT.M204                          M2P103 PS    U       13030 13030 &lt;br /&gt;
CCAIN     PSDAMON.PSDAM80T.J0171916.D0000102.?                 ?     FB         80    80 &lt;br /&gt;
PSDAM80T&amp;gt;                                                                                                      &lt;br /&gt;
&lt;br /&gt;
[[Category:System manager commands]]&lt;/div&gt;</summary>
		<author><name>JDamon</name></author>
	</entry>
	<entry>
		<id>https://m204wiki.rocketsoftware.com/index.php?title=DISPLAY_DSNAMES_command&amp;diff=120915</id>
		<title>DISPLAY DSNAMES command</title>
		<link rel="alternate" type="text/html" href="https://m204wiki.rocketsoftware.com/index.php?title=DISPLAY_DSNAMES_command&amp;diff=120915"/>
		<updated>2026-06-15T18:41:35Z</updated>

		<summary type="html">&lt;p&gt;JDamon: /* Usage notes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Summary==&lt;br /&gt;
&amp;lt;dl&amp;gt;&lt;br /&gt;
&amp;lt;dt&amp;gt;Privileges&lt;br /&gt;
&amp;lt;dd&amp;gt;System manager&lt;br /&gt;
&amp;lt;dt&amp;gt;Function&lt;br /&gt;
&amp;lt;dd&amp;gt;Displays DSNAME, VOLSER, DSORG, RECFM, BLKSIZE, LRECL for each DDNAME selected.  &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;&amp;lt;b&amp;gt;D&amp;lt;/b&amp;gt;ISPLAY DSNAMES [&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;pattern&amp;lt;/span&amp;gt;] or&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;&amp;lt;b&amp;gt;D&amp;lt;/b&amp;gt; DSN [&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;pattern&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;var class=&amp;quot;term&amp;quot;&amp;gt;pattern&amp;lt;/var&amp;gt; is a simple pattern that limits the number of DDNAMES displayed. A simple pattern is&lt;br /&gt;
a character string with no wildcard or special characters. Any DDNAME whose first characters match the pattern is displayed.&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;&amp;lt;var&amp;gt;DISPLAY DSNAMES&amp;lt;/var&amp;gt; is available as of version 8.0 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;li&amp;gt;&amp;lt;var&amp;gt;DISPLAY DSNAMES&amp;lt;/var&amp;gt; is not supported under VSE or CMS. &lt;br /&gt;
&amp;lt;li&amp;gt;The following is an example of the listing produced by &amp;lt;var&amp;gt;DISPLAY DSNAMES&amp;lt;/var&amp;gt;.&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Example 1==&lt;br /&gt;
&amp;lt;code&amp;gt;DISPLAY DSNAMES CCA&amp;lt;/code&amp;gt; displays only those DDNAMES starting with &amp;lt;code&amp;gt;CCA&amp;lt;/code&amp;gt;:&lt;br /&gt;
&amp;lt;p class=&amp;quot;output&amp;quot;&amp;gt;JOBNAME=PSDAM80T, STEPNAME=V800TEST  &lt;br /&gt;
                                                   &lt;br /&gt;
DDNAME    DSNAME                                        VOLSER DSORG RECFM BLKSIZE LRECL &lt;br /&gt;
CCAJRNL   PSDAMON.V800.CCAJRNL.M204                     M2P102 PS    U        6749  6749 &lt;br /&gt;
CCAPRINT  PSDAMON.PSDAM80T.J0171916.D0000103.?                 PS    VBA         ?   137 &lt;br /&gt;
CCAAUDIT  PSDAMON.PSDAM80T.J0171916.D0000104.?                 PS    VBA         ?   137 &lt;br /&gt;
CCASNAP   PSDAMON.PSDAM80T.J0171916.D0000105.?                 ?     ?           ?     ? &lt;br /&gt;
CCASYS    PSDAMON.CCASYS.M204                           M2P103 PS    U        6184  6184 &lt;br /&gt;
CCAGRP    PSDAMON.CCAGRP.M204                           M2P102 PS    U        6184  6184 &lt;br /&gt;
CCASTAT   PSDAMON.CCASTAT.M204                          M2P103 PS    U       13030 13030 &lt;br /&gt;
CCAIN     PSDAMON.PSDAM80T.J0171916.D0000102.?                 ?     FB         80    80 &lt;br /&gt;
PSDAM80T&amp;gt;                                                                                                      &lt;br /&gt;
&lt;br /&gt;
[[Category:System manager commands]]&lt;/div&gt;</summary>
		<author><name>JDamon</name></author>
	</entry>
	<entry>
		<id>https://m204wiki.rocketsoftware.com/index.php?title=DISPLAY_DSNAMES_command&amp;diff=120914</id>
		<title>DISPLAY DSNAMES command</title>
		<link rel="alternate" type="text/html" href="https://m204wiki.rocketsoftware.com/index.php?title=DISPLAY_DSNAMES_command&amp;diff=120914"/>
		<updated>2026-06-15T18:40:24Z</updated>

		<summary type="html">&lt;p&gt;JDamon: /* Usage notes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Summary==&lt;br /&gt;
&amp;lt;dl&amp;gt;&lt;br /&gt;
&amp;lt;dt&amp;gt;Privileges&lt;br /&gt;
&amp;lt;dd&amp;gt;System manager&lt;br /&gt;
&amp;lt;dt&amp;gt;Function&lt;br /&gt;
&amp;lt;dd&amp;gt;Displays DSNAME, VOLSER, DSORG, RECFM, BLKSIZE, LRECL for each DDNAME selected.  &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;&amp;lt;b&amp;gt;D&amp;lt;/b&amp;gt;ISPLAY DSNAMES [&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;pattern&amp;lt;/span&amp;gt;] or&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;&amp;lt;b&amp;gt;D&amp;lt;/b&amp;gt; DSN [&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;pattern&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;var class=&amp;quot;term&amp;quot;&amp;gt;pattern&amp;lt;/var&amp;gt; is a simple pattern that limits the number of DDNAMES displayed. A simple pattern is&lt;br /&gt;
a character string with no wildcard or special characters. Any DDNAME whose first characters match the pattern is displayed.&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;&amp;lt;var&amp;gt;DISPLAY DSNAMES&amp;lt;/var&amp;gt; is available as of version 8.0 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;li&amp;gt;&amp;lt;var&amp;gt;DISPLAY DSNAMES&amp;lt;/var&amp;gt; is not supported under VSE or CMS. &lt;br /&gt;
&amp;lt;li&amp;gt;The following is an example the the listing produced by &amp;lt;var&amp;gt;DISPLAY DSNAMES&amp;lt;/var&amp;gt;.&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Example 1==&lt;br /&gt;
&amp;lt;code&amp;gt;DISPLAY DSNAMES CCA&amp;lt;/code&amp;gt; displays only those DDNAMES starting with &amp;lt;code&amp;gt;CCA&amp;lt;/code&amp;gt;:&lt;br /&gt;
&amp;lt;p class=&amp;quot;output&amp;quot;&amp;gt;JOBNAME=PSDAM80T, STEPNAME=V800TEST  &lt;br /&gt;
                                                   &lt;br /&gt;
DDNAME    DSNAME                                        VOLSER DSORG RECFM BLKSIZE LRECL &lt;br /&gt;
CCAJRNL   PSDAMON.V800.CCAJRNL.M204                     M2P102 PS    U        6749  6749 &lt;br /&gt;
CCAPRINT  PSDAMON.PSDAM80T.J0171916.D0000103.?                 PS    VBA         ?   137 &lt;br /&gt;
CCAAUDIT  PSDAMON.PSDAM80T.J0171916.D0000104.?                 PS    VBA         ?   137 &lt;br /&gt;
CCASNAP   PSDAMON.PSDAM80T.J0171916.D0000105.?                 ?     ?           ?     ? &lt;br /&gt;
CCASYS    PSDAMON.CCASYS.M204                           M2P103 PS    U        6184  6184 &lt;br /&gt;
CCAGRP    PSDAMON.CCAGRP.M204                           M2P102 PS    U        6184  6184 &lt;br /&gt;
CCASTAT   PSDAMON.CCASTAT.M204                          M2P103 PS    U       13030 13030 &lt;br /&gt;
CCAIN     PSDAMON.PSDAM80T.J0171916.D0000102.?                 ?     FB         80    80 &lt;br /&gt;
PSDAM80T&amp;gt;                                                                                                      &lt;br /&gt;
&lt;br /&gt;
[[Category:System manager commands]]&lt;/div&gt;</summary>
		<author><name>JDamon</name></author>
	</entry>
	<entry>
		<id>https://m204wiki.rocketsoftware.com/index.php?title=Release_notes_for_Model_204_version_8.0&amp;diff=120913</id>
		<title>Release notes for Model 204 version 8.0</title>
		<link rel="alternate" type="text/html" href="https://m204wiki.rocketsoftware.com/index.php?title=Release_notes_for_Model_204_version_8.0&amp;diff=120913"/>
		<updated>2026-06-15T18:36:41Z</updated>

		<summary type="html">&lt;p&gt;JDamon: /* New and changed commands */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Overview==&lt;br /&gt;
These release notes contain installation and features information for the Rocket Model 204 version 8.0 release. Before beginning your installation, please read through this information about product installation and changes.&lt;br /&gt;
&lt;br /&gt;
==New in this release==&lt;br /&gt;
&lt;br /&gt;
==Operating system and hardware requirements==&lt;br /&gt;
&lt;br /&gt;
===Operating system requirements===&lt;br /&gt;
&lt;br /&gt;
===Hardware requirements===&lt;br /&gt;
&lt;br /&gt;
===Connect&amp;amp;#9733; compatibility with Model 204===&lt;br /&gt;
&lt;br /&gt;
==SOUL (User Language) enhancements==&lt;br /&gt;
&lt;br /&gt;
==External Call Facility enhancements==&lt;br /&gt;
&lt;br /&gt;
==System enhancements==&lt;br /&gt;
&lt;br /&gt;
==Editor enhancements==&lt;br /&gt;
&lt;br /&gt;
==AUDIT204 enhancements==&lt;br /&gt;
&lt;br /&gt;
==Recovery enhancements==&lt;br /&gt;
&lt;br /&gt;
==Security enhancements==&lt;br /&gt;
&lt;br /&gt;
==Janus product enhancements==&lt;br /&gt;
&lt;br /&gt;
===TLS 1.3 support===&lt;br /&gt;
Janus SSL ports now support TLS 1.3 (RFC 8446) for both client and server connections. TLS 1.3 provides improved security and performance over TLS 1.2, including a simplified handshake with fewer round trips, and the removal of legacy features such as renegotiation.&lt;br /&gt;
&lt;br /&gt;
The following TLS 1.3 cipher suites are supported:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;TLS_AES_128_GCM_SHA256&amp;lt;/code&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;code&amp;gt;TLS_AES_256_GCM_SHA384&amp;lt;/code&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Key exchange is performed using X25519 (Curve25519 Elliptic Curve Diffie-Hellman, per RFC 7748). Certificate authentication uses RSA-PSS signatures.&lt;br /&gt;
&lt;br /&gt;
Key derivation uses the HKDF-based key schedule defined in RFC 8446, replacing the PRF-based approach of earlier TLS versions.&lt;br /&gt;
&lt;br /&gt;
TLS 1.3 is enabled by default on ports that allow TLS 1.2. To restrict a port to earlier protocol versions, use the existing &amp;lt;var&amp;gt;SSLVERSION&amp;lt;/var&amp;gt; parameter on the &amp;lt;var&amp;gt;[[JANUS DEFINE]]&amp;lt;/var&amp;gt; command.&lt;br /&gt;
&lt;br /&gt;
===Imagine Transparency support===&lt;br /&gt;
A new facility called [[Imagine Transparency]] is now available to allow files in an &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Imagine&amp;lt;/var&amp;gt; database to be accessed from &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model 204&amp;lt;/var&amp;gt; as if they were native files.&lt;br /&gt;
&lt;br /&gt;
A new port type, [[JANUS_DEFINE#IMAGINET|IMAGINET]], is now available. It allows &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model 204&amp;lt;/var&amp;gt; files to be stored on an Imagine server rather than in operating system files. A new parameter is now available on the [[DEFINE DATASET command#IMAGINE|ALLOCATE]] command to indicate that a file is to be accessed via the &amp;lt;var&amp;gt;IMAGINET&amp;lt;/var&amp;gt; port rather than from operating system files.&lt;br /&gt;
&lt;br /&gt;
==Debugger enhancements==&lt;br /&gt;
&lt;br /&gt;
==Performance enhancements==&lt;br /&gt;
&lt;br /&gt;
===Hardware-accelerated deflate/inflate compression===&lt;br /&gt;
The SOUL compression functions (&amp;lt;var&amp;gt;Deflate&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;Inflate&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;Gzip&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;Gunzip&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;Zip&amp;lt;/var&amp;gt;, and &amp;lt;var&amp;gt;Unzip&amp;lt;/var&amp;gt;) now exploit the IBM z15 (and above) DFLTCC (Deflate Conversion Call) hardware instruction when available. This provides significant performance improvement for compression and decompression of longstrings without any application code changes.&lt;br /&gt;
&lt;br /&gt;
Hardware acceleration is used automatically when the processor supports it. On processors without DFLTCC support, the existing software implementation continues to be used transparently.&lt;br /&gt;
&lt;br /&gt;
The DFLTCC instruction handles both the deflate (compress) and inflate (expand) operations natively in hardware, including CRC-32 computation, providing throughput improvements that scale with data size.&lt;br /&gt;
&lt;br /&gt;
==New and changed commands==&lt;br /&gt;
&amp;lt;var&amp;gt;[[DISPLAY DSNAMES command]]&amp;lt;/var&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==New and changed parameters==&lt;br /&gt;
&lt;br /&gt;
==New and changed statistics==&lt;br /&gt;
&lt;br /&gt;
==Compatibility issues==&lt;br /&gt;
&lt;br /&gt;
==Notes for system manager and installer==&lt;br /&gt;
&lt;br /&gt;
==New products==&lt;br /&gt;
&lt;br /&gt;
==New and changed messages==&lt;br /&gt;
&lt;br /&gt;
[[Category: Release notes]]&lt;/div&gt;</summary>
		<author><name>JDamon</name></author>
	</entry>
	<entry>
		<id>https://m204wiki.rocketsoftware.com/index.php?title=DISPLAY_DSNAMES&amp;diff=120912</id>
		<title>DISPLAY DSNAMES</title>
		<link rel="alternate" type="text/html" href="https://m204wiki.rocketsoftware.com/index.php?title=DISPLAY_DSNAMES&amp;diff=120912"/>
		<updated>2026-06-15T18:27:11Z</updated>

		<summary type="html">&lt;p&gt;JDamon: JDamon moved page DISPLAY DSNAMES to DISPLAY DSNAMES command: Misspelled title&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[DISPLAY DSNAMES command]]&lt;/div&gt;</summary>
		<author><name>JDamon</name></author>
	</entry>
	<entry>
		<id>https://m204wiki.rocketsoftware.com/index.php?title=DISPLAY_DSNAMES_command&amp;diff=120911</id>
		<title>DISPLAY DSNAMES command</title>
		<link rel="alternate" type="text/html" href="https://m204wiki.rocketsoftware.com/index.php?title=DISPLAY_DSNAMES_command&amp;diff=120911"/>
		<updated>2026-06-15T18:27:11Z</updated>

		<summary type="html">&lt;p&gt;JDamon: JDamon moved page DISPLAY DSNAMES to DISPLAY DSNAMES command: Misspelled title&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;Displays DSNAME, VOLSER, DSORG, RECFM, BLKSIZE, LRECL for each DDNAME selected.  &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;&amp;lt;b&amp;gt;D&amp;lt;/b&amp;gt;ISPLAY DSNAMES [&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;pattern&amp;lt;/span&amp;gt;] or&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;&amp;lt;b&amp;gt;D&amp;lt;/b&amp;gt; DSN [&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;pattern&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;var class=&amp;quot;term&amp;quot;&amp;gt;pattern&amp;lt;/var&amp;gt; is a simple pattern that limits the number of DDNAMES displayed. A simple pattern is&lt;br /&gt;
a character string with no wildcard or special characters. Any DDNAME whose first characters match the pattern is displayed.&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;&amp;lt;var&amp;gt;DISPLAY DSNAMES&amp;lt;/var&amp;gt; is available as of version 8.0 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;li&amp;gt;The following is an example the the listing produced by &amp;lt;var&amp;gt;DISPLAY DSNAMES&amp;lt;/var&amp;gt;.&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Example 1==&lt;br /&gt;
&amp;lt;code&amp;gt;DISPLAY DSNAMES CCA&amp;lt;/code&amp;gt; displays only those DDNAMES starting with &amp;lt;code&amp;gt;CCA&amp;lt;/code&amp;gt;:&lt;br /&gt;
&amp;lt;p class=&amp;quot;output&amp;quot;&amp;gt;JOBNAME=PSDAM80T, STEPNAME=V800TEST  &lt;br /&gt;
                                                   &lt;br /&gt;
DDNAME    DSNAME                                        VOLSER DSORG RECFM BLKSIZE LRECL &lt;br /&gt;
CCAJRNL   PSDAMON.V800.CCAJRNL.M204                     M2P102 PS    U        6749  6749 &lt;br /&gt;
CCAPRINT  PSDAMON.PSDAM80T.J0171916.D0000103.?                 PS    VBA         ?   137 &lt;br /&gt;
CCAAUDIT  PSDAMON.PSDAM80T.J0171916.D0000104.?                 PS    VBA         ?   137 &lt;br /&gt;
CCASNAP   PSDAMON.PSDAM80T.J0171916.D0000105.?                 ?     ?           ?     ? &lt;br /&gt;
CCASYS    PSDAMON.CCASYS.M204                           M2P103 PS    U        6184  6184 &lt;br /&gt;
CCAGRP    PSDAMON.CCAGRP.M204                           M2P102 PS    U        6184  6184 &lt;br /&gt;
CCASTAT   PSDAMON.CCASTAT.M204                          M2P103 PS    U       13030 13030 &lt;br /&gt;
CCAIN     PSDAMON.PSDAM80T.J0171916.D0000102.?                 ?     FB         80    80 &lt;br /&gt;
PSDAM80T&amp;gt;                                                                                                      &lt;br /&gt;
&lt;br /&gt;
[[Category:System manager commands]]&lt;/div&gt;</summary>
		<author><name>JDamon</name></author>
	</entry>
	<entry>
		<id>https://m204wiki.rocketsoftware.com/index.php?title=DISPLAY_MODMAP_command&amp;diff=120910</id>
		<title>DISPLAY MODMAP command</title>
		<link rel="alternate" type="text/html" href="https://m204wiki.rocketsoftware.com/index.php?title=DISPLAY_MODMAP_command&amp;diff=120910"/>
		<updated>2026-06-15T18:18:02Z</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 manager&lt;br /&gt;
&amp;lt;dt&amp;gt;Function&lt;br /&gt;
&amp;lt;dd&amp;gt;Displays the &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model 204&amp;lt;/var&amp;gt; link map in address order&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;&amp;lt;b&amp;gt;D&amp;lt;/b&amp;gt;ISPLAY MODMAP [&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;pattern&amp;lt;/span&amp;gt;]&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;&amp;lt;b&amp;gt;D&amp;lt;/b&amp;gt;ISPLAY MODMAP UEX&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Where&lt;br /&gt;
&amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;pattern&amp;lt;/var&amp;gt; is a simple pattern that limits the number of csects displayed. A simple pattern is&lt;br /&gt;
a character string with no wildcard or special characters. Any csect name matching the pattern is displayed.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;UEX displays the entry point addresses of all defined user exits.&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 listing produced by &amp;lt;var&amp;gt;DISPLAY MODMAP&amp;lt;/var&amp;gt; is identical to that produced in a CCASNAP, except &amp;lt;var&amp;gt;DISPLAY MODMAP&amp;lt;/var&amp;gt; shows only one column&#039;s worth of csect names. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;The &amp;lt;var&amp;gt;DISPLAY MODMAP&amp;lt;/var&amp;gt; output column layout is as follows:&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;address.length   name     version  date-time-of-assembly&amp;lt;/span&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;DISPLAY MODMAP&amp;lt;/var&amp;gt; is available as of version 7.5 of &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model&amp;amp;nbsp;204&amp;lt;/var&amp;gt;.&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;var&amp;gt;DISPLAY MODMAP UEX&amp;lt;/var&amp;gt; is available as of version 7.7 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;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Example 1==&lt;br /&gt;
&amp;lt;code&amp;gt;DISPLAY MODMAP FUN&amp;lt;/code&amp;gt; displays only those csect names starting with &amp;lt;code&amp;gt;FUN&amp;lt;/code&amp;gt;:&lt;br /&gt;
&amp;lt;p class=&amp;quot;output&amp;quot;&amp;gt;MODULE LINK MAP BY ADDRESS                           &lt;br /&gt;
  ------.----    FUNA                                &lt;br /&gt;
  ------.----    FUNM                                &lt;br /&gt;
  ------.----    FUNS                                &lt;br /&gt;
  ------.----    FUNX                                &lt;br /&gt;
  ------.----    FUNY                                &lt;br /&gt;
  ------.----    FUNZ                                &lt;br /&gt;
  ------.----    FUNL                                &lt;br /&gt;
  ------.----    FUNU1                               &lt;br /&gt;
  ------.----    FUNU2                               &lt;br /&gt;
  ------.----    FUNU3                               &lt;br /&gt;
2F34C2A8.0B30    FUNB     7.5.0G   2013-10-07 07:40  &lt;br /&gt;
2F34CDD8.5C30    FUNC     7.5.0G   2013-10-11 07:48  &lt;br /&gt;
2F352A08.17D0    FUND     7.5.0G   2013-10-07 07:40  &lt;br /&gt;
2F3541D8.3C48    FUNE     7.5.0G   2013-10-07 07:40  &lt;br /&gt;
2F357E20.4F30    FUNF     7.5.0G   2013-10-07 07:40  &lt;br /&gt;
2F35CD50.04A8    FUNG     7.5.0G   2013-10-07 07:40  &lt;br /&gt;
2F35D1F8.0208    FUNP     7.5.0G   2013-10-07 07:40  &lt;br /&gt;
2F35D400.4498    FUNR     7.5.0G   2013-10-07 07:40  &lt;br /&gt;
2F361898.A010    FUNT     7.5.0G   2013-10-22 14:29  &lt;br /&gt;
2F36B8A8.05B8    FUNU     7.5.0G   2013-10-07 07:40  &lt;br /&gt;
2F36BE60.0C70    FUNV     7.5.0G   2013-10-07 07:40  &lt;br /&gt;
2F36CAD0.1A08    FUNW     7.5.0G   2013-10-07 07:40   &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Example 2==&lt;br /&gt;
&amp;lt;code&amp;gt;DISPLAY MODMAP UEX&amp;lt;/code&amp;gt; displays the entry point addresses of all defined user exits:&lt;br /&gt;
&amp;lt;p class=&amp;quot;output&amp;quot;&amp;gt;USER EXIT MAP              &lt;br /&gt;
  ------.----    JANACLFI  &lt;br /&gt;
  ------.----    JANACLFO  &lt;br /&gt;
  ------.----    CUSTINIT  &lt;br /&gt;
  ------.----    CUSTTERM  &lt;br /&gt;
  ------.----    CUSTINI0  &lt;br /&gt;
  ------.----    CUSTINI1  &lt;br /&gt;
  ------.----    CUSTINI2  &lt;br /&gt;
  ------.----    CUSTRSTR  &lt;br /&gt;
  ------.----    CUSTLOGO  &lt;br /&gt;
  ------.----    CUSTOPRC  &lt;br /&gt;
  ------.----    UHDRXT    &lt;br /&gt;
  ------.----    IEFSD095  &lt;br /&gt;
  ------.----    UUPUSRA   &lt;br /&gt;
  ------.----    UUPUSRF   &lt;br /&gt;
  ------.----    UUPUSRS   &lt;br /&gt;
  ------.----    NCRYPXIT  &lt;br /&gt;
  ------.----    MERGEJ    &lt;br /&gt;
  ------.----    UPLVLUSR  &lt;br /&gt;
  ------.----    TLOG      &lt;br /&gt;
  ------.----    DDLPRIV   &lt;br /&gt;
  ------.----    DMLPRIV   &lt;br /&gt;
  ------.----    M204JLOG  &lt;br /&gt;
  ------.----    M204CKPX  &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:System manager commands]]&lt;/div&gt;</summary>
		<author><name>JDamon</name></author>
	</entry>
	<entry>
		<id>https://m204wiki.rocketsoftware.com/index.php?title=DISPLAY_DSNAMES_command&amp;diff=120909</id>
		<title>DISPLAY DSNAMES command</title>
		<link rel="alternate" type="text/html" href="https://m204wiki.rocketsoftware.com/index.php?title=DISPLAY_DSNAMES_command&amp;diff=120909"/>
		<updated>2026-06-15T18:16:32Z</updated>

		<summary type="html">&lt;p&gt;JDamon: Created page with &amp;quot;==Summary== &amp;lt;dl&amp;gt; &amp;lt;dt&amp;gt;Privileges &amp;lt;dd&amp;gt;System manager &amp;lt;dt&amp;gt;Function &amp;lt;dd&amp;gt;Displays DSNAME, VOLSER, DSORG, RECFM, BLKSIZE, LRECL for each DDNAME selected.   &amp;lt;/dl&amp;gt;  ==Syntax== &amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;&amp;lt;b&amp;gt;D&amp;lt;/b&amp;gt;ISPLAY DSNAMES [&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;pattern&amp;lt;/span&amp;gt;] or &amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;&amp;lt;b&amp;gt;D&amp;lt;/b&amp;gt; DSN [&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;pattern&amp;lt;/span&amp;gt;] &amp;lt;/p&amp;gt;   Where &amp;lt;var class=&amp;quot;term&amp;quot;&amp;gt;pattern&amp;lt;/var&amp;gt; is a simple pattern that limits the number of DDNAMES displayed. A simple pattern is a character string with no wil...&amp;quot;&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;Displays DSNAME, VOLSER, DSORG, RECFM, BLKSIZE, LRECL for each DDNAME selected.  &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;&amp;lt;b&amp;gt;D&amp;lt;/b&amp;gt;ISPLAY DSNAMES [&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;pattern&amp;lt;/span&amp;gt;] or&lt;br /&gt;
&amp;lt;p class=&amp;quot;syntax&amp;quot;&amp;gt;&amp;lt;b&amp;gt;D&amp;lt;/b&amp;gt; DSN [&amp;lt;span class=&amp;quot;term&amp;quot;&amp;gt;pattern&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;var class=&amp;quot;term&amp;quot;&amp;gt;pattern&amp;lt;/var&amp;gt; is a simple pattern that limits the number of DDNAMES displayed. A simple pattern is&lt;br /&gt;
a character string with no wildcard or special characters. Any DDNAME whose first characters match the pattern is displayed.&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;&amp;lt;var&amp;gt;DISPLAY DSNAMES&amp;lt;/var&amp;gt; is available as of version 8.0 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;li&amp;gt;The following is an example the the listing produced by &amp;lt;var&amp;gt;DISPLAY DSNAMES&amp;lt;/var&amp;gt;.&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Example 1==&lt;br /&gt;
&amp;lt;code&amp;gt;DISPLAY DSNAMES CCA&amp;lt;/code&amp;gt; displays only those DDNAMES starting with &amp;lt;code&amp;gt;CCA&amp;lt;/code&amp;gt;:&lt;br /&gt;
&amp;lt;p class=&amp;quot;output&amp;quot;&amp;gt;JOBNAME=PSDAM80T, STEPNAME=V800TEST  &lt;br /&gt;
                                                   &lt;br /&gt;
DDNAME    DSNAME                                        VOLSER DSORG RECFM BLKSIZE LRECL &lt;br /&gt;
CCAJRNL   PSDAMON.V800.CCAJRNL.M204                     M2P102 PS    U        6749  6749 &lt;br /&gt;
CCAPRINT  PSDAMON.PSDAM80T.J0171916.D0000103.?                 PS    VBA         ?   137 &lt;br /&gt;
CCAAUDIT  PSDAMON.PSDAM80T.J0171916.D0000104.?                 PS    VBA         ?   137 &lt;br /&gt;
CCASNAP   PSDAMON.PSDAM80T.J0171916.D0000105.?                 ?     ?           ?     ? &lt;br /&gt;
CCASYS    PSDAMON.CCASYS.M204                           M2P103 PS    U        6184  6184 &lt;br /&gt;
CCAGRP    PSDAMON.CCAGRP.M204                           M2P102 PS    U        6184  6184 &lt;br /&gt;
CCASTAT   PSDAMON.CCASTAT.M204                          M2P103 PS    U       13030 13030 &lt;br /&gt;
CCAIN     PSDAMON.PSDAM80T.J0171916.D0000102.?                 ?     FB         80    80 &lt;br /&gt;
PSDAM80T&amp;gt;                                                                                                      &lt;br /&gt;
&lt;br /&gt;
[[Category:System manager commands]]&lt;/div&gt;</summary>
		<author><name>JDamon</name></author>
	</entry>
	<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>
</feed>