Statement syntax: Difference between revisions

From m204wiki
Jump to navigation Jump to search
mNo edit summary
 
(305 intermediate revisions by 6 users not shown)
Line 1: Line 1:
==Overview==
This page summarizes SOUL syntax and conventions, which are discussed in more detail throughout this wiki. The SOUL statements are listed in alphabetical order.  Many of the section titles or syntax blocks contain links to the wiki page describing the statement or syntax phrase. A [[#Other syntax|later section]] provides other SOUL syntax information, including links to [[#tokens|information about the "tokens"]] of SOUL, such as names in SOUL.
<p>
<p>
This topic summarizes User Language syntax and conventions, many of which are also discussed throughout this manual.</p>
All SOUL statements can be used between a <var>[[BEGIN command|Begin]]</var> (or <var>[[MORE command|More]]</var>) command and an <var>[[End statement|End]]</var> statement. </p>
<p>External Call Facility (ECF) statements are listed under <var>[[#External|External]]</var>.</p>
<p>
<p>
The statements are listed in alphabetical order. Later sections in this topic provide other User Language syntax information. </p>
Various other [[List of Model 204 commands|Model 204 commands]] also have effects on the results of a SOUL request. </p>
<p>
<p>
All of the User Language statements listed can be used between a BEGIN (or MORE) command and an END (or END MORE) statement. </p>
The following notations prefix some of the statements in the presentation of the SOUL syntax: </p>
<p class="code"><nowiki>*
**
+
++
C
</nowiki></p>
<p>
<p>
All system control commands are presented in the
See the [[#Notation conventions|notation conventions]] section for an explanation of these usages, as well as other general comments about understanding the syntax of SOUL.  
[[List of Model 204 commands]]. </p>
</p>
&nbsp; <!-- Separates intro from toc -->
==Notation conventions==
<div id="User Language statements"></div>  <!-- In case there are links -->
<p>
<div id="SOUL statements"></div>  <div id="SOUL syntax"></div>
This page uses the following syntax notation conventions: </p>
<!--To make above link targets go to toc:-->
   
<!--==SOUL statements in alphabetical order==-->
<table>
 
<tr class="head">
===[[Add statement|Add]]===
<th>Syntax notation </th>
<table class="noBorder">
<th>Indicates that...</th>
</tr>
<tr>
<tr>
<td>Single asterisk (*) </td>
<td style="font-family:monoface; padding-right:0px">[[Statement syntax#Notation conventions|(**)]]</td>
<td>Statements can be preceded by an IN clause, if there is no reference to a previous set (label or list). See [[#IN clause syntax|IN clause syntax]] for more discussion.</td>
<td>{{Template:Add fieldname statement syntax}}</td></tr>
</tr>
</table>
 
<tr>
<table class="noBorder">
<td>Two asterisks (**) </td>
<tr><td style="padding:0em">{{Template:Add lob-fieldname statement syntax}} </td></tr>
<td>Construct can appear only within a record loop.</td>
</tr>
<tr>
<td>Plus sign (+) </td>
<td>Construct requires the optional Horizon feature.</td>
</tr>
<tr>
<td nowrap>Two plus signs (++) </td>
<td>Construct requires the optional User Language to Database 2 feature.</td>
</tr>
<tr>
<td>C</td>
<td>The syntax applies to a <var class="product">Model&nbsp;204</var> command as well as a User Language statement, except any %variable options or clauses.
<p>
<var class="product">Model&nbsp;204</var> commands are listed alphabetically and documented in [[List of Model 204 commands]]. </p></td>
</tr>
<tr>
<td>Lowercase italic </td>
<td>Constructs are replaced with variable information.</td>
</tr>
</table>
</table>
<ul>
<li>A field name (%%) variable can be used anywhere fieldname appears. The %%variable can contain its own subscript, separate from the field name subscript.
<p class="note"><b>Note: </b>
The subscript of an array element must be specified before a field name subscript.</p> </li>
<li>The lowercase constructs &mdash; retrieval-conditions, print-specifications, expression, subscript, attribute, and type &mdash; are discussed separately following the syntax summaries, beginning with [[#Value specification syntax|Value specification syntax]].  </li>
</ul>
==User Language statements==


<p class="syntaxUL"><b><sup>(**)</sup></b>ADD <span class="term">fieldname</span> = <span class="squareb">{</span><span class="term">value</span> <span class="squareb">|</span> (<span class="term">expression</span>)<span class="squareb">}</span>
===[[Array statement|Array]]===
   
   
  ADD <span class="term">lob-name</span>=BUFFER,<span class="term">position</span>,<span class="term">length</span>[RESERVE <span class="term">n</span> [BYTES]]
<p class="syntaxUL">Array <span class="squareb">[</span><span class="term">arrayname</span><span class="squareb">]</span> Occurs <span class="squareb">{</span><span class="term">n</span> <span class="squareb">|</span> Unknown<span class="squareb">}</span>
Depending On <span class="squareb">{</span><span class="term">itemname</span> <span class="squareb">|</span> <span class="term">%variable</span><span class="squareb">}</span>
<span class="squareb">[</span>After <span class="squareb">{</span><span class="term">itemname</span> <span class="squareb">|</span> <span class="term">arrayname</span><span class="squareb">}</span>
<span class="squareb">|</span> At <span class="squareb">{</span><span class="term">position</span> <span class="squareb">|</span> <span class="term">itemname</span> <span class="squareb">|</span> <span class="term">imagename1</span> <span class="squareb">|</span> <span class="term">arrayname</span><span class="squareb">}</span><span class="squareb">]</span>
</p>
</p>
===[[Assert statement|Assert]]===
   
   
<hr>
{{Template:Assert statement syntax}}
 
===[[Report generation#Audit statement|Audit]]===
   
   
<p class="syntaxUL">ARRAY [<span class="term">arrayname</span>] OCCURS <span class="squareb">{</span><span class="term">n</span> <span class="squareb">|</span> UNKNOWN<span class="squareb">}</span>
<p class="syntaxUL">Audit <span class="term">[[#Print specification syntax|print-specifications]]</span>
DEPENDING ON <span class="squareb">{</span><span class="term">itemname</span> <span class="squareb">|</span> <span class="term">%variable</span><span class="squareb">}</span>
[AFTER <span class="squareb">{</span><span class="term">itemname</span> <span class="squareb">|</span> <span class="term">arrayname</span><span class="squareb">}</span>
<span class="squareb">|</span> AT <span class="squareb">{</span><span class="term">position</span> <span class="squareb">|</span> <span class="term">itemname</span> <span class="squareb">|</span> <span class="term">imagename1</span> <span class="squareb">|</span> <span class="term">arrayname</span><span class="squareb">}</span>]
</p>
</p>
===[[Audit All Fieldgroup Information statement|Audit All Fieldgroup Information]] (AAFGI)===
<table class="noBorder">
<tr><td style="font-family:monoface; padding-right:0px">[[Statement syntax#Notation conventions|(**)]] </td>
<td>{{Template:AAFGI statement syntax}} </td></tr>
</table>
===[[Report generation#Audit All Information statement|Audit All Information]]===
   
   
<hr>
<table class="noBorder">
<tr><td>{{Template:Audit All Information statement syntax}} </td></tr>
<p class="syntaxUL">AUDIT <span class="term">print-specifications</span>
</table>
</p>
<hr>
<p class="syntaxUL">AUDIT ALL FIELDGROUP INFORMATION [CTOFIELDS]</p>
<hr>
<p class="syntaxUL"><span class="squareb">{</span>AUDIT ALL INFORMATION <span class="squareb">|</span> AAI<span class="squareb">}</span>
</p>


<hr>
===<b id="BACKOUT"></b>Backout===
<table class="noBorder">
<tr><td/>
<td><p class="syntaxUL">[[Backout statement|Backout]]</p> </td></tr>
</table>


<p class="syntaxUL"><b><sup>(C)</sup></b>BACKOUT</p>
===BYPASS===
<hr>
   
   
<p class="syntaxUL">BYPASS <span class="squareb">[</span>PENDING STATEMENT<span class="squareb">]</span> </p>
<p class="syntaxUL">BYPASS <span class="squareb">[</span>PENDING STATEMENT<span class="squareb">]</span> </p>
   
   
<hr>
===CALL===
   
   
<p class="syntaxUL">CALL <span class="squareb">{</span><span class="term">label</span> <span class="squareb">|</span> <span class="term">subname</span>  
<p class="syntaxUL">CALL <span class="squareb">{</span><span class="term">label</span> <span class="squareb">|</span> <span class="term">subname</span>
  [(<span class="squareb">[</span><span class="term">expression</span> <span class="squareb">|</span> <span class="term">%variable</span> <span class="squareb">|</span> [LIST] <span class="term">listname</span><span class="squareb">]</span> [,...])]<span class="squareb">}</span>
  <span class="squareb">[</span>(<span class="squareb">[</span><span class="term">expression</span> <span class="squareb">|</span> <span class="term">%variable</span> <span class="squareb">|</span> <span class="squareb">[</span>LIST<span class="squareb">]</span> <span class="term">listname</span><span class="squareb">]</span> <span class="squareb">[</span>,...<span class="squareb">]</span>)<span class="squareb">]</span><span class="squareb">}</span>
</p>
</p>
   
   
<hr>
===[[Data maintenance#Change statement|Change]]===
<table class="noBorder">
<tr><td style="font-family:monoface; padding-right:0px">[[Statement syntax#Notation conventions|(**)]] </td>
<td>{{Template:Change fieldname statement syntax (basic)}} </td></tr>
</table>
   
   
<p class="syntaxUL"><b><sup>(**)</sup></b>CHANGE <span class="term">fieldname</span> <span class="squareb">[</span>(<span class="term">subscript</span>)<span class="squareb">]</span> [= <span class="term">value1</span> <span class="squareb">|</span> (<span class="term">expression</span>)] TO (<span class="term">value2</span> <span class="squareb">|</span> (<span class="term">expression</span>))
<table class="noBorder">
<tr>
<td style="padding:0em">{{Template:Change lob-fieldname statement syntax}} </td></tr>
</table>
 
===[[Global_features#Using_the_CLEAR_statement|CLEAR]]===
   
   
  CHANGE <span class="term">lob-fieldname</span>,<span class="term">position1</span>,<span class="term">length</span> TO BUFFER,<span class="term">position2</span>,<span class="term">length</span>[RESERVE <span class="term">n</span> [BYTES]]
{{Template:Clear statement syntax}}
</p>
 
===CLEAR LIST===
<hr>
<table class="noBorder">
<tr><td style="font-family:monoface; padding-right:0px">[[Statement syntax#Notation conventions|(*)]] </td>
<p class="syntaxUL">CLEAR <span class="squareb">{</span>[[ALL <span class="squareb">|</span> TEMP <span class="squareb">|</span> LISTFDST <span class="squareb">|</span> POSITION] [GLOBAL]] OBJECTS
<td><p class="syntaxUL">[[Lists#Clearing a list|CLEAR LIST]] <span class="term">listname</span> </p></td></tr>
<span class="squareb">|</span> GLOBALS
</table>
<span class="squareb">|</span> GLOBAL <span class="squareb">{</span>IMAGE <span class="squareb">|</span> SCREEN <span class="squareb">|</span> MENU <span class="squareb">|</span> LIST <span class="squareb">|</span> FOUNDSET
 
<span class="squareb">|</span> POSITION [PERM <span class="squareb">|</span> TEMP]<span class="squareb">}</span>
===CLEAR ON===
<span class="squareb">{</span>'<span class="term">objectname</span>' <span class="squareb">|</span> <span class="term">%variable</span><span class="squareb">}</span><span class="squareb">}</span>
</p>
<hr>
<p class="syntaxUL"><b><sup>(*)</sup></b>CLEAR LIST <span class="term">listname</span> </p>
<hr>
   
   
<p class="syntaxUL">CLEAR ON
{{Template:Clear On statement syntax}}
<span class="squareb">{</span>ATTENTION <span class="squareb">|</span> ERROR <span class="squareb">|</span> FIELD CONSTRAINT CONFLICT
<span class="squareb">|</span> FIND CONFLICT <span class="squareb">|</span> RECORD LOCKING CONFLICT
<span class="squareb">|</span> MISSING FILE <span class="squareb">|</span> MISSING MEMBER<span class="squareb">}</span>
</p>


<hr>
===CLEAR TAG===
   
   
<p class="syntaxUL">CLEAR TAG <span class="squareb">{</span><span class="term">screenname</span> <span class="squareb">|</span> <span class="term">%screenname</span>:<span class="term">inputname</span><span class="squareb">}</span>
<p class="syntaxUL">CLEAR TAG <span class="squareb">{</span><span class="term">screenname</span> <span class="squareb">|</span> <span class="term">%screenname</span>:<span class="term">inputname</span><span class="squareb">}</span>
</p>
</p>
   
   
<hr>
===[[Close statement (external I/O)|Close]]===
   
   
<p class="syntaxUL">CLOSE  
<table class="noBorder">
<span class="squareb">{</span>DATASET <span class="squareb">{</span><span class="term">ext-filename</span> <span class="squareb">|</span> <span class="term">%variable</span><span class="squareb">}</span>  
<tr><td>{{Template:Close statement (external I/O) syntax}} </td></tr>
<span class="squareb">|</span> [EXTERNAL] <span class="squareb">{</span><span class="term">ext-filename</span> <span class="squareb">|</span> TERMINAL <span class="squareb">|</span> <span class="term">%variable</span><span class="squareb">}</span><span class="squareb">}</span>  
</table>
 
===CLOSE PROCESS===
<table class="noBorder">
<tr><td style="font-family:monoface; padding-right:0px">[[Statement syntax#Notation conventions|(+C)]] </td>
<td><p class="syntaxUL">CLOSE PROCESS    <BR>    <span class="squareb">{</span><span class="term">cid</span> <span class="squareb">|</span> <span class="term">processname</span> <span class="squareb">|</span> <span class="term">%variable</span><span class="squareb">}</span>   <BR>    <span class="squareb">[</span>SYNCLEVEL <span class="squareb">|</span> FLUSH <span class="squareb">|</span> <span class="term">%variable</span><span class="squareb">]</span> </p></td></tr>
</table>
 
<p class="syntaxUL">CLOSE PROCESS
<span class="squareb">{</span><span class="term">cid</span> <span class="squareb">|</span> <span class="term">processname</span> <span class="squareb">|</span> <span class="term">%variable</span><span class="squareb">}</span>
<span class="squareb">[</span>SYNCLEVEL <span class="squareb">|</span> CONFIRM <span class="squareb">|</span> FLUSH <span class="squareb">|</span> ERROR <span class="squareb">|</span> <span class="term">%variable</span><span class="squareb">]</span>
</p>
</p>


<hr>
===[[Commit statement|Commit]]===
   
   
<p class="syntaxUL"><b><sup>(+C)</sup></b>CLOSE PROCESS
{{Template:Commit statement syntax}}
    <span class="squareb">{</span><span class="term">cid</span> <span class="squareb">|</span> <span class="term">processname</span> <span class="squareb">|</span> <span class="term">%variable</span><span class="squareb">}</span>  
 
    [SYNCLEVEL <span class="squareb">|</span> FLUSH <span class="squareb">|</span> <span class="term">%variable</span>]
===[[Horizon SOUL interface#Confirm statement|Confirm]]===
</p>
<table class="noBorder">
<tr><td style="font-family:monoface; padding-right:0px">[[Statement syntax#Notation conventions|(+)]] </td>
<hr>
<td>{{Template:Confirm statement syntax}} </td></tr>
</table>
<p class="syntaxUL">CLOSE PROCESS
 
<span class="squareb">{</span><span class="term">cid</span> <span class="squareb">|</span> <span class="term">processname</span> <span class="squareb">|</span> <span class="term">%variable</span><span class="squareb">}</span>
===[[Horizon SOUL interface#Confirmed statement|Confirmed]]===
[SYNCLEVEL <span class="squareb">|</span> CONFIRM <span class="squareb">|</span> FLUSH <span class="squareb">|</span> ERROR <span class="squareb">|</span> <span class="term">%variable</span>]
<table class="noBorder">
</p>
<tr><td style="font-family:monoface; padding-right:0px">[[Statement syntax#Notation conventions|(+)]] </td>
<td>{{Template:Confirmed statement syntax}} </td></tr>
<hr>
</table>
<p class="syntaxUL">COMMIT <span class="squareb">[</span>RELEASE<span class="squareb">]</span></p>
<hr>
<p class="syntaxUL"><b><sup>(+)</sup></b>CONFIRM <span class="squareb">{</span><span class="term">cid</span> <span class="squareb">|</span> <span class="term">processname</span> <span class="squareb">|</span> <span class="term">%variable</span><span class="squareb">}</span>  
        REQSEND <span class="term">%variable</span></p>


<hr>
===CONTINUE===
<p class="syntaxUL"><b><sup>(+)</sup></b>CONFIRMED <span class="squareb">{</span><span class="term">cid</span> <span class="squareb">|</span> <span class="term">processname</span> <span class="squareb">|</span> <span class="term">%variable</span><span class="squareb">}</span>
</p>
<hr>
   
   
<p class="syntaxUL">CONTINUE</p>
<p class="syntaxUL">CONTINUE</p>
   
   
<hr>
===COUNT OCCURRENCES OF===
<table class="noBorder">
<tr><td style="font-family:monoface; padding-right:0px">[[Statement syntax#Notation conventions|(**)]] </td>
<td><p class="syntaxUL">COUNT OCCURRENCES OF <span class="term">fieldname</span></p></td></tr>
</table>
   
   
<p class="syntaxUL"><b><sup>(**)</sup></b>COUNT OCCURRENCES OF <span class="term">fieldname</span></p>
===COUNT RECORDS===
   
   
<hr>
<p class="syntaxUL">COUNT RECORDS <span class="squareb">{</span>IN <span class="term">label</span> <span class="squareb">|</span> ON <span class="squareb">[</span>LIST<span class="squareb">]</span> <span class="term">listname</span><span class="squareb">}</span></p>
   
   
<p class="syntaxUL">COUNT RECORDS <span class="squareb">{</span>IN <span class="term">label</span> <span class="squareb">|</span> ON [LIST] <span class="term">listname</span><span class="squareb">}</span></p>
===<b id="declare"></b>[[Declare statement|Declare]]===
   
   
<hr>
<p class="syntaxUL"><span class="squareb">[</span>[[Using variables and values in computation#Declaring|Declare]]<span class="squareb">]</span> <span class="term">declaration</span>
<p class="syntaxUL"><span class="squareb">[</span>DECLARE<span class="squareb">]</span> <span class="term">declaration</span>
</p>
</p>
   
   
<div style="margin-left: 20px; background-color: #fBfBfB;">
<p>
<p>
where <var class="term">declaration</var> is one of the following: </p>
where <var class="term">declaration</var> is one of the following: </p>
<div style="margin-left: 20px; background-color: #fBfBfB;">
<ul style="font-family: Consolas,monospace; display:table;">
<li>Label <i>labelname</i> <span class="squareb">[</span>Global <span class="squareb">|</span> Common<span class="squareb">]</span>
</li>
   
   
<ul style="font-family: Consolas,monospace">
<li>[[Lists#DECLARE LIST syntax|List]] listname <span class="squareb">  <br> [</span>In <span class="squareb">[</span>File <span class="squareb">|</span> <span class="squareb">[</span>Perm <span class="squareb">|</span> Temp<span class="squareb">]</span> Group<span class="squareb">]</span><span class="squareb">]</span> <i>name</i><span class="squareb">]</span>  <br> At <span class="term">location</span> <span class="squareb">[</span>Global <span class="squareb">|</span> Common<span class="squareb">]</span>
<li>LABEL <i>labelname</i> [GLOBAL <span class="squareb">|</span> COMMON]
</li>
   
   
<li>LIST listname [IN [FILE <span class="squareb">|</span> [PERM <span class="squareb">|</span> TEMP] GROUP]] <i>name</i>] [GLOBAL <span class="squareb">|</span> COMMON]
<li><var>Image</var> block:
{{Template:Image statement syntax}} </li>
   
   
<li>IMAGE <i>imagename</i>[AT <span class="squareb">{</span><i>itemname</i> <span class="squareb">|</span> <i>imagename1</i> <span class="squareb">|</span> <i>arrayname</i><span class="squareb">}</span> <br>
<li>{{Template:Menu statement syntax}} </li>
      <span class="squareb">|</span> GLOBAL [PERMANENT <span class="squareb">|</span> TEMPORARY] <br>
      <span class="squareb">|</span> [PERMANENT <span class="squareb">|</span> TEMPORARY] GLOBAL <span class="squareb">|</span> COMMON]
   
   
<li>MENU <i>menuname</i> [GLOBAL [PERMANENT <span class="squareb">|</span> TEMPORARY] <br>
<li>{{Template:Screen statement syntax}} </li>
      <span class="squareb">|</span> [PERMANENT <span class="squareb">|</span> TEMPORARY] GLOBAL <span class="squareb">|</span> COMMON]
   
   
<li>SCREEN <i>screenname</i> [GLOBAL [PERMANENT <span class="squareb">|</span> TEMPORARY] <br>
<li><i>%variable</i> <span class="squareb">[</span>Is<span class="squareb">]</span> <span class="squareb">{</span>Fixed <span class="squareb">[</span>Dp <i>n</i><span class="squareb">]</span> <span class="squareb">|</span> Float<span class="squareb">}</span> <span class="squareb">[</span>Array (<i>d1</i> <span class="squareb">[</span>,<i>d2</i> <span class="squareb">[</span>,<i>d3</i><span class="squareb">]</span><span class="squareb">]</span>)<span class="squareb">]</span> <br>
        <span class="squareb">|</span> [PERMANENT <span class="squareb">|</span> TEMPORARY] GLOBAL <span class="squareb">|</span> COMMON]
          <span class="squareb">[</span>[[Initial clause in %variable declaration|Initial]](<i>numeric-expression</i>)<span class="squareb">]</span> <span class="squareb">[</span>Static<span class="squareb">]</span> <span class="squareb">[</span>Common<span class="squareb">]</span>
</li>
   
   
<li><i>%variable</i> [IS] <span class="squareb">{</span>FIXED [DP <i>n</i>] <span class="squareb">|</span> FLOAT<span class="squareb">}</span> [ARRAY (<i>d1</i> [,<i>d2</i> [,<i>d3</i>]])] <br>
<li><i>%variable</i> <span class="squareb">[</span>Is<span class="squareb">]</span> String <span class="squareb">[</span>Len <i>n</i><span class="squareb">]</span> <span class="squareb">[</span>Dp <span class="squareb">{</span><i>n</i> <span class="squareb">|</span> *<span class="squareb">}</span><span class="squareb">]</span> <span class="squareb">[</span>Array (<i>d1</i> <span class="squareb">[</span>,<i>d2</i><span class="squareb">[</span>,<i>d3</i><span class="squareb">]</span><span class="squareb">]</span>)<span class="squareb">]</span> <br>
           [INITIAL(<i>numeric-expression</i>)] [STATIC] [COMMON]
           <span class="squareb">[</span>No Field Save<span class="squareb">]</span> <span class="squareb">[</span>Common<span class="squareb">]</span> <br>
          <span class="squareb">[</span>[[Initial clause in %variable declaration|Initial]]('<i>EBCDIC-string</i>' <span class="squareb">|</span> <i>expression</i>)<span class="squareb">]</span> <span class="squareb">[</span>Static<span class="squareb">]</span>
</li>
   
   
<li><i>%variable</i> [IS] STRING [LEN <i>n</i>] [DP <span class="squareb">{</span><i>n</i> <span class="squareb">|</span> *<span class="squareb">}</span>] [ARRAY (<i>d1</i> [,<i>d2</i>[,<i>d3</i>]])] <br>
<li>[[Subroutines#DECLARE SUBROUTINE statement|Subroutine]] <i>subname</i> <br> <span class="squareb">[</span>(<i>type</i> <span class="squareb">[</span>Input <span class="squareb">|</span> Output <span class="squareb">|</span> Input Output<span class="squareb">]</span> <span class="squareb">[</span>,...<span class="squareb">]</span>)<span class="squareb">]</span> 
          [NO FIELD SAVE] [COMMON] <br>
          [INITIAL('<i>EBCDIC-string</i>' <span class="squareb">|</span> <i>expression</i>)] [STATIC]
<li>SUBROUTINE <i>subname</i> [(<i>type</i> [INPUT <span class="squareb">|</span> OUTPUT <span class="squareb">|</span> INPUT OUTPUT] [,...])]
</ul>
</div> <!-- declaration indent -->
<div style="margin-left: 40px; background-color: #fBfBfB;">
<p>
<p>
where <var class="term">type</var> is one of the following:</p>
where <var class="term">type</var> is one of the following: </p>
<ul>
<ul>
<li>Scalar %variable of the following format:
<li>Scalar %variable of the following format:
<ul style="font-family: Consolas,monospace">
<p class="code"><span class="squareb">{</span>String <span class="squareb">[</span>Len<span class="squareb">]</span> <i>n</i> <span class="squareb">[</span>DP <span class="squareb">{</span><i>n</i> <span class="squareb">|</span> *<span class="squareb">}</span><span class="squareb">]</span> <span class="squareb">|</span> <span class="squareb">[</span>Fixed <span class="squareb">[</span>Dp <i>n</i><span class="squareb">]</span> <span class="squareb">|</span> Float<span class="squareb">]</span><span class="squareb">}</span> </p>
<li><span class="squareb">{</span>STRING [LEN] <i>n</i> [DP <span class="squareb">{</span><i>n</i> <span class="squareb">|</span> *<span class="squareb">}</span>] <span class="squareb">|</span> [FIXED [DP <i>n</i>] <span class="squareb">|</span> FLOAT]<span class="squareb">}</span> </li></ul>
</li>
</li>
   
   
<li>Array %variable of the following format:
<li>Array %variable of the following format:
<ul style="font-family: Consolas,monospace">
<p class="code"><span class="squareb">{</span>String <span class="squareb">[</span>Len <i>n</i><span class="squareb">]</span> <span class="squareb">[</span>Dp <span class="squareb">[</span><i>n</i> <span class="squareb">|</span> *<span class="squareb">}</span><span class="squareb">]</span> <span class="squareb">[</span>Array (* <span class="squareb">[</span>,*<span class="squareb">[</span>,*<span class="squareb">]</span><span class="squareb">]</span>) <span class="squareb">[</span>No Field Save<span class="squareb">]</span><span class="squareb">]</span> <br>
<li><span class="squareb">{</span>STRING [LEN <i>n</i>] [DP [<i>n</i> <span class="squareb">|</span> *<span class="squareb">}</span>] [ARRAY (* [,*[,*]]) [NO FIELD SAVE]] <br>
  <span class="squareb">|</span> <span class="squareb">[</span>Fixed <span class="squareb">[</span>Dp <i>n</i><span class="squareb">]</span> <span class="squareb">|</span> Float<span class="squareb">]</span> <span class="squareb">[</span>Array (* <span class="squareb">[</span>,*<span class="squareb">[</span>,*<span class="squareb">]</span><span class="squareb">]</span>)<span class="squareb">]</span><span class="squareb">}</span> </p>
  <span class="squareb">|</span> [FIXED [DP <i>n</i>] <span class="squareb">|</span> FLOAT] [ARRAY (* [,*[,*]])]<span class="squareb">}</span> </li></ul>
</li>
</li>
   
   
<li>A list of records of the following format:
<li>A list of records of the following format:
<ul style="font-family: Consolas,monospace">
<p class="code"><span class="squareb">[</span>List<span class="squareb">]</span> <span class="squareb">[</span>In <span class="squareb">{</span>File <span class="squareb">|</span> <span class="squareb">[</span>Perm <span class="squareb">|</span> Temp<span class="squareb">]</span> Group<span class="squareb">}</span> <i>name</i><span class="squareb">]</span> </p>
<li>[LIST] [IN <span class="squareb">{</span>FILE <span class="squareb">|</span> [PERM <span class="squareb">|</span> TEMP] GROUP<span class="squareb">}</span> <i>name</i>] </li></ul>
</li></ul>
</li>
</ul>
</ul>
   
   
</div> <!-- type indentation -->
</div> <!-- type indentation/background -->
 
===DEFAULT CURSOR===
   
   
<hr>
<p class="syntaxUL">DEFAULT CURSOR <span class="squareb">[</span>READ <span class="squareb">|</span> REREAD <span class="squareb">|</span> PRINT<span class="squareb">]</span>
<p class="syntaxUL">DEFAULT CURSOR [READ <span class="squareb">|</span> REREAD <span class="squareb">|</span> PRINT]  
               <span class="squareb">{</span>ITEMID <span class="term">n</span> <span class="squareb">|</span> <span class="term">itemname</span> <span class="squareb">|</span> ROW <span class="term">n</span> COLUMN <span class="term">m</span><span class="squareb">}</span>
               <span class="squareb">{</span>ITEMID <span class="term">n</span> <span class="squareb">|</span> <span class="term">itemname</span> <span class="squareb">|</span> ROW <span class="term">n</span> COLUMN <span class="term">m</span><span class="squareb">}</span>
</p>
</p>
===DEFAULT===
<p class="syntaxUL">DEFAULT <span class="squareb">{</span>TITLE
        <span class="squareb">|</span> PROMPT
        <span class="squareb">|</span> INPUT <span class="squareb">[</span>DEBLANK <span class="squareb">|</span> NODEBLANK<span class="squareb">]</span> <span class="squareb">[</span>PAD WITH '<span class="term">c</span>'<span class="squareb">]</span> <span class="squareb">[</span>LEN <span class="term">m</span> <span class="squareb">[</span>DP <span class="squareb">[</span><span class="term">k</span> <span class="squareb">|</span> *<span class="squareb">}</span><span class="squareb">]</span><span class="squareb">]</span> <span class="squareb">[</span>UPCASE <span class="squareb">|</span> NOCASE<span class="squareb">]</span>
        <span class="squareb">|</span> <span class="squareb">[</span>TAG <span class="squareb">[</span><span class="term">attributes</span><span class="squareb">]</span> <span class="squareb">[</span>WITH '<span class="term">c</span>'<span class="squareb">]</span><span class="squareb">}</span>
        <span class="squareb">[</span><span class="squareb">[</span>READ<span class="squareb">]</span> <span class="term">attributes</span><span class="squareb">]</span> <span class="squareb">[</span>REREAD <span class="term">attributes</span><span class="squareb">]</span> <span class="squareb">[</span>PRINT <span class="term">attributes</span><span class="squareb">]</span>


<hr>
DEFAULT SKIP <span class="term">n</span> POSITIONS<span class="squareb">[</span>S<span class="squareb">]</span>
            <span class="squareb">[</span>INITIAL <span class="squareb">{</span>NULL <span class="squareb">|</span> <span class="term">character</span> <span class="squareb">|</span> BLANK<span class="squareb">}</span><span class="squareb">]</span>


<p class="syntaxUL">DEFAULT <span class="squareb">{</span>TITLE
DEFAULT <span class="squareb">[</span>TYPE<span class="squareb">]</span>
        <span class="squareb">|</span> PROMPT
<span class="squareb">{</span>STRING <span class="squareb">|</span> BINARY <span class="squareb">|</span> PACKED <span class="squareb">|</span> ZONED <span class="squareb">|</span> FLOAT <span class="squareb">|</span> EFORMAT<span class="squareb">}</span>
        <span class="squareb">|</span> INPUT [DEBLANK <span class="squareb">|</span> NODEBLANK] [PAD WITH '<span class="term">c</span>'] [LEN <span class="term">m</span> [DP [<span class="term">k</span> <span class="squareb">|</span> *<span class="squareb">}</span>]] [UPCASE <span class="squareb">|</span> NOCASE]  
<span class="squareb">{</span>LEN <span class="squareb">{</span><span class="term">n</span> <span class="squareb">|</span> UNKNOWN<span class="squareb">}</span> <span class="squareb">|</span> BITS <span class="term">n</span> <span class="squareb">|</span> DIGITS <span class="term">n</span><span class="squareb">}</span>
        <span class="squareb">|</span> [TAG [<span class="term">attributes</span>] [WITH '<span class="term">c</span>']<span class="squareb">}</span>  
<span class="squareb">[</span>DP <span class="squareb">{</span><span class="term">k</span> <span class="squareb">|</span> *<span class="squareb">}</span><span class="squareb">]</span> <span class="squareb">[</span>BP <span class="term">n</span><span class="squareb">]</span>
        [[READ] <span class="term">attributes</span>] [REREAD <span class="term">attributes</span>] [PRINT <span class="term">attributes</span>]
<span class="squareb">[</span>SIGNED <span class="squareb">|</span> UNSIGNED<span class="squareb">]</span> <span class="squareb">[</span>PAD <span class="squareb">{</span>BLANK <span class="squareb">|</span> <span class="term">character</span> <span class="squareb">|</span> NULL<span class="squareb">}</span><span class="squareb">]</span>
<span class="squareb">[</span>STRIP <span class="squareb">|</span> NOSTRIP<span class="squareb">]</span> <span class="squareb">[</span>JUSTIFY <span class="squareb">{</span>LEFT <span class="squareb">|</span> RIGHT<span class="squareb">}</span><span class="squareb">]</span>
<span class="squareb">[</span>INITIAL <span class="squareb">{</span>BLANK <span class="squareb">|</span> ZERO <span class="squareb">|</span> NULL <span class="squareb">|</span> <span class="term">literal</span><span class="squareb">}</span><span class="squareb">]</span>
</p>
</p>


<hr>
===DELETE===
<table class="noBorder">
<tr><td style="font-family:monoface; padding-right:0px">[[Statement syntax#Notation conventions|(**)]] </td>
<td><p class="syntaxUL">[[Data maintenance#DELETE statement|DELETE]] <span class="term">fieldname</span> <span class="squareb">[</span>(<span class="term">[[Processing_multiply_occurring_fields_and_field_groups#DELETE_statement_rules|subscript]]</span>)<span class="squareb">]</span> <span class="squareb">[</span><b></b>= <span class="term">value</span> <span class="squareb">|</span> (<span class="term">expression</span>)<span class="squareb">]</span>
</p></td></tr>
</table>


<p class="syntaxUL">DEFAULT SKIP <span class="term">n</span> POSITIONS[S]  
<table class="noBorder">
            [INITIAL <span class="squareb">{</span>NULL <span class="squareb">|</span> <span class="term">character</span> <span class="squareb">|</span> BLANK<span class="squareb">}</span>]
<tr><td style="font-family:monoface; padding-right:0px">[[Statement syntax#Notation conventions|(**)]] </td>
</p>
<td><p class="syntaxUL">[[Data maintenance#Deleting a field group|DELETE FIELDGROUP]] <span class="squareb">[</span><span class="term">fieldgroupname</span><span class="squareb">]</span> <span class="squareb">[</span>(<span class="term">[[Processing_multiply_occurring_fields_and_field_groups#DELETE_statement_rules|subscript]]</span>)<span class="squareb">]</span> <span class="squareb">[</span><b></b>= <span class="term">value</span> <span class="squareb">|</span> (<span class="term">expression</span>)<span class="squareb">]</span>
</p></td></tr>
</table>


<hr>
===DELETE EACH===
<table class="noBorder">
<tr><td style="font-family:monoface; padding-right:0px">[[Statement syntax#Notation conventions|(**)]] </td>
<td><p class="syntaxUL">DELETE EACH <span class="term">fieldname</span></p> </td></tr>
</table>
   
   
<p class="syntaxUL">DEFAULT [TYPE]
===[[Data maintenance#DELETE RECORD statement|DELETE RECORD]]===
<span class="squareb">{</span>STRING <span class="squareb">|</span> BINARY <span class="squareb">|</span> PACKED <span class="squareb">|</span> ZONED <span class="squareb">|</span> FLOAT <span class="squareb">|</span> EFORMAT<span class="squareb">}</span>
<table class="noBorder">
<span class="squareb">{</span>LEN <span class="squareb">{</span><span class="term">n</span> <span class="squareb">|</span> UNKNOWN<span class="squareb">}</span> <span class="squareb">|</span> BITS <span class="term">n</span> <span class="squareb">|</span> DIGITS <span class="term">n</span><span class="squareb">}</span>  
<tr><td style="font-family:monoface; padding-right:0px">[[Statement syntax#Notation conventions|(**)]] </td>
[DP <span class="squareb">{</span><span class="term">k</span> <span class="squareb">|</span> *<span class="squareb">}</span>] [BP <span class="term">n</span>]
<td><p class="syntaxUL">DELETE RECORD </p> </td></tr>
[SIGNED <span class="squareb">|</span> UNSIGNED] [PAD <span class="squareb">{</span>BLANK <span class="squareb">|</span> <span class="term">character</span> <span class="squareb">|</span> NULL<span class="squareb">}</span>]  
</table>
[STRIP <span class="squareb">|</span> NOSTRIP] [JUSTIFY <span class="squareb">{</span>LEFT <span class="squareb">|</span> RIGHT<span class="squareb">}</span>]
[INITIAL <span class="squareb">{</span>BLANK <span class="squareb">|</span> ZERO <span class="squareb">|</span> NULL <span class="squareb">|</span> <span class="term">literal</span><span class="squareb">}</span>]
</p>


<hr>
===DELETE RECORDS===
   
   
<p class="syntaxUL"><b><sup>(**)</sup></b>DELETE <span class="term">fieldname</span> <span class="squareb">[</span>(<span class="term">subscript</span>)<span class="squareb">]</span> <span class="squareb">[</span><b></b>= <span class="term">value</span> |(<span class="term">expression</span>)<span class="squareb">]</span>
<p class="syntaxUL">DELETE <span class="squareb">[</span>ALL<span class="squareb">]</span> RECORDS <span class="squareb">{</span>IN <span class="term">label</span> <span class="squareb">|</span> ON <span class="squareb">[</span>LIST<span class="squareb">]</span> <span class="term">listname</span><span class="squareb">}</span>
</p>
</p>
<hr>
   
   
<p class="syntaxUL"><b><sup>(**)</sup></b>DELETE EACH <span class="term">fieldname</span></p>
===END BLOCK===
<p class="syntaxUL">END BLOCK <span class="term">label</span> </p>
===End===
   
   
<hr>
<p class="syntaxUL">END <span class="squareb">{</span>FIND <span class="squareb">|</span> IF <span class="squareb">|</span> FOR <span class="squareb">|</span> ON <span class="squareb">|</span> REPEAT <span class="squareb">|</span> STORE <span class="squareb">|</span> SUBROUTINE<span class="squareb">}</span> [<span class="term">label</span><span class="squareb">]</span>
 
END <span class="squareb">{</span>ARRAY <span class="squareb">|</span> IMAGE <span class="squareb">|</span> MENU <span class="squareb">|</span> SCREEN<span class="squareb">}</span>
 
[[End statement|End]] <span class="squareb">[</span>MORE <span class="squareb">|</span> NORUN <span class="squareb">|</span> USE<span class="squareb">]</span>...</p>
 
===END UPDATE===
   
   
<p class="syntaxUL"><b><sup>(**)</sup></b>DELETE RECORD </p>
<p class="syntaxUL">END UPDATE</p>
 
===[[External statement|External]]===
   
   
<hr>
{{Template:External statement syntax}}
 
===FILE RECORDS===
   
   
<p class="syntaxUL">DELETE [ALL] RECORDS <span class="squareb">{</span>IN <span class="term">label</span> <span class="squareb">|</span> ON [LIST] <span class="term">listname</span><span class="squareb">}</span>
<p class="syntaxUL">FILE RECORDS <span class="squareb">{</span>IN <span class="term">label</span> <span class="squareb">|</span> ON <span class="squareb">[</span>LIST<span class="squareb">]</span> <span class="term">listname</span><span class="squareb">}</span>
            UNDER <span class="term">fieldname</span> = <span class="squareb">{</span><span class="term">value</span> <span class="squareb">|</span> (<span class="term">expression</span>)<span class="squareb">}</span>
</p>
</p>
   
   
<hr>
===[[Find Records statement|Find Records]]===
<table class="noBorder">
<tr><td style="font-family:monoface; padding-right:0px">[[Statement syntax#Notation conventions|(*)]] </td>
<td><p class="syntaxUL"><span class="squareb">{</span>FIND <span class="squareb">[</span><span class="squareb">[</span>ALL<span class="squareb">]</span> RECORDS<span class="squareb">]</span> <span class="squareb">|</span> FD <span class="squareb">}</span>        <br>  <span class="squareb">[</span>IN <span class="term">label</span> <span class="squareb">|</span> ON <span class="squareb">[</span>LIST<span class="squareb">]</span> <span class="term">listname</span><span class="squareb">]</span>        <br>  <span class="squareb">[</span>FOR WHICH <span class="squareb">|</span> WITH<span class="squareb">]</span> <span class="term">[[#Retrieval condition syntax|retrieval-conditions]]</span></p></td></tr>
</table>
 
===[[Find And Reserve statement|Find And Reserve]]===
<table class="noBorder">
<tr><td style="font-family:monoface; padding-right:0px">[[Statement syntax#Notation conventions|(*)]] </td>
<td><p class="syntaxUL"><span class="squareb">{</span>FIND AND RESERVE <span class="squareb">[</span><span class="squareb">[</span>ALL<span class="squareb">]</span> RECORDS<span class="squareb">]</span> <span class="squareb">|</span> FDR<span class="squareb">}</span>  <br>  <span class="squareb">[</span>IN <span class="term">label</span> <span class="squareb">|</span> ON <span class="squareb">[</span>LIST<span class="squareb">]</span> <span class="term">listname</span><span class="squareb">]</span>  <br>  <span class="squareb">[</span>FOR WHICH <span class="squareb">|</span> WITH<span class="squareb">]</span> <span class="term">[[#Retrieval condition syntax|retrieval-conditions]]</span> </p></td></tr>
</table>
 
===[[Value loops#Find All Values statement|Find Values Of (FDV)]]===
<table class="noBorder">
<tr>
<td style="padding:0em">{{Template: Find Values Of statement syntax}} </td></tr>
</table>
 
===FIND AND PRINT COUNT===
<table class="noBorder">
<tr><td style="font-family:monoface; padding-right:0px">[[Statement syntax#Notation conventions|(*)]] </td>
<td><p class="syntaxUL"><span class="squareb">{</span>Find And Print Count <span class="squareb">|</span> FPC<span class="squareb">}</span>  <br>  <span class="squareb">[</span><span class="term">[[#Retrieval condition syntax|retrieval-conditions]]</span><span class="squareb">]</span>
</p></td></tr>
</table>
 
===[[Find Records statement|Find Without Locks]]===
<table class="noBorder">
<tr><td style="font-family:monoface; padding-right:0px">[[Statement syntax#Notation conventions|(*)]] </td>
<td><p class="syntaxUL"><span class="squareb">{</span>Find Without Locks <span class="squareb">[</span><span class="squareb">[</span>ALL<span class="squareb">]</span> Records<span class="squareb">]</span> <span class="squareb">|</span> FDWOL<span class="squareb">}</span><br>  <span class="squareb">[</span>In <span class="term">label</span> <span class="squareb">|</span> On <span class="squareb">[</span>LIST<span class="squareb">]</span> <span class="term">listname</span><span class="squareb">]</span>
  <span class="squareb">[</span>For Which <span class="squareb">|</span> With<span class="squareb">]</span> <span class="term">[[#Retrieval condition syntax|retrieval-conditions]]</span></p></td></tr>
</table>
 
===FLUSH PROCESS===
   
   
<p class="syntaxUL">END BLOCK <span class="term">label</span> </p>
<p class="syntaxUL">FLUSH PROCESS <span class="squareb">{</span><span class="term">cid</span> <span class="squareb">|</span> <span class="term">processname</span> <span class="squareb">|</span> <span class="term">%variable</span><span class="squareb">}</span></p>
   
   
<hr>
===FOR EACH OCCURRENCE===
<table class="noBorder">
<tr><td style="font-family:monoface; padding-right:0px">[[Statement syntax#Notation conventions|(**)]] </td>
<td><p class="syntaxUL">FOR <span class="squareb">{</span>EACH <span class="squareb">|</span> <span class="term">k</span><span class="squareb">}</span> <span class="squareb">{</span>OCCURRENCE <span class="squareb">|</span> OCCURRENCES<span class="squareb">}</span> <span class="term">OF fieldname</span> </p></td></tr>
</table>
   
   
<p class="syntaxUL">END <span class="squareb">{</span>FIND <span class="squareb">|</span> IF <span class="squareb">|</span> FOR <span class="squareb">|</span> ON <span class="squareb">|</span> REPEAT <span class="squareb">|</span> STORE <span class="squareb">|</span> SUBROUTINE<span class="squareb">}</span> [<span class="term">label</span>]
===<b id="FOR EACH RECORD"></b>[[Record loops#For Each Record statement|For Each Record]]===
</p>
<table class="noBorder">
<tr><td style="font-family:monoface; padding-right:0px">[[Statement syntax#Notation conventions|(*)]] </td>
<td>{{Template:For Each Record statement syntax}}</td></tr>
</table>
<p class="note"><b>Note:</b> For <var class="term">retrieval-conditions</var>, see [[#Retrieval condition syntax|Retrieval condition syntax]], below. </p>
 
===FOR EACH VALUE OF===
<table class="noBorder">
<tr><td style="font-family:monoface; padding-right:0px">[[Statement syntax#Notation conventions|(*)]] </td>
<td><p class="syntaxUL">FOR <span class="squareb">{</span>EACH <span class="squareb">|</span> <span class="term">k</span><span class="squareb">}</span> <span class="squareb">{</span>VALUE <span class="squareb">|</span> VALUES<span class="squareb">}</span> <span class="term">OF fieldname</span> <br>    <span class="squareb">[</span>FROM <span class="squareb">{</span><span class="term">value1</span> <span class="squareb">|</span> (<span class="term">expression1</span>)<span class="squareb">}</span><span class="squareb">]</span> <span class="squareb">[</span>TO <span class="squareb">{</span><span class="term">value2</span> <span class="squareb">|</span> (<span class="term">expression2</span>)<span class="squareb">}</span><span class="squareb">]</span> <span class="squareb">[</span><span class="squareb">[</span>NOT<span class="squareb">]</span> LIKE <span class="term">pattern</span><span class="squareb">]</span> <br>    <span class="squareb">[</span>IN <span class="squareb">[</span>ASCENDING <span class="squareb">|</span> DESCENDING<span class="squareb">]</span> <span class="squareb">[</span>CHARACTER <span class="squareb">|</span> NUMERICAL<span class="squareb">]</span> <span class="squareb">[</span>RIGHT-ADJUSTED<span class="squareb">]</span> ORDER<span class="squareb">]</span>
</p></td></tr>
</table>
   
   
<hr>
===FOR EACH VALUE IN===
   
   
<p class="syntaxUL">END <span class="squareb">{</span>ARRAY <span class="squareb">|</span> IMAGE <span class="squareb">|</span> MENU <span class="squareb">|</span> SCREEN<span class="squareb">}</span></p>
  <p class="syntaxUL">FOR <span class="squareb">{</span>EACH <span class="squareb">|</span> <span class="term">k</span><span class="squareb">}</span> <span class="squareb">{</span>VALUE <span class="squareb">|</span> VALUES<span class="squareb">}</span> IN <span class="term">label</span> </p>
   
   
<hr>
===FOR RECORD NUMBER===
<table class="noBorder">
<tr><td style="font-family:monoface; padding-right:0px">[[Statement syntax#Notation conventions|(*)]] </td>
<td><p class="syntaxUL">FOR RECORD NUMBER <span class="squareb">{</span><span class="term">value</span> <span class="squareb">|</span> (<span class="term">expression</span>)<span class="squareb">}</span>
</p></td></tr>
</table>
   
   
<p class="syntaxUL">END [MORE <span class="squareb">|</span> NORUN <span class="squareb">|</span> USE]...</p>
===FOR RECORD NUMBER IN===
   
   
<hr>
<p class="syntaxUL">FOR RECORD NUMBER <span class="squareb">{</span><span class="term">value</span> <span class="squareb">|</span> IN <span class="term">label</span><span class="squareb">}</span> <span class="squareb">[</span>OPTIMIZING FNV<span class="squareb">]</span>
</p>
 
===[[For %i statement|For %var From %exp1 To %exp2 By %exp3]]===
<table class="noBorder">
<tr>
<td style="padding:0em">{{Template:For %i statement syntax}} </td></tr>
</table>
   
   
<p class="syntaxUL">END UPDATE</p>
<p class="note"><b>Note:</b> The <var>By</var> clause, when omitted, defaults to a value of 1. </p>
 
===[[Images#Identify statement|Identify]]===
   
   
<hr>
<table class="noBorder" display="table-column">
<tr><td>{{Template:Identify statement syntax}} </td></tr>
</table>
 
===<b id="IF...THEN...ELSE"></b><b id="ifStmt"></b>[[If statement|If]]...Then...ElseIf...Else===
<table class="noBorder">
<tr><td style="font-family:monoface; padding-right:0px">[[Statement syntax#Notation conventions|(C)]] </td>
<td><p class="syntaxUL">If <span class="term">expression</span> Then <span class="squareb">[</span><span class="term">statement</span><span class="squareb">]</span>  <br>  <span class="squareb">[</span><span class="term">statement</span><span class="squareb">]</span> <br>  <span class="squareb">...</span><br><span class="squareb">[</span><br>ElseIf <span class="term">expression</span> Then <span class="squareb">[</span><span class="term">statement</span><span class="squareb">]</span> <br>  <span class="squareb">[</span><span class="term">statement</span><span class="squareb">]</span> <br>  <span class="squareb">...</span><br><span class="squareb">] ...</span><br><span class="squareb">[</span><br>Else <span class="squareb">[</span><span class="term">statement</span><span class="squareb">]</span> <br>  <span class="squareb">[</span><span class="term">statement</span><span class="squareb">]</span> <br>  <span class="squareb">...</span>  <br><span class="squareb">]</span>  <br>End If
</p></td></tr>
</table>
 
===[[Image statement or block|Image]]===
<var>Image</var> block:
<table class="noBorder">
<tr><td style="padding:0em">{{Template:Image statement syntax}}</td></tr>
</table>
 
===INCLUDE===
<table class="noBorder">
<tr><td style="font-family:monoface; padding-right:0px">[[Statement syntax#Notation conventions|(*, C)]] </td>
<td><p class="syntaxUL">INCLUDE <span class="term">procedurename</span>  </p></td></tr>
</table>
 
===INPUT===
   
   
<p class="syntaxUL">FILE RECORDS <span class="squareb">{</span>IN <span class="term">label</span> <span class="squareb">|</span> ON [LIST] <span class="term">listname</span><span class="squareb">}</span>  
<p class="syntaxUL">INPUT <span class="term">inputname</span> <span class="squareb">[</span>AT <span class="squareb">[</span>COLUMN<span class="squareb">]</span> <span class="term">n</span><span class="squareb">]</span>
            UNDER <span class="term">fieldname</span> = <span class="squareb">{</span><span class="term">value</span> <span class="squareb">|</span> (<span class="term">expression</span>)<span class="squareb">}</span>
<span class="squareb">[</span>TO <span class="squareb">[</span>COLUMN<span class="squareb">]</span> <span class="term">m</span> <span class="squareb">|</span> <span class="squareb">[</span>LEN <span class="term">m</span><span class="squareb">]</span> DP <span class="squareb">{</span><span class="term">k</span> <span class="squareb">|</span> *<span class="squareb">}</span><span class="squareb">]</span><span class="squareb">]</span>
<span class="squareb">[</span>UPCASE <span class="squareb">|</span> NOCASE<span class="squareb">]</span> <span class="squareb">[</span>DEFAULT '<span class="term">value</span>'<span class="squareb">]</span>
<span class="squareb">[</span>DEBLANK <span class="squareb">|</span> NODEBLANK<span class="squareb">]</span> <span class="squareb">[</span>PAD WITH '<span class="term">c</span>'<span class="squareb">]</span>
<span class="squareb">[</span>REQUIRED <span class="squareb">|</span> ALPHA <span class="squareb">|</span> ALPHANUM <span class="squareb">|</span> MUSTFILL
<span class="squareb">|</span> ONEOF <span class="term">literal</span> <span class="squareb">[</span>, <span class="term">literal</span><span class="squareb">]</span>...
<span class="squareb">|</span> <span class="squareb">[</span>NUMERIC<span class="squareb">]</span> <span class="squareb">[</span>RANGE <span class="term">lo</span> <span class="squareb">[</span>TO<span class="squareb">]</span> <span class="term">hi</span> <span class="squareb">[</span>AND <span class="term">lo</span> <span class="squareb">[</span>TO<span class="squareb">]</span> <span class="term">hi</span><span class="squareb">]</span> ...<span class="squareb">]</span>
<span class="squareb">|</span> VERIFY '<span class="term">characters</span>'<span class="squareb">]</span>...
<span class="squareb">[</span><span class="squareb">[</span>READ<span class="squareb">]</span> <span class="term">attributes</span><span class="squareb">]</span> <span class="squareb">[</span>REREAD <span class="term">attributes</span><span class="squareb">]</span> <span class="squareb">[</span>PRINT <span class="term">attributes</span><span class="squareb">]</span>
<span class="squareb">[</span>TAG <span class="squareb">[</span><span class="term">attributes</span><span class="squareb">]</span> <span class="squareb">[</span>WITH '<span class="term">c</span>'<span class="squareb">]</span><span class="squareb">]</span> <span class="squareb">[</span>ITEMID <span class="term">n</span><span class="squareb">]</span>
</p>
</p>


<hr>
===INSERT===
<p class="syntaxUL">INSERT <span class="term">fieldname</span> <span class="squareb">[</span>(<span class="term">subscript</span>)<span class="squareb">]</span> = <span class="squareb">{</span><span class="term">value</span> <span class="squareb">|</span> (<span class="term">expression</span>)<span class="squareb">}</span>
</p>
===[[Horizon SOUL interface#Invite statement|Invite]]===
<table class="noBorder">
<tr><td style="font-family:monoface; padding-right:0px">[[Statement syntax#Notation conventions|(+)]] </td>
<td>{{Template:Invite statement syntax}} </td></tr>
</table>
   
   
<p class="syntaxUL"><b><sup>(*)</sup></b>FIND [AND RESERVE] [ALL] RECORDS
===IS===
    [IN <span class="term">label</span> <span class="squareb">|</span> ON [LIST] <span class="term">listname</span>]
    [FOR WHICH <span class="squareb">|</span> WITH] <span class="term">retrieval-conditions</span></p>
 
<hr>
   
   
<p class="syntaxUL"><b><sup>(*)</sup></b>FIND <span class="squareb">[</span>ALL<span class="squareb">]</span> VALUES OF <span class="term">fieldname</span>  
<p class="syntaxUL"><span class="term">itemname</span> IS <span class="squareb">[</span>TYPE<span class="squareb">]</span>
    <span class="squareb">[</span>FROM <span class="squareb">{</span><span class="term">value1</span> <span class="squareb">|</span> (<span class="term">expression1</span>)<span class="squareb">}</span><span class="squareb">]</span> <span class="squareb">[</span>TO <span class="squareb">{</span><span class="term">value2</span> <span class="squareb">|</span> (<span class="term">expression2</span>)<span class="squareb">}</span><span class="squareb">]</span>  
<span class="squareb">{</span>STRING <span class="squareb">|</span> BINARY <span class="squareb">|</span> PACKED <span class="squareb">|</span> ZONED <span class="squareb">|</span> FLOAT <span class="squareb">|</span> EFORMAT<span class="squareb">}</span>
    <span class="squareb">[</span><span class="squareb">[</span>NOT<span class="squareb">]</span> LIKE '<span class="term">pattern</span>'<span class="squareb">]</span>
<span class="squareb">{</span>LEN <span class="squareb">{</span><span class="term">n</span> <span class="squareb">|</span> UNKNOWN<span class="squareb">}</span> <span class="squareb">|</span> BITS <span class="term">n</span> <span class="squareb">|</span> DIGITS <span class="term">n</span>
<span class="squareb">|</span> TO <span class="term">position</span><span class="squareb">}</span>
<span class="squareb">[</span>DP <span class="squareb">{</span><span class="term">k</span> <span class="squareb">|</span> *<span class="squareb">}</span><span class="squareb">]</span> <span class="squareb">[</span>BP <span class="term">n</span><span class="squareb">]</span> <span class="squareb">[</span>SIGNED <span class="squareb">|</span> UNSIGNED<span class="squareb">]</span>
<span class="squareb">[</span>PAD <span class="squareb">{</span>BLANK <span class="squareb">|</span> <span class="term">character</span> <span class="squareb">|</span> NULL<span class="squareb">}</span><span class="squareb">]</span> <span class="squareb">[</span>STRIP <span class="squareb">|</span> NOSTRIP<span class="squareb">]</span>
<span class="squareb">[</span>ALIGN<span class="squareb">]</span>
<span class="squareb">[</span>JUSTIFY <span class="squareb">{</span>LEFT <span class="squareb">|</span> RIGHT<span class="squareb">}</span><span class="squareb">]</span>
<span class="squareb">[</span>INITIAL <span class="squareb">{</span>BLANK <span class="squareb">|</span> ZERO <span class="squareb">|</span> NULL <span class="squareb">|</span> <span class="term">value</span><span class="squareb">}</span><span class="squareb">]</span>
<span class="squareb">[</span>AFTER <span class="squareb">{</span><span class="term">itemname</span> <span class="squareb">|</span> <span class="term">arrayname</span><span class="squareb">}</span>
<span class="squareb">|</span> AT <span class="squareb">{</span><span class="term">position</span> <span class="squareb">|</span> <span class="term">itemname</span> <span class="squareb">|</span> <span class="term">imagename1</span> <span class="squareb">|</span> <span class="term">arrayname</span><span class="squareb">}</span><span class="squareb">]</span>
<span class="squareb">[</span>OCCURS <span class="squareb">{</span><span class="term">n</span> <span class="squareb">[</span>DEPENDING ON <span class="squareb">{</span><span class="term">itemname</span> <span class="squareb">|</span> <span class="term">%variable</span><span class="squareb">}</span><span class="squareb">]</span>
<span class="squareb">|</span> UNKNOWN<span class="squareb">}</span><span class="squareb">]</span>
</p>
</p>
   
   
<hr>
===JUMP TO===
   
   
<p class="syntaxUL"><b><sup>(*)</sup></b>FIND AND PRINT COUNT <span class="squareb">[</span><span class="term">retrieval-conditions</span><span class="squareb">]</span>
<p class="syntaxUL">JUMP TO <span class="term">label</span>
</p>
JUMP TO (<span class="term">label1</span> <span class="squareb">[</span>, <span class="term">label2</span><span class="squareb">]</span> ...) <span class="term">expression</span></p>
 
===[[Loop End statement|Loop End]]===
<p class="syntaxUL">[[Loop End statement|Loop End]] </p>
 
===[[Loop Next statement|Loop Next]]===
   
   
<hr>
<p class="syntaxUL">[[Loop Next statement|Loop Next]]</p>
 
===MAX PFKEY===
<p class="syntaxUL">MAX PFKEY <span class="term">n</span> </p>
 
===<b id="MENU"></b>[[Menu statement or block|Menu]]===
<table class="noBorder">
<tr>
<td>{{Template: Menu statement syntax}} </td></tr>
</table>
 
===MODIFY===
   
   
<p class="syntaxUL"><b><sup>(*)</sup></b><span class="squareb">{</span>FIND WITHOUT LOCKS <span class="squareb">|</span> FDWOL<span class="squareb">}</span>  
<p class="syntaxUL">MODIFY <span class="squareb">{</span><span class="term">%menuname</span>:<span class="term">itemname</span> <span class="squareb">|</span> <span class="term">%screenname</span>:<span class="term">itemname</span><span class="squareb">}</span>
    [ALL] RECORDS [IN <span class="term">label</span> <span class="squareb">|</span> ON [LIST] <span class="term">listname</span>]
<span class="squareb">[</span>TO<span class="squareb">]</span> <span class="term">attributes</span> <span class="squareb">[</span><span class="squareb">[</span>FOR<span class="squareb">]</span> <span class="squareb">{</span>ALL <span class="squareb">|</span> READ <span class="squareb">|</span> REREAD <span class="squareb">|</span> TAB
    [FOR WHICH <span class="squareb">|</span> WITH] <span class="term">retrieval-conditions</span>
<span class="squareb">|</span> PRINT<span class="squareb">}</span><span class="squareb">]</span>
</p>
</p>
   
   
<hr>
===MODIFY BUFFER===
   
   
<p class="syntaxUL">FLUSH PROCESS <span class="squareb">{</span><span class="term">cid</span> <span class="squareb">|</span> <span class="term">processname</span> <span class="squareb">|</span> <span class="term">%variable</span><span class="squareb">}</span></p>
<p class="syntaxUL">MODIFY BUFFER <span class="squareb">[</span>SIZE=<span class="term">n</span>
<span class="squareb">|</span> <span class="term">%variable</span> <span class="squareb">[</span>PRESERVE <span class="squareb">|</span> NOPRESERVE<span class="squareb">]</span><span class="squareb">]</span>
<span class="squareb">[</span>FILL <span class="squareb">[</span>X'<span class="term">nn</span>'<span class="squareb">]</span> <span class="squareb">|</span> CLEAR<span class="squareb">]</span>
</p>
   
   
<hr>
===NEW PAGE===
<table class="noBorder">
<tr><td style="font-family:monoface; padding-right:0px">[[Statement syntax#Notation conventions|(C)]] </td>
<td><p class="syntaxUL">NEW PAGE  </p></td></tr>
</table>
   
   
<p class="syntaxUL"><b><sup>(**)</sup></b>FOR <span class="squareb">{</span>EACH <span class="squareb">|</span> <span class="term">k</span><span class="squareb">}</span> <span class="squareb">{</span>OCCURRENCE <span class="squareb">|</span> OCCURRENCES<span class="squareb">}</span> <span class="term">OF fieldname</span>
===[[Note statement|Note]]===
<table class="noBorder">
<tr><td style="font-family:monoface; padding-right:0px">[[Statement syntax#Notation conventions|(**)]] </td>
<td><p class="syntaxUL">Note <span class="squareb">{</span><span class="term">fieldname</span> <span class="squareb">[</span>(<span class="term">subscript</span>)<span class="squareb">]</span><span class="squareb">}</span> </p></td></tr>
</table>
<p class="syntaxUL">Note '<span class="term">string</span>'
</p>
</p>


<hr>
===[[On statement|On]]===
   
   
<p class="syntaxUL"><b><sup>(*)</sup></b>FOR <span class="squareb">{</span>EACH <span class="squareb">|</span> <span class="term">k</span><span class="squareb">}</span> <span class="squareb">{</span>RECORD <span class="squareb">|</span> RECORDS<span class="squareb">}</span>
<p class="syntaxUL">[[On statement|On]] <span class="squareb">{</span>Attention <span class="squareb">|</span> Error <span class="squareb">|</span> Field Constraint Conflict
    [IN <span class="term">label</span> <span class="squareb">|</span> ON [LIST] <span class="term">listname</span>]
  <span class="squareb">|</span> Find Conflict <span class="squareb">|</span> Missing File <span class="squareb">|</span> Missing Member
    IN [ASCENDING <span class="squareb">|</span> DESCENDING] [SORTKEY] ORDER [BY [EACH] <span class="term">fieldname</span>]
  <span class="squareb">|</span> Record Locking Conflict<span class="squareb">}</span>
    [FROM <span class="squareb">{</span><span class="term">value1</span> <span class="squareb">|</span> (<span class="term">expression1</span>)<span class="squareb">}</span>] [TO <span class="squareb">{</span><span class="term">value2</span> <span class="squareb">|</span> (<span class="term">expression2</span>)<span class="squareb">}</span>] [BY <span class="squareb">{</span><span class="term">%variable</span> <span class="squareb">|</span> <span class="term">literal</span><span class="squareb">}</span>]
  <span class="term">statements</span>
    [OPTIMIZING FNV]
End On <span class="squareb">[</span><span class="term">label</span><span class="squareb">]</span>
    [<span class="squareb">{</span>WHERE <span class="squareb">|</span> WITH<span class="squareb">}</span> <span class="term"><span class="term">retrieval-conditions</span></span>]
</p>
</p>


<hr>
===Open===
{{Template:Open (External I/O) statement syntax}}
 
<p></p>  <!--Don't ask me why!-->
<table class="noBorder">
<tr><td style="font-family:monoface; padding-right:0px">[[Statement syntax#Notation conventions|(C)]] </td>
<td>{{Template:Open and OpenC statements syntax}} </td></tr>
</table>
 
===OPEN PROCESS===
   
   
<p class="syntaxUL"><b><sup>(*)</sup></b>FOR <span class="squareb">{</span>EACH <span class="squareb">|</span> <span class="term">k</span><span class="squareb">}</span> <span class="squareb">{</span>VALUE <span class="squareb">|</span> VALUES<span class="squareb">}</span> <span class="term">OF fieldname</span>
<p class="syntaxUL">OPEN PROCESS <span class="squareb">{</span><span class="term">processname</span> <span class="squareb">|</span> <span class="term">%variable</span><span class="squareb">}</span>
    [FROM <span class="squareb">{</span><span class="term">value1</span> <span class="squareb">|</span> (<span class="term">expression1</span>)<span class="squareb">}</span>] [TO <span class="squareb">{</span><span class="term">value2</span> <span class="squareb">|</span> (<span class="term">expression2</span>)<span class="squareb">}</span>] [[NOT] LIKE <span class="term">pattern</span>]
<span class="squareb">[</span>CID <span class="squareb">{</span><span class="term">name</span> <span class="squareb">|</span> <span class="term">%variable</span><span class="squareb">}</span><span class="squareb">]</span> </p>
    [IN [ASCENDING <span class="squareb">|</span> DESCENDING] [CHARACTER <span class="squareb">|</span> NUMERICAL] [RIGHT-ADJUSTED] ORDER]
</p>


<hr>
<table class="noBorder">
<tr><td style="font-family:monoface; padding-right:0px">[[Statement syntax#Notation conventions|(+)]] </td>
<td><p class="syntaxUL">OPEN PROCESS <span class="squareb">{</span><span class="term">processname</span> <span class="squareb">|</span> <span class="term">%variable</span><span class="squareb">}</span>  <br>    <span class="squareb">[</span>CID <span class="squareb">{</span><span class="term">name</span> <span class="squareb">|</span> <span class="term">%variable</span><span class="squareb">}</span><span class="squareb">]</span>  <br>    <span class="squareb">{</span><span class="term">outbound-options</span> <span class="squareb">|</span> <span class="term">inbound-options</span><span class="squareb">}</span>
</p></td></tr>
</table>
<div style="margin-left: 30px; background-color: #fBfBfB;">
<p>
where <var class="term">outbound-options</var> are:</p>
<ul style="font-family: Consolas,monospace">
<li><span class="squareb">[</span>AT DESTINATION<span class="squareb">]</span> <span class="squareb">[</span>WITH<span class="squareb">]</span> <span class="squareb">[</span>USERID <span class="squareb">{</span><i>%variable</i> <span class="squareb">|</span> '<i>string</i>'<span class="squareb">}</span><span class="squareb">]</span>
<li><span class="squareb">[</span>PASSWORD <span class="squareb">{</span><i>%variable</i> <span class="squareb">|</span> '<i>string</i>'<span class="squareb">}</span><span class="squareb">]</span>
   
   
  <p class="syntaxUL">FOR <span class="squareb">{</span>EACH <span class="squareb">|</span> <span class="term">k</span><span class="squareb">}</span> <span class="squareb">{</span>VALUE <span class="squareb">|</span> VALUES<span class="squareb">}</span> IN <span class="term">label</span> </p>
<li>[<span class="squareb">{</span>ACCOUNT <span class="squareb">|</span> PROFILE <span class="squareb">{</span>%<i>%variable</i> <span class="squareb">|</span> '<i>string</i>'<span class="squareb">}</span><span class="squareb">]</span>
<li><span class="squareb">[</span>INITIAL <span class="squareb">{</span>DATA '<i>string</i>' <span class="squareb">|</span> DATA <i>%variable</i> <span class="squareb">|</span> IMAGE <i>imagename</i><span class="squareb">]</span> ...<span class="squareb">]</span>
</ul>
<p>
and <var class="term">inbound-options</var> are:</p>
   
   
<hr>
<ul style="font-family: Consolas,monospace">
<li>ACCEPT <span class="squareb">[</span>INITIAL <span class="squareb">{</span>DATA <i>%variable</i> <span class="squareb">|</span> IMAGE <i>image</i><span class="squareb">}</span> ...<span class="squareb">]</span> </li>
</ul>
   
   
<p class="syntaxUL"><b><sup>(*)</sup></b>FOR RECORD NUMBER <span class="squareb">{</span><span class="term">value</span> <span class="squareb">|</span> (<span class="term">expression</span>)<span class="squareb">}</span>
</div> <!-- end indent of options -->
</p>


<hr>
===[[Pause statement|Pause]]===
   
   
<p class="syntaxUL">FOR RECORD NUMBER <span class="squareb">{</span><span class="term">value</span> <span class="squareb">|</span> IN <span class="term">label</span><span class="squareb">}</span> [OPTIMIZING FNV]
{{Template:Pause statement syntax}}
</p>
 
===PLACE RECORD ON===
<table class="noBorder">
<tr><td style="font-family:monoface; padding-right:0px">[[Statement syntax#Notation conventions|(**)]] </td>
<td><p class="syntaxUL">[[Lists#PLACE RECORD and REMOVE RECORD statements|PLACE RECORD ON]] <span class="squareb">[</span>LIST<span class="squareb">]</span> <span class="term">listname</span>
</p></td></tr>
</table>


<hr>
===PLACE RECORDS===
   
   
<p class="syntaxUL">FOR <span class="term">%variable</span> FROM <span class="term">expression1</span>  
<p class="syntaxUL">PLACE RECORDS <span class="squareb">{</span>IN <span class="term">label</span> <span class="squareb">|</span> ON <span class="squareb">[</span>LIST<span class="squareb">]</span> <span class="term">listname1</span><span class="squareb">}</span> ON <span class="squareb">[</span>LIST<span class="squareb">]</span> <span class="term">listname2</span>
<span class="squareb">{</span>TO <span class="term">expression2</span> [BY <span class="term">expression3</span>]
<span class="squareb">|</span> [BY <span class="term">expression3</span>] TO <span class="term">expression2</span><span class="squareb">}</span>
</p>
</p>
<p class="note"><b>Note:</b> The BY clause, when omitted, defaults to a value of 1.</p>
   
   
<hr>
===Position===
<p class="syntaxUL">POSITION <span class="squareb">{</span>FOUNDSET <span class="term">foundsortset_name</span> <span class="squareb">|</span> LIST <span class="term">list_name</span><span class="squareb">}</span> <span class="squareb">[</span>AT<span class="squareb">]</span> <span class="term">position_name</span></p>
   
   
<p class="syntaxUL">IDENTIFY
<p class="note"><b>Note:</b> Use the above form of the <var>Position</var> statement with <var>For</var> loop processing; see [[Global features#Position statement|Position statement]].</p>
<span class="squareb">{</span>[IMAGE] <span class="term">imagename</span>  
 
<span class="squareb">|</span> <span class="term">%imagename</span>:<span class="term">itemname</span> LEN <span class="squareb">{</span><span class="term">n</span> <span class="squareb">|</span> <span class="term">%variable</span><span class="squareb">}</span>  
<p class="syntaxUL">POSITION <span class="squareb">{</span><span class="term">ext-filename</span> <span class="squareb">|</span> <span class="term">%variable</span><span class="squareb">}</span>
  <span class="squareb">|</span> <span class="term">%imagename</span>:<span class="term">arrayname</span> OCCURS <span class="squareb">{</span><span class="term">n</span> <span class="squareb">|</span> <span class="term">%variable</span><span class="squareb">}</span><span class="squareb">}</span>
  AT KEY <span class="term">operator</span><span class="squareb">{</span><span class="term">value</span> <span class="squareb">|</span> <span class="term">%variable</span><span class="squareb">}</span></p>
</p>
 
<p class="note"><b>Note:</b> Use the above form of the <var>Position</var> statement with external file processing using images; see [[Images#Position statement|Position statement]].</p>


<hr>
===[[Full-screen feature|PREPARE]]===
   
   
<p class="syntaxUL"><b><sup>(C)</sup></b>IF <span class="term">expression</span> THEN <span class="term">statements</span>  
<p class="syntaxUL">PREPARE
    [ELSE <span class="term">statements</span> <span class="squareb">|</span> ELSEIF <span class="term">expression</span> THEN <span class="term">statements</span>]
<span class="squareb">{</span><span class="squareb">[</span>[[Images#PrepareStmtImage|IMAGE]]<span class="squareb">]</span> <span class="term">imagename</span> <span class="squareb">|</span> <span class="squareb">[</span>[[Full-screen feature#PrepareStmtMenu|MENU]]<span class="squareb">]</span> <span class="term">menuname</span>
<span class="squareb">|</span> <span class="squareb">[</span>[[Full-screen feature#PrepareStmtScrn|SCREEN]]<span class="squareb">]</span> <span class="term">screenname</span><span class="squareb">}</span>
</p>
</p>


<hr>
===Print===
   
   
<p class="syntaxUL">[DECLARE] IMAGE <span class="term">imagename</span>
<p class="syntaxUL">Print <span class="term">[[#Print specification syntax|printSpecifications]]</span>   </p>
[GLOBAL [PERMANENT <span class="squareb">|</span> TEMPORARY]
 
<span class="squareb">|</span> [PERMANENT <span class="squareb">|</span> TEMPORARY] GLOBAL
===Print All Fieldgroup Information (PAFGI)===
<span class="squareb">|</span> COMMON [AT [<span class="term">itemname</span> <span class="squareb">|</span> <span class="term">imagename1</span> <span class="squareb">|</span> <span class="term">arrayname</span><span class="squareb">}</span>]]
<table class="noBorder">
</p>
<tr><td style="font-family:monoface; padding-right:0px">[[Statement syntax#Notation conventions|(**)]] </td>
<td>{{Template:PAFGI statement syntax}} </td></tr>
</table>
 
===[[Print All Information statement|Print All Information]] or [[PAI statement|PAI]]===
<table class="noBorder">
<tr><td style="font-family:monoface; padding-right:0px">[[Statement syntax#Notation conventions|(**)]] </td>
<td>{{Template:PAI statement syntax}} </td></tr>
</table>


<hr>
===PRINT MENU===
   
   
<p class="syntaxUL"><b><sup>(*)</sup></b>INCLUDE <span class="term">procedurename</span>  </p>
<p class="syntaxUL">PRINT <span class="squareb">[</span>MENU<span class="squareb">]</span> <span class="term">menuname</span> <span class="squareb">[</span>ALERT<span class="squareb">]</span>
<span class="squareb">[</span>TITLE <span class="squareb">{</span>'<span class="term">text</span>' <span class="squareb">|</span> <span class="term">%variable</span><span class="squareb">}</span> <span class="squareb">[</span>AT <span class="squareb">[</span>COLUMN<span class="squareb">]</span> <span class="term">n</span><span class="squareb">]</span>
  <span class="squareb">[</span>TO <span class="squareb">[</span>COLUMN<span class="squareb">]</span> <span class="term">m</span> <span class="squareb">|</span> LEN <span class="term">m</span><span class="squareb">]</span> <span class="squareb">[</span><span class="term">attributes</span><span class="squareb">]</span><span class="squareb">]</span>
</p>
   
   
<hr>
===PRINT SCREEN===
   
   
<p class="syntaxUL">INPUT <span class="term">inputname</span> [AT [COLUMN] <span class="term">n</span>]
<p class="syntaxUL">PRINT SCREEN <span class="term">screenname</span> <span class="squareb">[</span>ALERT<span class="squareb">]</span> <span class="squareb">[</span><span class="squareb">[</span>WITH<span class="squareb">]</span> CURSOR<span class="squareb">]</span>
[TO [COLUMN] <span class="term">m</span> <span class="squareb">|</span> [LEN <span class="term">m</span>] DP <span class="squareb">{</span><span class="term">k</span> <span class="squareb">|</span> *<span class="squareb">}</span>]]
<span class="squareb">[</span>TITLE <span class="squareb">{</span>'<span class="term">text</span>' <span class="squareb">|</span> <span class="term">%variable</span><span class="squareb">}</span> <span class="squareb">[</span>AT <span class="squareb">[</span>COLUMN<span class="squareb">]</span> <span class="term">n</span><span class="squareb">]</span>
[UPCASE <span class="squareb">|</span> NOCASE] [DEFAULT '<span class="term">value</span>']
  <span class="squareb">[</span>TO <span class="squareb">[</span>COLUMN<span class="squareb">]</span> <span class="term">m</span> <span class="squareb">|</span> LEN <span class="term">m</span><span class="squareb">]</span> <span class="squareb">[</span><span class="term">attributes</span><span class="squareb">]</span><span class="squareb">]</span>
[DEBLANK <span class="squareb">|</span> NODEBLANK] [PAD WITH '<span class="term">c</span>']
[REQUIRED <span class="squareb">|</span> ALPHA <span class="squareb">|</span> ALPHANUM <span class="squareb">|</span> MUSTFILL
<span class="squareb">|</span> ONEOF <span class="term">literal</span> [, <span class="term">literal</span>]...
  <span class="squareb">|</span> [NUMERIC] [RANGE <span class="term">lo</span> [TO] <span class="term">hi</span> [AND <span class="term">lo</span> [TO] <span class="term">hi</span>] ...]
<span class="squareb">|</span> VERIFY '<span class="term">characters</span>']...
[[READ] <span class="term">attributes</span>] [REREAD <span class="term">attributes</span>] [PRINT <span class="term">attributes</span>]
<span class="squareb">{</span>TAG [<span class="term">attributes</span>] [WITH '<span class="term">c</span>']] [ITEMID <span class="term">n</span>]
</p>
</p>
   
   
<hr>
===[[Horizon SOUL interface#Query Process statement|Query Process]]===
<table class="noBorder">
<tr><td style="font-family:monoface; padding-right:0px">[[Statement syntax#Notation conventions|(+)]] </td>
<td>{{Template:Query Process statement syntax}} </td></tr>
</table>
 
===<b id="READ"></b>[[Read Image statement|Read Image]]===
   
   
<p class="syntaxUL">INSERT <span class="term">fieldname</span> <span class="squareb">[</span>(<span class="term">subscript</span>)<span class="squareb">]</span> = <span class="squareb">{</span><span class="term">value</span> <span class="squareb">|</span> (<span class="term">expression</span>)<span class="squareb">}</span>
{{Template:Read Image statement syntax}}
</p>


<hr>
===READ <i>menuname</i>===
   
   
<p class="syntaxUL"><b><sup>(+)</sup></b>INVITE <span class="squareb">{</span><span class="term">cid</span> <span class="squareb">|</span> <span class="term">processname</span> <span class="squareb">|</span> <span class="term">%variable</span><span class="squareb">}</span>  
<p class="syntaxUL">READ <span class="squareb">[</span>MENU<span class="squareb">]</span> <span class="term">menuname</span> <span class="squareb">[</span>ALERT<span class="squareb">]</span>
    [SYNCLEVEL <span class="squareb">|</span> FLUSH <span class="squareb">|</span> CONFIRM]<var> </var>
<span class="squareb">[</span>TITLE <span class="squareb">[</span>'<span class="term">text</span>' <span class="squareb">|</span> <span class="term">%variable</span><span class="squareb">}</span> <span class="squareb">[</span>AT <span class="squareb">[</span>COLUMN<span class="squareb">]</span> <span class="term">n</span><span class="squareb">]</span>
<span class="squareb">[</span>TO <span class="squareb">[</span>COLUMN<span class="squareb">]</span> <span class="term">m</span> <span class="squareb">|</span> LEN <span class="term">m</span><span class="squareb">]</span> <span class="squareb">[</span><span class="term">attributes</span><span class="squareb">]</span><span class="squareb">]</span>
</p>
</p>
   
   
<hr>
===READ <i>screenname</i>===
   
   
<p class="syntaxUL"><span class="term">itemname</span> IS [TYPE]
<p class="syntaxUL">READ <span class="squareb">[</span>SCREEN<span class="squareb">]</span> <span class="term">screenname</span> <span class="squareb">[</span>ALERT<span class="squareb">]</span> <span class="squareb">[</span>NO REREAD<span class="squareb">]</span> <span class="squareb">[</span> <span class="squareb">[</span>WITH<span class="squareb">]</span> CURSOR<span class="squareb">]</span>
<span class="squareb">{</span>STRING <span class="squareb">|</span> BINARY <span class="squareb">|</span> PACKED <span class="squareb">|</span> ZONED <span class="squareb">|</span> FLOAT <span class="squareb">|</span> EFORMAT<span class="squareb">}</span>  
  <span class="squareb">[</span>TITLE <span class="squareb">{</span>'<span class="term">text</span>' <span class="squareb">|</span> <span class="term">%variable</span><span class="squareb">}</span> <span class="squareb">[</span>AT <span class="squareb">[</span>COLUMN<span class="squareb">]</span> <span class="term">n</span><span class="squareb">]</span>
<span class="squareb">{</span>LEN <span class="squareb">{</span><span class="term">n</span> <span class="squareb">|</span> UNKNOWN<span class="squareb">}</span> <span class="squareb">|</span> BITS <span class="term">n</span> <span class="squareb">|</span> DIGITS <span class="term">n</span>  
  <span class="squareb">[</span>TO <span class="squareb">[</span>COLUMN<span class="squareb">]</span> <span class="term">m</span> <span class="squareb">|</span> LEN <span class="term">m</span><span class="squareb">]</span> <span class="squareb">[</span><span class="term">attributes</span><span class="squareb">]</span><span class="squareb">]</span>
  <span class="squareb">|</span> TO <span class="term">position</span><span class="squareb">}</span>
[DP <span class="squareb">{</span><span class="term">k</span> <span class="squareb">|</span> *<span class="squareb">}</span>] [BP <span class="term">n</span>] [SIGNED <span class="squareb">|</span> UNSIGNED]
[PAD <span class="squareb">{</span>BLANK <span class="squareb">|</span> <span class="term">character</span> <span class="squareb">|</span> NULL<span class="squareb">}</span>] [STRIP <span class="squareb">|</span> NOSTRIP]
[ALIGN]
[JUSTIFY <span class="squareb">{</span>LEFT <span class="squareb">|</span> RIGHT<span class="squareb">}</span>]  
[INITIAL <span class="squareb">{</span>BLANK <span class="squareb">|</span> ZERO <span class="squareb">|</span> NULL <span class="squareb">|</span> <span class="term">value</span><span class="squareb">}</span>]  
[AFTER <span class="squareb">{</span><span class="term">itemname</span> <span class="squareb">|</span> <span class="term">arrayname</span><span class="squareb">}</span>  
  <span class="squareb">|</span> AT <span class="squareb">{</span><span class="term">position</span> <span class="squareb">|</span> <span class="term">itemname</span> <span class="squareb">|</span> <span class="term">imagename1</span> <span class="squareb">|</span> <span class="term">arrayname</span><span class="squareb">}</span>]
[OCCURS <span class="squareb">{</span><span class="term">n</span> [DEPENDING ON <span class="squareb">{</span><span class="term">itemname</span> <span class="squareb">|</span> <span class="term">%variable</span><span class="squareb">}</span>]
<span class="squareb">|</span> UNKNOWN<span class="squareb">}</span>]
</p>
</p>
===RECEIVE IMAGE===
<p class="syntaxUL">RECEIVE <span class="squareb">{</span>IMAGE <span class="term">imagename</span> <span class="squareb">|</span> <span class="term">%variable</span><span class="squareb">}</span>
FROM <span class="squareb">{</span><span class="term">cid</span> <span class="squareb">|</span> <span class="term">processname</span> <span class="squareb">|</span> <span class="term">%variable</span><span class="squareb">}</span> <span class="squareb">[</span>RESULT <span class="term">%variable</span><span class="squareb">]</span> </p>
<table class="noBorder">
<tr><td style="font-family:monoface; padding-right:0px">[[Statement syntax#Notation conventions|(+)]] </td>
<td><p class="syntaxUL">RECEIVE <span class="squareb">{</span>IMAGE <span class="term">imagename</span> <span class="squareb">|</span> <span class="term">%variable</span><span class="squareb">}</span>  <br>  FROM <span class="squareb">{</span><span class="term">cid</span> <span class="squareb">|</span> <span class="term">processname</span> <span class="squareb">|</span> <span class="term">%variable</span><span class="squareb">}</span>  <br>  RESULT <span class="term">%variable</span>
</p></td></tr>
</table>
===[[Release All Records statement|Release All Records]]===
{{Template:Release All Records statement syntax}}
===[[Release Position statement|Release Position]]===
<table class="noBorder">
<tr><td>{{Template:Release Position statement syntax}} </td></tr>
</table>


<hr>
===[[Release Records statement|Release Records]]===
   
   
<p class="syntaxUL">JUMP TO <span class="term">label</span></p>
{{Template:Release Records statement syntax}}
 
===[[Remember statement|Remember]]===
<table class="noBorder">
<tr><td style="font-family:monoface; padding-right:0px">[[Statement syntax#Notation conventions|(**)]] </td>
<td>{{Template:Remember statement syntax}}</td></tr>
</table>
   
   
<hr>
===REMOVE RECORD FROM===
<table class="noBorder">
<tr><td style="font-family:monoface; padding-right:0px">[[Statement syntax#Notation conventions|(**)]] </td>
<td><p class="syntaxUL">[[Lists#PLACE RECORD and REMOVE RECORD statements|REMOVE RECORD FROM]] <span class="squareb">[</span>LIST<span class="squareb">]</span> <span class="term">listname</span>
</p></td></tr>
</table>
 
===REMOVE RECORDS===
   
   
<p class="syntaxUL">JUMP TO (<span class="term">label1</span> <span class="squareb">[</span>, <span class="term">label2</span><span class="squareb">]</span> ...) <span class="term">expression</span></p>
<p class="syntaxUL">REMOVE RECORDS <span class="squareb">{</span>IN <span class="term">label</span> <span class="squareb">|</span> ON <span class="squareb">[</span>LIST<span class="squareb">]</span> <span class="term">listname</span><span class="squareb">}</span>
FROM <span class="squareb">[</span>LIST<span class="squareb">]</span> <span class="term">listname2</span>
</p>
   
   
<hr>
===REPEAT===
   
   
<p class="syntaxUL">LOOP END </p>
<p class="syntaxUL">REPEAT <span class="squareb">[</span>FOREVER <span class="squareb">|</span> <span class="term">n</span> TIMES <span class="squareb">|</span> WHILE <span class="term">expression</span><span class="squareb">]</span>
</p>
   
   
<hr>
===REREAD===
   
   
<p class="syntaxUL">MAX PFKEY <span class="term">n</span> </p>
<p class="syntaxUL">REREAD <span class="squareb">[</span>SCREEN<span class="squareb">]</span> <span class="term">screenname</span> <span class="squareb">[</span>ALERT<span class="squareb">]</span> <span class="squareb">[</span><span class="squareb">[</span>WITH<span class="squareb">]</span> CURSOR<span class="squareb">]</span>
<span class="squareb">[</span>TITLE <span class="squareb">{</span>'<span class="term">text</span>' <span class="squareb">|</span> <span class="term">%variable</span><span class="squareb">}</span> <span class="squareb">[</span>AT <span class="squareb">[</span>COLUMN<span class="squareb">]</span> <span class="term">n</span><span class="squareb">]</span>
<span class="squareb">[</span>TO <span class="squareb">[</span>COLUMN<span class="squareb">]</span> <span class="term">m</span> <span class="squareb">|</span> LEN <span class="term">m</span><span class="squareb">]</span> <span class="squareb">[</span><span class="term">attributes</span><span class="squareb">]</span><span class="squareb">]</span>
</p>
   
   
<hr>
===RESET===
   
   
<p class="syntaxUL">[DECLARE] MENU <span class="term">menuname</span>
<p class="syntaxUL">RESET <span class="squareb">{</span>HEADER <span class="squareb">|</span> TRAILER<span class="squareb">}</span> <span class="term">m</span>
[GLOBAL [PERMANENT <span class="squareb">|</span> TEMPORARY]
<span class="squareb">|</span> [PERMANENT <span class="squareb">|</span> TEMPORARY] GLOBAL
<span class="squareb">|</span> COMMON]
</p>
</p>


<hr>
===[[Exceptions#Rethrow statement|Rethrow]]===
   
   
<p class="syntaxUL">MODIFY <span class="squareb">{</span><span class="term">%menuname</span>:<span class="term">itemname</span> <span class="squareb">|</span> <span class="term">%screenname</span>:<span class="term">itemname</span><span class="squareb">}</span>
{{Template:Rethrow statement syntax}}
[TO] <span class="term">attributes</span> [[FOR] <span class="squareb">{</span>ALL <span class="squareb">|</span> READ <span class="squareb">|</span> REREAD <span class="squareb">|</span> TAB
<span class="squareb">|</span> PRINT<span class="squareb">}</span>]
</p>


<hr>
===RETRY===
   
   
<p class="syntaxUL">MODIFY BUFFER [SIZE=<span class="term">n</span>
<p class="syntaxUL">RETRY <span class="squareb">[</span>PENDING STATEMENT<span class="squareb">]</span>
<span class="squareb">|</span> <span class="term">%variable</span> [PRESERVE <span class="squareb">|</span> NOPRESERVE]]
[FILL [X'<span class="term">nn</span>'] <span class="squareb">|</span> CLEAR]
</p>
</p>
   
   
<hr>
===RETURN===
   
   
<p class="syntaxUL"><b><sup>(C)</sup></b>NEW PAGE  </p>
<p class="syntaxUL">RETURN
</p>
 
===<b id="SCREEN"></b>[[Screen statement or block|Screen]]===
   
   
<hr>
{{Template:Screen statement syntax}}
 
===SEND===
   
   
<p class="syntaxUL"><b><sup>(**)</sup></b>NOTE <var><span class="squareb">{</span></var><span class="term">fieldname</span> <span class="squareb">[</span>(<span class="term">subscript</span>)<var>]<span class="squareb">}</span></var>
<p class="syntaxUL">SEND <span class="squareb">{</span>IMAGE <span class="term">imagename</span> <span class="squareb">|</span> '<span class="term">string</span>' <span class="squareb">|</span> <span class="term">%variable</span><span class="squareb">}</span>
TO <span class="squareb">{</span><span class="term">cid</span> <span class="squareb">|</span> <span class="term">processname</span> <span class="squareb">|</span> <span class="term">%variable</span><span class="squareb">}</span>
<span class="squareb">[</span>REQSEND <span class="term">%variable</span><span class="squareb">]</span>
<span class="squareb">[</span>FLUSH<span class="squareb">]</span>
 
 
<b><sup>(+)</sup></b>SEND <span class="squareb">{</span>IMAGE <span class="term">imagename</span> <span class="squareb">|</span> '<span class="term">string</span>' <span class="squareb">|</span> <span class="term">%variable</span><span class="squareb">}</span>
    TO <span class="squareb">{</span><span class="term">cid</span> <span class="squareb">|</span> <span class="term">processname</span> <span class="squareb">|</span> <span class="term">%variable</span><span class="squareb">}</span>
    <span class="squareb">[</span>FLUSH <span class="squareb">|</span> CONFIRM<span class="squareb">]</span>
    <span class="squareb">[</span>REQSEND <span class="term">%variable</span><span class="squareb">]</span>
</p>
</p>


<hr>
===[[Horizon SOUL interface#Send Error statement|Send Error]]===
<table class="noBorder">
<tr><td style="font-family:monoface; padding-right:0px">[[Statement syntax#Notation conventions|(+)]] </td>
<td>{{Template:Send Error statement syntax}} </td></tr>
</table>
   
   
<p class="syntaxUL">NOTE '<span class="term">string</span>' </p>
===SET===
   
   
<hr>
<p class="syntaxUL">SET <span class="squareb">{</span>HEADER <span class="squareb">|</span> TRAILER<span class="squareb">}</span> <span class="term">m</span> <span class="term">[[#Print specification syntax|print-specifications]]</span>
</p>
 
===[[SetText statement|SetText]]===
   
   
<p class="syntaxUL">ON <span class="squareb">{</span>ATTENTION <span class="squareb">|</span> ERROR <span class="squareb">|</span> FIELD CONSTRAINT CONFLICT
{{Template:SetText statement syntax}}
  <span class="squareb">|</span> FIND CONFLICT <span class="squareb">|</span> MISSING FILE <span class="squareb">|</span> MISSING MEMBER
 
  <span class="squareb">|</span> RECORD LOCKING CONFLICT<span class="squareb">}</span> <span class="term">statements</span> </p>
===SIGNAL PROCESS===
   
   
<hr>
<p class="syntaxUL">SIGNAL PROCESS
<span class="squareb">{</span><span class="term">cid</span> <span class="squareb">|</span> [<span class="term">processname</span> <span class="squareb">|</span> <span class="term">%variable</span><span class="squareb">}</span> <span class="squareb">{</span><span class="term">nnn</span> <span class="squareb">|</span> <span class="term">%variable</span><span class="squareb">}</span> </p>
 
<table class="noBorder">
<tr><td style="font-family:monoface; padding-right:0px">[[Statement syntax#Notation conventions|(+)]] </td>
<td><p class="syntaxUL">SIGNAL PROCESS        <br>  <span class="squareb">{</span><span class="term">cid</span> <span class="squareb">|</span> [<span class="term">processname</span> <span class="squareb">|</span> <span class="term">%variable</span><span class="squareb">}</span>
</p></td></tr>
</table>
 
===[[Sirius Case statement|Sirius Case]] directive===
   
   
<p class="syntaxUL">OPEN <span class="squareb">{</span>[DATASET <span class="squareb">|</span> EXTERNAL] <span class="squareb">{</span><span class="term">ext-filename</span>  
<table class="noBorder">
  <span class="squareb">|</span> <span class="term">%variable</span><span class="squareb">}</span>
<tr><td style="font-family:monoface; padding:0px">[[Statement syntax#Notation conventions|(C)]] </td>
  <span class="squareb">|</span> [EXTERNAL] <span class="squareb">{</span>TERMINAL <span class="squareb">|</span> <span class="term">%variable</span><span class="squareb">}</span><span class="squareb">}</span>  
<td>{{Template:Sirius Case statement syntax}} </td></tr>
  FOR <span class="squareb">{</span>INPUT [OUTPUT] <span class="squareb">|</span> OUTPUT [INPUT] <span class="squareb">|</span> INOUT<span class="squareb">}</span>
</table>
  [PASSWORD <span class="squareb">{</span><span class="term">value</span> <span class="squareb">|</span> <span class="term">%variable</span><span class="squareb">}</span>]
 
</p>
===SKIP LINES===
   
   
<hr>
<p class="syntaxUL">SKIP <span class="term">n</span> LINE<span class="squareb">[</span>S<span class="squareb">]</span>
<p class="syntaxUL"><b><sup>(C)</sup></b>OPEN [C] [[PERM <span class="squareb">|</span> TEMP] GROUP <span class="squareb">|</span> FILE]
    <span class="squareb">{</span><span class="term">name</span> [AT <span class="squareb">{</span><span class="term">location</span> <span class="squareb">|</span> <span class="term">%variable</span> <span class="squareb">|</span> =<span class="squareb">}</span>] <span class="squareb">|</span> %variable<span class="squareb">}</span>
    [PASSWORD <span class="squareb">{</span><span class="term">value</span> <span class="squareb">|</span> <span class="term">%variable</span><span class="squareb">}</span>]
</p>
</p>
   
   
<hr>
===[[Skip Position statement|Skip Position]]===
   
   
<p class="syntaxUL">OPEN PROCESS <span class="squareb">{</span><span class="term">processname</span> <span class="squareb">|</span> <span class="term">%variable</span><span class="squareb">}</span>  
<table class="noBorder">
[CID <span class="squareb">{</span><span class="term">name</span> <span class="squareb">|</span> <span class="term">%variable</span><span class="squareb">}</span>]
<tr><td>{{Template:Skip Position statement syntax}} </td></tr>
</p>
</table>
 
<hr>
===SORT RECORDS===
   
   
<p class="syntaxUL"><b><sup>(+)</sup></b>OPEN PROCESS <span class="squareb">{</span><span class="term">processname</span> <span class="squareb">|</span> <span class="term">%variable</span><span class="squareb">}</span>  
<p class="syntaxUL">SORT [<span class="term">k</span><span class="squareb">]</span> RECORDS <span class="squareb">{</span>IN <span class="term">label</span> <span class="squareb">|</span> ON <span class="squareb">[</span>LIST<span class="squareb">]</span> <span class="term">listname</span><span class="squareb">}</span>
    [CID <span class="squareb">{</span><span class="term">name</span> <span class="squareb">|</span> <span class="term">%variable</span><span class="squareb">}</span>]
BY <span class="term">key</span> <span class="squareb">[</span>AND <span class="term">key</span><span class="squareb">]</span> ...
    <span class="squareb">{</span><span class="term">outbound-options</span> <span class="squareb">|</span> <span class="term">inbound-options</span><span class="squareb">}</span>
</p>
</p>
   
   
<div style="margin-left: 20px; background-color: #fBfBfB;">
<div style="margin-left: 20px; background-color: #fBfBfB;">
<p>
<p>
where <var class="term">outbound-options</var> are:</p>
where <var class="term">key</var> is:</p>
<ul style="font-family: Consolas,monospace">
<ul style="font-family: Consolas,monospace">
<li>[AT DESTINATION] [WITH] [USERID <span class="squareb">{</span><i>%variable</i> <span class="squareb">|</span> '<i>string</i>'<span class="squareb">}</span>]
<li><i>key</i> = <i>fieldname</i> <br>
      <span class="squareb">[</span>VALUE <span class="squareb">{</span><span class="squareb">[</span>ASCENDING <span class="squareb">|</span> DESCENDING<span class="squareb">]</span> <br>
      <span class="squareb">[</span>CHARACTER <span class="squareb">|</span> NUMERICAL<span class="squareb">]</span> <span class="squareb">|</span> RIGHT-ADJUSTED<span class="squareb">]</span><span class="squareb">}</span> ...<span class="squareb">]</span> </li>
</ul>
   
   
<li>[PASSWORD <span class="squareb">{</span><i>%variable</i> <span class="squareb">|</span> '<i>string</i>'<span class="squareb">}</span>]
</div> <!--end key indent -->
   
   
<li>[<span class="squareb">{</span>ACCOUNT <span class="squareb">|</span> PROFILE <span class="squareb">{</span>%<i>%variable</i> <span class="squareb">|</span> '<i>string</i>'<span class="squareb">}</span>]
===SORT RECORD KEYS===
   
   
<li>[INITIAL <span class="squareb">{</span>DATA '<i>string</i>' <span class="squareb">|</span> DATA <i>%variable</i> <span class="squareb">|</span> IMAGE <i>imagename</i>] ...]
<p class="syntaxUL">SORT [<span class="term">k</span><span class="squareb">]</span> RECORD KEYS
</ul>
<span class="squareb">{</span>IN <span class="term">label</span> <span class="squareb">|</span> ON <span class="squareb">[</span>LIST<span class="squareb">]</span> <span class="term">listname</span><span class="squareb">}</span>
BY <span class="term">key</span> <span class="squareb">[</span>AND <span class="term">key</span><span class="squareb">]</span> ...
</p>
   
   
<div style="margin-left: 20px; background-color: #fBfBfB;">
<p>
<p>
and <var class="term">inbound-options</var> are:</p>
where <var class="term">key</var> is:</p>
<ul style="font-family: Consolas,monospace">
<ul style="font-family: Consolas,monospace">
<li>ACCEPT [INITIAL <span class="squareb">{</span>DATA <i>%variable</i> <span class="squareb">|</span> IMAGE <i>image</i><span class="squareb">}</span> ...] </li>
<li><i>key</i> = <i>fieldname</i> <br>
      <span class="squareb">[</span>VALUE <span class="squareb">{</span><span class="squareb">[</span>ASCENDING <span class="squareb">|</span> DESCENDING<span class="squareb">]</span> <br>
      <span class="squareb">[</span>CHARACTER <span class="squareb">|</span> NUMERICAL<span class="squareb">]</span> <span class="squareb">|</span> <span class="squareb">[</span>RIGHT-ADJUSTED<span class="squareb">]</span><span class="squareb">}</span> ...<span class="squareb">]</span> </li>
</ul>
</ul>
   
   
</div> <!-- end indent of options -->
</div>
   
   
<hr>
===SORT VALUE IN===
   
   
<p class="syntaxUL">PAUSE <span class="squareb">[</span><span class="term">n</span> <span class="squareb">|</span> <span class="term">%variable</span><span class="squareb">]</span>
<p class="syntaxUL">SORT VALUE IN <span class="term">label</span> <span class="squareb">[</span>IN <span class="squareb">[</span>ASCENDING <span class="squareb">|</span> DESCENDING<span class="squareb">]</span>
[<u>CHARACTER</u> <span class="squareb">|</span> NUMERICAL<span class="squareb">]</span> <span class="squareb">|</span> <span class="squareb">[</span>RIGHT-ADJUSTED<span class="squareb">]</span> ORDER<span class="squareb">]</span>
</p>
</p>
===STOP===
<table class="noBorder">
<tr>
<td style="font-family:monoface; padding-right:0px">[[Statement syntax#Notation conventions|(C)]]</td>
<td><p class="syntaxUL">STOP <span class="squareb">[</span>IF COUNT IN <span class="term">label</span> EXCEEDS <span class="term">n</span><span class="squareb">]</span>
</p></td></tr>
</table>


<hr>
===STORE RECORD===
<table class="noBorder">
<tr><td style="font-family:monoface; padding-right:0px">[[Statement syntax#Notation conventions|(*)]] </td>
<td><p class="syntaxUL">STORE RECORD [<span class="term">sort or hash key value</span><span class="squareb">]</span>    <br>  <span class="term">fieldname1</span>=[<span class="term">value1</span> <span class="squareb">|</span> (<span class="term">expression1</span>)<span class="squareb">]</span>    <br>  [<span class="term">fieldname2</span>=(<span class="term">expression</span>)<span class="squareb">]</span>    <br>  ...    <br>  <span class="squareb">[</span>THEN CONTINUE    <br>      <span class="term">statement</span>    <br>      <span class="term">statement</span>    <br>      ...<span class="squareb">]</span>    <br>  END STORE
</p></td></tr>
</table>
   
   
<p class="syntaxUL"><b><sup>(**)</sup></b>PLACE RECORD ON <span class="squareb">[</span>LIST<span class="squareb">]</span> <span class="term">listname</span>
===SUBROUTINE===
</p>
   
   
<hr>
<p class="syntaxUL">SUBROUTINE
 
<p class="syntaxUL">PLACE RECORDS <span class="squareb">{</span>IN <span class="term">label</span> <span class="squareb">|</span> ON [LIST] <span class="term">listname1</span><span class="squareb">}</span> ON [LIST] <span class="term">listname2</span>
SUBROUTINE <span class="term">subname</span>
<span class="squareb">[</span>(<span class="term">formal-parameter</span> <span class="squareb">[</span>INPUT <span class="squareb">|</span> OUTPUT <span class="squareb">|</span> INPUT OUTPUT<span class="squareb">]</span> <span class="squareb">[</span>,...<span class="squareb">]</span>)<span class="squareb">]</span>
</p>
</p>
   
   
<hr>
<div style="margin-left: 20px; background-color: #fBfBfB;">
<p>
where <var class="term">formal-parameter</var> is one of the following:</p>
<ul style="font-family: Consolas,monospace">
<li><i>%variable</i> <span class="squareb">[</span>IS STRING <span class="squareb">[</span>LEN <i>n</i><span class="squareb">]</span> <span class="squareb">[</span>DP <span class="squareb">{</span><i>n</i> <span class="squareb">|</span> *<span class="squareb">}</span><span class="squareb">]</span> <span class="squareb">[</span>ARRAY (*<span class="squareb">[</span>,*<span class="squareb">[</span>,*<span class="squareb">]</span><span class="squareb">]</span>) <span class="squareb">[</span>NO FS<span class="squareb">]</span><span class="squareb">]</span> <br>
          <span class="squareb">|</span> IS <span class="squareb">{</span>FIXED <span class="squareb">[</span>DP <i>n</i><span class="squareb">]</span> <span class="squareb">|</span> FLOAT<span class="squareb">}</span> <span class="squareb">[</span>ARRAY (*<span class="squareb">[</span>,*<span class="squareb">[</span>,*<span class="squareb">]</span><span class="squareb">]</span>)<span class="squareb">]</span><span class="squareb">]</span>
   
   
<p class="syntaxUL">POSITION <span class="squareb">{</span>FOUNDSET <span class="term">foundsortset_name</span> <span class="squareb">|</span> LIST <span class="term">list_name</span><span class="squareb">}</span> [AT] <span class="term">position_name</span></p>
<li>LIST <i>listname</i> <span class="squareb">[</span>IN <span class="squareb">[</span>FILE <span class="squareb">|</span> <span class="squareb">[</span>PERM <span class="squareb">|</span> TEMP<span class="squareb">]</span> GROUP<span class="squareb">]</span> <i>name</i><span class="squareb">]</span>
</ul>
</div>


<p class="note"><b>Note:</b> Use this form of the POSITION statement with FOR loop processing; see [[Global features#POSITION statement|POSITION statement]].</p>
===TAG===
   
   
<hr>
<p class="syntaxUL">TAG <span class="term">%screenname</span>:<span class="term">inputname</span> <span class="squareb">[</span><span class="term">attributes</span><span class="squareb">]</span> <span class="squareb">[</span>WITH 'c'<span class="squareb">]</span>
<p class="syntaxUL">POSITION <span class="squareb">{</span><span class="term">ext-filename</span> <span class="squareb">|</span> <span class="term">%variable</span><span class="squareb">}</span>  
AT KEY <span class="term">operator</span><span class="squareb">{</span><span class="term">value</span> <span class="squareb">|</span> <span class="term">%variable</span><span class="squareb">}</span>
</p>
</p>
<p class="note"><b>Note:</b> Use this form of the POSITION statement with external file processing using images; see [[Images#POSITION statement|POSITION statement]].</p>
<hr>
   
   
<p class="syntaxUL">PREPARE
===[[Horizon SOUL interface#Test Receipt statement|Test Receipt]]===
<span class="squareb">{</span>[IMAGE] <span class="term">imagename</span> <span class="squareb">|</span> [MENU] <span class="term">menuname</span>  
<table class="noBorder">
<span class="squareb">|</span> [SCREEN] <span class="term">screenname</span><span class="squareb">}</span>
<tr><td style="font-family:monoface; padding-right:0px">[[Statement syntax#Notation conventions|(+)]] </td>
</p>
<td>{{Template:Test Receipt statement syntax}} </td></tr>
</table>


<hr>
===TITLE===
   
   
<p class="syntaxUL">PRINT <span class="term">print-specifications</span>   </p>
<p class="syntaxUL">TITLE <span class="squareb">{</span>'<span class="term">text</span>' <span class="squareb">|</span> <span class="term">promptname</span><span class="squareb">}</span>
<span class="squareb">[</span>AT <span class="squareb">[</span>COLUMN<span class="squareb">]</span> <span class="term">n</span><span class="squareb">]</span>  <span class="squareb">[</span>TO <span class="squareb">[</span>COLUMN<span class="squareb">]</span> <span class="term">m</span> <span class="squareb">|</span> <span class="squareb">[</span>LEN <span class="term">m</span><span class="squareb">]</span>
<span class="squareb">[</span>DP <span class="squareb">{</span><span class="term">k</span> <span class="squareb">|</span> *<span class="squareb">}</span><span class="squareb">]</span><span class="squareb">]</span>
<span class="squareb">[</span>DEFAULT '<span class="term">value</span>'<span class="squareb">]</span>
<span class="squareb">[</span><span class="squareb">[</span>READ<span class="squareb">]</span> <span class="term">attributes</span><span class="squareb">]</span>  <span class="squareb">[</span>REREAD <span class="term">attributes</span><span class="squareb">]</span>  <span class="squareb">[</span>PRINT <span class="term">attributes</span><span class="squareb">]</span>
</p>
   
   
<hr>
===<b id="trace"></b>[[Trace statement|Trace]]===
   
   
<p class="syntaxUL"><b><sup>(**)</sup></b><span class="squareb">{</span>PAI <span class="squareb">|</span> PRINT ALL INFORMATION<span class="squareb">}</span>
{{Template:Trace statement syntax}}
    INTO <span class="term">array1</span>, <span class="term">array2</span> [, <span class="term">array3</span>] [FROM <span class="term">start</span>] [COUNT <span class="term">ct</span>]
</p>


<hr>
<p class="note"><b>Note:</b> The output of the <var>Trace</var> statement is controlled by the <var>[[ULTRACE parameter|ULTRACE]]</var> parameter.</p>
<p class="syntaxUL">PRINT [MENU] <span class="term">menuname</span> [ALERT]
[TITLE <span class="squareb">{</span>'<span class="term">text</span>' <span class="squareb">|</span> <span class="term">%variable</span><span class="squareb">}</span> [AT [COLUMN] <span class="term">n</span>]
[TO [COLUMN] <span class="term">m</span> <span class="squareb">|</span> LEN <span class="term">m</span>] [<span class="term">attributes</span>]]
</p>


<hr>
===[[Program Communication facilities#TRANSFER statement format and execution|TRANSFER]]===
   
   
<p class="syntaxUL">PRINT SCREEN <span class="term">screenname</span> [ALERT] [[WITH] CURSOR]  
<p class="syntaxUL">TRANSFER <span class="squareb">[</span>CONTROL<span class="squareb">]</span> TO PROCESS <span class="squareb">{</span><span class="term">processname</span> <span class="squareb">|</span> <span class="term">%variable</span><span class="squareb">}</span>
  [TITLE <span class="squareb">{</span>'<span class="term">text</span>' <span class="squareb">|</span> <span class="term">%variable</span><span class="squareb">}</span> [AT [COLUMN] <span class="term">n</span>]  
<span class="squareb">[</span>WITH<span class="squareb">]</span> <span class="squareb">[</span>USERID <span class="squareb">{</span><span class="term">string</span> <span class="squareb">|</span> '<span class="term">%variable</span>'<span class="squareb">}</span><span class="squareb">]</span>
  [TO [COLUMN] <span class="term">m</span> <span class="squareb">|</span> LEN <span class="term">m</span>] [<span class="term">attributes</span>]]
  <span class="squareb">[</span>PASSWORD <span class="squareb">{</span><span class="term">variable</span> <span class="squareb">|</span> '<span class="term">string</span>'<span class="squareb">}</span><span class="squareb">]</span>
<span class="squareb">[</span>ACCOUNT <span class="squareb">{</span><span class="term">%variable</span> <span class="squareb">|</span> '<span class="term">string</span>'<span class="squareb">}</span><span class="squareb">]</span>
  <span class="squareb">[</span>PASSING <span class="squareb">{</span>IMAGE <span class="term">imagename</span> <span class="squareb">|</span> '<span class="term">string</span>' <span class="squareb">|</span> <span class="term">%variable</span><span class="squareb">}</span><span class="squareb">]</span>
</p>
</p>


<hr>
===UPDATE RECORD===
   
   
<p class="syntaxUL">PROMPT <span class="squareb">{</span>'<span class="term">text</span>' <span class="squareb">|</span> <span class="term">promptname</span><span class="squareb">}</span> [AT [COLUMN] <span class="term">n</span>]
<p class="syntaxUL">UPDATE RECORD</p>
[TO [COLUMN] <span class="term">m</span> <span class="squareb">|</span> LEN <span class="term">m</span>] [DP <span class="squareb">{</span><span class="term">k</span> <span class="squareb">|</span> *<span class="squareb">}</span>]] [DEFAULT '<span class="term">value</span>']
[[READ] <span class="term">attributes</span>] [REREAD <span class="term">attributes</span>]
[PRINT <span class="term">attributes</span>] [ITEMID <span class="term">n</span>]
</p>
 
<hr>
   
   
<p class="syntaxUL"><b><sup>(+)</sup></b>QUERY PROCESS <span class="squareb">{</span><span class="term">cid</span> <span class="squareb">|</span> <span class="term">processname</span> <span class="squareb">|</span> <span class="term">%variable</span><span class="squareb">}</span> <span class="term">options</span></p>
===VARIABLES ARE===
   
   
<div style="margin-left: 20px; background-color: #fBfBfB;">
<p class="syntaxUL">VARIABLES ARE
<p>
<span class="squareb">{</span>FIXED <span class="squareb">[</span>DP <span class="term">n</span><span class="squareb">]</span>  <span class="squareb">|</span> FLOAT
where <var class="term">options</var> must be one or more of the following:</p>
<span class="squareb">|</span> STRING <span class="squareb">[</span>LEN <span class="term">n</span><span class="squareb">]</span>  <span class="squareb">[</span>DP <span class="squareb">{</span><span class="term">n</span> <span class="squareb">|</span> *<span class="squareb">}</span><span class="squareb">]</span>
<ul style="font-family: Consolas,monospace">
<span class="squareb">|</span> UNDEFINED<span class="squareb">}</span>
<li>STATE <i>%variable</i>
</p>
   
   
<li>PROCESSGROUP <i>%variable</i>
===Declare <i>%variable</i>===
   
   
<li>REMOTEID <i>%variable</i>
<p class="syntaxUL"><span class="squareb">[</span>DECLARE<span class="squareb">]</span> <span class="term">%variable</span> <span class="squareb">[</span>IS<span class="squareb">]</span>
<span class="squareb">{</span>FIXED <span class="squareb">[</span>DP <span class="term">n</span><span class="squareb">]</span>  <span class="squareb">|</span> FLOAT<span class="squareb">}</span> <span class="squareb">[</span>ARRAY (<span class="term">d1</span><span class="squareb">[</span>,<span class="term">d2</span><span class="squareb">[</span>,<span class="term">d3</span><span class="squareb">]</span><span class="squareb">]</span>)<span class="squareb">]</span>
<span class="squareb">[</span>COMMON<span class="squareb">]</span>
 
<span class="squareb">[</span>DECLARE<span class="squareb">]</span> <span class="term">%variable</span> <span class="squareb">[</span>IS<span class="squareb">]</span>
STRING <span class="squareb">[</span>LEN <span class="term">n</span><span class="squareb">]</span>  <span class="squareb">[</span>DP <span class="squareb">{</span><span class="term">n</span> <span class="squareb">|</span> *<span class="squareb">}</span><span class="squareb">]</span> <span class="squareb">[</span>ARRAY (<span class="term">d1</span><span class="squareb">[</span>,<span class="term">d2</span>[<span class="term">d3</span><span class="squareb">]</span><span class="squareb">]</span>)<span class="squareb">]</span>
<span class="squareb">[</span>NO FIELD SAVE<span class="squareb">]</span> <span class="squareb">[</span>COMMON<span class="squareb">]</span>
<span class="term">%variable</span> <span class="squareb">[</span>(<span class="term">subscript</span>)<span class="squareb">]</span> = <span class="term">expression</span>
</p>
 
===WAIT===
<table class="noBorder">
<tr><td style="font-family:monoface; padding-right:0px">[[Statement syntax#Notation conventions|(+)]] </td>
<td><p class="syntaxUL">WAIT [<span class="squareb">{</span><span class="term">n</span> <span class="squareb">|</span> <span class="term">%variable</span><span class="squareb">}</span> SEC<span class="squareb">[</span>S<span class="squareb">]</span><span class="squareb">]</span> <span class="squareb">[</span>FOR<span class="squareb">]</span>    <br>    <span class="squareb">{</span>ANY RECEIPT RETURN <span class="term">%variable</span>    <br>    <span class="squareb">|</span> RECEIPT <span class="squareb">{</span><span class="term">cid</span> <span class="squareb">|</span> <span class="term">processname</span> <span class="squareb">|</span> <span class="term">%variable</span><span class="squareb">}</span><span class="squareb">}</span>
</p></td></tr>
</table>
   
   
<li>SYNCLEVEL <i>%variable</i>
===[[Write Image statement|Write Image]]===
   
   
<li>MODENAME <i>%variable</i>
<table class="noBorder">
<tr><td>{{Template:Write Image statement syntax}} </td></tr>
</table>
 
==Other syntax==
 
===<b id="tokens"></b>Names, numbers, literals, comments===
 
<ul>
<li>Names (for example, %variables, labels): see [[Model 204 naming conventions]]
<li>Other constructs: see [[Basic request structure]] (which also discusses some rules for statement labels)
</ul>
</ul>
</div> <!-- end options indenting -->
<hr>
<p class="syntaxUL">READ [IMAGE] <span class="term">imagename</span>
FROM <span class="squareb">{</span><span class="term">ext-filename</span> <span class="squareb">|</span> TERMINAL <span class="squareb">|</span> <span class="term">%variable</span><span class="squareb">}</span>
[PROMPT <span class="squareb">{</span>'<span class="term">text</span>' <span class="squareb">|</span> <span class="term">%variable</span><span class="squareb">}</span>]
[NEXT <span class="squareb">|</span> KEY <span class="term">operator</span> <span class="squareb">{</span><span class="term">value</span> <span class="squareb">|</span> <span class="term">%variable</span><span class="squareb">}</span>]
</p>


<hr>
===Value specification syntax===
<p>
<p class="syntaxUL">READ [IMAGE] <span class="term">imagename</span> FROM BUFFER
For all User Language statements and retrieval conditions, wherever the term <var class="term">value</var> appears in the syntax, it can be any of these:</p>
  [POSITION=<span class="squareb">{</span><span class="term">%pvariable</span> <span class="squareb">|</span> <span class="term">n</span><span class="squareb">}</span>]
<ul>
  [MAXLEN=<span class="squareb">{</span><span class="term">%lvariable</span> <span class="squareb">|</span> <span class="term">n</span><span class="squareb">}</span>]
<li>Literal number or string </li>
<li><var>VALUE IN</var> clause of the form:
<p class="syntax">VALUE <span class="squareb">[</span>IN<span class="squareb">]</span> <span class="term">label</span>
</p>
</p>
 
</li>
<hr>
<li>%variable</li>
</ul>
   
   
<p class="syntaxUL">READ [MENU] <span class="term">menuname</span> [ALERT]
===<b id="retrvSyn"></b>Retrieval condition syntax===
[TITLE ['<span class="term">text</span>' <span class="squareb">|</span> <span class="term">%variable</span><span class="squareb">}</span> [AT [COLUMN] <span class="term">n</span>]
<p>
[TO [COLUMN] <span class="term">m</span> <span class="squareb">|</span> LEN <span class="term">m</span>] [<span class="term">attributes</span>]]
A <var>Find</var> or <var>For Each Record Where</var> statement can be followed by any number of retrieval conditions separated by an end of line or [[LINEND parameter]] character.</p>
<p>
Conditions can be constructed as a series of phrases that are combined "in the usual way" with <var>And</var>, <var>Or</var>, <var>Not</var>, and parentheses (<b>()</b>):
</p>
</p>
 
<p class="syntax">[Not] <span class="term">phrase</span> [<span class="squareb">{</span>And <span class="squareb">|</span> Or <span class="squareb">|</span> Nor<span class="squareb">}</span> [Not] <span class="term">phrase</span>] ...
<hr>
<p class="syntaxUL">READ <span class="squareb">[</span>SCREEN<span class="squareb">]</span> <span class="term">screenname</span> <span class="squareb">[</span>ALERT<span class="squareb">]</span> <span class="squareb">[</span>NO REREAD<span class="squareb">]</span> <var>[ [</var>WITH<span class="squareb">]</span> CURSOR<span class="squareb">]</span>
[TITLE <span class="squareb">{</span>'<span class="term">text</span>' <span class="squareb">|</span> <span class="term">%variable</span><span class="squareb">}</span> [AT [COLUMN] <span class="term">n</span>]  
[TO [COLUMN] <span class="term">m</span> <span class="squareb">|</span> LEN <span class="term">m</span>] [<span class="term">attributes</span>]]
</p>
</p>
 
<p>
<hr>
Where: </p>
<p>
<var class="term">phrase</var> can be constructed from these options: </p>
<ul style="font-family: Consolas,monospace">
<li><var class="term">fieldname</var> = <span class="squareb">[</span>Not<span class="squareb">]</span> <i>value</i> </li>
   
   
<p class="syntaxUL">RECEIVE <span class="squareb">{</span>IMAGE <span class="term">imagename</span> <span class="squareb">|</span> <span class="term">%variable</span><span class="squareb">}</span>
<li><var class="term">fieldname</var> Like <i>pattern</i> </li>
FROM <span class="squareb">{</span><span class="term">cid</span> <span class="squareb">|</span> <span class="term">processname</span> <span class="squareb">|</span> <span class="term">%variable</span><span class="squareb">}</span> [RESULT <span class="term">%variable</span>]
</p>
   
   
<hr>
<li><var class="term">fieldname</var> Is [Not] <span class="squareb">{</span>Present <span class="squareb">|</span> Like '<i>pattern</i>'<span class="squareb">}</span> </li>
   
   
<p class="syntaxUL"><b><sup>(+)</sup></b>RECEIVE <span class="squareb">{</span>IMAGE <span class="term">imagename</span> <span class="squareb">|</span> <span class="term">%variable</span><span class="squareb">}</span>  
<li><var class="term">fieldname</var> Is [Not] <span class="squareb">{</span>[Numerically <span class="squareb">|</span> Alphabetically] <br>
    FROM <span class="squareb">{</span><span class="term">cid</span> <span class="squareb">|</span> <span class="term">processname</span> <span class="squareb">|</span> <span class="term">%variable</span><span class="squareb">}</span>  
[Eq <span class="squareb">|</span> = <span class="squareb">|</span> Ne <span class="squareb">|</span> ¬= <span class="squareb">|</span> Greater Than <span class="squareb">|</span> Gt <span class="squareb">|</span> <span class="squareb">|</span> Less Than <br><span class="squareb">|</span> Lt <span class="squareb">|</span> < <span class="squareb">|</span> Le <span class="squareb">|</span> <= <span class="squareb">|</span> Ge <span class="squareb">|</span> >= <span class="squareb">|</span> Before <span class="squareb">|</span> After] <i>value</i><span class="squareb">}</span> </li>
    RESULT <span class="term">%variable</span>
</p>
   
   
<hr>
<li><var class="term">fieldname</var> Is [Not] <span class="squareb">{</span>[Numerically <span class="squareb">|</span> Alphabetically] <br>
<span class="squareb">{</span>In Range [From <span class="squareb">|</span> After] <i>value1</i> <span class="squareb">{</span>To <span class="squareb">|</span> [And] Before<span class="squareb">}</span> <br>
<i>value2</i> <span class="squareb">|</span> Between <i>value1</i> And <i>value2</i><span class="squareb">}</span> </li>
   
   
<p class="syntaxUL">RELEASE ALL RECORDS</p>
<li>[[Record retrievals#FILE$ condition|File$]] <span class="squareb">{</span><i>filename</i> <span class="squareb">|</span> =<span class="squareb">}</span> </li>
   
   
<hr>
<li>Find$ <var class="term">label</var> </li>
   
   
<p class="syntaxUL">RELEASE POSITION <span class="squareb">{</span><span class="term">ext-filename</span> <span class="squareb">|</span> <span class="term">%variable</span><span class="squareb">}</span>
<li>[[Lists#Using the LIST$ condition|List$]] <i>listname</i> </li>
</p>
   
   
<hr>
<li>[[Record retrievals#LOCATION$ condition|Location$]] <span class="squareb">{</span><i>location</i> <span class="squareb">|</span> =<span class="squareb">}</span> </li>
   
   
<p class="syntaxUL">RELEASE RECORDS <span class="squareb">{</span>IN <span class="term">label</span> <span class="squareb">|</span> ON [LIST] <span class="term">listname</span><span class="squareb">}</span>
<li>[[#Point$|Point$]] <var class="term">value</var> </li>
</p>
   
   
<hr>
<li>[[#Sfl$ and Sfge$|Sfge$]] <var class="term">value</var> </li>
   
   
<p class="syntaxUL"><b><sup>(**)</sup></b>REMEMBER <span class="squareb">[</span>GLOBAL<span class="squareb">]</span> <span class="term">position_name</span>  
<li>[[#Sfl$ and Sfge$|Sfl$]] <var class="term">value</var> </li>
    [IN <span class="term">foundsortset_name</span> <span class="squareb">|</span> ON <span class="term">list_name</span>]
</ul>
<p>
where <var class="term">value</var> can be: </p>
<ul>
<li>A literal number or string</li>
 
<li>A %variable </li>
 
<li><var>Value</var> <span class="squareb">{</span>(<i>[[#Use of expressions|expression]]</i>) | [<var>In</var>] <i>label</i><span class="squareb">}</span>
<p>
<var class="term">label</var> points to an existing value set. If an <var>Eq Value In <i>value_set</i></var> clause, value set values are treated as Boolean OR, for example:
</p>
</p>
<p class="code"><i>field</i> = <i>value1</i> OR <i>field</i> = <i>value2</i> OR.... </p>
<p>
If an <var>Ne Value In <i>value_set</i></var> clause, values are treated as Boolean AND: </p>
<p class="code"><i>field</i> <> <i>value1</i> AND <i>field</i> <> <i>value2</i> AND.... </p>
<p>
See also [[Basic SOUL statements and commands#Processing a VALUE IN clause|Processing a VALUE IN clause]].</p></li>
</ul>
   
   
<hr>
<p><b>Notes:</b></p>
<ul>
<li>The first character (<code>¬</code>) of the "not-equal" test (<code>¬=</code>) in the fourth of the items in the list of <var class="term">phrase</var> options above is the EBCDIC "not sign," which has the hexadecimal value <code>5f</code>. </li>
   
   
<p class="syntaxUL"><b><sup>(**)</sup></b>REMOVE RECORD FROM <span class="squareb">[</span>LIST<span class="squareb">]</span> <span class="term">listname</span>
<li>For a description of the pattern in the <var>[Is] Like</var> and <var>Is Not</var> clauses, see the syntax of [[Is Like pattern matching#likeSyntax|Is Like patterns]]. </li>
 
<li>In addition to the discussions in the subsections that follow, see [[Record retrievals]] for a comprehensive description of retrieval conditions. </li>
</ul>
 
====Omitting repeated first words====
<p>
If a sequence of phrases in a particular retrieval condition all have the same first word, that word can be omitted from the latter phrases. For example:</p>
<p class="code">List$ A And Not List$ B
</p>
<p>
can be written:</p>
<p class="code">List$ A And Not B
</p>
<p>
And:</p>
<p class="code">x Is 13 Or x Is Less Than 7
</p>
<p>
can be written:</p>
<p class="code">x Is 13 Or Is Less Than 7
</p>
</p>
   
   
<hr>
====Omitting duplicated equal signs====
<p>
<p class="syntaxUL">REMOVE RECORDS <span class="squareb">{</span>IN <span class="term">label</span> <span class="squareb">|</span> ON [LIST] <span class="term">listname</span><span class="squareb">}</span>  
Duplicated equal signs can be omitted. For example, the expression:</p>
FROM [LIST] <span class="term">listname2</span>
<p class="code">a = 3 Or a = 5 Or a = 40
</p>
<p>
is equivalent to:</p>
<p class="code">a = 3 Or 5 Or 40
</p>
</p>
   
   
<hr>
====Use of parentheses====
<p>
<p class="syntaxUL">REPEAT [FOREVER <span class="squareb">|</span> <span class="term">n</span> TIMES <span class="squareb">|</span> WHILE <span class="term">expression</span>]
Parentheses can be placed around any sequence of phrases to clarify the condition or force the evaluation to occur in a particular order. For example:</p>
<p class="code">Not (a = 2 Or List$ y)
a = 1 And (b = 2 OR c = 3)
</p>
</p>
   
   
<hr>
====Use of expressions====
<p>
[[Using variables and values in computation#Expressions|Expressions]] can be used in <var>Find</var> and <var>For Each Record</var> statements to provide the retrieval condition for the <var>Point$</var>, <var>Sfl$</var>, and <var>Sfge$</var> conditions, as well as for the <var>Eq Value</var> clause: </p>
   
   
<p class="syntaxUL">REREAD [SCREEN] <span class="term">screenname</span> [ALERT] [[WITH] CURSOR]
=====Point$=====
[TITLE <span class="squareb">{</span>'<span class="term">text</span>' <span class="squareb">|</span> <span class="term">%variable</span><span class="squareb">}</span> [AT [COLUMN] <span class="term">n</span>]
<p class="syntax">Point$ Value(<span class="term">expression</span>)
[TO [COLUMN] <span class="term">m</span> <span class="squareb">|</span> LEN <span class="term">m</span>] [<span class="term">attributes</span>]]
</p>
</p>
 
Where:
<hr>
<p>
<var class="term">expression</var> is a function call, string concatenation, arithmetic operation, SOUL construct, or Boolean expression. It is preceded by the keyword <var>Value</var>. </p>
<p>
Example: </p>
<p>
This example finds the first <code>MA</code> record on file, and then counts the number of records from this point in the file:</p>
<p class="code">FD1:
   
   
<p class="syntaxUL">RESET <span class="squareb">{</span>HEADER <span class="squareb">|</span> TRAILER<span class="squareb">}</span> <span class="term">m</span>
IN ICSCUST FPC STATE = MA
    END FIND
FOR 1 RECORD IN FD1
  PRINT 'CURREC = ' WITH $CURREC
  PRINT '>= POINT$'
FD2:
  IN ICSCUST FPC POINT$ VALUE($CURREC)
    END FIND
END FOR
</p>
</p>
<hr>
   
   
<p class="syntaxUL">RETRY <span class="squareb">[</span>PENDING STATEMENT<span class="squareb">]</span>
=====Sfl$ and Sfge$=====
<p class="syntax">Sfl$ Value(<span class="term">expression</span>)
</p>
</p>
 
<p>
<hr>
Or:</p>
<p class="syntax">Sfge$ Value(<span class="term">expression</span>)
<p class="syntaxUL">RETURN
</p>
</p>
 
Where:
<hr>
<p>
<var class="term">expression</var> is a function call, string concatenation, arithmetic operation, SOUL construct, or Boolean expression. It is preceded by the keyword <var>Value</var>. </p>
<p class="syntaxUL">[DECLARE] SCREEN <span class="term">screenname</span>
<p>
[GLOBAL [<u><b>PERM</b>ANENT</u> <span class="squareb">|</span> <b>TEMP</b>ORARY]
Example:
<span class="squareb">|</span> [<u><b>PERM</b>ANENT</u> <span class="squareb">|</span> <b>TEMP</b>ORARY] GLOBAL
<span class="squareb">|</span> COMMON]
</p>
</p>
 
<p class="code">FOR %CT FROM 1 TO 10
<hr>
  IN EXPRESS STORE RECORD ($EDITN(%CT,'999'))
    ORD1 = (%REC WITH %CT)
<p class="syntaxUL">SEND <span class="squareb">{</span>IMAGE <span class="term">imagename</span> <span class="squareb">|</span> '<span class="term">string</span>' <span class="squareb">|</span> <span class="term">%variable</span><span class="squareb">}</span>
    ORD2 = (%CT * 2)
TO <span class="squareb">{</span><span class="term">cid</span> <span class="squareb">|</span> <span class="term">processname</span> <span class="squareb">|</span> <span class="term">%variable</span><span class="squareb">}</span>
    ORD4 = (%CT * 4)
[REQSEND <span class="term">%variable</span>]
  END STORE
[FLUSH]
END FOR
COMMIT
FOR %CT FROM 1 TO 5
  PRINT 'LESS THAN ' WITH %CT
FD1:
  IN EXPRESS FPC SFL$ VALUE($EDITN(%CT,'999'))
            END FIND
  PRINT 'GREATER THAN OR EQUAL TO ' WITH %CT
FD2:
  IN EXPRESS FPC SFGE$ VALUE($EDITN(%CT,'999'))
            END FIND
END FOR
</p>
</p>
<hr>
   
   
<p class="syntaxUL"><b><sup>(+)</sup></b>SEND <span class="squareb">{</span>IMAGE <span class="term">imagename</span> <span class="squareb">|</span> '<span class="term">string</span>' <span class="squareb">|</span> <span class="term">%variable</span><span class="squareb">}</span>
=====Eq Value=====
    TO <span class="squareb">{</span><span class="term">cid</span> <span class="squareb">|</span> <span class="term">processname</span> <span class="squareb">|</span> <span class="term">%variable</span><span class="squareb">}</span>
<p class="syntax"><span class="term">fieldname</span> Eq Value(<span class="term">expression</span>)
    [FLUSH <span class="squareb">|</span> CONFIRM]
    [REQSEND <span class="term">%variable</span>]
</p>
</p>
 
Where:
<hr>
<p>
<var class="term">expression</var> is a function call, string concatenation, arithmetic operation, SOUL construct, or Boolean expression. </p>
<p class="syntaxUL"><b><sup>(+)</sup></b>SEND ERROR TO <span class="squareb">{</span><span class="term">cid</span> <span class="squareb">|</span> <span class="term">processname</span> <span class="squareb">|</span> <span class="term">%variable</span><span class="squareb">}</span>  
<p>
          REQSEND <span class="term">%variable</span>
Example:
</p>
</p>
 
<p class="code">FD: IN FILE PEOPLE FD
<hr>
LAST EQ VALUE($READ('LAST NAME?') )
END FIND
<p class="syntaxUL">SET <span class="squareb">{</span>HEADER <span class="squareb">|</span> TRAILER<span class="squareb">}</span> <span class="term">m</span> <span class="term">print-specifications</span>
</p>
</p>


<hr>
===Print specification syntax===
<p>
<p class="syntaxUL">SIGNAL PROCESS
A <var>Print</var>, <var>Set</var>, <var>Audit</var>, or <var>Trace</var> statement contains print specifications of the following form:
<span class="squareb">{</span><span class="term">cid</span> <span class="squareb">|</span> [<span class="term">processname</span> <span class="squareb">|</span> <span class="term">%variable</span><span class="squareb">}</span> <span class="squareb">{</span><span class="term">nnn</span> <span class="squareb">|</span> <span class="term">%variable</span><span class="squareb">}</span>
</p>
</p>
 
<p class="syntax">[<span class="term">term</span>] <span class="squareb">[</span>And <span class="squareb">|</span> Tab <span class="squareb">|</span> With]...[[<span class="term">term</span>] [And <span class="squareb">|</span> Tab <span class="squareb">|</span> With] ...] ... [...]
<hr>
<p class="syntaxUL"><b><sup>(+)</sup></b>SIGNAL PROCESS
    <span class="squareb">{</span><span class="term">cid</span> <span class="squareb">|</span> [<span class="term">processname</span> <span class="squareb">|</span> <span class="term">%variable</span><span class="squareb">}</span>
</p>
</p>
Where:
<hr>
<p>
<var class="term">term</var> can be constructed as follows:</p>
<p class="syntaxUL">SKIP <span class="term">n</span> LINE<span class="squareb">[</span>S<span class="squareb">]</span>
<p class="syntax"><span class="squareb">{</span>'<span class="term">string</span>' <span class="squareb">|</span> <span class="term">%variable</span> <span class="squareb">|</span> Count In <span class="term">label</span> <span class="squareb">|</span> Occurrence In <span class="term">label</span> <span class="squareb">|</span> Value in <span class="label">term</span> <span class="squareb">|</span> <span class="term">function</span><span class="squareb">}</span>
<span class="squareb">[</span>At <span class="squareb">[</span>Column<span class="squareb">]</span> <span class="term">m</span><span class="squareb">]</span> <span class="squareb">[</span>To <span class="squareb">[</span>Column<span class="squareb">]</span> <span class="term">n</span><span class="squareb">]</span> </p>
<p>
Or, if the statement is within a record loop:
</p>
</p>
<p class="syntax"><span class="squareb">{</span><span class="squareb">{</span>Each <span class="squareb">|</span> <span class="n">term</span><span class="squareb">}</span> <span class="term">fieldname</span> <span class="squareb">|</span> *Record <span class="squareb">|</span> *Id<span class="squareb">}</span>
<hr>
[At [Column] <span class="term">m</span>] [To [Column] <span class="term">n</span><span class="squareb">}</span>
<p class="syntaxUL">[<span class="term">itemname</span> IS] SKIP <span class="term">n</span> POSITION[S]
[INITIAL <span class="squareb">{</span>NULL <span class="squareb">|</span> <span class="term">character</span> <span class="squareb">|</span> BLANK<span class="squareb">}</span>]
</p>
</p>


<hr>
<p class="note"><b>Note:</b> For additional <var>Print</var> statement details regarding multiply occurring fields and field groups, see [[Processing multiply occurring fields and field groups#PRINT and PRINT n statements|Print and Print <i>n</i>]] statements for fields. </p>
 
<p class="syntaxUL">SORT [<span class="term">k</span>] RECORDS <span class="squareb">{</span>IN <span class="term">label</span> <span class="squareb">|</span> ON [LIST] <span class="term">listname</span><span class="squareb">}</span>
===Expression syntax===
BY <span class="term">key</span> [AND <span class="term">key</span>] ...
<p>
The following syntax can be used in: </p>
<ul>
<li>Assignment statements </li>
<li>Conditional <var>If</var> statements and <var>ElseIf</var> clauses
<p>
In the simplified syntax for an <var>If</var> statement, which is:</p>
<p class="syntax">If <span class="term">condition</span> Then <span class="term">statements</span>
</p>
</p>
<div style="margin-left: 20px; background-color: #fBfBfB;">
<p>
<p>
where <var class="term">key</var> is:</p>
<var class="term">condition</var> expands to the syntax described in this section. </p></li>
<ul style="font-family: Consolas,monospace">
<li><i>key</i> = <i>fieldname</i> <br>
      [VALUE <span class="squareb">{</span>[ASCENDING <span class="squareb">|</span> DESCENDING] <br>
      [CHARACTER <span class="squareb">|</span> NUMERICAL] <span class="squareb">|</span> RIGHT-ADJUSTED]<span class="squareb">}</span> ...] </li>
</ul>
   
   
</div> <!--end key indent -->
<li>Computed <var>Jump To</var> statements </li>
   
   
<hr>
<li>Subscripts </li>
   
   
<p class="syntaxUL">SORT [<span class="term">k</span>] RECORD KEYS
<li>Function arguments </li>
<span class="squareb">{</span>IN <span class="term">label</span> <span class="squareb">|</span> ON [LIST] <span class="term">listname</span><span class="squareb">}</span>
BY <span class="term">key</span> [AND <span class="term">key</span>] ...
</p>
   
   
<div style="margin-left: 20px; background-color: #fBfBfB;">
<li>A value in parenthesis in SOUL "DML" statements, for example:
<p>
<p class="code">Add <var class="term">fieldname</var> = (<var class="term">expression</var>)</p>
where <var class="term">key</var> is:</p>
<ul style="font-family: Consolas,monospace">
<li><i>key</i> = <i>fieldname</i> <br>
      [VALUE <span class="squareb">{</span>[ASCENDING <span class="squareb">|</span> DESCENDING] <br>
      [CHARACTER <span class="squareb">|</span> NUMERICAL] <span class="squareb">|</span> [RIGHT-ADJUSTED]<span class="squareb">}</span> ...] </li>
</ul>
</ul>
   
   
</div>
=====<b id="exprSyntax"></b>Syntax=====
<p class="syntax"><span class="squareb">{</span>operand | (expression)<span class="squareb">}</span>  [operator <span class="squareb">{</span>operand <span class="squareb">|</span> (expression)<span class="squareb">}</span>] ...
</p>
Where:
<ul>
<li><var class="term">operand</var> can be constructed as follows:
<p class="syntax">[+ <span class="squareb">|</span> - <span class="squareb">|</span> Not]
<span class="squareb">{</span>'<span class="term">string</span>' <span class="squareb">|</span> <span class="term">%variable</span> <span class="squareb">|</span> <span class="term">number</span>
<span class="squareb">|</span> <span class="term">fieldname</span> <span class="squareb">[</span>(subscript)<span class="squareb">]</span> Is <span class="squareb">[</span>Not<span class="squareb">]</span> Present
<span class="squareb">|</span> Count In <span class="term">label</span> <span class="squareb">|</span> Occurrence In <span class="term">label</span>
<span class="squareb">|</span> Value In <span class="term">label</span>
<span class="squareb">|</span> <span class="term">function</span><span class="squareb">}</span>
</p></li>
   
   
<hr>
<li><var class="term">expression</var> (Note: enclosed by parentheses) is a function call, string concatenation, arithmetic operation, SOUL construct, or Boolean expression. For further details, see [[Using variables and values in computation#Expressions|Expressions]]. </li>
   
   
<p class="syntaxUL">SORT VALUE IN <span class="term">label</span> [IN [ASCENDING <span class="squareb">|</span> DESCENDING]
<li><var class="term">operator</var> may be one of the following:
[<u>CHARACTER</u> <span class="squareb">|</span> NUMERICAL] <span class="squareb">|</span> [RIGHT-ADJUSTED] ORDER]
<table style="table-layout: fixed">
</p>
<tr>
 
<td><b>+</b>&nbsp;&nbsp;&nbsp;</td>
<hr>
<td><b>=</b></td>
<td>EQ</td>
<td>And</td>
</tr>
   
   
<p class="syntaxUL">STOP [IF COUNT IN <span class="term">label</span> EXCEEDS <span class="term">n</span>]
<tr>
</p>
<td><b>-</b></td>
<td><b>,=</b>&nbsp;&nbsp;&nbsp;</td>
<td>NE&nbsp;&nbsp;</td>
<td>AndIf</td>
</tr>
   
   
<hr>
<tr>
<td><b>*</b></td>
<td><b>></b></td>
<td>GT</td>
<td>Or</td>
</tr>
   
   
<p class="syntaxUL"><b><sup>(*)</sup></b>STORE RECORD [<span class="term">sort or hash key value</span>]
<tr>
  <span class="term">fieldname1</span>=[<span class="term">value1</span> <span class="squareb">|</span> (<span class="term">expression1</span>)]
<td><b>/</b></td>
  [<span class="term">fieldname2</span>=(<span class="term">expression</span>)]
<td><b><</b></td>
  ...
<td>LT</td>
  [THEN CONTINUE
<td>OrIf</td>
      <span class="term">statement</span>  
</tr>
      <span class="term">statement</span>  
      ...]
  END STORE
</p>
   
   
<hr>
<tr>
<td>&nbsp;</td>
<td><b>>=</b></td>
<td>GE</td>
<td>With (Note: this can also be achieved via [[Implicit concatenation]])</td>
</tr>
   
   
<p class="syntaxUL">SUBROUTINE
<tr>
</p>
<td>&nbsp;</td>
<td><b><=</b></td>
<td>LE</td>
<td>Is [Not] Present (Note: applied either to a field or to an [[Methods#optionalParams|optional or default method parameter]])</td>
</tr>
   
   
<hr>
<tr>
<td>&nbsp;</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
<td>Is [Not] Like</td>
</tr>
</table>
<blockquote class="note"><b>Notes:</b>
<ul>
<li>The first character (<code>,</code>) of the inequality test above is the EBCDIC "not sign," which has the hexadecimal value <code>5f</code>. </li>
   
   
<p class="syntaxUL">SUBROUTINE <span class="term">subname</span>  
<li>For a description of the <code>Is Like</code> and <code>Is Not</code> clauses, see the syntax of [[Is Like pattern matching|Is Like patterns]]. </li>
[(<span class="term">formal-parameter</span> [INPUT <span class="squareb">|</span> OUTPUT <span class="squareb">|</span> INPUT OUTPUT] [,...])]
</p>
   
   
<div style="margin-left: 20px; background-color: #fBfBfB;">
<li>The <var>AndIf</var> and <var>OrIf</var> operators are called "short circuit", because, at a given precedence level, if the value of the conditional expression has been fully determined, the remainder at that level is not evaluated.  For example:
<p class="code">%sex eq 'M' and (%ht lt 5.2 orIf %ht gt 6.5)</p>
If the value of <code>%ht</code> is less than 5.2, the final comparison -- <code>%ht gt 6.5</code> -- is <b>never</b> evaluated (that holds regardless of what had been coded as the final comparison).
<p>With the same value of <code>%ht</code>, if the <code>Or</code> operator had been used, then that final comparison is <b>always</b> evaluated.</p>
</li>
<li>For more information about operators, see [[Using variables and values in computation#Operators|Operators]]. </li>
</ul>
</blockquote ></li>
</ul>
 
===In clause syntax===
<p>
The SOUL statements on this page whose syntax display is preceded by an asterisk (<tt>*</tt>) support an <var>In</var> clause. </p>
<p>
<p>
where <var class="term">formal-parameter</var> is one of the following:</p>
The three basic forms of the <var>In</var> clause are: </p>
<ul style="font-family: Consolas,monospace">
<li><i>%variable</i> [IS STRING [LEN <i>n</i>] [DP <span class="squareb">{</span><i>n</i> <span class="squareb">|</span> *<span class="squareb">}</span>] [ARRAY (*[,*[,*]]) [NO FS]] <br>
<p class="syntax">In [Permanent <span class="squareb">|</span> Temporary ] Group <span class="term">groupname</span>
          <span class="squareb">|</span> IS <span class="squareb">{</span>FIXED [DP <i>n</i>] <span class="squareb">|</span> FLOAT<span class="squareb">}</span> [ARRAY (*[,*[,*]])]]
Member [<span class="term">%member</span> <span class="squareb">|</span> [<span class="term">filename</span> [At <span class="squareb">{</span>location <span class="squareb">|</span> =<span class="squareb">}</span>]]</p>
   
   
<li>LIST <i>listname</i> [IN [FILE <span class="squareb">|</span> [PERM <span class="squareb">|</span> TEMP] GROUP] <i>name</i>]
<p class="syntax">In <span class="term">file1</span> [,<span class="term">file2</span>] ...</p>
</ul>
</div>
   
   
<hr>
<p class="syntax">In <span class="squareb">{</span>$Curfile <span class="squareb">|</span> $Update<span class="squareb">}</span></p>
<p>
The form <var>In $Curfile</var> can be used only within a record loop.</p>
   
   
<p class="syntaxUL">TAG <span class="term">%screenname</span>:<span class="term">inputname</span> <span class="squareb">[</span><span class="term">attributes</span><span class="squareb">]</span> <span class="squareb">[</span>WITH 'c'<span class="squareb">]</span>
====In Group Member limitations====
</p>
<p>
In addition to the three basic forms of the In clause shown above, the <var>In Group Member</var> clause restricts the following statements to one member file in a group context:</p>
<ul>
<li><var>Clear List</var></li>
   
   
<hr>
<li><var>Find All Records</var> (and its variants)</li>
   
   
<p class="syntaxUL"><b><sup>(+)</sup></b>TEST [FOR]
<li><var>Find All Values</var></li>
    <span class="squareb">{</span>ANY RECEIPT RETURN <span class="term">%variable</span>
    <span class="squareb">|</span> RECEIPT <span class="squareb">{</span><span class="term">cid</span> <span class="squareb">|</span> <span class="term">processname</span> <span class="squareb">|</span> <span class="term">%variable</span><span class="squareb">}</span><span class="squareb">}</span>
</p>
   
   
<hr>
<li><var>For Record Number</var> (or <var>FRN</var>)</li>
   
   
<p class="syntaxUL">TITLE <span class="squareb">{</span>'<span class="term">text</span>' <span class="squareb">|</span> <span class="term">promptname</span><span class="squareb">}</span>  
<li><var>Store Record</var> </li>
[AT [COLUMN] <span class="term">n</span>]  [TO [COLUMN] <span class="term">m</span> <span class="squareb">|</span> [LEN <span class="term">m</span>
</ul>
[DP <span class="squareb">{</span><span class="term">k</span> <span class="squareb">|</span> *<span class="squareb">}</span>]]
<p>
[DEFAULT '<span class="term">value</span>']
You cannot use an <var>In Group Member</var> clause with a <var>For Each Record</var> statement or with an <var>Add</var>, <var>Change</var>, or <var>Delete Record</var> statement. Only the previously listed statements call accept an <var>In Group Member</var> clause.</p>
[[READ] <span class="term">attributes</span>]  [REREAD <span class="term">attributes</span>]  [PRINT <span class="term">attributes</span>]
</p>
   
   
<hr>
====Using an In clause in a Begin...End block====
<p>
The file name in the <var>In</var> clause used within a <var>Begin...End</var> block is resolved by the compiler. You can hard-code a file name or use some type of dummy string for the file name. Using a %variable for the file name is not allowed. </p>
 
===Subscript syntax===
<p>
A subscript has the format:  </p>
   
   
<p class="syntaxUL">TRANSFER [CONTROL] TO PROCESS <span class="squareb">{</span><span class="term">processname</span> <span class="squareb">|</span> <span class="term">%variable</span><span class="squareb">}</span>
=====Syntax=====
[WITH] [USERID <span class="squareb">{</span><span class="term">string</span> <span class="squareb">|</span> '<span class="term">%variable</span>'<span class="squareb">}</span>]
<p class="syntax">(<span class="term">subscript1</span> [,<span class="term">subscript2</span> [,<span class="term">subscript3</span>]] )
[PASSWORD <span class="squareb">{</span><span class="term">variable</span> <span class="squareb">|</span> '<span class="term">string</span>'<span class="squareb">}</span>]
[ACCOUNT <span class="squareb">{</span><span class="term">%variable</span> <span class="squareb">|</span> '<span class="term">string</span>'<span class="squareb">}</span>]  
[PASSING <span class="squareb">{</span>IMAGE <span class="term">imagename</span> <span class="squareb">|</span> '<span class="term">string</span>' <span class="squareb">|</span> <span class="term">%variable</span><span class="squareb">}</span>]
</p>
</p>
Where:
<p>
<var class="term">subscript1</var>, <var class="term">subscript2</var>, and <var class="term">subscript3</var> can be any expression. </p>


<hr>
==SOUL macros==
There are [[SOUL macro facility|additional facilities]] supporting <var class="product">SOUL</var>
<p class="syntaxUL">UPDATE RECORD</p>
<b>macro statements</b>. Macro statements allow code to be conditionally compiled.
 
<hr>
As an example, in the following SOUL fragment, the <var>Recordset</var> object declaration would be for the file <code>AVEBURY</code>:
<p class="code">!def henge avebury
<p class="syntaxUL">VARIABLES ARE
  ...
<span class="squareb">{</span>FIXED [DP <span class="term">n</span>] <span class="squareb">|</span> FLOAT
%sites is object recordset in file ?!HENGE
<span class="squareb">|</span> STRING [LEN <span class="term">n</span>] [DP <span class="squareb">{</span><span class="term">n</span> <span class="squareb">|</span> *<span class="squareb">}</span>]
  <span class="squareb">|</span> UNDEFINED<span class="squareb">}</span>
</p>
</p>


<hr>
==Terminal display attributes==
<p>
One or more of the following terminal display attributes can replace the term attribute in a full-screen formatting statement, if the display attribute is supported by the installation:</p>
   
   
<p class="syntaxUL">[DECLARE] <span class="term">%variable</span> [IS]  
<table>
<span class="squareb">{</span>FIXED [DP <span class="term">n</span>] <span class="squareb">|</span> FLOAT<span class="squareb">}</span> [ARRAY (<span class="term">d1</span>[,<span class="term">d2</span>[,<span class="term">d3</span>]])]
<caption>List of attributes</caption>
[COMMON]
<tr>
</p>
<td>BLINK</td>
</tr>
<tr>
<td>BLUE</td>
</tr>
<tr>
<td>BRIGHT</td>
</tr>
<tr>
<td>DIM</td>
</tr>
<tr>
<td>GREEN</td>
</tr>
<tr>
<td>INV[IS[BLE]] </td>
</tr>
<tr>
<td>NOBLINK</td>
</tr>
<tr>
<td>NOREV[ERSE]</td>
</tr>
<tr>
<td>NOU[NDER]SCORE</td>
</tr>
<tr>
<td>PINK</td>
</tr>
<tr>
<td>PROT[ECTED]</td>
</tr>
<tr>
<td>RED</td>
</tr>
<tr>
<td>REV[ERSE]</td>
</tr>
<tr>
<td>TURQUOISE</td>
</tr>
<tr>
<td>[UNDER]SCORE</td>
</tr>
<tr>
<td>UNPROT[ECTED]</td>
</tr>
<tr>
<td>VIS[IBLE]</td>
</tr>
<tr>
<td>WHITE</td>
</tr>
<tr>
<td>YELLOW </td>
</tr>
</table>


<hr>
==Notation conventions==
<p>
This page uses the following syntax notation conventions: </p>
   
   
<p class="syntaxUL">[DECLARE] <span class="term">%variable</span> [IS]
<table>
STRING [LEN <span class="term">n</span>]  [DP <span class="squareb">{</span><span class="term">n</span> <span class="squareb">|</span> *<span class="squareb">}</span>] [ARRAY (<span class="term">d1</span>[,<span class="term">d2</span>[<span class="term">d3</span>]])]
<tr class="head">
[NO FIELD SAVE] [COMMON]  
<th>Syntax notation </th>
<span class="term">%variable</span> [(<span class="term">subscript</span>)] = <span class="term">expression</span>
<th>Indicates that...</th>
</p>
</tr>
<tr>
<td>Single asterisk (*) </td>
<td>Statements can be preceded by an IN clause, if there is no reference to a previous set (label or list). See [[#IN clause syntax|IN clause syntax]] for more discussion.</td>
</tr>
   
   
<hr>
<tr>
<td>Two asterisks (**) </td>
<td>Construct can appear only within a record loop.</td>
</tr>
   
   
<p class="syntaxUL"><b><sup>(+)</sup></b>WAIT [<span class="squareb">{</span><span class="term">n</span> <span class="squareb">|</span> <span class="term">%variable</span><span class="squareb">}</span> SEC[S]] [FOR]
<tr>
    <span class="squareb">{</span>ANY RECEIPT RETURN <span class="term">%variable</span>
<td>Plus sign (+) </td>
    <span class="squareb">|</span> RECEIPT <span class="squareb">{</span><span class="term">cid</span> <span class="squareb">|</span> <span class="term">processname</span> <span class="squareb">|</span> <span class="term">%variable</span><span class="squareb">}</span><span class="squareb">}</span>
<td>Construct requires the optional [[Horizon]] feature.</td>
</p>
</tr>
   
   
<hr>
<tr>
<td nowrap>Two plus signs (++) </td>
<td>Construct requires the optional User Language to Database 2 feature.</td>
</tr>
   
   
<p class="syntaxUL">WRITE [IMAGE] <span class="term">imagename</span>  
<tr>
ON <span class="squareb">{</span><span class="term">seq-filename</span> <span class="squareb">|</span> TERMINAL <span class="squareb">|</span> <span class="term">%variable</span><span class="squareb">}</span>
<td>C</td>
</p>
<td>The (first) keyword of the statement is also a <var class="product">Model&nbsp;204</var> command; the command's wiki page will be, for example, 'OPEN command'.
<p>
<var class="product">Model&nbsp;204</var> commands are listed alphabetically and documented in [[List of Model 204 commands]]. </p></td>
</tr>
   
   
<hr>
<tr>
<td>Lowercase italic </td>
<td>Constructs are replaced with variable information.</td>
</tr>
</table>
   
   
<p class="syntaxUL">WRITE IMAGE <span class="term">imagename</span> ON BUFFER
<ul>
  [POSITION=<span class="term">%pvariable</span> <span class="squareb">|</span> <span class="term">n</span>]  [MAXLEN=<span class="squareb">{</span><span class="term">%lvariable</span> <span class="squareb">|</span> <span class="term">n</span><span class="squareb">}</span>]
<li>A field name (%%) variable can be used anywhere fieldname appears. The %%variable can contain its own subscript, separate from the field name subscript.
</p>
<p class="note"><b>Note: </b>
The subscript of an array element must be specified before a field name subscript.</p> </li>
<li>The lowercase constructs &mdash; retrieval-conditions, print-specifications, expression, subscript, attribute, and type &mdash; are discussed separately following the syntax summaries, beginning with [[#Value specification syntax|Value specification syntax]]</li>


<li>For more Model 204 notation conventions, see [[Notation conventions]].</li>
</ul>
   
   
[[Category:SOUL]]
[[Category:SOUL]]

Latest revision as of 19:23, 10 April 2020

This page summarizes SOUL syntax and conventions, which are discussed in more detail throughout this wiki. The SOUL statements are listed in alphabetical order. Many of the section titles or syntax blocks contain links to the wiki page describing the statement or syntax phrase. A later section provides other SOUL syntax information, including links to information about the "tokens" of SOUL, such as names in SOUL.

All SOUL statements can be used between a Begin (or More) command and an End statement.

External Call Facility (ECF) statements are listed under External.

Various other Model 204 commands also have effects on the results of a SOUL request.

The following notations prefix some of the statements in the presentation of the SOUL syntax:

* ** + ++ C

See the notation conventions section for an explanation of these usages, as well as other general comments about understanding the syntax of SOUL.

 

Add

(**)

Add fieldname = {value | (expression)}

Add lob-fieldname=Buffer,position,length [Reserve n [Bytes]]

Array

Array [arrayname] Occurs {n | Unknown} Depending On {itemname | %variable} [After {itemname | arrayname} | At {position | itemname | imagename1 | arrayname}]

Assert

Assert cond [, [Snap] [Info info] [Continue] ]

where cond is, like an If statement, the condition(s) being asserted as true. The statement options indicate how to respond to an assertion failure.

Audit

Audit print-specifications

Audit All Fieldgroup Information (AAFGI)

(**)

{AAFGI | Audit All Fieldgroup Information} [lob-option] [CtoFields]

Audit All Information

{Audit All Information | AAI} [CtoFields]

Backout

Backout

BYPASS

BYPASS [PENDING STATEMENT]

CALL

CALL {label | subname [([expression | %variable | [LIST] listname] [,...])]}

Change

(**)

Change fieldname [(subscript)] [= value |(expression)] To (newvalue |(expression))

Change lob-fieldname,position1,length To Buffer,position2,length[Reserve n [Bytes]]

CLEAR

Clear {[[All | Temp | ListFdst | Position] [Global]] Objects | Globals | Global {Image | Screen | Menu | List | Foundset | Position [Perm | Temp]} {'objectname' | %variable}}

CLEAR LIST

(*)

CLEAR LIST listname

CLEAR ON

CLEAR ON {ATTENTION | ERROR | FIELD CONSTRAINT CONFLICT | FIND CONFLICT | RECORD LOCKING CONFLICT | MISSING FILE | MISSING MEMBER}

CLEAR TAG

CLEAR TAG {screenname | %screenname:inputname}

Close

Close
{Dataset | External} {ext-filename | %variable}
| [External] Terminal

CLOSE PROCESS

(+C)

CLOSE PROCESS
{cid | processname | %variable}
[SYNCLEVEL | FLUSH | %variable]

CLOSE PROCESS {cid | processname | %variable} [SYNCLEVEL | CONFIRM | FLUSH | ERROR | %variable]

Commit

Commit [Release]

Confirm

(+)

Confirm {cid | processname | %variable} REQSEND %variable

Confirmed

(+)

Confirmed {cid | processname | %variable}

CONTINUE

CONTINUE

COUNT OCCURRENCES OF

(**)

COUNT OCCURRENCES OF fieldname

COUNT RECORDS

COUNT RECORDS {IN label | ON [LIST] listname}

Declare

[Declare] declaration

where declaration is one of the following:

  • Label labelname [Global | Common]
  • List listname
    [
    In [File | [Perm | Temp] Group]] name]
    At location [Global | Common]
  • Image block:

    [Declare] Image imagename [Namesave] [global | Common]
    imageComponent
    [imageComponent] ... [Image imagename2 [Namesave] [At {itemname | imagename | arrayname}]
    imageComponent
    [imageComponent] ... ] ...
    End Image

    where global is:

    Global [Permanent | Temporary]
    | [Permanent | Temporary] Global

  • Menu block:

    [Declare] Menu menuName [Global [Permanent | Temporary] | Common] menuLine menuLine ... End Menu

    Menu statement, referring to a menu defined elsewhere in a Menu block:

    [Declare] Menu menuName [Global [Permanent | Temporary] | Common]

  • Screen block:

    [Declare] Screen screenName [Global [Permanent | Temporary] | Common] screenLine screenLine ... End Screen

    Screen statement, referring to a screen defined earlier in a Screen block:

    [Declare] Screen screenName Common

  • %variable [Is] {Fixed [Dp n] | Float} [Array (d1 [,d2 [,d3]])]
    [Initial(numeric-expression)] [Static] [Common]
  • %variable [Is] String [Len n] [Dp {n | *}] [Array (d1 [,d2[,d3]])]
    [No Field Save] [Common]
    [Initial('EBCDIC-string' | expression)] [Static]
  • Subroutine subname
    [(type [Input | Output | Input Output] [,...])]

    where type is one of the following:

    • Scalar %variable of the following format:

      {String [Len] n [DP {n | *}] | [Fixed [Dp n] | Float]}

    • Array %variable of the following format:

      {String [Len n] [Dp [n | *}] [Array (* [,*[,*]]) [No Field Save]]
      | [Fixed [Dp n] | Float] [Array (* [,*[,*]])]}

    • A list of records of the following format:

      [List] [In {File | [Perm | Temp] Group} name]

DEFAULT CURSOR

DEFAULT CURSOR [READ | REREAD | PRINT] {ITEMID n | itemname | ROW n COLUMN m}

DEFAULT

DEFAULT {TITLE | PROMPT | INPUT [DEBLANK | NODEBLANK] [PAD WITH 'c'] [LEN m [DP [k | *}]] [UPCASE | NOCASE] | [TAG [attributes] [WITH 'c']} [[READ] attributes] [REREAD attributes] [PRINT attributes] DEFAULT SKIP n POSITIONS[S] [INITIAL {NULL | character | BLANK}] DEFAULT [TYPE] {STRING | BINARY | PACKED | ZONED | FLOAT | EFORMAT} {LEN {n | UNKNOWN} | BITS n | DIGITS n} [DP {k | *}] [BP n] [SIGNED | UNSIGNED] [PAD {BLANK | character | NULL}] [STRIP | NOSTRIP] [JUSTIFY {LEFT | RIGHT}] [INITIAL {BLANK | ZERO | NULL | literal}]

DELETE

(**)

DELETE fieldname [(subscript)] [= value | (expression)]

(**)

DELETE FIELDGROUP [fieldgroupname] [(subscript)] [= value | (expression)]

DELETE EACH

(**)

DELETE EACH fieldname

DELETE RECORD

(**)

DELETE RECORD

DELETE RECORDS

DELETE [ALL] RECORDS {IN label | ON [LIST] listname}

END BLOCK

END BLOCK label

End

END {FIND | IF | FOR | ON | REPEAT | STORE | SUBROUTINE} [label] END {ARRAY | IMAGE | MENU | SCREEN} End [MORE | NORUN | USE]...

END UPDATE

END UPDATE

External

External { Call callTerms | Delete deleteTerms | Load loadTerms | Module moduleTerms | Name nameTerms | Start startTerms | Stop stopTerms }

FILE RECORDS

FILE RECORDS {IN label | ON [LIST] listname} UNDER fieldname = {value | (expression)}

Find Records

(*)

{FIND [[ALL] RECORDS] | FD }
[IN label | ON [LIST] listname]
[FOR WHICH | WITH] retrieval-conditions

Find And Reserve

(*)

{FIND AND RESERVE [[ALL] RECORDS] | FDR}
[IN label | ON [LIST] listname]
[FOR WHICH | WITH] retrieval-conditions

Find Values Of (FDV)

label:[In { File filename | Group groupname } ]
{ Find [All] Values Of | FDV } fieldname
[From value1 | (expression1)] [To value2 | (expression2)]
[(Not) Like pattern]
[(Not) Value In value_set]

FIND AND PRINT COUNT

(*)

{Find And Print Count | FPC}
[retrieval-conditions]

Find Without Locks

(*)

{Find Without Locks [[ALL] Records] | FDWOL}
[In label | On [LIST] listname] [For Which | With] retrieval-conditions

FLUSH PROCESS

FLUSH PROCESS {cid | processname | %variable}

FOR EACH OCCURRENCE

(**)

FOR {EACH | k} {OCCURRENCE | OCCURRENCES} OF fieldname

For Each Record

(*)

For {Each | n} {Record | Records} [In label | On [List] listname] [In [Ascending | Descending] [Sortkey] Order [By [Each] fieldname]] [From {value1 | (expression1)}] [To {value2 | (expression2)}] [By {%variable | literal}] [Optimizing FNV] [{Where | With} retrieval-conditions]

Note: For retrieval-conditions, see Retrieval condition syntax, below.

FOR EACH VALUE OF

(*)

FOR {EACH | k} {VALUE | VALUES} OF fieldname
[FROM {value1 | (expression1)}] [TO {value2 | (expression2)}] [[NOT] LIKE pattern]
[IN [ASCENDING | DESCENDING] [CHARACTER | NUMERICAL] [RIGHT-ADJUSTED] ORDER]

FOR EACH VALUE IN

FOR {EACH | k} {VALUE | VALUES} IN label

FOR RECORD NUMBER

(*)

FOR RECORD NUMBER {value | (expression)}

FOR RECORD NUMBER IN

FOR RECORD NUMBER {value | IN label} [OPTIMIZING FNV]

For %var From %exp1 To %exp2 By %exp3

For %variable From exp1
To exp2 [By exp3]

Note: The By clause, when omitted, defaults to a value of 1.

Identify

Identify
{ [Image] imagename
| %imagename:itemname Len {n | %variable}
| {%imagename:arrayname | %imagename:itemname} Occurs {n | %variable} }

If...Then...ElseIf...Else

(C)

If expression Then [statement]
[statement]
...
[
ElseIf expression Then [statement]
[statement]
...
] ...
[
Else [statement]
[statement]
...
]
End If

Image

Image block:

[Declare] Image imagename [Namesave] [global | Common]
imageComponent
[imageComponent] ... [Image imagename2 [Namesave] [At {itemname | imagename | arrayname}]
imageComponent
[imageComponent] ... ] ...
End Image

where global is:

Global [Permanent | Temporary]
| [Permanent | Temporary] Global

INCLUDE

(*, C)

INCLUDE procedurename

INPUT

INPUT inputname [AT [COLUMN] n] [TO [COLUMN] m | [LEN m] DP {k | *}]] [UPCASE | NOCASE] [DEFAULT 'value'] [DEBLANK | NODEBLANK] [PAD WITH 'c'] [REQUIRED | ALPHA | ALPHANUM | MUSTFILL | ONEOF literal [, literal]... | [NUMERIC] [RANGE lo [TO] hi [AND lo [TO] hi] ...] | VERIFY 'characters']... [[READ] attributes] [REREAD attributes] [PRINT attributes] [TAG [attributes] [WITH 'c']] [ITEMID n]

INSERT

INSERT fieldname [(subscript)] = {value | (expression)}

Invite

(+)

Invite {cid | processname | %variable}
[SYNCLEVEL | FLUSH | CONFIRM]

IS

itemname IS [TYPE] {STRING | BINARY | PACKED | ZONED | FLOAT | EFORMAT} {LEN {n | UNKNOWN} | BITS n | DIGITS n | TO position} [DP {k | *}] [BP n] [SIGNED | UNSIGNED] [PAD {BLANK | character | NULL}] [STRIP | NOSTRIP] [ALIGN] [JUSTIFY {LEFT | RIGHT}] [INITIAL {BLANK | ZERO | NULL | value}] [AFTER {itemname | arrayname} | AT {position | itemname | imagename1 | arrayname}] [OCCURS {n [DEPENDING ON {itemname | %variable}] | UNKNOWN}]

JUMP TO

JUMP TO label JUMP TO (label1 [, label2] ...) expression

Loop End

Loop End

Loop Next

Loop Next

MAX PFKEY

MAX PFKEY n

Menu

Menu block:

[Declare] Menu menuName [Global [Permanent | Temporary] | Common] menuLine menuLine ... End Menu

Menu statement, referring to a menu defined elsewhere in a Menu block:

[Declare] Menu menuName [Global [Permanent | Temporary] | Common]

MODIFY

MODIFY {%menuname:itemname | %screenname:itemname} [TO] attributes [[FOR] {ALL | READ | REREAD | TAB | PRINT}]

MODIFY BUFFER

MODIFY BUFFER [SIZE=n | %variable [PRESERVE | NOPRESERVE]] [FILL [X'nn'] | CLEAR]

NEW PAGE

(C)

NEW PAGE

Note

(**)

Note {fieldname [(subscript)]}

Note 'string'

On

On {Attention | Error | Field Constraint Conflict | Find Conflict | Missing File | Missing Member | Record Locking Conflict} statements End On [label]

Open

Open { [Dataset | External] {ext-filename | %variable} | [External] {Terminal | %variable} } For {Input [Output] | Output [Input] | InOut} [Password {value | %variable}]

(C)

Open[C] [File | [Perm | Temp] Group]
{name [At {location | %variable | =}] | %variable}
[Password {value | %variable}]

OPEN PROCESS

OPEN PROCESS {processname | %variable} [CID {name | %variable}]

(+)

OPEN PROCESS {processname | %variable}
[CID {name | %variable}]
{outbound-options | inbound-options}

where outbound-options are:

  • [AT DESTINATION] [WITH] [USERID {%variable | 'string'}]
  • [PASSWORD {%variable | 'string'}]
  • [{ACCOUNT | PROFILE {%%variable | 'string'}]
  • [INITIAL {DATA 'string' | DATA %variable | IMAGE imagename] ...]

and inbound-options are:

  • ACCEPT [INITIAL {DATA %variable | IMAGE image} ...]

Pause

Pause [n | %variable]

PLACE RECORD ON

(**)

PLACE RECORD ON [LIST] listname

PLACE RECORDS

PLACE RECORDS {IN label | ON [LIST] listname1} ON [LIST] listname2

Position

POSITION {FOUNDSET foundsortset_name | LIST list_name} [AT] position_name

Note: Use the above form of the Position statement with For loop processing; see Position statement.

POSITION {ext-filename | %variable} AT KEY operator{value | %variable}

Note: Use the above form of the Position statement with external file processing using images; see Position statement.

PREPARE

PREPARE {[IMAGE] imagename | [MENU] menuname | [SCREEN] screenname}

Print

Print printSpecifications

Print All Fieldgroup Information (PAFGI)

(**)

{PAFGI | Print All Fieldgroup Information} [lob-option] [CtoFields]

Print All Information or PAI

(**)

{PAI | Print All Information}
[Lob_Flod | Lob_Data | Lob_Short_Data | Lob_No_Data | Lob_None]
[CtoFields]
[Into array1, array2 [, array3] [From start] [Count ct] ]

PRINT MENU

PRINT [MENU] menuname [ALERT] [TITLE {'text' | %variable} [AT [COLUMN] n] [TO [COLUMN] m | LEN m] [attributes]]

PRINT SCREEN

PRINT SCREEN screenname [ALERT] [[WITH] CURSOR] [TITLE {'text' | %variable} [AT [COLUMN] n] [TO [COLUMN] m | LEN m] [attributes]]

Query Process

(+)

Query Process {cid | processname | %variable} options

where options must be one or more of the following:

  • STATE %variable
  • PROCESSGROUP %variable
  • REMOTEID %variable
  • SYNCLEVEL %variable
  • MODENAME %variable

Read Image

Read [Image] imagename From {ext-filename | Terminal | %variable} [Prompt {'text' | %variable}] [Next | Key operator {value | %variable}]

Read [Image] imagename From Buffer [Position={%pvariable | n}] [Maxlen={%lvariable | n}]

READ menuname

READ [MENU] menuname [ALERT] [TITLE ['text' | %variable} [AT [COLUMN] n] [TO [COLUMN] m | LEN m] [attributes]]

READ screenname

READ [SCREEN] screenname [ALERT] [NO REREAD] [ [WITH] CURSOR] [TITLE {'text' | %variable} [AT [COLUMN] n] [TO [COLUMN] m | LEN m] [attributes]]

RECEIVE IMAGE

RECEIVE {IMAGE imagename | %variable} FROM {cid | processname | %variable} [RESULT %variable]

(+)

RECEIVE {IMAGE imagename | %variable}
FROM {cid | processname | %variable}
RESULT %variable

Release All Records

Release All Records

Release Position

Release Position {ext-filename | %variable}

Release Records

Release Records {In label | On [List] listname}

Remember

(**)

Remember [Global] position_name [In foundsortset_name | On list_name]

REMOVE RECORD FROM

(**)

REMOVE RECORD FROM [LIST] listname

REMOVE RECORDS

REMOVE RECORDS {IN label | ON [LIST] listname} FROM [LIST] listname2

REPEAT

REPEAT [FOREVER | n TIMES | WHILE expression]

REREAD

REREAD [SCREEN] screenname [ALERT] [[WITH] CURSOR] [TITLE {'text' | %variable} [AT [COLUMN] n] [TO [COLUMN] m | LEN m] [attributes]]

RESET

RESET {HEADER | TRAILER} m

Rethrow

Rethrow exceptionName ...

RETRY

RETRY [PENDING STATEMENT]

RETURN

RETURN

Screen

Screen block:

[Declare] Screen screenName [Global [Permanent | Temporary] | Common] screenLine screenLine ... End Screen

Screen statement, referring to a screen defined earlier in a Screen block:

[Declare] Screen screenName Common

SEND

SEND {IMAGE imagename | 'string' | %variable} TO {cid | processname | %variable} [REQSEND %variable] [FLUSH] (+)SEND {IMAGE imagename | 'string' | %variable} TO {cid | processname | %variable} [FLUSH | CONFIRM] [REQSEND %variable]

Send Error

(+)

Send Error To {cid | processname | %variable}
Reqsend %variable

SET

SET {HEADER | TRAILER} m print-specifications

SetText

SetText %variable = string

SIGNAL PROCESS

SIGNAL PROCESS {cid | [processname | %variable} {nnn | %variable}

(+)

SIGNAL PROCESS
{cid | [processname | %variable}

Sirius Case directive

(C)

Sirius Case {ToUpper | Leave}

SKIP LINES

SKIP n LINE[S]

Skip Position

[itemname Is] Skip n Position[s]
[Initial {Null | character | Blank}]

SORT RECORDS

SORT [k] RECORDS {IN label | ON [LIST] listname} BY key [AND key] ...

where key is:

  • key = fieldname
    [VALUE {[ASCENDING | DESCENDING]
    [CHARACTER | NUMERICAL] | RIGHT-ADJUSTED]} ...]

SORT RECORD KEYS

SORT [k] RECORD KEYS {IN label | ON [LIST] listname} BY key [AND key] ...

where key is:

  • key = fieldname
    [VALUE {[ASCENDING | DESCENDING]
    [CHARACTER | NUMERICAL] | [RIGHT-ADJUSTED]} ...]

SORT VALUE IN

SORT VALUE IN label [IN [ASCENDING | DESCENDING] [CHARACTER | NUMERICAL] | [RIGHT-ADJUSTED] ORDER]

STOP

(C)

STOP [IF COUNT IN label EXCEEDS n]

STORE RECORD

(*)

STORE RECORD [sort or hash key value]
fieldname1=[value1 | (expression1)]
[fieldname2=(expression)]
...
[THEN CONTINUE
statement
statement
...]
END STORE

SUBROUTINE

SUBROUTINE SUBROUTINE subname [(formal-parameter [INPUT | OUTPUT | INPUT OUTPUT] [,...])]

where formal-parameter is one of the following:

  • %variable [IS STRING [LEN n] [DP {n | *}] [ARRAY (*[,*[,*]]) [NO FS]]
    | IS {FIXED [DP n] | FLOAT} [ARRAY (*[,*[,*]])]]
  • LIST listname [IN [FILE | [PERM | TEMP] GROUP] name]

TAG

TAG %screenname:inputname [attributes] [WITH 'c']

Test Receipt

(+)

Test [For]
{Any Receipt Return %variable
| Receipt {cid | processname | %variable}}

TITLE

TITLE {'text' | promptname} [AT [COLUMN] n] [TO [COLUMN] m | [LEN m] [DP {k | *}]] [DEFAULT 'value'] [[READ] attributes] [REREAD attributes] [PRINT attributes]

Trace

Trace printSpecifications

Note: The output of the Trace statement is controlled by the ULTRACE parameter.

TRANSFER

TRANSFER [CONTROL] TO PROCESS {processname | %variable} [WITH] [USERID {string | '%variable'}] [PASSWORD {variable | 'string'}] [ACCOUNT {%variable | 'string'}] [PASSING {IMAGE imagename | 'string' | %variable}]

UPDATE RECORD

UPDATE RECORD

VARIABLES ARE

VARIABLES ARE {FIXED [DP n] | FLOAT | STRING [LEN n] [DP {n | *}] | UNDEFINED}

Declare %variable

[DECLARE] %variable [IS] {FIXED [DP n] | FLOAT} [ARRAY (d1[,d2[,d3]])] [COMMON] [DECLARE] %variable [IS] STRING [LEN n] [DP {n | *}] [ARRAY (d1[,d2[d3]])] [NO FIELD SAVE] [COMMON] %variable [(subscript)] = expression

WAIT

(+)

WAIT [{n | %variable} SEC[S]] [FOR]
{ANY RECEIPT RETURN %variable
| RECEIPT {cid | processname | %variable}}

Write Image

Write [Image] imagename On
[Buffer [Position=%pvariable | n] [Maxlen={%lvariable | n}]]
| {seq-filename | Terminal | %variable}

Other syntax

Names, numbers, literals, comments

Value specification syntax

For all User Language statements and retrieval conditions, wherever the term value appears in the syntax, it can be any of these:

  • Literal number or string
  • VALUE IN clause of the form:

    VALUE [IN] label

  • %variable

Retrieval condition syntax

A Find or For Each Record Where statement can be followed by any number of retrieval conditions separated by an end of line or LINEND parameter character.

Conditions can be constructed as a series of phrases that are combined "in the usual way" with And, Or, Not, and parentheses (()):

[Not] phrase [{And | Or | Nor} [Not] phrase] ...

Where:

phrase can be constructed from these options:

  • fieldname = [Not] value
  • fieldname Like pattern
  • fieldname Is [Not] {Present | Like 'pattern'}
  • fieldname Is [Not] {[Numerically | Alphabetically]
    [Eq | = | Ne | ¬= | Greater Than | Gt | > | Less Than
    | Lt | < | Le | <= | Ge | >= | Before | After] value}
  • fieldname Is [Not] {[Numerically | Alphabetically]
    {In Range [From | After] value1 {To | [And] Before}
    value2 | Between value1 And value2}
  • File$ {filename | =}
  • Find$ label
  • List$ listname
  • Location$ {location | =}
  • Point$ value
  • Sfge$ value
  • Sfl$ value

where value can be:

  • A literal number or string
  • A %variable
  • Value {(expression) | [In] label}

    label points to an existing value set. If an Eq Value In value_set clause, value set values are treated as Boolean OR, for example:

    field = value1 OR field = value2 OR....

    If an Ne Value In value_set clause, values are treated as Boolean AND:

    field <> value1 AND field <> value2 AND....

    See also Processing a VALUE IN clause.

Notes:

  • The first character (¬) of the "not-equal" test (¬=) in the fourth of the items in the list of phrase options above is the EBCDIC "not sign," which has the hexadecimal value 5f.
  • For a description of the pattern in the [Is] Like and Is Not clauses, see the syntax of Is Like patterns.
  • In addition to the discussions in the subsections that follow, see Record retrievals for a comprehensive description of retrieval conditions.

Omitting repeated first words

If a sequence of phrases in a particular retrieval condition all have the same first word, that word can be omitted from the latter phrases. For example:

List$ A And Not List$ B

can be written:

List$ A And Not B

And:

x Is 13 Or x Is Less Than 7

can be written:

x Is 13 Or Is Less Than 7

Omitting duplicated equal signs

Duplicated equal signs can be omitted. For example, the expression:

a = 3 Or a = 5 Or a = 40

is equivalent to:

a = 3 Or 5 Or 40

Use of parentheses

Parentheses can be placed around any sequence of phrases to clarify the condition or force the evaluation to occur in a particular order. For example:

Not (a = 2 Or List$ y) a = 1 And (b = 2 OR c = 3)

Use of expressions

Expressions can be used in Find and For Each Record statements to provide the retrieval condition for the Point$, Sfl$, and Sfge$ conditions, as well as for the Eq Value clause:

Point$

Point$ Value(expression)

Where:

expression is a function call, string concatenation, arithmetic operation, SOUL construct, or Boolean expression. It is preceded by the keyword Value.

Example:

This example finds the first MA record on file, and then counts the number of records from this point in the file:

FD1: IN ICSCUST FPC STATE = MA END FIND FOR 1 RECORD IN FD1 PRINT 'CURREC = ' WITH $CURREC PRINT '>= POINT$' FD2: IN ICSCUST FPC POINT$ VALUE($CURREC) END FIND END FOR

Sfl$ and Sfge$

Sfl$ Value(expression)

Or:

Sfge$ Value(expression)

Where:

expression is a function call, string concatenation, arithmetic operation, SOUL construct, or Boolean expression. It is preceded by the keyword Value.

Example:

FOR %CT FROM 1 TO 10 IN EXPRESS STORE RECORD ($EDITN(%CT,'999')) ORD1 = (%REC WITH %CT) ORD2 = (%CT * 2) ORD4 = (%CT * 4) END STORE END FOR COMMIT FOR %CT FROM 1 TO 5 PRINT 'LESS THAN ' WITH %CT FD1: IN EXPRESS FPC SFL$ VALUE($EDITN(%CT,'999')) END FIND PRINT 'GREATER THAN OR EQUAL TO ' WITH %CT FD2: IN EXPRESS FPC SFGE$ VALUE($EDITN(%CT,'999')) END FIND END FOR

Eq Value

fieldname Eq Value(expression)

Where:

expression is a function call, string concatenation, arithmetic operation, SOUL construct, or Boolean expression.

Example:

FD: IN FILE PEOPLE FD LAST EQ VALUE($READ('LAST NAME?') ) END FIND

Print specification syntax

A Print, Set, Audit, or Trace statement contains print specifications of the following form:

[term] [And | Tab | With]...[[term] [And | Tab | With] ...] ... [...]

Where:

term can be constructed as follows:

{'string' | %variable | Count In label | Occurrence In label | Value in term | function} [At [Column] m] [To [Column] n]

Or, if the statement is within a record loop:

{{Each | term} fieldname | *Record | *Id} [At [Column] m] [To [Column] n}

Note: For additional Print statement details regarding multiply occurring fields and field groups, see Print and Print n statements for fields.

Expression syntax

The following syntax can be used in:

  • Assignment statements
  • Conditional If statements and ElseIf clauses

    In the simplified syntax for an If statement, which is:

    If condition Then statements

    condition expands to the syntax described in this section.

  • Computed Jump To statements
  • Subscripts
  • Function arguments
  • A value in parenthesis in SOUL "DML" statements, for example:

    Add fieldname = (expression)

Syntax

{operand | (expression)} [operator {operand | (expression)}] ...

Where:

  • operand can be constructed as follows:

    [+ | - | Not] {'string' | %variable | number | fieldname [(subscript)] Is [Not] Present | Count In label | Occurrence In label | Value In label | function}

  • expression (Note: enclosed by parentheses) is a function call, string concatenation, arithmetic operation, SOUL construct, or Boolean expression. For further details, see Expressions.
  • operator may be one of the following:
    +    = EQ And
    - ,=    NE   AndIf
    * > GT Or
    / < LT OrIf
      >= GE With (Note: this can also be achieved via Implicit concatenation)
      <= LE Is [Not] Present (Note: applied either to a field or to an optional or default method parameter)
          Is [Not] Like

    Notes:

    • The first character (,) of the inequality test above is the EBCDIC "not sign," which has the hexadecimal value 5f.
    • For a description of the Is Like and Is Not clauses, see the syntax of Is Like patterns.
    • The AndIf and OrIf operators are called "short circuit", because, at a given precedence level, if the value of the conditional expression has been fully determined, the remainder at that level is not evaluated. For example:

      %sex eq 'M' and (%ht lt 5.2 orIf %ht gt 6.5)

      If the value of %ht is less than 5.2, the final comparison -- %ht gt 6.5 -- is never evaluated (that holds regardless of what had been coded as the final comparison).

      With the same value of %ht, if the Or operator had been used, then that final comparison is always evaluated.

    • For more information about operators, see Operators.

In clause syntax

The SOUL statements on this page whose syntax display is preceded by an asterisk (*) support an In clause.

The three basic forms of the In clause are:

In [Permanent | Temporary ] Group groupname Member [%member | [filename [At {location | =}]]

In file1 [,file2] ...

In {$Curfile | $Update}

The form In $Curfile can be used only within a record loop.

In Group Member limitations

In addition to the three basic forms of the In clause shown above, the In Group Member clause restricts the following statements to one member file in a group context:

  • Clear List
  • Find All Records (and its variants)
  • Find All Values
  • For Record Number (or FRN)
  • Store Record

You cannot use an In Group Member clause with a For Each Record statement or with an Add, Change, or Delete Record statement. Only the previously listed statements call accept an In Group Member clause.

Using an In clause in a Begin...End block

The file name in the In clause used within a Begin...End block is resolved by the compiler. You can hard-code a file name or use some type of dummy string for the file name. Using a %variable for the file name is not allowed.

Subscript syntax

A subscript has the format:

Syntax

(subscript1 [,subscript2 [,subscript3]] )

Where:

subscript1, subscript2, and subscript3 can be any expression.

SOUL macros

There are additional facilities supporting SOUL macro statements. Macro statements allow code to be conditionally compiled.

As an example, in the following SOUL fragment, the Recordset object declaration would be for the file AVEBURY:

!def henge avebury ... %sites is object recordset in file ?!HENGE

Terminal display attributes

One or more of the following terminal display attributes can replace the term attribute in a full-screen formatting statement, if the display attribute is supported by the installation:

List of attributes
BLINK
BLUE
BRIGHT
DIM
GREEN
INV[IS[BLE]]
NOBLINK
NOREV[ERSE]
NOU[NDER]SCORE
PINK
PROT[ECTED]
RED
REV[ERSE]
TURQUOISE
[UNDER]SCORE
UNPROT[ECTED]
VIS[IBLE]
WHITE
YELLOW

Notation conventions

This page uses the following syntax notation conventions:

Syntax notation Indicates that...
Single asterisk (*) Statements can be preceded by an IN clause, if there is no reference to a previous set (label or list). See IN clause syntax for more discussion.
Two asterisks (**) Construct can appear only within a record loop.
Plus sign (+) Construct requires the optional Horizon feature.
Two plus signs (++) Construct requires the optional User Language to Database 2 feature.
C The (first) keyword of the statement is also a Model 204 command; the command's wiki page will be, for example, 'OPEN command'.

Model 204 commands are listed alphabetically and documented in List of Model 204 commands.

Lowercase italic Constructs are replaced with variable information.
  • A field name (%%) variable can be used anywhere fieldname appears. The %%variable can contain its own subscript, separate from the field name subscript.

    Note: The subscript of an array element must be specified before a field name subscript.

  • The lowercase constructs — retrieval-conditions, print-specifications, expression, subscript, attribute, and type — are discussed separately following the syntax summaries, beginning with Value specification syntax.
  • For more Model 204 notation conventions, see Notation conventions.