4299 lines
108 KiB
HTML
4299 lines
108 KiB
HTML
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
|
|
<html>
|
|
<head>
|
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
|
<meta name="Copyright" content="Copyright (c) 2006 by IBM Corporation">
|
|
<title>Create Program (QPRCRTPG) API</title>
|
|
<!-- Begin Header Records ========================================== -->
|
|
<!-- All rights reserved. Licensed Materials Property of IBM -->
|
|
<!-- US Government Users Restricted Rights -->
|
|
<!-- Use, duplication or disclosure restricted by -->
|
|
<!-- GSA ADP Schedule Contract with IBM Corp. -->
|
|
<!-- QPRCRTP SCRIPT A converted by B2H R4.1 (346) (CMS) by HOLTJM at -->
|
|
<!-- RCHVMW2 on 5 Feb 1999 at 14:57:36 -->
|
|
<!--Edited by Kersten Dec 2001 -->
|
|
<!--End Header Records -->
|
|
<link rel="stylesheet" type="text/css" href="../rzahg/ic.css">
|
|
</head>
|
|
<body>
|
|
<a name="Top_Of_Page"></a>
|
|
<!-- Java sync-link -->
|
|
<script language="Javascript" src="../rzahg/synch.js" type="text/javascript">
|
|
</script>
|
|
|
|
<h2>Create Program (QPRCRTPG) API</h2>
|
|
|
|
<div class="box" style="width: 80%;">
|
|
<br>
|
|
Required Parameter Group:<br>
|
|
<!-- iddvc RMBR -->
|
|
<br>
|
|
<table width="100%">
|
|
|
|
<tr>
|
|
<td align="center" valign="top" width="10%">1</td>
|
|
<td align="left" valign="top" width="50%">Intermediate representation of the
|
|
program</td>
|
|
<td align="left" valign="top" width="20%">Input</td>
|
|
<td align="left" valign="top" width="20%">Char(*)</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="center" valign="top">2</td>
|
|
<td align="left" valign="top">Length of intermediate representation of
|
|
program</td>
|
|
<td align="left" valign="top">Input</td>
|
|
<td align="left" valign="top">Binary(4)</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="center" valign="top">3</td>
|
|
<td align="left" valign="top">Qualified program name</td>
|
|
<td align="left" valign="top">Input</td>
|
|
<td align="left" valign="top">Char(20)</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="center" valign="top">4</td>
|
|
<td align="left" valign="top">Program text</td>
|
|
<td align="left" valign="top">Input</td>
|
|
<td align="left" valign="top">Char(50)</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="center" valign="top">5</td>
|
|
<td align="left" valign="top">Qualified source file name</td>
|
|
<td align="left" valign="top">Input</td>
|
|
<td align="left" valign="top">Char(20)</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="center" valign="top">6</td>
|
|
<td align="left" valign="top">Source file member information</td>
|
|
<td align="left" valign="top">Input</td>
|
|
<td align="left" valign="top">Char(10)</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="center" valign="top">7</td>
|
|
<td align="left" valign="top">Source file last changed date and time
|
|
information</td>
|
|
<td align="left" valign="top">Input</td>
|
|
<td align="left" valign="top">Char(13)</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="center" valign="top">8</td>
|
|
<td align="left" valign="top">Qualified printer file name</td>
|
|
<td align="left" valign="top">Input</td>
|
|
<td align="left" valign="top">Char(20)</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="center" valign="top">9</td>
|
|
<td align="left" valign="top">Starting page number</td>
|
|
<td align="left" valign="top">Input</td>
|
|
<td align="left" valign="top">Binary(4)</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="center" valign="top">10</td>
|
|
<td align="left" valign="top">Public authority</td>
|
|
<td align="left" valign="top">Input</td>
|
|
<td align="left" valign="top">Char(10)</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="center" valign="top">11</td>
|
|
<td align="left" valign="top">Option template</td>
|
|
<td align="left" valign="top">Input</td>
|
|
<td align="left" valign="top">Char(*)</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="center" valign="top">12</td>
|
|
<td align="left" valign="top">Number of option template entries</td>
|
|
<td align="left" valign="top">Input</td>
|
|
<td align="left" valign="top">Binary(4)</td>
|
|
</tr>
|
|
</table>
|
|
|
|
<br>
|
|
Optional Parameter:<br>
|
|
<!-- iddvc RMBR -->
|
|
<br>
|
|
<table width="100%">
|
|
|
|
<tr>
|
|
<td align="center" valign="top" width="10%">13</td>
|
|
<td align="left" valign="top" width="50%">Error code</td>
|
|
<td align="left" valign="top" width="20%">I/O</td>
|
|
<td align="left" valign="top" width="20%">Char(*)</td>
|
|
</tr>
|
|
</table>
|
|
|
|
<br>
|
|
Default Public Authority: *USE<br>
|
|
<!-- iddvc RMBR -->
|
|
<br>
|
|
Threadsafe: No<br>
|
|
<!-- iddvc RMBR -->
|
|
<br>
|
|
</div>
|
|
|
|
<p>The Create Program (QPRCRTPG) API converts the symbolic representation of a
|
|
machine interface (MI) program into an OPM program object. This symbolic
|
|
representation is known as the intermediate representation of a program.</p>
|
|
|
|
<p>The QPRCRTPG API creates a program object that resides in the *USER domain
|
|
and runs in the *USER state. If you want the program object to be temporary,
|
|
you must do one of the following:</p>
|
|
|
|
<ul>
|
|
<li>Delete the object when you no longer need it.</li>
|
|
|
|
<li>Create the object in the QTEMP library, and let the system delete the
|
|
object automatically when the job ends.</li>
|
|
</ul>
|
|
|
|
<p>You can specify program objects created with the QPRCRTPG API in CL commands
|
|
that process objects of type *PGM. For example, you can:</p>
|
|
|
|
<ul>
|
|
<li>Save and restore program objects using the Save Object (SAVOBJ) and Restore
|
|
Object (RSTOBJ) commands.</li>
|
|
|
|
<li>Delete program objects using the Delete Program (DLTPGM) command.</li>
|
|
|
|
<li>Run program objects using the Call (CALL) command.</li>
|
|
|
|
<li>Rename program objects using the Rename Object (RNMOBJ) command.</li>
|
|
|
|
<li>Move program objects to a different library using the Move Object (MOVOBJ)
|
|
command.</li>
|
|
</ul>
|
|
|
|
<p><strong>Note:</strong> MI instructions that reference system-domain or
|
|
write-protected objects fail at security levels 40 and 50. At those levels, you
|
|
must use APIs to work with the objects.</p>
|
|
|
|
<br>
|
|
|
|
|
|
<h3>Authorities and Locks</h3>
|
|
|
|
<dl>
|
|
<dt><em>Program Authority</em></dt>
|
|
|
|
<dd>*ALL. Required only if the program already exists and the option value
|
|
*REPLACE is specified.</dd>
|
|
|
|
<dt><em>Program Library Authority</em></dt>
|
|
|
|
<dd>*CHANGE</dd>
|
|
|
|
<dt><em>Printer File Authority</em></dt>
|
|
|
|
<dd>*USE</dd>
|
|
|
|
<dt><em>Printer File Library Authority</em></dt>
|
|
|
|
<dd>*USE</dd>
|
|
|
|
<dt><em>Source File Authority</em></dt>
|
|
|
|
<dd>*USE</dd>
|
|
|
|
<dt><em>Source File Library Authority</em></dt>
|
|
|
|
<dd>*USE</dd>
|
|
</dl>
|
|
|
|
<br>
|
|
|
|
|
|
<h3>Required Parameter Group</h3>
|
|
|
|
<dl>
|
|
<dt><strong>Intermediate representation of the program</strong></dt>
|
|
|
|
<dd>INPUT; CHAR(*)
|
|
|
|
<p>A string containing the intermediate representation of the program to be
|
|
processed by the QPRCRTPG API. See <a href="#HDRIIRP">Program Syntax</a>.</p>
|
|
</dd>
|
|
|
|
<dt><strong>Length of intermediate representation of program</strong></dt>
|
|
|
|
<dd>INPUT; BINARY(4)
|
|
|
|
<p>The size, in bytes, of the intermediate representation of the program.</p>
|
|
</dd>
|
|
|
|
<dt><strong>Qualified program name</strong></dt>
|
|
|
|
<dd>INPUT; CHAR(20)
|
|
|
|
<p>The name and library of the program to be created or replaced. The first 10
|
|
characters contain the program name, and the second 10 characters contain the
|
|
name of the library where the program is located. The special value *CURLIB may
|
|
be used for the library name.</p>
|
|
</dd>
|
|
|
|
<dt><strong>Program text</strong></dt>
|
|
|
|
<dd>INPUT; CHAR(50)
|
|
|
|
<p>Text that briefly describes the program.</p>
|
|
</dd>
|
|
|
|
<dt><strong>Qualified source file name</strong></dt>
|
|
|
|
<dd>INPUT; CHAR(20)
|
|
|
|
<p>The name and library containing the source program. The first 10 characters
|
|
contain the source file name, and the second 10 characters contain the name of
|
|
the library where the file is located. This places the value in the program
|
|
object's service description. The special value *NONE may be used for the
|
|
source file name. If you specify *NONE, no source file information is placed in
|
|
the program object's service description. A special value, such as *LIBL, is
|
|
not valid for the source file library.</p>
|
|
</dd>
|
|
|
|
<dt><strong>Source file member information</strong></dt>
|
|
|
|
<dd>INPUT; CHAR(10)
|
|
|
|
<p>The file member containing the source program. This places the value in the
|
|
program object's service description.</p>
|
|
|
|
<p>This value must be blanks if you specify *NONE as the <strong>source file
|
|
name</strong>.</p>
|
|
</dd>
|
|
|
|
<dt><strong>Source file last changed date and time information</strong></dt>
|
|
|
|
<dd>INPUT; CHAR(13)
|
|
|
|
<p>The date and time the member of the source file was last updated. The format
|
|
of this field is in the CYYMMDDHHMMSS format, where:</p>
|
|
|
|
<table cellpadding="5">
|
|
<!-- cols="10 90" -->
|
|
<tr>
|
|
<td align="left" valign="top"><em>C</em></td>
|
|
<td align="left" valign="top">Century, where 0 indicates years 19<em>xx</em>
|
|
and 1 indicates years 20<em>xx</em>.</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top"><em>YY</em></td>
|
|
<td align="left" valign="top">Year</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top"><em>MM</em></td>
|
|
<td align="left" valign="top">Month</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top"><em>DD</em></td>
|
|
<td align="left" valign="top">Day</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top"><em>HH</em></td>
|
|
<td align="left" valign="top">Hour</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top"><em>MM</em></td>
|
|
<td align="left" valign="top">Minute</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top"><em>SS</em></td>
|
|
<td align="left" valign="top">Second</td>
|
|
</tr>
|
|
</table>
|
|
|
|
<p>This places the value in the program object's service description.</p>
|
|
|
|
<p>This value must be blank if you specify *NONE for the source file name
|
|
parameter.</p>
|
|
</dd>
|
|
|
|
<dt><strong>Qualified printer file name</strong></dt>
|
|
|
|
<dd>INPUT; CHAR(20)
|
|
|
|
<p>The name and library containing the printer file used to generate listings.
|
|
The first 10 characters contain the printer file name, and the second 10
|
|
characters contain the name of the library where the file is located. The only
|
|
special values supported for the library name are *LIBL and *CURLIB.</p>
|
|
|
|
<p>This value is ignored if you specify *NOLIST for the generate listing option
|
|
(see <a href="#HDR8OPTION">Values for the Option Template Parameter</a>).</p>
|
|
</dd>
|
|
|
|
<dt><strong>Starting page number</strong></dt>
|
|
|
|
<dd>INPUT; BINARY(4)
|
|
|
|
<p>The first page number to be used on listings. This value should be between 1
|
|
and 9999; otherwise, the API uses 1.</p>
|
|
|
|
<p>This value is ignored if you specify *NOLIST for the generate listing option
|
|
(see <a href="#HDR8OPTION">Values for the Option Template Parameter</a>).</p>
|
|
</dd>
|
|
|
|
<dt><strong>Public authority</strong></dt>
|
|
|
|
<dd>INPUT; CHAR(10)
|
|
|
|
<p>The authority you give the users who do not have specific private
|
|
authorities to the object, and where the user's group has no specific authority
|
|
to the object.</p>
|
|
|
|
<p>The values allowed are:</p>
|
|
|
|
<table cellpadding="5">
|
|
<tr>
|
|
<td align="left" valign="top"><em>*CHANGE</em></td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top"><em>*ALL</em></td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top"><em>*USE</em></td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top"><em>*EXCLUDE</em></td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top"><em>The name of an authorization list</em></td>
|
|
</tr>
|
|
</table>
|
|
|
|
<br>
|
|
</dd>
|
|
|
|
<dt><strong>Option template</strong></dt>
|
|
|
|
<dd>INPUT; CHAR(*)
|
|
|
|
<p>This is an array of options. You can specify between 0 and
|
|
17 values. Each entry contains a CHAR(11) value as described in <a href="#HDR8OPTION">Values
|
|
for the Option Template Parameter</a>.</p>
|
|
</dd>
|
|
|
|
<dt><strong>Number of option template entries</strong></dt>
|
|
|
|
<dd>INPUT; BINARY(4)
|
|
|
|
<p>The number of option template entries.</p>
|
|
|
|
<p>The value must be between 0 and 17.</p>
|
|
</dd>
|
|
</dl>
|
|
|
|
<br>
|
|
|
|
|
|
<h3>Optional Parameter</h3>
|
|
|
|
<dl>
|
|
<dt><strong>Error code</strong></dt>
|
|
|
|
<dd>I/O; CHAR(*)
|
|
|
|
<p>The structure in which to return error information. For the format of the
|
|
structure, see <a href="../apiref/error.htm#hdrerrcod">Error code parameter</a>. If this
|
|
parameter is omitted, diagnostic and escape messages are issued to the
|
|
application.</p>
|
|
</dd>
|
|
</dl>
|
|
|
|
<br>
|
|
|
|
|
|
<h3><a name="HDR8OPTION">Values for the Option Template Parameter</a></h3>
|
|
|
|
<p>When you are using the QPRCRTPG API, you can specify a value in the option
|
|
template. Only one value per option should be specified. If you specify more
|
|
than one, the system only uses the first one. If you specify no value for a
|
|
given option, the system uses the default value (underlined).</p>
|
|
|
|
<dl>
|
|
<dt><strong>Create program object</strong></dt>
|
|
|
|
<dd>Creates a program object.
|
|
|
|
<p>The values allowed are:</p>
|
|
|
|
<table cellpadding="5">
|
|
<!-- cols="15 85" -->
|
|
<tr>
|
|
<td align="left" valign="top"><em>*GEN</em></td>
|
|
<td align="left" valign="top">Generates a program and places the program in the
|
|
appropriate library.</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top"><em>*NOGEN</em></td>
|
|
<td align="left" valign="top">No program is generated. The syntax of the
|
|
intermediate representation of the program is checked, and if the generate
|
|
listing option is *LIST, a listing is produced.</td>
|
|
</tr>
|
|
</table>
|
|
|
|
<br>
|
|
<br>
|
|
</dd>
|
|
|
|
<dt><strong>Replace program</strong></dt>
|
|
|
|
<dd>Replaces the existing program if a program by the same name already exists
|
|
in the specified library.
|
|
|
|
<p>The values allowed are:</p>
|
|
|
|
<table cellpadding="5">
|
|
<!-- cols="15 85" -->
|
|
<tr>
|
|
<td align="left" valign="top"><em>*NOREPLACE</em></td>
|
|
<td align="left" valign="top">Does not replace an existing program by the same
|
|
name in the specified library.</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top"><em>*REPLACE</em></td>
|
|
<td align="left" valign="top">Replaces the existing program by moving it to the
|
|
QRPLOBJ library.</td>
|
|
</tr>
|
|
</table>
|
|
|
|
<br>
|
|
<br>
|
|
</dd>
|
|
|
|
<dt><strong>Generate listing</strong></dt>
|
|
|
|
<dd>Generates an output listing.
|
|
|
|
<p>The values allowed are:</p>
|
|
|
|
<table cellpadding="5">
|
|
<!-- cols="15 85" -->
|
|
<tr>
|
|
<td align="left" valign="top"><em>*NOLIST</em></td>
|
|
<td align="left" valign="top">Does not generate a listing.</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top"><em>*LIST</em></td>
|
|
<td align="left" valign="top">Generates a listing.
|
|
|
|
<p>You must specify the following parameters:</p>
|
|
|
|
<ul>
|
|
<li>Printer file name and library</li>
|
|
|
|
<li>Starting page number</li>
|
|
</ul>
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
</dd>
|
|
|
|
<dt><strong>Create cross-reference listing</strong></dt>
|
|
|
|
<dd>Whether the listing is to contain a cross-reference list of variable and
|
|
data item references.
|
|
|
|
<p>The values allowed are:</p>
|
|
|
|
<table cellpadding="5">
|
|
<!-- cols="15 85" -->
|
|
<tr>
|
|
<td align="left" valign="top"><em>*NOXREF</em></td>
|
|
<td align="left" valign="top">Does not create cross-reference listing.</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top"><em>*XREF</em></td>
|
|
<td align="left" valign="top">Creates a cross-reference listing of references
|
|
to variables, labels, or both.</td>
|
|
</tr>
|
|
</table>
|
|
|
|
<br>
|
|
<br>
|
|
</dd>
|
|
|
|
<dt><strong>Create summary listing</strong></dt>
|
|
|
|
<dd>Whether the listing is to contain a list of program attributes.
|
|
|
|
<p>The values allowed are:</p>
|
|
|
|
<table cellpadding="5">
|
|
<!-- cols="15 85" -->
|
|
<tr>
|
|
<td align="left" valign="top"><em>*NOATR</em></td>
|
|
<td align="left" valign="top">Does not create a summary listing section.</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top"><em>*ATR</em></td>
|
|
<td align="left" valign="top">Creates a summary listing section.</td>
|
|
</tr>
|
|
</table>
|
|
|
|
<br>
|
|
<br>
|
|
</dd>
|
|
|
|
<dt><strong>User profile</strong></dt>
|
|
|
|
<dd>The values allowed are:
|
|
|
|
<table cellpadding="5">
|
|
<!-- cols="15 85" -->
|
|
<tr>
|
|
<td align="left" valign="top"><em>*USER</em></td>
|
|
<td align="left" valign="top">The user profile of the user running the program
|
|
is used as a source of authority when this program runs.</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top"><em>*ADOPT</em></td>
|
|
<td align="left" valign="top">When the program runs, the object authority of
|
|
both the program's owner and user are used.</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top"><em>*OWNER</em></td>
|
|
<td align="left" valign="top">The system uses the user profile of the owner of
|
|
the program as a source of authority when this program runs. Programs called by
|
|
this program adopt this authority.</td>
|
|
</tr>
|
|
</table>
|
|
|
|
<br>
|
|
<br>
|
|
</dd>
|
|
|
|
<dt><strong>Use adopted authority</strong></dt>
|
|
|
|
<dd>Whether the system uses the program-adopted authority from the calling
|
|
programs as a source of authority when this program is running. The user must
|
|
be authorized to create programs with adopted authority for the *ADPAUT option
|
|
to take effect.
|
|
|
|
<p>The values allowed are:</p>
|
|
|
|
<table cellpadding="5">
|
|
<!-- cols="15 85" -->
|
|
<tr>
|
|
<td align="left" valign="top"><em>*ADPAUT</em></td>
|
|
<td align="left" valign="top">The system uses program-adopted authority from
|
|
the calling program.</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top"><em>*NOADPAUT</em></td>
|
|
<td align="left" valign="top">The system does not use program-adopted authority
|
|
from the calling program.</td>
|
|
</tr>
|
|
|
|
</table>
|
|
|
|
<p><strong>Note:</strong> Authorization to create programs which can adopt
|
|
authority is controlled by the QUSEADPAUT system value. For more information,
|
|
refer to the description of this system value in the <a href="../rzaks/rzaks1.htm">Work Management</a> topic.</p>
|
|
</dd>
|
|
|
|
<dt><strong>Constrain arrays</strong></dt>
|
|
|
|
<dd>The values allowed are:
|
|
|
|
<table cellpadding="5">
|
|
<!-- cols="15 85" -->
|
|
<tr>
|
|
<td align="left" valign="top"><em>*SUBSCR</em></td>
|
|
<td align="left" valign="top">Constrains arrays. This requests additional
|
|
run-time checks to ensure that references to array elements are not outside the
|
|
bounds of the declare statement. This option causes the resulting program to
|
|
run slower.</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top"><em>*NOSUBSCR</em></td>
|
|
<td align="left" valign="top">Does not constrain arrays. The results of
|
|
references to array elements outside the bounds of the declare statement are
|
|
not defined.</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top"><em>*UNCON</em></td>
|
|
<td align="left" valign="top">Allows fully unconstrained arrays. This ensures
|
|
that references to array elements outside the bounds of the declare statement
|
|
act as if the array element actually exists.</td>
|
|
</tr>
|
|
</table>
|
|
|
|
<p><strong>Note:</strong> This program attribute may be changed at run-time
|
|
using the Override Program Attributes (OVRPGATR) MI instruction.</p>
|
|
</dd>
|
|
|
|
<dt><strong>Constrain strings</strong></dt>
|
|
|
|
<dd>The values allowed are:
|
|
|
|
<table cellpadding="5">
|
|
<!-- cols="15 85" -->
|
|
<tr>
|
|
<td align="left" valign="top"><em>*SUBSTR</em></td>
|
|
<td align="left" valign="top">Constrains strings. This requests additional
|
|
run-time checks to ensure that references to character strings are not outside
|
|
the bounds of the declare statement. This option causes the resulting program
|
|
to run slower.</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top"><em>*NOSUBSTR</em></td>
|
|
<td align="left" valign="top">Does not constrain strings. The results of
|
|
substring references outside the bounds of the declare statement are not
|
|
defined.</td>
|
|
</tr>
|
|
</table>
|
|
|
|
<p><strong>Note:</strong> You can change this program attribute at run-time
|
|
using the Override Program Attributes (OVRPGATR) MI instruction.</p>
|
|
</dd>
|
|
|
|
<dt><strong>Initialize static storage</strong></dt>
|
|
|
|
<dd><strong>Static storage</strong> is allocated the first time a program is
|
|
called. It remains allocated until explicitly deallocated.
|
|
|
|
<p>The values allowed are:</p>
|
|
|
|
<table cellpadding="5">
|
|
<!-- cols="15 85" -->
|
|
<tr>
|
|
<td align="left" valign="top"><em>*CLRPSSA</em></td>
|
|
<td align="left" valign="top">Initializes static storage. This code clears the
|
|
program static storage area (PSSA) on entry using the Call External (CALLX) MI
|
|
instruction.</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top"><em>*NOCLRPSSA</em></td>
|
|
<td align="left" valign="top">Does not initialize the PSSA.</td>
|
|
</tr>
|
|
</table>
|
|
|
|
<br>
|
|
<br>
|
|
</dd>
|
|
|
|
<dt><strong>Initialize automatic storage</strong></dt>
|
|
|
|
<dd>Automatic storage is allocated each time a program runs and automatically
|
|
deallocated when no longer needed.
|
|
|
|
<p>The values allowed are:</p>
|
|
|
|
<table cellpadding="5">
|
|
<!-- cols="15 85" -->
|
|
<tr>
|
|
<td align="left" valign="top"><em>*CLRPASA</em></td>
|
|
<td align="left" valign="top">Initializes automatic storage. This code clears
|
|
the program automatic storage area (PASA) on entry using the Call External
|
|
(CALLX) MI instruction.</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top"><em>*NOCLRPASA</em></td>
|
|
<td align="left" valign="top">Does not initialize the PASA.</td>
|
|
</tr>
|
|
</table>
|
|
|
|
<br>
|
|
<br>
|
|
</dd>
|
|
|
|
<dt><strong>Ignore decimal data errors</strong></dt>
|
|
|
|
<dd>Whether errors found in decimal data result in exceptions.
|
|
|
|
<p>The values allowed are:</p>
|
|
|
|
<table cellpadding="5">
|
|
<!-- cols="15 85" -->
|
|
<tr>
|
|
<td align="left" valign="top"><em>*NOIGNDEC</em></td>
|
|
<td align="left" valign="top">Does not ignore decimal data errors.
|
|
|
|
<p>When you specify *NOIGNDEC, decimal values used in numeric operations are
|
|
checked for valid decimal digits and sign codes. If the system finds an error,
|
|
it signals an exception.</p>
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top"><em>*IGNDEC</em></td>
|
|
<td align="left" valign="top">Ignores data decimal errors.
|
|
|
|
<p>When you specify *IGNDEC, decimal values used in numeric operations ensure
|
|
they contain valid decimal digit and sign codes. However, the system treats
|
|
digits that are not valid as zeros and signs that are not valid as positive
|
|
signs. There is no exception signaled.</p>
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
|
|
<p>This option applies to only a subset of the numeric operations you
|
|
specify.</p>
|
|
|
|
<p><strong>Note:</strong> In all cases, the system signals decimal data errors
|
|
if you use data pointers to address any of the instruction's operands.</p>
|
|
|
|
<p>The following list contains the MI instructions this option affects:</p>
|
|
|
|
<table border width="80%">
|
|
<tr>
|
|
<th align="left" valign="bottom">MI Instruction</th>
|
|
<th align="left" valign="bottom">Packed Source Operands Supported</th>
|
|
<th align="left" valign="bottom">Zoned Source Operands Supported</th>
|
|
<th align="left" valign="bottom">Notes</th>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top" width="25%">ADDN</td>
|
|
<td align="center" valign="top" width="25%"> </td>
|
|
<td align="center" valign="top" width="25%">X</td>
|
|
<td align="left" valign="top" width="25%"> </td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top">CMPNV</td>
|
|
<td align="center" valign="top"> </td>
|
|
<td align="center" valign="top">X</td>
|
|
<td align="left" valign="top"> </td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top">CVTCN</td>
|
|
<td align="center" valign="top">X</td>
|
|
<td align="center" valign="top">X</td>
|
|
<td align="left" valign="top">You must specify operand 3 (the numeric view to
|
|
be used for operand 2) as a constant and no data-pointer-defined operands.</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top">CVTDFFP</td>
|
|
<td align="center" valign="top"> </td>
|
|
<td align="center" valign="top">X</td>
|
|
<td align="left" valign="top"> </td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top">CVTNC</td>
|
|
<td align="center" valign="top">X</td>
|
|
<td align="center" valign="top">X</td>
|
|
<td align="left" valign="top">You must specify operand 3 (the numeric view to
|
|
be used for operand 1) as a constant and no data-pointer-defined operands.</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top">CPYNV</td>
|
|
<td align="center" valign="top">X</td>
|
|
<td align="center" valign="top">X</td>
|
|
<td align="left" valign="top">You must specify no data-pointer-defined
|
|
operands.</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top">DIV</td>
|
|
<td align="center" valign="top"> </td>
|
|
<td align="center" valign="top">X</td>
|
|
<td align="left" valign="top"> </td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top">DIVREM</td>
|
|
<td align="center" valign="top"> </td>
|
|
<td align="center" valign="top">X</td>
|
|
<td align="left" valign="top"> </td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top">EDIT</td>
|
|
<td align="center" valign="top"> </td>
|
|
<td align="center" valign="top">X</td>
|
|
<td align="left" valign="top">You must specify no data-pointer-defined
|
|
operands.</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top">EXTRMAG</td>
|
|
<td align="center" valign="top"> </td>
|
|
<td align="center" valign="top">X</td>
|
|
<td align="left" valign="top"> </td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top">MULT</td>
|
|
<td align="center" valign="top"> </td>
|
|
<td align="center" valign="top">X</td>
|
|
<td align="left" valign="top"> </td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top">NEG</td>
|
|
<td align="center" valign="top"> </td>
|
|
<td align="center" valign="top">X</td>
|
|
<td align="left" valign="top"> </td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top">REM</td>
|
|
<td align="center" valign="top"> </td>
|
|
<td align="center" valign="top">X</td>
|
|
<td align="left" valign="top"> </td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top">SCALE</td>
|
|
<td align="center" valign="top"> </td>
|
|
<td align="center" valign="top">X</td>
|
|
<td align="left" valign="top"> </td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top">SUBN</td>
|
|
<td align="center" valign="top"> </td>
|
|
<td align="center" valign="top">X</td>
|
|
<td align="left" valign="top"> </td>
|
|
</tr>
|
|
</table>
|
|
|
|
<p>When you specify *IGNDEC, the system may still signal the decimal data
|
|
exception. That is, other MI instructions and instruction combinations not
|
|
listed above may signal the decimal data exception when the system finds
|
|
decimal data that is bad.</p>
|
|
</dd>
|
|
|
|
<dt><strong>Ignore binary data size errors</strong></dt>
|
|
|
|
<dd>The values allowed are:
|
|
|
|
<table cellpadding="5">
|
|
<!-- cols="15 85" -->
|
|
<tr>
|
|
<td align="left" valign="top"><em>*NOIGNBIN</em></td>
|
|
<td align="left" valign="top">The system handles binary data size errors
|
|
normally. When a binary size error occurs, an exception is signaled and the
|
|
receiver contains the left-truncated result.</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top"><em>*IGNBIN</em></td>
|
|
<td align="left" valign="top">The system ignores binary data size errors. This
|
|
is used when an overflow or underflow occurs on a computation and when a
|
|
control MI instruction has a receiver that is a binary field. The receiver
|
|
contains the left-truncated result.</td>
|
|
</tr>
|
|
</table>
|
|
|
|
<br>
|
|
<br>
|
|
</dd>
|
|
|
|
<dt><strong>Support coincident operands</strong></dt>
|
|
|
|
<dd>The system overlaps coincident operands between the source and receiver
|
|
operands in one or more program instructions. <strong>Coincident
|
|
operands</strong> are operands that overlap physically, in storage.
|
|
|
|
<p>The values allowed are:</p>
|
|
|
|
<table cellpadding="5">
|
|
<!-- cols="15 85" -->
|
|
<tr>
|
|
<td align="left" valign="top"><em>*NOOVERLAP</em></td>
|
|
<td align="left" valign="top">Does not support coincident operands. If you
|
|
specify *NOOVERLAP, you guarantee that coincident operand overlap will not
|
|
occur while running the instruction. Therefore, the system can use the receiver
|
|
on an instruction as a work area during operations performed to produce the
|
|
final result. Using the receiver as a work area does not use as much processor
|
|
resource as would be required to move the final result from an internal work
|
|
area to the receiver.</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top"><em>*OVERLAP</em></td>
|
|
<td align="left" valign="top">Supports coincident operands. If you specify
|
|
*OVERLAP, the operands on an MI instruction may overlap. Therefore, the system
|
|
cannot use the receiver on an instruction as a work area during operations that
|
|
produce the final result. This can require more processor resource for running
|
|
the instruction but it ensures valid results if an overlap occurs.</td>
|
|
</tr>
|
|
</table>
|
|
|
|
<p>The following is a list of instructions this option affects:</p>
|
|
|
|
<ul>
|
|
<li>Add logical character (ADDLC)</li>
|
|
|
|
<li>Add numeric (ADDN)</li>
|
|
|
|
<li>And (AND)</li>
|
|
|
|
<li>Compute math function using one input value (CMF1)</li>
|
|
|
|
<li>Concatenate (CAT)</li>
|
|
|
|
<li>Convert character to numeric (CVTCN)</li>
|
|
|
|
<li>Convert decimal form to floating-point (CVTDFFP)</li>
|
|
|
|
<li>Convert external form to numeric value (CVTEFN)</li>
|
|
|
|
<li>Convert floating-point to decimal form (CVTFPDF)</li>
|
|
|
|
<li>Convert numeric to character (CVTNC)</li>
|
|
|
|
<li>Copy bytes left adjusted with pad (CPYBLAP)</li>
|
|
|
|
<li>Copy bytes right adjusted with pad (CPYBRAP)</li>
|
|
|
|
<li>Divide (DIV)</li>
|
|
|
|
<li>Divide with remainder (DIVREM)</li>
|
|
|
|
<li>Exclusive or (XOR)</li>
|
|
|
|
<li>Multiply (MULT)</li>
|
|
|
|
<li>Or (OR)</li>
|
|
|
|
<li>Remainder (REM)</li>
|
|
|
|
<li>Scale (SCALE)</li>
|
|
|
|
<li>Subtract logical character (SUBLC)</li>
|
|
|
|
<li>Subtract numeric (SUBN)</li>
|
|
|
|
<li>Trim length (TRIML)</li>
|
|
</ul>
|
|
|
|
<br>
|
|
<br>
|
|
</dd>
|
|
|
|
<dt><strong>Allow duplicate declares</strong></dt>
|
|
|
|
<dd>The values allowed are:
|
|
|
|
<table cellpadding="5">
|
|
<!-- cols="15 85" -->
|
|
<tr>
|
|
<td align="left" valign="top"><em>*NODUP</em></td>
|
|
<td align="left" valign="top">This does not allow a program object to be
|
|
declared more than once. This requests that duplicate declare (DCL) statements
|
|
be diagnosed as errors.</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top"><em>*DUP</em></td>
|
|
<td align="left" valign="top">This allows a program object to be declared more
|
|
than once. This requests that program objects declared more than once be pooled
|
|
and not be diagnosed as errors.</td>
|
|
</tr>
|
|
</table>
|
|
|
|
<br>
|
|
<br>
|
|
</dd>
|
|
|
|
<dt><strong>Optimize</strong></dt>
|
|
|
|
<dd>The values allowed are:
|
|
|
|
<table cellpadding="5">
|
|
<!-- cols="15 85" -->
|
|
<tr>
|
|
<td align="left" valign="top"><em>*OPT</em></td>
|
|
<td align="left" valign="top">This optimizes the program. In most instances,
|
|
this produces the smallest and best running program. Occasionally, the source
|
|
program may signal a MCH2802 escape message during processing. If this occurs,
|
|
you should not optimize the program.</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top"><em>*NOOPT</em></td>
|
|
<td align="left" valign="top">This does not optimize the program. This requests
|
|
the normal level code optimization when you create the program.</td>
|
|
</tr>
|
|
</table>
|
|
|
|
<br>
|
|
<br>
|
|
</dd>
|
|
|
|
<dt><strong>Target release</strong></dt>
|
|
|
|
<dd>The release of the operating system on which you intend to use the object
|
|
being created. You can use the object on a system with the specified release or
|
|
with any subsequent release of the operating system installed.
|
|
|
|
<p>The values allowed are:</p>
|
|
|
|
<table cellpadding="5">
|
|
<!-- cols="15 85" -->
|
|
<tr>
|
|
<td align="left" valign="top"><em>*CURRENT</em></td>
|
|
<td align="left" valign="top">The object is to be used on the release of the
|
|
operating system currently running on your system.</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top"><em>*PRV</em></td>
|
|
<td align="left" valign="top">The object is to be used on the previous release
|
|
with modification level 0 of the operating system.</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top" nowrap><em>target-release</em></td>
|
|
<td align="left" valign="top">Specify the release in the format VxRxMx.</td>
|
|
</tr>
|
|
</table>
|
|
</dd>
|
|
</dl>
|
|
|
|
<br>
|
|
<br>
|
|
|
|
|
|
<h3>Error Messages</h3>
|
|
|
|
<table width="100%" cellpadding="5">
|
|
<tr>
|
|
<th align="left" valign="top">Message ID</th>
|
|
<th align="left" valign="top">Error Message Text</th>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td width="15%" valign="top">CPD0078 D</td>
|
|
<td width="85%" valign="top">Value &3 for parameter not a valid name.</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top">CPF2143 E</td>
|
|
<td align="left" valign="top">Cannot allocate object &1 in &2 type
|
|
*&3.</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top">CPF2144 E</td>
|
|
<td align="left" valign="top">Not authorized to &1 in &2 type
|
|
*&3.</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top">CPF2146 E</td>
|
|
<td align="left" valign="top">Owner of object &1 and object being replaced
|
|
not the same.</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top">CPF2283 E</td>
|
|
<td align="left" valign="top">Authorization list &1 does not exist.</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top">CPF223B D</td>
|
|
<td align="left" valign="top">&1 in &2 type *&3 adopted authority
|
|
from previous call levels was set to *NO.</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top">CPF223E E</td>
|
|
<td align="left" valign="top">Authority check for use adopted authority
|
|
attribute failed.</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top">CPF3CF1 E</td>
|
|
<td align="left" valign="top">Error code parameter not valid.</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top">CPF3C35 E</td>
|
|
<td align="left" valign="top">Value &3 for parameter &2 not a valid
|
|
name.</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top">CPF3C5A E</td>
|
|
<td align="left" valign="top">Number of option template entries is not
|
|
valid.</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top">CPF3C5B E</td>
|
|
<td align="left" valign="top">Option template entry is not valid.</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top">CPF3C5C E</td>
|
|
<td align="left" valign="top">Source file name and library is not valid.</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top">CPF3C5D E</td>
|
|
<td align="left" valign="top">Source file member is not valid.</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top">CPF3C5F E</td>
|
|
<td align="left" valign="top">Internal Representation of Program (IRP) string
|
|
length parameter is not valid.</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top">CPF3C50 E</td>
|
|
<td align="left" valign="top">Program &1 not created.
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top">CPD0078 D</td>
|
|
<td align="left" valign="top">Value &3 for parameter not a valid name.</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top">CPD3C50 D</td>
|
|
<td align="left" valign="top">Value &1 for the IRG string length parameter
|
|
was not valid.</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top">CPD3C52 D</td>
|
|
<td align="left" valign="top">Number of option template entries is not
|
|
valid.</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top">CPD3C53 D</td>
|
|
<td align="left" valign="top">Option template entry is not valid.</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top">CPD3C54 D</td>
|
|
<td align="left" valign="top">Source file name and library is not valid.</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top">CPD3C55 D</td>
|
|
<td align="left" valign="top">Source file member is not valid.</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top">CPD3C56 D</td>
|
|
<td align="left" valign="top">Source file last changed date and time is not
|
|
valid.</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top">CPF3C56 E</td>
|
|
<td align="left" valign="top">Source file last changed date and time is not
|
|
valid.</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top">CPF3C60 E</td>
|
|
<td align="left" valign="top">Program name and library is not valid.</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top">CPF3C61 E</td>
|
|
<td align="left" valign="top">Authority is not valid.</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top">CPF3C62 E</td>
|
|
<td align="left" valign="top">Source file library specified.</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top">CPF3C63 E</td>
|
|
<td align="left" valign="top">Source file member specified.</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top">CPF3C64 E</td>
|
|
<td align="left" valign="top">Source file last changed date and time
|
|
specified.</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top">CPF3C90 E</td>
|
|
<td align="left" valign="top">Literal value cannot be changed.</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top">CPF6301 E</td>
|
|
<td align="left" valign="top">Intermediate representation of program (IRP)
|
|
contains &1 errors. Probable compiler error.</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top">CPF6303 E</td>
|
|
<td align="left" valign="top">Message &1, &2 received while running
|
|
create program command.</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top">CPF6304 E</td>
|
|
<td align="left" valign="top">Library &1 not found.</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top">CPF6306 E</td>
|
|
<td align="left" valign="top">Program &1 in library &2 already
|
|
exists.</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top">CPF6307 E</td>
|
|
<td align="left" valign="top">Program template value at offset &1, bit
|
|
&2, length &3 not valid.</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top">CPF6308 E</td>
|
|
<td align="left" valign="top">Not authorized to create program.</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top">CPF6309 E</td>
|
|
<td align="left" valign="top">Not authorized to library &1.</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top">CPF6455 E</td>
|
|
<td align="left" valign="top">Member &2 file &1 in library &3 not
|
|
found.</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top">CPF6457 E</td>
|
|
<td align="left" valign="top">Cannot allocate library &1 for program
|
|
insertion.</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top">CPF6551 E</td>
|
|
<td align="left" valign="top">Work space &2 cannot be extended. Probable
|
|
compiler error.</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top">CPF6552 E</td>
|
|
<td align="left" valign="top">Space &2 type &3 subtype &4 not PRM
|
|
workspace.</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top">CPF6553 E</td>
|
|
<td align="left" valign="top">PRM permanent table resolution failed. Probable
|
|
compiler error.</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top">CPF6554 E</td>
|
|
<td align="left" valign="top">Type of IST object &4 at offset &3 not
|
|
valid. Probable PRM error.</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top">CPF6555 E</td>
|
|
<td align="left" valign="top">Addressability field type not valid for IST
|
|
number &4 at offset &3. Probable PRM error.</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top">CPF6557 E</td>
|
|
<td align="left" valign="top">Error condition for IST &4 at &3 of IST
|
|
space not valid. Probable PRM error.</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top">CPF6560 E</td>
|
|
<td align="left" valign="top">Operation code &5 in MI instruction &3 at
|
|
offset &6 not found in QPRODT.</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top">CPF6561 E</td>
|
|
<td align="left" valign="top">Operand &4 in &3 at offset &5 in
|
|
program template not valid.</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top">CPF6563 E</td>
|
|
<td align="left" valign="top">Program was too large to be created.</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top">CPF6564 E</td>
|
|
<td align="left" valign="top">Machine storage limit violation.</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top">CPF6565 E</td>
|
|
<td align="left" valign="top">User profile storage limit exceeded.</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top">CPF9872 E</td>
|
|
<td align="left" valign="top">Program or service program &1 in library
|
|
&2 ended. Reason code &3.</td>
|
|
</tr>
|
|
</table>
|
|
|
|
<br>
|
|
<br>
|
|
<h3>Program Attributes</h3>
|
|
|
|
<p>The QPRCRTPG API creates programs that have the following attributes:</p>
|
|
|
|
<ul>
|
|
<li>An associated space of 480 bytes initialized to hexadecimal 00. You can use
|
|
the QCLSPGAS API to store information in the program's associated space.</li>
|
|
|
|
<li>Observability.</li>
|
|
|
|
<li>A blank extended attribute.</li>
|
|
</ul>
|
|
|
|
<br>
|
|
|
|
|
|
<h3><a name="HDRIIRP">Program Syntax</a></h3>
|
|
|
|
<p>A program object consists of an <strong>instruction stream</strong> and an
|
|
<strong>object definition table (ODT)</strong>. The intermediate representation
|
|
of a program defines both of these components. It consists of one or more
|
|
statements:</p>
|
|
|
|
<p><img alt="Program syntax diagram" src="RBAFX516.gif"> </p>
|
|
|
|
<p>Instruction statements define MI instructions placed in the instruction
|
|
stream. Declare statements define program objects placed in the ODT. Directive
|
|
statements:</p>
|
|
|
|
<ul>
|
|
<li>Control the formatting of the output listing.</li>
|
|
|
|
<li>Define entry-point program objects.</li>
|
|
|
|
<li>Define symbolic breakpoints.</li>
|
|
|
|
<li>Specify the end of the program.</li>
|
|
</ul>
|
|
|
|
<p>The following sections explain how to define these statements.</p>
|
|
|
|
<p><strong>Note:</strong> In the diagrams below, names that begin with an
|
|
uppercase letter identify values specified in another diagram. Names that begin
|
|
with a lowercase letter identify values defined in the table below the
|
|
diagram.</p>
|
|
|
|
<br>
|
|
|
|
|
|
<h3>Label</h3>
|
|
|
|
<p>The following diagram and table show the possible labels:</p>
|
|
|
|
<p><img alt="Label statement syntax" src="RBAFX517.gif"> </p>
|
|
|
|
<p>Each name specified in the label generates a branch-point program object
|
|
corresponding to the next MI instruction.</p>
|
|
|
|
<table border width="80%">
|
|
<!-- cols="30 30 40" -->
|
|
<tr>
|
|
<th align="left" valign="top">Constant</th>
|
|
<th align="left" valign="top">Range</th>
|
|
<th align="left" valign="top">Description</th>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top">name1</td>
|
|
<td align="left" valign="top">Any</td>
|
|
<td align="left" valign="top">Label name for next instruction</td>
|
|
</tr>
|
|
</table>
|
|
|
|
<br>
|
|
<br>
|
|
|
|
|
|
<h3><a name="qprdecst">Declare Statement</a></h3>
|
|
|
|
<p>Declare statements define program data objects. All the declare statements
|
|
in a program build the object definition table (ODT).</p>
|
|
|
|
<p>You cannot specifically declare branch and entry-point program objects.
|
|
However, you can declare branch-point program objects using labels. You can
|
|
also declare entry-point program objects using the entry directive
|
|
statement.</p>
|
|
|
|
<p>The types of declare statements follow:</p>
|
|
|
|
<ul>
|
|
<li>Scalar Data Object Declare Statement</li>
|
|
|
|
<li>Pointer Data Object Declare Statement</li>
|
|
|
|
<li>Space Pointer Machine Object Declare Statement</li>
|
|
|
|
<li>Operand List Declare Statement</li>
|
|
|
|
<li>Instruction Definition List Declare Statement</li>
|
|
|
|
<li>Exception Description Declare Statement</li>
|
|
|
|
<li>Space Object Declare Statement</li>
|
|
|
|
<li>Constant Object Declare Statement</li>
|
|
</ul>
|
|
|
|
<br>
|
|
|
|
|
|
<h3>Scalar-Data-Object Declare Statement</h3>
|
|
|
|
<p>The following diagram and table show the scalar-data-object declare
|
|
statement:</p>
|
|
|
|
<p><img src="RBAFX518.gif" alt="Scalar-Data-Object Declare Statement"> </p>
|
|
|
|
<p>Only certain combinations of attributes are allowed based on the data
|
|
object's addressability. The table below shows these combinations.</p>
|
|
|
|
<table border width="80%">
|
|
<tr>
|
|
<th align="left" valign="bottom">Address-ability</th>
|
|
<th align="left" valign="bottom">Array Attribute</th>
|
|
<th align="left" valign="bottom">Array Element Offset</th>
|
|
<th align="left" valign="bottom">Position</th>
|
|
<th align="left" valign="bottom">Boundary</th>
|
|
<th align="left" valign="bottom">Initial Value</th>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top" rowspan="2">STAT</td>
|
|
<td align="center" valign="top">X</td>
|
|
<td align="center" valign="top"> </td>
|
|
<td align="center" valign="top">X</td>
|
|
<td align="center" valign="top"> </td>
|
|
<td align="center" valign="top">X</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="center" valign="top">X</td>
|
|
<td align="center" valign="top"> </td>
|
|
<td align="center" valign="top"> </td>
|
|
<td align="center" valign="top">X</td>
|
|
<td align="center" valign="top">X</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top" rowspan="2">AUTO</td>
|
|
<td align="center" valign="top">X</td>
|
|
<td align="center" valign="top"> </td>
|
|
<td align="center" valign="top">X</td>
|
|
<td align="center" valign="top"> </td>
|
|
<td align="center" valign="top">X</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="center" valign="top">X</td>
|
|
<td align="center" valign="top"> </td>
|
|
<td align="center" valign="top"> </td>
|
|
<td align="center" valign="top">X</td>
|
|
<td align="center" valign="top">X</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top" rowspan="2">DEF</td>
|
|
<td align="center" valign="top">X</td>
|
|
<td align="center" valign="top"> </td>
|
|
<td align="center" valign="top">X</td>
|
|
<td align="center" valign="top">X</td>
|
|
<td align="center" valign="top">X</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="center" valign="top">X</td>
|
|
<td align="center" valign="top">X</td>
|
|
<td align="center" valign="top">X</td>
|
|
<td align="center" valign="top">X</td>
|
|
<td align="center" valign="top"> </td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top" rowspan="2">DIR</td>
|
|
<td align="center" valign="top">X</td>
|
|
<td align="center" valign="top"> </td>
|
|
<td align="center" valign="top">X</td>
|
|
<td align="center" valign="top">X</td>
|
|
<td align="center" valign="top">X</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="center" valign="top">X</td>
|
|
<td align="center" valign="top">X</td>
|
|
<td align="center" valign="top">X</td>
|
|
<td align="center" valign="top">X</td>
|
|
<td align="center" valign="top"> </td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top">BAS</td>
|
|
<td align="center" valign="top">X</td>
|
|
<td align="center" valign="top"> </td>
|
|
<td align="center" valign="top">X</td>
|
|
<td align="center" valign="top">X</td>
|
|
<td align="center" valign="top"> </td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top">BASPCO</td>
|
|
<td align="center" valign="top">X</td>
|
|
<td align="center" valign="top"> </td>
|
|
<td align="center" valign="top">X</td>
|
|
<td align="center" valign="top">X</td>
|
|
<td align="center" valign="top"> </td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top">PARM</td>
|
|
<td align="center" valign="top">X</td>
|
|
<td align="center" valign="top"> </td>
|
|
<td align="center" valign="top"> </td>
|
|
<td align="center" valign="top">X</td>
|
|
<td align="center" valign="top"> </td>
|
|
</tr>
|
|
</table>
|
|
|
|
<br>
|
|
<br>
|
|
<h3>Object Name</h3>
|
|
|
|
<p>The following diagram and table show the possible object names:</p>
|
|
|
|
<img alt="Object Name syntax" src="RBAFX535.gif">
|
|
|
|
<table border width="80%">
|
|
<tr>
|
|
<th align="left" valign="top">Constant</th>
|
|
<th align="left" valign="top">Range</th>
|
|
<th align="left" valign="top">Description</th>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top">name1</td>
|
|
<td align="left" valign="top">Any</td>
|
|
<td align="left" valign="top">Program object name to be declared</td>
|
|
</tr>
|
|
</table>
|
|
|
|
<br>
|
|
<br>
|
|
<h3>Array Attribute</h3>
|
|
|
|
<p>The following diagram and table show the possible array attributes:</p>
|
|
|
|
<img alt="Array Attribute syntax" src="RBAFX520.gif">
|
|
|
|
<table border width="80%">
|
|
<tr>
|
|
<th align="left" valign="top">Constant</th>
|
|
<th align="left" valign="top">Range</th>
|
|
<th align="left" valign="top">Description</th>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top">integer1</td>
|
|
<td align="left" valign="top">1 to 16 776 191</td>
|
|
<td align="left" valign="top">Dimension of the data object with an implied
|
|
lower bound of 1.</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top">integer2</td>
|
|
<td align="left" valign="top">-2 147 483 648 to
|
|
2 147 483 647</td>
|
|
<td align="left" valign="top">Lower bound of the array.</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top">integer3</td>
|
|
<td align="left" valign="top">integer2 to 2 147 483 647</td>
|
|
<td align="left" valign="top">Upper bound of the array. The dimension
|
|
(integer3 - integer2) cannot exceed 16 776 191.</td>
|
|
</tr>
|
|
</table>
|
|
|
|
<br>
|
|
<br>
|
|
|
|
|
|
<h3>Example</h3>
|
|
|
|
<p>See <a href="../apiref/aboutapis.htm#codedisclaimer">Code disclaimer information</a>
|
|
for information pertaining to code examples.</p>
|
|
|
|
<p>The following declare statements each define an array of 50 elements. The
|
|
elements of ARRAY1 are numbered 1 to 50. The elements of ARRAY2 are numbered 0
|
|
to 49. Each element of the array is a BIN(2) field. The addressability of the
|
|
arrays is static.</p>
|
|
|
|
<pre>
|
|
DCL DD ARRAY1(50) BIN(2);
|
|
DCL DD ARRAY2(0:49) BIN(2);
|
|
</pre>
|
|
|
|
<br>
|
|
|
|
|
|
<h3>Scalar Type</h3>
|
|
|
|
<p>The following diagram and tables show the possible data types of scalar
|
|
items:</p>
|
|
|
|
<img alt="Scalar Type syntax" src="RBAFX521.gif">
|
|
|
|
<p>If you specify no value, the system uses BIN(2).</p>
|
|
|
|
<table border width="80%">
|
|
<!-- cols="10 90" -->
|
|
<tr>
|
|
<th align="left" valign="top">Keyword</th>
|
|
<th align="left" valign="top">Description</th>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top">CHAR</td>
|
|
<td align="left" valign="top">Scalar type is a character string.</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top">BIN</td>
|
|
<td align="left" valign="top">Scalar type is binary.</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top">UNSGND</td>
|
|
<td align="left" valign="top">Scalar type is unsigned binary. If you do not
|
|
specify this value, the scalar type is signed binary.</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top">PKD</td>
|
|
<td align="left" valign="top">Scalar type is packed decimal.</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top">ZND</td>
|
|
<td align="left" valign="top">Scalar type is zoned decimal.</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top">FLT</td>
|
|
<td align="left" valign="top">Scalar type is floating-point.</td>
|
|
</tr>
|
|
</table>
|
|
|
|
<br>
|
|
<br>
|
|
|
|
|
|
<table border width="80%">
|
|
<!-- cols="15 15 70" -->
|
|
<tr>
|
|
<th align="left" valign="top">Constant</th>
|
|
<th align="left" valign="top">Range</th>
|
|
<th align="left" valign="top">Description</th>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top">integer1</td>
|
|
<td align="left" valign="top">See description.</td>
|
|
<td align="left" valign="top">Length in bytes of the character data object. If
|
|
the data object is an array, the range is 1 to 32 767. Otherwise, the
|
|
range is 1 to 16 776 191.</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top">integer2</td>
|
|
<td align="left" valign="top">2 or 4</td>
|
|
<td align="left" valign="top">Length in bytes of the binary data object.</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top">integer3</td>
|
|
<td align="left" valign="top">1 to 31</td>
|
|
<td align="left" valign="top">Total digits in the data object.</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top">integer4</td>
|
|
<td align="left" valign="top">0 to integer3</td>
|
|
<td align="left" valign="top">Number of digits to the right of the assumed
|
|
decimal point in the data object.</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top">integer5</td>
|
|
<td align="left" valign="top">4 or 8</td>
|
|
<td align="left" valign="top">Precision in bytes of the data object.</td>
|
|
</tr>
|
|
</table>
|
|
|
|
<br>
|
|
<br>
|
|
|
|
|
|
<h3>Addressability</h3>
|
|
|
|
<p>The following diagram and tables show the possible addressabilities:</p>
|
|
|
|
<img alt="Addressability syntax" src="RBAFX522.gif">
|
|
|
|
<table border width="80%">
|
|
<!-- cols="10 90" -->
|
|
<tr>
|
|
<th align="left" valign="top">Keyword</th>
|
|
<th align="left" valign="top">Description</th>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top">STAT</td>
|
|
<td align="left" valign="top">Addressability type is direct static.</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top">AUTO</td>
|
|
<td align="left" valign="top">Addressability type is direct automatic.</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top">DIR</td>
|
|
<td align="left" valign="top">Addressability type is defined. See <a href=
|
|
"#HDR8SPCOBJ">Using Space Objects</a> for more information.</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top">DEF</td>
|
|
<td align="left" valign="top">Addressability type is direct on the previous
|
|
space.</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top">BAS</td>
|
|
<td align="left" valign="top">Addressability type is based.</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top">*</td>
|
|
<td align="left" valign="top">Object does not have explicit basing object.</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top">BASPCO</td>
|
|
<td align="left" valign="top">Addressability type is based on process
|
|
communication object space pointer.</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top">PARM</td>
|
|
<td align="left" valign="top">Addressability type is a parameter.</td>
|
|
</tr>
|
|
</table>
|
|
|
|
<br>
|
|
<br>
|
|
|
|
|
|
<table border width="80%">
|
|
<!-- cols="15 15 60" -->
|
|
<tr>
|
|
<th align="left" valign="top">Constant</th>
|
|
<th align="left" valign="top">Range</th>
|
|
<th align="left" valign="top">Description</th>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top">name1</td>
|
|
<td align="left" valign="top">Any</td>
|
|
<td align="left" valign="top">Space object name</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top">name2</td>
|
|
<td align="left" valign="top">Any</td>
|
|
<td align="left" valign="top">Scalar data object name or pointer data object
|
|
name</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top">name3</td>
|
|
<td align="left" valign="top">Any</td>
|
|
<td align="left" valign="top">Pointer data object name or space pointer object
|
|
name</td>
|
|
</tr>
|
|
</table>
|
|
|
|
<p>If you specify no value, the system uses STAT.</p>
|
|
|
|
<br>
|
|
|
|
|
|
<h3>Scope</h3>
|
|
|
|
<p><strong>Scope</strong> refers to the ability to export a variable so that
|
|
other programs can access it. The following diagram and table show the possible
|
|
scopes:</p>
|
|
|
|
<img alt="Scope syntax" src="RBAFX523.gif">
|
|
|
|
<table border width="80%">
|
|
<!-- cols="10 90" -->
|
|
<tr>
|
|
<th align="left" valign="top">Keyword</th>
|
|
<th align="left" valign="top">Description</th>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top">INT</td>
|
|
<td align="left" valign="top">Data object is not externally accessible</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top">EXT</td>
|
|
<td align="left" valign="top">Data object is externally accessible</td>
|
|
</tr>
|
|
</table>
|
|
|
|
<p>If you specify no value, the system uses INT.</p>
|
|
|
|
<br>
|
|
|
|
|
|
<h3>Boundary</h3>
|
|
|
|
<p>The following diagram and table show the possible boundaries:</p>
|
|
|
|
<img alt="Boundary syntax" src="RBAFX524.gif">
|
|
|
|
<table border width="80%">
|
|
<!-- cols="15 15 70" -->
|
|
<tr>
|
|
<th align="left" valign="top">Constant</th>
|
|
<th align="left" valign="top">Range</th>
|
|
<th align="left" valign="top">Description</th>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top">integer1</td>
|
|
<td align="left" valign="top">1, 2, 4, 8, 16</td>
|
|
<td align="left" valign="top">Data object boundary</td>
|
|
</tr>
|
|
</table>
|
|
|
|
<br>
|
|
<br>
|
|
|
|
|
|
<h3>Position</h3>
|
|
|
|
<p>The following diagram and table show the possible positions:</p>
|
|
|
|
<img alt="Position syntax" src="RBAFX525.gif">
|
|
|
|
<table border width="80%">
|
|
<!-- cols="15 15 70" -->
|
|
<tr>
|
|
<th align="left" valign="top">Constant</th>
|
|
<th align="left" valign="top">Range</th>
|
|
<th align="left" valign="top">Description</th>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top">integer1</td>
|
|
<td align="left" valign="top">1 to 16 776 191</td>
|
|
<td align="left" valign="top">Data object position</td>
|
|
</tr>
|
|
</table>
|
|
|
|
<br>
|
|
<br>
|
|
|
|
|
|
<h3>Example</h3>
|
|
|
|
<p>The following declare statements show how POS can be used along with DEF to
|
|
access the same storage space in different ways:</p>
|
|
|
|
<pre>
|
|
DCL DD DATETIME CHAR(12);
|
|
DCL DD DATE CHAR(6) DEF(DATETIME);
|
|
DCL DD TIME CHAR(6) DEF(DATETIME) POS(7);
|
|
</pre>
|
|
|
|
<p>DATETIME represents a 12 character time and date stamp. The first 6
|
|
characters contain the date and the second 6 characters contain the time.</p>
|
|
|
|
<br>
|
|
|
|
|
|
<h3>Array Element Offset</h3>
|
|
|
|
<p>The following diagram and table show the possible array element offsets:</p>
|
|
|
|
<img alt="Array Element Offset syntax" src="RBAFX526.gif">
|
|
|
|
<table border width="80%">
|
|
<!-- cols="15 15 70" -->
|
|
<tr>
|
|
<th align="left" valign="top">Constant</th>
|
|
<th align="left" valign="top">Range</th>
|
|
<th align="left" valign="top">Description</th>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top">integer1</td>
|
|
<td align="left" valign="top">1 to 32767</td>
|
|
<td align="left" valign="top">Array element offset</td>
|
|
</tr>
|
|
</table>
|
|
|
|
<br>
|
|
<br>
|
|
<h3>Example</h3>
|
|
|
|
<p>The following example shows AEO used in conjunction with DEF and POS:</p>
|
|
|
|
<pre>
|
|
DCL DD X CHAR(16);
|
|
DCL DD LFT(4) BIN(2) DEF(X) AEO(4) POS(1);
|
|
DCL DD RGT(4) BIN(2) DEF(X) AEO(4) POS(3);
|
|
</pre>
|
|
|
|
<p>Both LFT and RGT redefine the storage declared by X. Because the size of
|
|
each array element is smaller than the array element offset, there are 2-byte
|
|
gaps between each array element:</p>
|
|
|
|
<img alt="An illustration of the concept described in the preceding paragraph"
|
|
src="RBAFX527.gif"><br>
|
|
<br>
|
|
|
|
|
|
<h3>Optimization</h3>
|
|
|
|
<p><strong>Optimization</strong> determines whether or not an item can be moved
|
|
to a register and stored there over time. The following diagram shows the
|
|
possible optimization:</p>
|
|
|
|
<img alt="Optimization syntax" src="RBAFX528.gif">
|
|
|
|
<p>This value indicates that the data object contains an abnormal value. You
|
|
cannot optimize the value for more than a single reference because the value
|
|
may be changed in a manner that the QPRCRTPG API cannot detect.</p>
|
|
|
|
<br>
|
|
<h3>Initial Value</h3>
|
|
|
|
<p>The following diagram and table show each possible initial value:</p>
|
|
|
|
<img alt="Initial Value syntax" src="RBAFX529.gif">
|
|
|
|
<table border width="80%">
|
|
<!-- cols="15 15 70" -->
|
|
<tr>
|
|
<th align="left" valign="top">Constant</th>
|
|
<th align="left" valign="top">Range</th>
|
|
<th align="left" valign="top">Description</th>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top">integer1</td>
|
|
<td align="left" valign="top">1 to 16 776 191</td>
|
|
<td align="left" valign="top">Position of elements in a character string</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top">integer1</td>
|
|
<td align="left" valign="top">-2 147 483 648 to
|
|
2 147 483 647</td>
|
|
<td align="left" valign="top">Position of elements in an array</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top">integer2</td>
|
|
<td align="left" valign="top">1 to 16 776 191</td>
|
|
<td align="left" valign="top">Replication factor in a character string or
|
|
array</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top">integer3</td>
|
|
<td align="left" valign="top">Any</td>
|
|
<td align="left" valign="top">Initial value for signed and unsigned binary data
|
|
objects</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top">string1</td>
|
|
<td align="left" valign="top">Any</td>
|
|
<td align="left" valign="top">Initial value for character string data
|
|
objects</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top">packed1</td>
|
|
<td align="left" valign="top">Any</td>
|
|
<td align="left" valign="top">Initial value for packed decimal data
|
|
objects</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top">zoned1</td>
|
|
<td align="left" valign="top">Any</td>
|
|
<td align="left" valign="top">Initial value for zoned decimal data objects</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top">float1</td>
|
|
<td align="left" valign="top">Any</td>
|
|
<td align="left" valign="top">Initial value for floating-point data
|
|
objects</td>
|
|
</tr>
|
|
</table>
|
|
|
|
<br>
|
|
<br>
|
|
|
|
|
|
<h3>Example</h3>
|
|
|
|
<p>The following declare statement declares and initializes a 10-element
|
|
array:</p>
|
|
|
|
<pre>
|
|
DCL DD IV(10) BIN(2) STAT INIT((1)10,*(2)(2)11,*(4)(3)12,*(7)(4)13);
|
|
</pre>
|
|
|
|
<p>There are four initial value elements. The following table describes this
|
|
function:</p>
|
|
|
|
<table border width="80%">
|
|
<tr>
|
|
<th align="left" valign="bottom">Initial Value Element</th>
|
|
<th align="left" valign="bottom">Result</th>
|
|
<th align="left" valign="bottom">Position</th>
|
|
<th align="left" valign="bottom">Replication Factor</th>
|
|
<th align="left" valign="bottom">Initial value</th>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top" width="20%">(1)10</td>
|
|
<td align="left" valign="top" width="20%">IV(1)=10</td>
|
|
<td align="left" valign="top" width="20%">1 (default)</td>
|
|
<td align="left" valign="top" width="20%">1</td>
|
|
<td align="left" valign="top" width="20%">10</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top">*(2)(2)11</td>
|
|
<td align="left" valign="top">
|
|
<pre>
|
|
IV(2)=11
|
|
IV(3)=11
|
|
</pre>
|
|
</td>
|
|
<td align="left" valign="top">2</td>
|
|
<td align="left" valign="top">2</td>
|
|
<td align="left" valign="top">11</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top">*(4)(3)12</td>
|
|
<td align="left" valign="top">
|
|
<pre>
|
|
IV(4)=12
|
|
IV(5)=12
|
|
IV(6)=12
|
|
</pre>
|
|
</td>
|
|
<td align="left" valign="top">4</td>
|
|
<td align="left" valign="top">3</td>
|
|
<td align="left" valign="top">12</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top">*(7)(4)13</td>
|
|
<td align="left" valign="top">
|
|
<pre>
|
|
IV(7)=13
|
|
IV(8)=13
|
|
IV(9)=13
|
|
IV(10)=13
|
|
</pre>
|
|
</td>
|
|
<td align="left" valign="top">7</td>
|
|
<td align="left" valign="top">4</td>
|
|
<td align="left" valign="top">13</td>
|
|
</tr>
|
|
</table>
|
|
|
|
<br>
|
|
<br>
|
|
|
|
|
|
<h3>Pointer-Data-Object Declare Statement</h3>
|
|
|
|
<p>The following diagram and table show the pointer-data-object declare
|
|
statement:</p>
|
|
|
|
<img alt="Pointer-Data-Object Declare Statement syntax" src="RBAFX530.gif">
|
|
|
|
<p>The system only allows certain combinations of attributes based on the data
|
|
object's addressability. These combinations are listed as follows:</p>
|
|
|
|
<table border width="80%">
|
|
<tr>
|
|
<th align="left" valign="bottom">Address-ability</th>
|
|
<th align="left" valign="bottom">Array Attribute</th>
|
|
<th align="left" valign="bottom">Array Element Offset Attribute</th>
|
|
<th align="left" valign="bottom">Position Attribute</th>
|
|
<th align="left" valign="bottom">Initial Value Attribute</th>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top">STAT</td>
|
|
<td align="center" valign="top">X</td>
|
|
<td align="center" valign="top"> </td>
|
|
<td align="center" valign="top">X</td>
|
|
<td align="center" valign="top">X</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top">AUTO</td>
|
|
<td align="center" valign="top">X</td>
|
|
<td align="center" valign="top"> </td>
|
|
<td align="center" valign="top">X</td>
|
|
<td align="center" valign="top">X</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top" rowspan="2">DEF</td>
|
|
<td align="center" valign="top">X</td>
|
|
<td align="center" valign="top">X</td>
|
|
<td align="center" valign="top">X</td>
|
|
<td align="center" valign="top"> </td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="center" valign="top"> </td>
|
|
<td align="center" valign="top"> </td>
|
|
<td align="center" valign="top">X</td>
|
|
<td align="center" valign="top">X</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top" rowspan="2">DIR</td>
|
|
<td align="center" valign="top">X</td>
|
|
<td align="center" valign="top">X</td>
|
|
<td align="center" valign="top">X</td>
|
|
<td align="center" valign="top"> </td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="center" valign="top"> </td>
|
|
<td align="center" valign="top"> </td>
|
|
<td align="center" valign="top">X</td>
|
|
<td align="center" valign="top">X</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top">BAS</td>
|
|
<td align="center" valign="top">X</td>
|
|
<td align="center" valign="top"> </td>
|
|
<td align="center" valign="top">X</td>
|
|
<td align="center" valign="top"> </td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top">BASPCO</td>
|
|
<td align="center" valign="top">X</td>
|
|
<td align="center" valign="top"> </td>
|
|
<td align="center" valign="top">X</td>
|
|
<td align="center" valign="top"> </td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top">PARM</td>
|
|
<td align="center" valign="top">X</td>
|
|
<td align="center" valign="top"> </td>
|
|
<td align="center" valign="top"> </td>
|
|
<td align="center" valign="top"> </td>
|
|
</tr>
|
|
</table>
|
|
|
|
<br>
|
|
<br>
|
|
|
|
|
|
<h3>Pointer Type</h3>
|
|
|
|
<p>The following diagram and table show the possible pointer types:</p>
|
|
|
|
<img alt="Pointer Type syntax" src="RBAFX531.gif">
|
|
|
|
<table border width="80%">
|
|
<!-- cols="10 90" -->
|
|
<tr>
|
|
<th align="left" valign="top">Keyword</th>
|
|
<th align="left" valign="top">Description</th>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top">PTR</td>
|
|
<td align="left" valign="top">Pointer type is not specified.</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top">INSPTR</td>
|
|
<td align="left" valign="top">Pointer type is the instruction pointer.</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top">SPCPTR</td>
|
|
<td align="left" valign="top">Pointer type is the space pointer.</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top">DTAPTR</td>
|
|
<td align="left" valign="top">Pointer type is the data pointer.</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top">SYSPTR</td>
|
|
<td align="left" valign="top">Pointer type is the system pointer.</td>
|
|
</tr>
|
|
</table>
|
|
|
|
<p>If you specify an initial value, you must specify INSPTR, SPCPTR, DTAPTR or
|
|
SYSPTR.</p>
|
|
|
|
<br>
|
|
<h3>Array Attribute</h3>
|
|
|
|
<p>The following diagram and table show the possible array attributes:</p>
|
|
|
|
<img alt="Array Attribute syntax" src="RBAFX532.gif">
|
|
|
|
<table border width="80%">
|
|
<!-- cols="15 15 70" -->
|
|
<tr>
|
|
<th align="left" valign="top">Constant</th>
|
|
<th align="left" valign="top">Range</th>
|
|
<th align="left" valign="top">Description</th>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top">integer1</td>
|
|
<td align="left" valign="top">1 to 1 000 000</td>
|
|
<td align="left" valign="top">Dimension of the data object with an implied
|
|
lower bound of 1.</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top">integer2</td>
|
|
<td align="left" valign="top">-2 147 483 648 to
|
|
2 147 483 647</td>
|
|
<td align="left" valign="top">Lower bound of the array.</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top">integer3</td>
|
|
<td align="left" valign="top">integer2 to 2 147 483 647</td>
|
|
<td align="left" valign="top">Upper bound of the array. The dimension
|
|
(integer3 - integer2) should not exceed 1 000 000.</td>
|
|
</tr>
|
|
</table>
|
|
|
|
<br>
|
|
<br>
|
|
<h3>Addressability</h3>
|
|
|
|
<p>The following diagram and tables show the possible addressabilities:</p>
|
|
|
|
<img alt="Addressability syntax" src="RBAFX533.gif">
|
|
|
|
<table border width="80%">
|
|
<!-- cols="10 90" -->
|
|
<tr>
|
|
<th align="left" valign="top">Keyword</th>
|
|
<th align="left" valign="top">Description</th>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top">STAT</td>
|
|
<td align="left" valign="top">Addressability type is direct static.</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top">AUTO</td>
|
|
<td align="left" valign="top">Addressability type is direct automatic.</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top">DIR</td>
|
|
<td align="left" valign="top">Addressability type is defined. See <a href=
|
|
"#HDR8SPCOBJ">Using Space Objects</a> for more information.</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top">DEF</td>
|
|
<td align="left" valign="top">Addressability type is defined.</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top">BAS</td>
|
|
<td align="left" valign="top">Addressability type is based.</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top">*</td>
|
|
<td align="left" valign="top">Object does not have explicit basing object.</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top">BASPCO</td>
|
|
<td align="left" valign="top">Addressability type is based on the process
|
|
communication object space pointer.</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top">PARM</td>
|
|
<td align="left" valign="top">Addressability type is parameter.</td>
|
|
</tr>
|
|
</table>
|
|
|
|
<br>
|
|
<br>
|
|
<table border width="80%">
|
|
<tr>
|
|
<th align="left" valign="top">Constant</th>
|
|
<th align="left" valign="top">Range</th>
|
|
<th align="left" valign="top">Description</th>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top">name1</td>
|
|
<td align="left" valign="top">Any</td>
|
|
<td align="left" valign="top">Space object name</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top">name2</td>
|
|
<td align="left" valign="top">Any</td>
|
|
<td align="left" valign="top">Scalar data object name or the pointer data
|
|
object name</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top">name3</td>
|
|
<td align="left" valign="top">Any</td>
|
|
<td align="left" valign="top">Pointer data object name or the space pointer
|
|
machine object name</td>
|
|
</tr>
|
|
</table>
|
|
|
|
<br>
|
|
<br>
|
|
<h3>Position</h3>
|
|
|
|
<p>The following diagram and table show the possible positions:</p>
|
|
|
|
<img alt="Position syntax" src="RBAFX525.gif">
|
|
|
|
<table border width="80%">
|
|
<!-- cols="15 15 70" -->
|
|
<tr>
|
|
<th align="left" valign="top">Constant</th>
|
|
<th align="left" valign="top">Range</th>
|
|
<th align="left" valign="top">Description</th>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top">integer1</td>
|
|
<td align="left" valign="top">1 to 16 776 191</td>
|
|
<td align="left" valign="top">Data object position</td>
|
|
</tr>
|
|
</table>
|
|
|
|
<br>
|
|
<br>
|
|
|
|
|
|
<h3>Array Element Offset Value</h3>
|
|
|
|
<p>The following diagram and table show the possible array element offset
|
|
values:</p>
|
|
|
|
<img alt="Array Element Offset Value syntax" src="RBAFX526.gif">
|
|
|
|
<table border width="80%">
|
|
<!-- cols="15 15 70" -->
|
|
<tr>
|
|
<th align="left" valign="top">Constant</th>
|
|
<th align="left" valign="top">Range</th>
|
|
<th align="left" valign="top">Description</th>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top">integer1</td>
|
|
<td align="left" valign="top">1 to 32 767</td>
|
|
<td align="left" valign="top">Array element offset</td>
|
|
</tr>
|
|
</table>
|
|
|
|
<br>
|
|
<br>
|
|
|
|
|
|
<h3>Optimization</h3>
|
|
|
|
<p>The following diagram shows the possible optimizations:</p>
|
|
|
|
<img alt="Optimization syntax" src="RBAFX528.gif">
|
|
|
|
<p>This value indicates that the data object contains an abnormal value. The
|
|
system cannot optimize a value for more than a single reference because the
|
|
value may be changed in a manner the QPRCRTPG API cannot find.</p>
|
|
|
|
<br>
|
|
|
|
|
|
<h3>Initial Value</h3>
|
|
|
|
<p>The following diagram shows each possible initial value:</p>
|
|
|
|
<img alt="Initial Value syntax" src="RBAFX534.gif">
|
|
|
|
<p>An initial value can only be specified if a pointer-type value other than
|
|
PTR is specified. The syntax of the initial value is based on the pointer-type
|
|
value that was used.</p>
|
|
|
|
<br>
|
|
<h3>Instruction Pointer Initial Value</h3>
|
|
|
|
<p>The following diagram and table show the possible initial value for the
|
|
instruction pointer:</p>
|
|
|
|
<img alt="Instruction Pointer Initial Value syntax" src="RBAFX535.gif">
|
|
|
|
<table border width="80%">
|
|
<!-- cols="15 15 70" -->
|
|
<tr>
|
|
<th align="left" valign="top">Constant</th>
|
|
<th align="left" valign="top">Range</th>
|
|
<th align="left" valign="top">Description</th>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top">name1</td>
|
|
<td align="left" valign="top">Any</td>
|
|
<td align="left" valign="top">Label name</td>
|
|
</tr>
|
|
</table>
|
|
|
|
<br>
|
|
<br>
|
|
<h3>Example</h3>
|
|
|
|
<p>The following statement declares and initializes an instruction pointer:</p>
|
|
|
|
<pre>
|
|
LABELI:
|
|
|
|
:
|
|
:
|
|
|
|
DCL INSPTR INSTRUCTION_PTR INIT(LABELI);
|
|
</pre>
|
|
|
|
<br>
|
|
|
|
|
|
<h3>Space Pointer Initial Value</h3>
|
|
|
|
<p>The following diagram and table show the initial value for the space
|
|
pointer:</p>
|
|
|
|
<img alt="Space Pointer Initial Value syntax" src="RBAFX535.gif">
|
|
|
|
<table border width="80%">
|
|
<tr>
|
|
<th align="left" valign="top">Constant</th>
|
|
<th align="left" valign="top">Range</th>
|
|
<th align="left" valign="top">Description</th>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top">name1</td>
|
|
<td align="left" valign="top">Any</td>
|
|
<td align="left" valign="top">Scalar data object name or pointer data object
|
|
name</td>
|
|
</tr>
|
|
</table>
|
|
|
|
<br>
|
|
<br>
|
|
|
|
|
|
<h3>Example</h3>
|
|
|
|
<p>The following statement declares and initializes a space pointer:</p>
|
|
|
|
<pre>
|
|
DCL PTR ANY_POINTER;
|
|
DCL SPCPTR SPACE_PTR INIT(ANY_POINTER);
|
|
</pre>
|
|
|
|
<p>The pointer SPACE_PTR is initialized to point to the space location
|
|
containing ANY_POINTER. It does <em>not</em> contain the value of
|
|
ANY_POINTER.</p>
|
|
|
|
<br>
|
|
|
|
|
|
<h3>Data Pointer Initial Value</h3>
|
|
|
|
<p>The following diagram and table show the initial value for the data
|
|
pointer:</p>
|
|
|
|
<img alt="Data Pointer Initial Value syntax" src="RBAFX536.gif">
|
|
|
|
<table border width="80%">
|
|
<!-- cols="15 15 70" -->
|
|
<tr>
|
|
<th align="left" valign="top">Constant</th>
|
|
<th align="left" valign="top">Range</th>
|
|
<th align="left" valign="top">Description</th>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top">string1</td>
|
|
<td align="left" valign="top">32 bytes</td>
|
|
<td align="left" valign="top">External data object name</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top">string2</td>
|
|
<td align="left" valign="top">30 bytes</td>
|
|
<td align="left" valign="top">Program containing external data object</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top">integer1</td>
|
|
<td align="left" valign="top">0 to 255</td>
|
|
<td align="left" valign="top">Subtype of program</td>
|
|
</tr>
|
|
</table>
|
|
|
|
<br>
|
|
<br>
|
|
|
|
|
|
<h3>Example</h3>
|
|
|
|
<p>The following statement declares and initializes a data pointer:</p>
|
|
|
|
<pre>
|
|
DCL DTAPTR DVALUE INIT("DBINARY",PGM("DPGM"));
|
|
</pre>
|
|
|
|
<p>The pointer DTAPTR refers to the externally defined program object DBINARY
|
|
contained in program DPGM.</p>
|
|
|
|
<br>
|
|
<h3>System Pointer Initial Value</h3>
|
|
|
|
<p>The following diagram and tables show the initial value for the system
|
|
pointer:</p>
|
|
|
|
<img alt="System Pointer Initial Value syntax" src="RBAFX537.gif">
|
|
|
|
<table border width="80%">
|
|
<!-- cols="15 15 70" -->
|
|
<tr>
|
|
<th align="left" valign="top">Constant</th>
|
|
<th align="left" valign="top">Range</th>
|
|
<th align="left" valign="top">Description</th>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top">string1</td>
|
|
<td align="left" valign="top">1 to 30 bytes</td>
|
|
<td align="left" valign="top">System object</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top">string2</td>
|
|
<td align="left" valign="top">1 to 30 bytes</td>
|
|
<td align="left" valign="top">Context where the system object is located</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top">integer1</td>
|
|
<td align="left" valign="top">0 to 255</td>
|
|
<td align="left" valign="top">Subtype of the context</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top">name1</td>
|
|
<td align="left" valign="top">See table below.</td>
|
|
<td align="left" valign="top">Symbolic type of the system object</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top">integer2</td>
|
|
<td align="left" valign="top">0 to 255</td>
|
|
<td align="left" valign="top">Subtype of the system object</td>
|
|
</tr>
|
|
</table>
|
|
|
|
<p>The following system object types are supported:</p>
|
|
|
|
<table border width="80%">
|
|
<!-- cols="10 90" -->
|
|
<tr>
|
|
<th align="left" valign="top">Type</th>
|
|
<th align="left" valign="top">Description</th>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top"><strong>PGM</strong></td>
|
|
<td align="left" valign="top">Program</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top"><strong>CTX</strong></td>
|
|
<td align="left" valign="top">Context</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top"><strong>Q</strong></td>
|
|
<td align="left" valign="top">Queue</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top"><strong>SPC</strong></td>
|
|
<td align="left" valign="top">Space</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top"><strong>PCS</strong></td>
|
|
<td align="left" valign="top">Process control space</td>
|
|
</tr>
|
|
</table>
|
|
|
|
<br>
|
|
<br>
|
|
|
|
|
|
<h3><a name="DCLEXAMP">Example</a></h3>
|
|
|
|
<p>The following statement declares and initializes a system pointer:</p>
|
|
|
|
<pre>
|
|
DCL SYSPTR SYSTEM_PTR INIT("MYPGM",CTX("PGMLIB"),TYPE(PGM));
|
|
|
|
</pre>
|
|
|
|
<p>The pointer SYSTEM_PTR refers to the *PGM object MYPGM in the PGMLIB
|
|
library.</p>
|
|
|
|
<br>
|
|
<h3>Space-Pointer-Machine-Object Declare Statement</h3>
|
|
|
|
<p>The following diagram and table show the space-pointer-machine-object
|
|
declare statement:</p>
|
|
|
|
<img alt="Space-Pointer-Machine-Object Declare Statement syntax" src=
|
|
"RBAFX538.gif">
|
|
|
|
<table border width="80%">
|
|
<!-- cols="15 15 70" -->
|
|
<tr>
|
|
<th align="left" valign="top">Constant</th>
|
|
<th align="left" valign="top">Range</th>
|
|
<th align="left" valign="top">Description</th>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top">integer1</td>
|
|
<td align="left" valign="top">0 to 255</td>
|
|
<td align="left" valign="top">Optimization priority value, where 255 is the
|
|
highest priority</td>
|
|
</tr>
|
|
</table>
|
|
|
|
<p>The iSeries system provides two types of pointers that can access data:</p>
|
|
|
|
<ul>
|
|
<li>Space Pointers (SPCPTR)</li>
|
|
|
|
<li>Machine Space Pointers (MSPPTR)
|
|
|
|
<p>The MSPPTR has the following restrictions:</p>
|
|
|
|
<ul>
|
|
<li>It cannot be passed as a parameter</li>
|
|
|
|
<li>It cannot be part of a structure (SPC)</li>
|
|
|
|
<li>It cannot be based (BAS(on_some_pointer)) pointer</li>
|
|
|
|
<li>It is logically only automatic (AUTO) in storage scope</li>
|
|
</ul>
|
|
</li>
|
|
</ul>
|
|
|
|
<p>Because the MSPPTR has the above restrictions, the translator often assigns
|
|
the MSPPTR to a hardware register for the life of the entire program unit. What
|
|
this means is that loads may be eliminated from the generated code.</p>
|
|
|
|
<br>
|
|
|
|
|
|
<h3>Operand-List Declare Statement</h3>
|
|
|
|
<p>The following diagram and tables show the operand-list declare
|
|
statement:</p>
|
|
|
|
<img alt="Operand-List Declare Statement syntax" src="RBAFX539.gif">
|
|
|
|
<table border width="80%">
|
|
<!-- cols="10 90" -->
|
|
<tr>
|
|
<th align="left" valign="top">Keyword</th>
|
|
<th align="left" valign="top">Description</th>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top">ARG</td>
|
|
<td align="left" valign="top">Defines the argument list</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top">PARM</td>
|
|
<td align="left" valign="top">Defines the parameter list</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top">INT</td>
|
|
<td align="left" valign="top">An internal parameter list</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top">EXT</td>
|
|
<td align="left" valign="top">An external parameter list</td>
|
|
</tr>
|
|
</table>
|
|
|
|
<br>
|
|
<br>
|
|
<table border width="80%">
|
|
<!-- cols="15 15 70" -->
|
|
<tr>
|
|
<th align="left" valign="top">Constant</th>
|
|
<th align="left" valign="top">Range</th>
|
|
<th align="left" valign="top">Description</th>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top">name1</td>
|
|
<td align="left" valign="top">Any</td>
|
|
<td align="left" valign="top">Scalar data object or a pointer data object name.
|
|
Up to 255 names can be specified.</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top">integer1</td>
|
|
<td align="left" valign="top">0 to 255</td>
|
|
<td align="left" valign="top">Minimum number of elements that the list can
|
|
contain. This implicitly defines a variable-length operand list. If you do not
|
|
specify the operand list, the system defines a fixed-length operand list. Up to
|
|
255 names can be specified.</td>
|
|
</tr>
|
|
</table>
|
|
|
|
<br>
|
|
<br>
|
|
|
|
|
|
<h3>Example</h3>
|
|
|
|
<p>The following statements declare both argument and parameter operand lists
|
|
along with the associated argument and parameter data objects:</p>
|
|
|
|
<pre>
|
|
DCL DD ARG1 BIN(2);
|
|
DCL DD ARG2 CHAR(3);
|
|
DCL OL ARGUMENT_LIST (ARG1, ARG2) ARG;
|
|
|
|
DCL DD PARM1 BIN(2) PARM;
|
|
DCL DD PARM2 CHAR(3) PARM;
|
|
DCL OL PARAMETER_LIST (PARM1, PARM2) PARM EXT;
|
|
</pre>
|
|
|
|
<p>A parameter operand list that refers to the data objects has parameter
|
|
(PARM) addressability.</p>
|
|
|
|
<br>
|
|
|
|
|
|
<h3>Instruction-Definition-List Declare Statement</h3>
|
|
|
|
<p>The following diagram and table show the instruction-definition-list declare
|
|
statement:</p>
|
|
|
|
<img alt="Instruction-Definition-List Declare Statement syntax" src=
|
|
"RBAFX540.gif">
|
|
|
|
<table border width="80%">
|
|
<!-- cols="15 15 70" -->
|
|
<tr>
|
|
<th align="left" valign="top">Constant</th>
|
|
<th align="left" valign="top">Range</th>
|
|
<th align="left" valign="top">Description</th>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top">name1</td>
|
|
<td align="left" valign="top">Any</td>
|
|
<td align="left" valign="top">Label name. Up to 255 names can be
|
|
specified.</td>
|
|
</tr>
|
|
</table>
|
|
|
|
<br>
|
|
<br>
|
|
<h3>Example</h3>
|
|
|
|
<p>The following statements declare and use an instruction definition list:</p>
|
|
|
|
<pre>
|
|
LABEL1:
|
|
|
|
:
|
|
:
|
|
|
|
DCL IDL INSTRUCTION_LIST (LABEL1,LABEL2,LABEL3);
|
|
|
|
:
|
|
:
|
|
|
|
LABEL2:
|
|
B INSTRUCTION_LIST(3); /* Branch to LABEL3 */
|
|
|
|
:
|
|
:
|
|
|
|
LABEL3:
|
|
</pre>
|
|
|
|
<br>
|
|
|
|
|
|
<h3>Exception-Description Declare Statement</h3>
|
|
|
|
<p>The following diagram and tables show the exception-description declare
|
|
statement:</p>
|
|
|
|
<img alt="Exception-Description Declare Statement syntax" src="RBAFX541.gif">
|
|
|
|
<table border width="80%">
|
|
<!-- cols="10 90" -->
|
|
<tr>
|
|
<th align="left" valign="top">Keyword</th>
|
|
<th align="left" valign="top">Description</th>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top">INT</td>
|
|
<td align="left" valign="top">Exception handler type is the internal entry
|
|
point.</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top">BP</td>
|
|
<td align="left" valign="top">Exception handler type is the internal branch
|
|
point.</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top">EXT</td>
|
|
<td align="left" valign="top">Exception handler type is the external entry
|
|
point.</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top">IGN</td>
|
|
<td align="left" valign="top">Exception handling action ignores any exceptions
|
|
and continues processing.</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top">IMD</td>
|
|
<td align="left" valign="top">Exception handling action passes control to the
|
|
specified exception handler. This is the default.</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top">SKP</td>
|
|
<td align="left" valign="top">Exception handling action is to continue to
|
|
search for another exception description to handle the exception.</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top">RSG</td>
|
|
<td align="left" valign="top">Exception handling action continues to search for
|
|
an exception description by signaling the exception again to the previous
|
|
call.</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top">DFR</td>
|
|
<td align="left" valign="top">Exception handling action postpones handling and
|
|
saves exception data for later exception handling.</td>
|
|
</tr>
|
|
</table>
|
|
|
|
<br>
|
|
<br>
|
|
<table border width="80%">
|
|
<!-- cols="15 15 70" -->
|
|
<tr>
|
|
<th align="left" valign="top">Constant</th>
|
|
<th align="left" valign="top">Range</th>
|
|
<th align="left" valign="top">Description</th>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top">integer1</td>
|
|
<td align="left" valign="top">0 to 65535</td>
|
|
<td align="left" valign="top">Exception identifier</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top">name1</td>
|
|
<td align="left" valign="top">Any</td>
|
|
<td align="left" valign="top">Name of the label for branch point exception
|
|
handlers, name of the entry point for the internal exception handlers, and the
|
|
name of the system pointer for the external exception handlers</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top">string1</td>
|
|
<td align="left" valign="top">1 to 32 bytes</td>
|
|
<td align="left" valign="top">Compare value</td>
|
|
</tr>
|
|
</table>
|
|
|
|
<br>
|
|
<br>
|
|
|
|
|
|
<h3>Space-Object Declare Statement</h3>
|
|
|
|
<p>The following diagram and tables show the space-object declare
|
|
statement:</p>
|
|
|
|
<img alt="Space-Object Declare Statement syntax" src="RBAFX542.gif">
|
|
|
|
<table border width="80%">
|
|
<!-- cols="10 90" -->
|
|
<tr>
|
|
<th align="left" valign="top">Keyword</th>
|
|
<th align="left" valign="top">Description</th>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top">BAS</td>
|
|
<td align="left" valign="top">Addressability type is based.</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top">*</td>
|
|
<td align="left" valign="top">Object does not have explicit basing object.</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top">BASPCO</td>
|
|
<td align="left" valign="top">Addressability type is based on process
|
|
communication object space pointer.</td>
|
|
</tr>
|
|
</table>
|
|
|
|
<br>
|
|
<br>
|
|
<table border width="80%">
|
|
<!-- cols="15 15 70" -->
|
|
<tr>
|
|
<th align="left" valign="top">Constant</th>
|
|
<th align="left" valign="top">Range</th>
|
|
<th align="left" valign="top">Description</th>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top">name1</td>
|
|
<td align="left" valign="top">Any</td>
|
|
<td align="left" valign="top">Basing pointer name for the space</td>
|
|
</tr>
|
|
</table>
|
|
|
|
<p>For information on using space objects, refer to <a href="#HDR8SPCOBJ">Using
|
|
Space Objects</a>.</p>
|
|
|
|
<br>
|
|
|
|
|
|
<h3>Constant-Object Declare Statement</h3>
|
|
|
|
<p>The following diagram and tables show the constant-object declare
|
|
statement:</p>
|
|
|
|
<img alt="Constant-Object Declare Statement syntax" src="RBAFX543.gif">
|
|
|
|
<table border width="80%">
|
|
<!-- cols="10 90" -->
|
|
<tr>
|
|
<th align="left" valign="top">Keyword</th>
|
|
<th align="left" valign="top">Description</th>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top">CHAR</td>
|
|
<td align="left" valign="top">Scalar type is character string.</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top">BIN</td>
|
|
<td align="left" valign="top">Scalar type is binary.</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top">UNSGND</td>
|
|
<td align="left" valign="top">Scalar type is unsigned binary.</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top">PKD</td>
|
|
<td align="left" valign="top">Scalar type is packed decimal.</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top">ZND</td>
|
|
<td align="left" valign="top">Scalar type is zoned decimal.</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top">FLT</td>
|
|
<td align="left" valign="top">Scalar type is floating-point.</td>
|
|
</tr>
|
|
</table>
|
|
|
|
<br>
|
|
<br>
|
|
<table border width="80%">
|
|
<!-- cols="15 15 70" -->
|
|
<tr>
|
|
<th align="left" valign="top">Constant</th>
|
|
<th align="left" valign="top">Range</th>
|
|
<th align="left" valign="top">Description</th>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top">integer1</td>
|
|
<td align="left" valign="top">1 to 32 767</td>
|
|
<td align="left" valign="top">Length in bytes of the character data object</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top">integer2</td>
|
|
<td align="left" valign="top">2 or 4</td>
|
|
<td align="left" valign="top">Length in bytes of the binary data object</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top">integer3</td>
|
|
<td align="left" valign="top">1 to 31</td>
|
|
<td align="left" valign="top">Number of decimal digits</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top">integer4</td>
|
|
<td align="left" valign="top">0 to integer3</td>
|
|
<td align="left" valign="top">Number of fractional digits</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top">integer5</td>
|
|
<td align="left" valign="top">4 or 8</td>
|
|
<td align="left" valign="top">Number of bytes in floating-point constant</td>
|
|
</tr>
|
|
</table>
|
|
|
|
<p>If you do not specify a scalar type, the system uses BIN(2).</p>
|
|
|
|
<br>
|
|
<h3>Instruction Statement</h3>
|
|
|
|
<p>An instruction statement defines an MI instruction. The instruction stream
|
|
used to create the program is made up of all the instruction statements in the
|
|
intermediate representation of the program.</p>
|
|
|
|
<img alt="Instruction Statement syntax" src="RBAFX544.gif">
|
|
|
|
<table border width="80%">
|
|
<!-- cols="15 15 70" -->
|
|
<tr>
|
|
<th align="left" valign="top">Constant</th>
|
|
<th align="left" valign="top">Range</th>
|
|
<th align="left" valign="top">Description</th>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top">name1</td>
|
|
<td align="left" valign="top">See description.</td>
|
|
<td align="left" valign="top">Opcode for this instruction, as defined in the
|
|
<a href="../rzatk/mitoc.htm">iSeries Machine Interface Instructions</a> .</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top">name2</td>
|
|
<td align="left" valign="top">S, R, B, I</td>
|
|
<td align="left" valign="top">This is the form of the instruction.<br>
|
|
|
|
|
|
<table cellpadding="5">
|
|
<tr>
|
|
<td align="left" valign="top"><em>S</em></td>
|
|
<td align="left" valign="top">Short</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top"><em>R</em></td>
|
|
<td align="left" valign="top">Round</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top"><em>B</em></td>
|
|
<td align="left" valign="top">Branch</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top"><em>I</em></td>
|
|
<td align="left" valign="top">Indicator</td>
|
|
</tr>
|
|
</table>
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
|
|
<p>For the semantic meanings and the syntax restrictions (number and types of
|
|
operands, optional forms, and so on) for individual MI instructions, see the
|
|
<a href="../rzatk/mitoc.htm">iSeries Machine Interface Instructions</a>.</p>
|
|
|
|
<p>Following the abbreviated instruction name, you can specify the optional
|
|
forms of certain MI instructions using a string of characters enclosed in
|
|
parentheses. The following is an example of some of the various combinations
|
|
possible for a single MI instruction, ADD NUMERIC:</p>
|
|
|
|
<pre>
|
|
ADDN A,B,C; Add numeric (A=B+C)
|
|
ADDN(S) A,B; Add numeric short (A=A+B)
|
|
ADDN(SR) A,B; Add numeric short and round (A=A+B)
|
|
ADDN(SB) A,B/POS(X),NEG(Y); Add numeric short and branch (A=A+B,
|
|
branch to X if A>0, branch to Y if A<0)
|
|
ADDN(RI) A,B,C/POS(I),NEG(J); Add numeric round and indicator (A=B+C;
|
|
I='on' if A>0; j='on' if A<0 )
|
|
|
|
</pre>
|
|
|
|
<p>Also note that the order of characters in the optional form string is not
|
|
significant. Thus, all of the following instructions are both valid and
|
|
equivalent:</p>
|
|
|
|
<pre>
|
|
ADDN(SRB)A,B/POS(X); Add numeric short, round and branch
|
|
ADDN(SBR)A,B/POS(X); Add numeric short, round and branch
|
|
ADDN(RSB)A,B/POS(X); Add numeric short, round and branch
|
|
</pre>
|
|
|
|
<br>
|
|
|
|
|
|
<h3>Operand</h3>
|
|
|
|
<p>The following diagram and table show the possible operands:</p>
|
|
|
|
<img alt="Operand syntax" src="RBAFX545.gif">
|
|
|
|
<table border width="80%">
|
|
<!-- cols="15 15 70" -->
|
|
<tr>
|
|
<th align="left" valign="top">Constant</th>
|
|
<th align="left" valign="top">Range</th>
|
|
<th align="left" valign="top">Description</th>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top">integer1</td>
|
|
<td align="left" valign="top">Any</td>
|
|
<td align="left" valign="top">Numeric binary scalar operand</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top">string1</td>
|
|
<td align="left" valign="top">Any</td>
|
|
<td align="left" valign="top">Character scalar operand</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top">packed1</td>
|
|
<td align="left" valign="top">Any</td>
|
|
<td align="left" valign="top">Numeric packed decimal scalar operand</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top">zoned1</td>
|
|
<td align="left" valign="top">Any</td>
|
|
<td align="left" valign="top">Numeric zoned decimal scalar operand</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top">float1</td>
|
|
<td align="left" valign="top">Any</td>
|
|
<td align="left" valign="top">Numeric floating-point scalar operand (4 or 8
|
|
bytes)</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top">*</td>
|
|
<td align="left" valign="top"> </td>
|
|
<td align="left" valign="top">Null operand</td>
|
|
</tr>
|
|
</table>
|
|
|
|
<br>
|
|
<br>
|
|
|
|
|
|
<h3>Variable Operand</h3>
|
|
|
|
<p>The following diagram and table show the possible variable operands:</p>
|
|
|
|
<img alt="Variable Operand syntax" src="RBAFX546.gif">
|
|
|
|
<table border width="80%">
|
|
<!-- cols="15 15 70" -->
|
|
<tr>
|
|
<th align="left" valign="top">Constant</th>
|
|
<th align="left" valign="top">Range</th>
|
|
<th align="left" valign="top">Description</th>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top">name1</td>
|
|
<td align="left" valign="top">Any</td>
|
|
<td align="left" valign="top">Data object name to be used as a primary
|
|
operand.</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top">name2</td>
|
|
<td align="left" valign="top">Any</td>
|
|
<td align="left" valign="top">Pointer data object to be used as the basing
|
|
pointer.</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top">Index1</td>
|
|
<td align="left" valign="top">See description.</td>
|
|
<td align="left" valign="top">Subscript or substring start position. The range
|
|
for array subscripts is between the lower bound of the array and the upper
|
|
bound of the array. The range for substrings is between 1 and
|
|
16 776 191.</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top">Index2</td>
|
|
<td align="left" valign="top">1 to 32 767</td>
|
|
<td align="left" valign="top">Length of the substring.</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top">Index3</td>
|
|
<td align="left" valign="top">0 to 32 767</td>
|
|
<td align="left" valign="top">Length of the substring (zero allowed).</td>
|
|
</tr>
|
|
</table>
|
|
|
|
<br>
|
|
<br>
|
|
|
|
|
|
<h3>Relative Branch Target</h3>
|
|
|
|
<p>The following diagram and table show the possible relative branch
|
|
targets:</p>
|
|
|
|
<img alt="Relative Branch Target syntax" src="RBAFX547.gif">
|
|
|
|
<table border width="80%">
|
|
<!-- cols="15 15 70" -->
|
|
<tr>
|
|
<th align="left" valign="top">Constant</th>
|
|
<th align="left" valign="top">Range</th>
|
|
<th align="left" valign="top">Description</th>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top">integer1</td>
|
|
<td align="left" valign="top">1 to 4095</td>
|
|
<td align="left" valign="top">Branch target instruction number <em>
|
|
relative</em> to the current instruction. You must label the target (named or
|
|
null label).</td>
|
|
</tr>
|
|
</table>
|
|
|
|
<p><strong>Note:</strong> You cannot use blanks between either the '</p>
|
|
|
|
<pre>
|
|
=+
|
|
</pre>
|
|
|
|
<p>' symbol set and integer1 or the '</p>
|
|
|
|
<pre>
|
|
=-
|
|
</pre>
|
|
|
|
<p>' symbol set and integer1. However, a blank must precede the symbol
|
|
sets.</p>
|
|
|
|
<br>
|
|
<h3>Example</h3>
|
|
|
|
<p>The following instructions illustrate the use of relative branch
|
|
targets:</p>
|
|
|
|
<pre>
|
|
CPYNV X,0;
|
|
CMPBLA(B) A,'1'/EQ( =+2);
|
|
CPYNV X,1;
|
|
: CPYNV Y,X; /* Destination of relative branch */
|
|
</pre>
|
|
|
|
<p><strong>Note:</strong> A null label is placed in the destination instruction
|
|
of the relative branch.</p>
|
|
|
|
<br>
|
|
<h3>Target</h3>
|
|
|
|
<p>The following diagram and table show the possible targets:</p>
|
|
|
|
<img alt="Target syntax" src="RBAFX548.gif">
|
|
|
|
<table border width="80%">
|
|
<!-- cols="15 15 70" -->
|
|
<tr>
|
|
<th align="left" valign="top">Constant</th>
|
|
<th align="left" valign="top">Range</th>
|
|
<th align="left" valign="top">Description</th>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top">name1</td>
|
|
<td align="left" valign="top">See keyword table.</td>
|
|
<td align="left" valign="top">Keyword for branch or indicator forms. You can
|
|
use an N before keywords to negate the condition except for IGN and DFR. See
|
|
"Resultant Conditions", under each MI instruction for the valid values.</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top">name2</td>
|
|
<td align="left" valign="top">Any</td>
|
|
<td align="left" valign="top">Label name, instruction pointer name, or
|
|
instruction definition list name for the branch form. The name of character
|
|
variable is for the indicator form.</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top">Index1</td>
|
|
<td align="left" valign="top">1 to 255</td>
|
|
<td align="left" valign="top">Instruction definition list index. You can only
|
|
specify this value when name2 is the name of an instruction definition
|
|
list.</td>
|
|
</tr>
|
|
</table>
|
|
|
|
<p>The following table shows the branch and indicator keywords:</p>
|
|
|
|
<table border width="80%">
|
|
<!-- cols="10 90" -->
|
|
<tr>
|
|
<th align="left" valign="top">Keyword</th>
|
|
<th align="left" valign="top">Description</th>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top" colspan="2">Group 1</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top">HI MXD NOR POS TR ZC</td>
|
|
<td align="left" valign="top">High Mixed Normalized Positive Truncated record
|
|
Zero and carry</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top" colspan="2">Group 2</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top">CR DEN IGN LO NEG NTZNTC RO</td>
|
|
<td align="left" valign="top">Complete record Denormalized Exception ignored
|
|
Low Negative Not-zero and no carry Receiver overrun</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top" colspan="2">Group 3</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top">AUTH DFR DQ EQ INF SE SGN ZER ZNTC</td>
|
|
<td align="left" valign="top">Authorized Exception postponed Dequeued Equal
|
|
Infinity Source all used Signaled Zero Zero and no carry</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top" colspan="2">Group 4</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top">EC NAN NTZC UNEQ UNOR</td>
|
|
<td align="left" valign="top">Escape code encountered Not a number (NaN)
|
|
Not-zero and carry Unequal Unordered</td>
|
|
</tr>
|
|
</table>
|
|
|
|
<p>By adding N to the beginning of the appropriate keyword you can form a not
|
|
condition. For example, the code for "not equal" is NEQ.</p>
|
|
|
|
<p>All conditions coded on a particular instruction must be mutually exclusive.
|
|
All conditions within a group are equivalent, and therefore, only one may be
|
|
specified. For example, POS (positive) and HI (high) cannot be coded on the
|
|
same instruction.</p>
|
|
|
|
<p>The not form of a condition is satisfied by any condition from another
|
|
group. For example, NEQ (not equal) is satisfied by HI (high), LO (low), or
|
|
UNOR (unordered). Therefore, you cannot specify NEQ with any of the other
|
|
three. However, you can use NEQ and EQ (or any other keyword in group 3)
|
|
together because they are mutually exclusive.</p>
|
|
|
|
<br>
|
|
<h3>Index</h3>
|
|
|
|
<p>The following diagram and table show the possible indexes:</p>
|
|
|
|
<img alt="Index syntax" src="RBAFX549.gif">
|
|
|
|
<table border width="80%">
|
|
<!-- cols="15 15 70" -->
|
|
<tr>
|
|
<th align="left" valign="top">Constant</th>
|
|
<th align="left" valign="top">Range</th>
|
|
<th align="left" valign="top">Description</th>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top">name1</td>
|
|
<td align="left" valign="top">See description below.</td>
|
|
<td align="left" valign="top">Binary variable to use as the index</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top">integer1</td>
|
|
<td align="left" valign="top">See description below.</td>
|
|
<td align="left" valign="top">Integer value to use as the index</td>
|
|
</tr>
|
|
</table>
|
|
|
|
<p>An index is a numeric value that qualifies an array or substring reference.
|
|
The context in which the index is used determines the range. For more
|
|
information, refer to the preceding tables.</p>
|
|
|
|
<br>
|
|
|
|
|
|
<h3><a name="qprdirst">Directive Statements</a></h3>
|
|
|
|
<p>The directive statements are as follows:</p>
|
|
|
|
<ul>
|
|
<li>Title Directive Statement</li>
|
|
|
|
<li>Space Directive Statement</li>
|
|
|
|
<li>Eject Directive Statement</li>
|
|
|
|
<li>Break Directive Statement</li>
|
|
|
|
<li>Entry Directive Statement</li>
|
|
|
|
<li>Reset Directive Statement</li>
|
|
|
|
<li>Program End Directive Statement</li>
|
|
</ul>
|
|
|
|
<br>
|
|
|
|
|
|
<h3>Title Directive Statement</h3>
|
|
|
|
<p>The title directive statement causes a heading to appear on the listings.
|
|
Only one title directive statement may be specified in a program. The following
|
|
diagram and table show the title directive statement:</p>
|
|
|
|
<img alt="Title Directive Statement syntax" src="RBAFX580.gif">
|
|
|
|
<table border width="80%">
|
|
<!-- cols="15 15 70" -->
|
|
<tr>
|
|
<th align="left" valign="top">Constant</th>
|
|
<th align="left" valign="top">Range</th>
|
|
<th align="left" valign="top">Description</th>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top">string1</td>
|
|
<td align="left" valign="top">Any</td>
|
|
<td align="left" valign="top">Text of the title</td>
|
|
</tr>
|
|
</table>
|
|
|
|
<br>
|
|
<br>
|
|
|
|
|
|
<h3>Space Directive Statement</h3>
|
|
|
|
<p>The space directive statement causes a blank line to appear in the listing.
|
|
The following diagram and table show the space directive statement:</p>
|
|
|
|
<img alt="Space Directive Statement syntax" src="RBAFX581.gif">
|
|
|
|
<table border width="80%">
|
|
<!-- cols="15 15 70" -->
|
|
<tr>
|
|
<th align="left" valign="top">Constant</th>
|
|
<th align="left" valign="top">Range</th>
|
|
<th align="left" valign="top">Description</th>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top">integer1</td>
|
|
<td align="left" valign="top">Any</td>
|
|
<td align="left" valign="top">Number of lines to skip</td>
|
|
</tr>
|
|
</table>
|
|
|
|
<br>
|
|
<br>
|
|
|
|
|
|
<h3>Eject Directive Statement</h3>
|
|
|
|
<p>The eject directive statement causes the next line to appear on a new page.
|
|
The following diagram shows the eject directive statement:</p>
|
|
|
|
<img alt="Eject Directive Statement syntax" src="RBAFX582.gif"><br>
|
|
|
|
|
|
<h3>Break Directive Statement</h3>
|
|
|
|
<p>The break directive statement allows symbolic breakpoints to be defined. The
|
|
following diagram and table show the break directive statement:</p>
|
|
|
|
<img alt="Break Directive Statement syntax" src="RBAFX583.gif">
|
|
|
|
<table border width="80%">
|
|
<!-- cols="15 15 70" -->
|
|
<tr>
|
|
<th align="left" valign="top">Constant</th>
|
|
<th align="left" valign="top">Range</th>
|
|
<th align="left" valign="top">Description</th>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top">string1</td>
|
|
<td align="left" valign="top">Any</td>
|
|
<td align="left" valign="top">Breakpoint name</td>
|
|
</tr>
|
|
</table>
|
|
|
|
<br>
|
|
<br>
|
|
|
|
|
|
<h3>Entry Directive Statement</h3>
|
|
|
|
<p>The following diagram and tables show the entry directive statement:</p>
|
|
|
|
<img alt="Entry Directive Statement syntax" src="RBAFX584.gif">
|
|
|
|
<table border width="80%">
|
|
<!-- cols="10 90" -->
|
|
<tr>
|
|
<th align="left" valign="top">Keyword</th>
|
|
<th align="left" valign="top">Description</th>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top">INT</td>
|
|
<td align="left" valign="top">Internal entry point.</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top">EXT</td>
|
|
<td align="left" valign="top">External entry point.</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top">BRK</td>
|
|
<td align="left" valign="top">Symbolic breakpoint is associated with the entry
|
|
point.</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top">*</td>
|
|
<td align="left" valign="top">Entry point defined has no name or is associated
|
|
with the next MI instruction.</td>
|
|
</tr>
|
|
</table>
|
|
|
|
<br>
|
|
<br>
|
|
<table border width="80%">
|
|
<!-- cols="15 15 70" -->
|
|
<tr>
|
|
<th align="left" valign="top">Constant</th>
|
|
<th align="left" valign="top">Range</th>
|
|
<th align="left" valign="top">Description</th>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top">name1</td>
|
|
<td align="left" valign="top">Any</td>
|
|
<td align="left" valign="top">Entry point name being defined</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top">name2</td>
|
|
<td align="left" valign="top">Any</td>
|
|
<td align="left" valign="top">Parameter list name for this entry point</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td align="left" valign="top">string1</td>
|
|
<td align="left" valign="top">1-10 bytes</td>
|
|
<td align="left" valign="top">Breakpoint name</td>
|
|
</tr>
|
|
</table>
|
|
|
|
<p>The default scope is internal (INT).</p>
|
|
|
|
<p>The entry statement defines entry point program objects. The next
|
|
instruction number is associated with this entry point. The entry statement is
|
|
to be the definition point for this object, so the ODT number assigned to this
|
|
object is the next available ODT number.</p>
|
|
|
|
<br>
|
|
|
|
|
|
<h3>Reset Directive Statement</h3>
|
|
|
|
<p>The following diagram shows the reset directive statement:</p>
|
|
|
|
<img alt="Reset Directive Statement syntax" src="RBAFX585.gif">
|
|
|
|
<p>The specified name is a previously declared space object. The reset
|
|
statement causes subsequent data object declarations containing the DIR
|
|
attribute to use the specified space object. The system maintains next byte
|
|
counts for each space object; these counts are not affected by the reset
|
|
statement. For more information, see <a href="#HDR8SPCOBJ">Using Space
|
|
Objects</a>.</p>
|
|
|
|
<br>
|
|
<h3>Program End Directive Statement</h3>
|
|
|
|
<p>The following diagram shows the program end directive statement:</p>
|
|
|
|
<img alt="Program End Directive Statement syntax" src="RBAFX586.gif">
|
|
|
|
<p>This must be the last statement in the program. To ensure comments and
|
|
strings end before processing the PEND statement, use the following
|
|
statement:</p>
|
|
|
|
<pre>
|
|
/*'/*'/*"/*"*/; PEND;;;
|
|
</pre>
|
|
|
|
<br>
|
|
<h2>Coding Techniques</h2>
|
|
|
|
<p>This section contains additional information for coding the intermediate
|
|
representation of a program.</p>
|
|
|
|
<br>
|
|
<h3>Using Declare Statements</h3>
|
|
|
|
<p>Use the following guidelines when using declare statements:</p>
|
|
|
|
<ul>
|
|
<li>A declare statement for data objects defined on another data object must
|
|
occur after the declare statement for the data object on which it is defined.
|
|
|
|
<p><strong>Example</strong>: The following sets of declare statements are
|
|
valid:</p>
|
|
|
|
<pre>
|
|
DCL DD A CHAR(5);
|
|
DCL DD B CHAR(1) DEF(A);
|
|
|
|
|
|
DCL DD A CHAR(5);
|
|
DCL DD X BIN(2);
|
|
DCL PTR P1 AUTO;
|
|
DCL DD B CHAR(1) DEF(A);
|
|
</pre>
|
|
|
|
<p><strong>Example</strong>: The following declare statements are not valid
|
|
because B is defined on A but is declared before A:</p>
|
|
|
|
<pre>
|
|
DCL DD B CHAR(1) DEF(A);
|
|
DCL DD A CHAR(5);
|
|
</pre>
|
|
|
|
<p>This restriction also applies when there is a chain of dependencies.</p>
|
|
|
|
<p><strong>Example</strong>: In the figure below, B is defined on A and C is
|
|
defined on B:</p>
|
|
|
|
<pre>
|
|
DCL DD A CHAR(5);
|
|
DCL DD B CHAR(3) DEF(A);
|
|
DCL DD C CHAR(1) DEF(B);
|
|
</pre>
|
|
|
|
<p>If any object in a chain of definitions, as shown in the previous examples,
|
|
has an initial value specified, then the following restrictions apply:</p>
|
|
|
|
<ul>
|
|
<li>No object in that chain can have the BAS (based) addressability
|
|
attribute.</li>
|
|
|
|
<li>The highest level data object in the chain must be either static or
|
|
automatic.</li>
|
|
|
|
<li>When you initialize the same area twice, the system uses the last
|
|
value.</li>
|
|
</ul>
|
|
|
|
<p><strong>Example</strong>: The following declare statements are valid
|
|
because:</p>
|
|
|
|
<ul>
|
|
<li>The BAS addressability attribute is not used.</li>
|
|
|
|
<li>Data object A (implicitly) has the static addressability attribute.
|
|
|
|
<pre>
|
|
DCL DD A CHAR(5);
|
|
DCL DD B CHAR(3) DEF(A) INIT(C'YES');
|
|
DCL DD C CHAR(1) DEF(B);
|
|
</pre>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
|
|
<li>All declare statements for the objects that make up the elements of an
|
|
operand list must precede the declare statement for the operand list.</li>
|
|
|
|
<li>When a declare statement for an exception description refers to a system
|
|
pointer, the declare statement for the system pointer must precede the DCL for
|
|
the exception description.</li>
|
|
</ul>
|
|
|
|
<br>
|
|
|
|
|
|
<h3><a name="HDR8SPCOBJ">Using Space Objects</a></h3>
|
|
|
|
<p>Space objects, when used in conjunction with program objects declared with
|
|
the DIR attribute, provide a convenient way of declaring structures.</p>
|
|
|
|
<p><strong>Note:</strong> Space objects, as used here, do not refer to i5/OS
|
|
space objects.</p>
|
|
|
|
<p>When you declare a space object, a scalar data object with a scalar type of
|
|
CHAR(32767) is created. This object contains the structure to be defined.
|
|
Associated with this object is a "next byte" count. This value is initially 1
|
|
and represents the position where the next structure element will be
|
|
placed.</p>
|
|
|
|
<br>
|
|
|
|
|
|
<h3>Example: Simple Space Objects</h3>
|
|
|
|
<p>After you declare a space object, you can declare one or more scalar or
|
|
pointer data objects with an addressability attribute of DIR. As a result, the
|
|
system automatically declares each object with the DEF and POS attributes. The
|
|
name associated with the DEF attribute is the most recently declared space
|
|
object. The value associated with the POS attribute is the space object's next
|
|
byte count. After you declare the object, the system sets the next byte count
|
|
associated with the space object to the next available position within the
|
|
structure.</p>
|
|
|
|
<p>The group of declare statements on the left is equivalent to the group on
|
|
the right:</p>
|
|
|
|
<pre>
|
|
DCL SPC X BAS(PTR); DCL DD X CHAR(32767) BAS(PTR);
|
|
DCL DD A CHAR(2) DIR; DCL DD A CHAR(2) DEF(X) POS(1);
|
|
DCL DD B ZND(5,2) DIR; DCL DD B ZND(5,2) DEF(X) POS(3);
|
|
DCL DD C FLT(4) DIR; DCL DD C FLT(4) DEF(X) POS(8);
|
|
</pre>
|
|
|
|
<br>
|
|
|
|
|
|
<h3>Example: Explicit Position Values</h3>
|
|
|
|
<p>Data objects declared with DIR may also have an explicit POS value. The
|
|
object is defined on the appropriate space object and uses the specified POS
|
|
value. However, the next byte count is changed only if the POS value causes the
|
|
count to increase.</p>
|
|
|
|
<p>The group of declare statements on the left is equivalent to the group on
|
|
the right:</p>
|
|
|
|
<pre>
|
|
DCL SPC X BAS(PTR); DCL DD X CHAR(32767) BAS(PTR);
|
|
DCL DD A CHAR(4) DIR; DCL DD A CHAR(4) DEF(X) POS(1);
|
|
DCL DD B CHAR(4) POS(20) DIR; DCL DD B CHAR(4) DEF(X) POS(20);
|
|
DCL DD C CHAR(4) DIR; DCL DD C CHAR(4) DEF(X) POS(24);
|
|
DCL DD D CHAR(4) POS(10) DIR; DCL DD D CHAR(4) DEF(X) POS(10);
|
|
DCL DD E CHAR(4) DIR; DCL DD E CHAR(4) DEF(X) POS(28);
|
|
</pre>
|
|
|
|
<br>
|
|
|
|
|
|
<h3>Example: Explicit Boundary Alignment</h3>
|
|
|
|
<p>When you declare objects with an explicit boundary other than 1, the object
|
|
is positioned on the next available byte with that boundary. The position of
|
|
any data object with the direct attribute is the next available byte in the
|
|
space if no boundary or position is specified. The position of any pointer
|
|
object with the direct attribute is the next available byte in the space if no
|
|
position is specified. Space objects are assumed to begin on a 16-byte
|
|
boundary. You must ensure this condition exists at run-time.</p>
|
|
|
|
<p>The group of declare statements on the left is equivalent to the group on
|
|
the right:</p>
|
|
|
|
<pre>
|
|
DCL SPC X BAS(PTR); DCL DD X CHAR(32767) BAS(PTR);
|
|
DCL DD A CHAR(1) DIR; DCL DD A CHAR(1) DEF(X) POS(1);
|
|
DCL DD B FLT(4) DIR; BDRY(4); DCL DD B FLT(4) DEF(X) POS(5);
|
|
DCL PTR C DIR; POS(17); DCL PTR C DEF(X) POS(17);
|
|
</pre>
|
|
|
|
<br>
|
|
|
|
|
|
<h3>Example: Reset Directive Statement</h3>
|
|
|
|
<p>You can use the reset directive statement to change the name of the space
|
|
object to be used by subsequent declare statements.</p>
|
|
|
|
<p>The group of declare statements on the left is equivalent to the group on
|
|
the right:</p>
|
|
|
|
<pre>
|
|
DCL SPCPTR PTR1; DCL SPCPTR PTR1;
|
|
DCL SPCPTR PTR2; DCL SPCPTR PTR2;
|
|
|
|
DCL SPC X BAS(PTR1); DCL DD X CHAR(32767) BAS(PTR1);
|
|
DCL DD A CHAR(2) DIR; DCL DD A CHAR(2) DEF(X) POS(1);
|
|
DCL DD B ZND(5,2) DIR; DCL DD B ZND(5,2) DEF(X) POS(3);
|
|
|
|
DCL SPC Y BAS(PTR2); DCL DD Y CHAR(32767) BAS(PTR2);
|
|
DCL DD C CHAR(5) DIR; DCL DD C CHAR(5) DEF(Y) POS(1);
|
|
DCL DD D CHAR(7) DIR; DCL DD D CHAR(7) DEF(Y) POS(6);
|
|
|
|
RESET X;
|
|
DCL DD E CHAR(3) DIR; DCL DD E CHAR(3) DEF(X) POS(8);
|
|
</pre>
|
|
|
|
<br>
|
|
|
|
|
|
<h3>Constants</h3>
|
|
|
|
<p>This section describes the syntax of constant values.</p>
|
|
|
|
<br>
|
|
<h3>Integer</h3>
|
|
|
|
<p>Integers define signed and unsigned binary scalar data values. The two forms
|
|
of integers are decimal and hexadecimal. The decimal form is a sequence of
|
|
digits optionally preceded by a sign. The hexadecimal form is a string of
|
|
hexadecimal digits delimited with apostrophes and preceded by an H. Neither
|
|
form may exceed the 4-byte limit on binary numbers. When the value of the
|
|
integer is between -4095 and +8191, the QPRCRTPG API converts the integer to an
|
|
immediate operand where it can.</p>
|
|
|
|
<br>
|
|
<h3>Example</h3>
|
|
|
|
<pre>
|
|
+123
|
|
-1
|
|
54788
|
|
|
|
H'0F0D'
|
|
H'0123'
|
|
H'5E2D1AB4'
|
|
</pre>
|
|
|
|
<br>
|
|
|
|
|
|
<h3>String</h3>
|
|
|
|
<p>Strings define scalar character string data values. The three types of
|
|
string constants are character form, hexadecimal form, and Hollerith form.</p>
|
|
|
|
<p>The character form is a delimited string optionally preceded by a C.
|
|
Apostrophes or double quotation marks may be used for this form. The
|
|
hexadecimal form is a delimited string of hexadecimal digits preceded by an X.
|
|
The Hollerith form is a string of bytes preceded by the count of the number of
|
|
bytes in the string. The syntax is:</p>
|
|
|
|
<pre>
|
|
< count | string >
|
|
</pre>
|
|
|
|
<p>The count in the preceding syntax is the number of characters in the string.
|
|
The QPRCRTPG API ensures that the string contains the right number of
|
|
characters by checking for the</p>
|
|
|
|
<pre>
|
|
>
|
|
</pre>
|
|
|
|
<p>character. No blanks are allowed between</p>
|
|
|
|
<pre>
|
|
<
|
|
</pre>
|
|
|
|
<p>and</p>
|
|
|
|
<pre>
|
|
>
|
|
</pre>
|
|
|
|
<p>unless they are part of the string. The QPRCRTPG API simply flags the
|
|
constant as in error if the right corner bracket does not appear in the correct
|
|
position.</p>
|
|
|
|
<br>
|
|
<h3>Example</h3>
|
|
|
|
<p>The following groups of strings are equivalent:</p>
|
|
|
|
<pre>
|
|
'ABCDE'
|
|
C'ABCDE'
|
|
X'C1C2C3C4C5'
|
|
<5|ABCDE>
|
|
|
|
'TE''ST'
|
|
"TE'ST"
|
|
X'E3C57DE2E3'
|
|
<5|TE'ST>
|
|
|
|
'/*'
|
|
X'615C'
|
|
<2|/*>
|
|
</pre>
|
|
|
|
<br>
|
|
|
|
|
|
<h3>Packed</h3>
|
|
|
|
<p>Packed constants define packed decimal scalar data values. Packed constants
|
|
are a string of decimal digits delimited with apostrophes. They can have an
|
|
embedded decimal point and can be preceded by a sign. P must precede the
|
|
delimited string. Packed constants have a maximum of 31 significant digits.</p>
|
|
|
|
<p><strong>Note:</strong> You must specify at least one numeric digit.</p>
|
|
|
|
<br>
|
|
<h3>Example</h3>
|
|
|
|
<br>
|
|
<pre>
|
|
P'+123.456'
|
|
P'1'
|
|
P'-1'
|
|
P'-123.345345345345'
|
|
P'+.00000000000001'
|
|
</pre>
|
|
|
|
<br>
|
|
|
|
|
|
<h3>Zoned</h3>
|
|
|
|
<p>Zoned constants define zoned decimal scalar data values. The external
|
|
representation of zoned constants is the same as that for packed constants
|
|
except that the preceding character is a Z.</p>
|
|
|
|
<p><strong>Note:</strong> You must specify at least one numeric digit.</p>
|
|
|
|
<br>
|
|
<h3>Example</h3>
|
|
|
|
<pre>
|
|
Z'+123.456'
|
|
Z'1'
|
|
Z'-1'
|
|
Z'-123.345345345345'
|
|
Z'+.00000000000001'
|
|
</pre>
|
|
|
|
<br>
|
|
|
|
|
|
<h3>Floating-Point Constants</h3>
|
|
|
|
<p>Floating-point constants define floating-point scalar data values. You must
|
|
specify whether the constant is a 4-byte (short floating-point) or an 8-byte
|
|
(long floating-point) value.</p>
|
|
|
|
<p>There are two ways to represent floating-point values. First, you can
|
|
specify floating-point constants as a delimited string of decimal digits
|
|
possibly with an embedded decimal point and optionally preceded by a sign. An F
|
|
for short floating-point values or an E for long floating-point values must
|
|
precede the delimited string. An E in the string determines the start of the
|
|
base 10 exponent. You specify the exponent as signed.</p>
|
|
|
|
<p>Second, you can specify floating-point constants as a string of hexadecimal
|
|
digits. The delimited string must be preceded by an XF for short floating-point
|
|
values or an XE for long floating-point values.</p>
|
|
|
|
<p><strong>Note:</strong> You must specify at least one numeric digit.</p>
|
|
|
|
<br>
|
|
|
|
|
|
<h3>Example</h3>
|
|
|
|
<br>
|
|
<pre>
|
|
<strong>Short Floating-Point Long Floating-Point
|
|
Values Values
|
|
</strong>
|
|
|
|
F'0' E'0'
|
|
F'+12' E'+12'
|
|
F'-12.21' E'-12.21'
|
|
F'12.34E2' E'12.34E2'
|
|
F'+3.2345678E-02' E'+3.2345678E-02'
|
|
|
|
XF'449A4000' XE'46CE6F37FFBE8722'
|
|
XF'40490FD0' XE'400921F9F01B866E'
|
|
</pre>
|
|
|
|
<p>Several special values are allowed:</p>
|
|
|
|
<pre>
|
|
<strong>Short Floating-Point Long Floating-Point
|
|
Values Values
|
|
</strong>
|
|
|
|
F'MNAN' E'MNAN' Masked Not A Number
|
|
F'UNAN' E'UNAN' Unmasked Not A Number
|
|
F'+INF' E'+INF' Plus Infinity
|
|
F'-INF' E'-INF' Minus Infinity
|
|
</pre>
|
|
|
|
<br>
|
|
<p><strong>Note:</strong> You must use floating-point constants to initialize
|
|
floating-point data objects.</p>
|
|
|
|
<br>
|
|
|
|
|
|
<h3>Name</h3>
|
|
|
|
<p>Names specified in the intermediate representation of a program are a
|
|
sequence of characters of up to 48 characters in length. You cannot use the
|
|
following characters as the first character of the name:</p>
|
|
|
|
<pre>
|
|
blank /,;():<+'%-0123456789
|
|
</pre>
|
|
|
|
<p>You cannot use the following characters in subsequent characters of the
|
|
name:</p>
|
|
|
|
<pre>
|
|
blank /,;():<+'%
|
|
</pre>
|
|
|
|
<br>
|
|
|
|
|
|
<h3>Example</h3>
|
|
|
|
<br>
|
|
<pre>
|
|
.NAME
|
|
NAME
|
|
THIS_IS_A_NAME
|
|
THIS_IS_A_NAME_2
|
|
&NAME
|
|
!NAME
|
|
?NAME
|
|
.0001
|
|
</pre>
|
|
|
|
<p><strong>Note:</strong> Symbols that begin with a period (.) are not inserted
|
|
into the program's symbol table and may not be referred to by the i5/OS debug
|
|
function.</p>
|
|
|
|
<br>
|
|
<h3>Comments</h3>
|
|
|
|
<p>Comments, in the intermediate representation of a program, may appear
|
|
anywhere in the text. Comments are treated as blanks so they are significant in
|
|
finding tokens. Comments are a string of characters starting with</p>
|
|
|
|
<pre>
|
|
/*
|
|
</pre>
|
|
|
|
<p>and ending with</p>
|
|
|
|
<pre>
|
|
*/
|
|
</pre>
|
|
|
|
<p>. If a comment occurs immediately following a semicolon, it prints as a
|
|
separate line (or a multiple line as required) on the listing. If a comment is
|
|
embedded in a statement, then it appears as a part of that statement, such as a
|
|
remark.<br>
|
|
<br>
|
|
<br>
|
|
</p>
|
|
|
|
<h3>Example</h3>
|
|
|
|
<p>The following statements are equivalent:</p>
|
|
|
|
<pre>
|
|
CPYBLA A,B;
|
|
CPYBLA A, /* C-> */ B ;
|
|
CPYBLA A,B; /* B is based on C */
|
|
</pre>
|
|
|
|
<br>
|
|
|
|
|
|
<h3>Blanks</h3>
|
|
|
|
<p>You can use strings of blanks of any length in the intermediate
|
|
representation of a program. Blanks act as delimiters in finding tokens and in
|
|
some places are necessary as in separating the opcode and operand in an
|
|
instruction statement.</p>
|
|
|
|
<br>
|
|
|
|
|
|
<h3>Example</h3>
|
|
|
|
<p>The following statements are equivalent:</p>
|
|
|
|
<pre>
|
|
ADDN A,B,C;
|
|
ADDN A , B , C ;
|
|
</pre>
|
|
|
|
<br>
|
|
<hr>
|
|
API introduced: V1R3
|
|
|
|
<hr>
|
|
<center>
|
|
<table cellpadding="2" cellspacing="2">
|
|
<tr align="center">
|
|
<td valign="middle" align="center"><a href="#Top_Of_Page">Top</a> | <a href=
|
|
"pgm1.htm">Program and CL Command APIs</a> | <a href="aplist.htm">APIs by
|
|
category</a></td>
|
|
</tr>
|
|
</table>
|
|
</center>
|
|
</body>
|
|
</html>
|
|
|