ibm-information-center/dist/eclipse/plugins/i5OS.ic.apis_5.4.0.1/qlirnmo.htm

783 lines
24 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>Rename Object (QLIRNMO) 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. -->
<!-- QLIRNMO SCRIPT A converted by B2H R4.1 (346) (CMS) by PMHALL at -->
<!-- RCHVMW2 on 15 Oct 1998 at 11:08:10 -->
<!-- Change History: -->
<!-- YYMMDD USERID Change description -->
<!--File Edited April 2001 -->
<!-- Change history - the revision tagging used for changes relating to DCR 98416 is v5r2delta LAW -->
<!-- Updates from System API Programming book phase-out, July 2002 by JET -->
<!-- Change history - the revision tagging used for changes relating -->
<!-- to PTR XPF 9A83640 is v5r4delta C.E. Marolt 10/18/2004 -->
<!--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>Rename Object (QLIRNMO) API</h2>
<div class="box" style="width: 80%;">
<br>
&nbsp;&nbsp;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="60%">From qualified object name</td>
<td align="left" valign="top" width="15%">Input</td>
<td align="left" valign="top" width="15%">Char(20)</td>
</tr>
<tr>
<td align="center" valign="top">2</td>
<td align="left" valign="top">Object type</td>
<td align="left" valign="top">Input</td>
<td align="left" valign="top">Char(10)</td>
</tr>
<tr>
<td align="center" valign="top">3</td>
<td align="left" valign="top"><img src="delta.gif" alt="Start of change">Target
<img src="deltaend.gif" alt="End of change">qualified object 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">Replace object</td>
<td align="left" valign="top">Input</td>
<td align="left" valign="top">Char(1)</td>
</tr>
<tr>
<td align="center" valign="top">5</td>
<td align="left" valign="top">Error code</td>
<td align="left" valign="top">I/O</td>
<td align="left" valign="top">Char(*)</td>
</tr>
</table>
<br>
&nbsp;&nbsp;Optional Parameter Group 1:<br>
<!-- iddvc RMBR -->
<br>
<table width="100%">
<tr>
<td align="center" valign="top" width="10%">6</td>
<td align="left" valign="top" width="60%">From library auxiliary storage pool
(ASP) device name</td>
<td align="left" valign="top" width="15%">Input</td>
<td align="left" valign="top" width="15%">Char(10)</td>
</tr>
<tr>
<td align="center" valign="top">7</td>
<td align="left" valign="top">
<img src="delta.gif" alt="Start of change">Target <img
src="deltaend.gif" alt="End of change">library auxiliary storage pool
(ASP) device name</td>
<td align="left" valign="top">Input</td>
<td align="left" valign="top">Char(10)</td>
</tr>
</table>
<br>
&nbsp;&nbsp;Default Public Authority: *USE<br>
<!-- iddvc RMBR -->
<br>
&nbsp;&nbsp;Threadsafe: Conditional; see <a href="#usagenotes">Usage Notes</a>.<br>
<!-- iddvc RMBR -->
<br>
</div>
<p>The Rename Object (QLIRNMO) API renames an existing object to a new object
name or moves the object to a different library or both, and optionally
replaces the existing target object. This API combines the functions of the
<img src="delta.gif" alt="Start of change"><a href="../cl/rnmobj.htm">
Rename Object</a><img src="deltaend.gif" alt="End of change"> (RNMOBJ)
and the <img src="delta.gif" alt="Start of change"><a href="../cl/movobj.htm">
Move Object</a><img src="deltaend.gif" alt="End of change"> (MOVOBJ)
commands. The API allows you to rename and move in one step, and optionally
replace the existing <img src="delta.gif" alt="Start of change">object
in the target library. <img src="deltaend.gif" alt="End of change"></p>
<p>When the replace object parameter requests to replace an existing object and
the target object already exists, the following occur:</p>
<ul>
<li>The *PUBLIC and private authorities from the target object replace the
authorities on the renamed object.<br><br></li>
<li>The owner of the object is the owner of the from object.<br><br></li>
<li>If the object is not a *PGM object, the target object is deleted.<br><br></li>
<li>For a *PGM object, the object is renamed and moved to library QRPLOBJ
(or the QRPLxxxxx library if the target object is in a library in primary or
secondary auxiliary storage pool 'xxxxx'). <img src="delta.gif"
alt="Start of change">If an error occurs with the QRPLOBJ library, the object
is moved into the QTEMP library. If an error occurs with the QRPLxxxxx or
QTEMP library, the object is deleted. <img src="deltaend.gif"
alt="End of change">The renamed program will have the same user profile
(USRPRF) value as the target program. If the target
program has the adopted authority USRPRF(*OWNER) attribute, the owner of the
from program must be the same as the owner of the target program. An error message
is issued if the owners do not match. For more information on adopted
authority, see the <a href="../books/sc415302.pdf" target="_blank">iSeries
Security Reference</a><img src="wbpdf.gif" alt="Link to PDF"> book. The use
adopted authority (USEADPAUT) value from the target program is copied to the from
program as long as the user who performs the rename operation can create and
update programs with the USEADPAUT(*YES) attribute. The QUSEADPAUT system value
determines whether or not users can create and update programs to use adopted
authority. If the program being replaced has USEADPAUT(*YES) and the user
cannot create and update programs to use adopted authority, the USEADPAUT value
of the from program remains the same.<br><br></li>
<li>For a *CRQD object, the from change request description will have the same
user profile (USRPRF) value as the target change request description. If the target
change request description has a user profile value of USRPRF(*OWNER), the
owner of the from object must be the same as the target object. An error message is
issued if the owners do not match.</li>
</ul>
<br>
<h3>Restrictions</h3>
<p>All restrictions that apply to the <img src="delta.gif" alt="Start of change"><a href="../cl/movobj.htm">Move Object</a><img src="deltaend.gif" alt="End of change">
(MOVOBJ) and <img src="delta.gif" alt="Start of change"><a href="../cl/rnmobj.htm">Rename
Object</a><img src="deltaend.gif" alt="End of change"> (RNMOBJ) commands also apply
to the QLIRNMO API.</p>
<br>
<h3>Authorities and Locks</h3>
<dl>
<dt><em>Auxiliary Storage Pool
(ASP) Device Authority</em></dt>
<dd>*USE when a specific ASP device name is specified for optional parameter
group 1.<br><br></dd>
<dt><em>Library Authority</em></dt>
<dd>*CHANGE
<p><strong>Note:</strong> If you are renaming an object that can only exist in
library QSYS, the library authority is not checked.</p>
</dd>
<dt><em>Object Authority</em></dt>
<dd>*OBJMGT
<p><strong>Notes:</strong></p>
<ol>
<li>Object types of *FILE, *JRN, *JRNRCV, and *MSGQ need *OBJOPR and *OBJMGT
authorities.</li>
<li>An object type of *AUTL needs *AUTLMGT authority.</li>
</ol>
<br>
</dd>
<dt><em>Library Lock</em></dt>
<dd>*SHRUPD<br><br></dd>
<dt><em>Object Lock</em></dt>
<dd>*EXCL</dd>
</dl>
<p>If you replace an object, you must be the owner of the from object or have
*ALLOBJ special authority. *ALLOBJ authority is needed to replace the authority
on the from object.</p>
<p>When the request is to replace an existing object and the target object already
exists, the following authority considerations apply:</p>
<ul>
<li>For *PGM <img src="delta.gif" alt="Start of change">and *CRQD <img
src="deltaend.gif" alt="End of change">objects, the user must have
*OBJEXIST, *OBJMGT, and *READ authorities to the existing target object.</li>
<li><img src="delta.gif" alt="Start of change">For *FILE objects, the user
must have *OBJOPR, *OBJMGT, and *OBJEXIST authorities to the existing target
object. <img src="deltaend.gif" alt="End of change"></li>
<li><img src="delta.gif" alt="Start of change">For *AUTL objects, the user must
be the owner and have *AUTLMGT authority to the existing target
object. <img src="deltaend.gif" alt="End of change"></li>
<li> For *LIB and *SBSD objects, the user must have *OBJEXIST,
<img src="delta.gif" alt="Start of change">*OBJMGT, <img
src="deltaend.gif" alt="End of change">and *USE
authorities to the existing target object.</li>
<li>For other object types, the user must have *OBJEXIST authority to the existing
target object in addition to the other authorities listed <img
src="delta.gif" alt="Start of change">under "Object Authority". <img
src="deltaend.gif" alt="End of change"></li>
</ul>
<br>
<h3>Required Parameter Group</h3>
<dl>
<dt><strong>From qualified object name</strong></dt>
<dd>INPUT; CHAR(20)
<p>The object being renamed and the library in which it is located. The first
10 characters contain the object name, and the second 10 characters contain the
library name.</p>
<p>You can use these special values for the library name:</p>
<table cellpadding="5">
<!-- cols="10 90" -->
<tr>
<td align="left" valign="top"><em>*CURLIB</em></td>
<td align="left" valign="top">The thread's current library</td>
</tr>
<tr>
<td align="left" valign="top"><em>*LIBL</em></td>
<td align="left" valign="top">The thread's library list</td></tr>
</table>
<br>
</dd>
<dt><strong>Object type</strong></dt>
<dd>INPUT; CHAR(10)
<p>The type of object being renamed. If the from object and the target object
belong to the same library, only a rename operation is done. The object type
must be supported on the RNMOBJ command. If the from object and the target object
belong to different libraries, a move operation is done. The object type must
be supported on the MOVOBJ command. If both a rename and a move operation are
done, the object type must be supported on both the RNMOBJ and MOVOBJ commands.
An asterisk (*) must precede the object type. For a list of the object types
that cannot be moved or renamed, see the <img src="delta.gif" alt="Start of change">
<a href="../rbam6/renob.htm">Rename objects</a> and
<a href="../rbam6/moola.htm">Move objects from one library to another</a>
<img src="deltaend.gif" alt="End of change"> topics.</p>
</dd>
<dt><strong><img src="delta.gif" alt="Start of change">Target <img src="deltaend.gif" alt="End of change">qualified object name</strong></dt>
<dd>INPUT; CHAR(20)
<p>The new name of the object and the new library in which it will be located.
The object name can be the same name as the original object or a new name. The
library name can be the same name as the original library or a new name. If the
object name is the same as the original object, the library name must not be
the same as the original library unless the target and from library auxiliary
storage pool (ASP) device names are not the same. The
first 10 characters contain the object name, and the second 10 characters
contain the library name.</p>
</dd>
<dt><strong>Replace object</strong></dt>
<dd>INPUT; CHAR(1)
<p>Whether to replace an existing object with the same name as the target object
and library name parameter in the auxiliary storage pool named in the target library
auxiliary storage pool (ASP) device name parameter. The following
values can be specified:</p>
<table cellpadding="5">
<!-- cols="5 95" -->
<tr>
<td align="left" valign="top"><em>0</em></td>
<td align="left" valign="top">Do not replace the existing object in the target
library.
If 0 is specified and the target object already exists, an error message is returned
to the application.</td>
</tr>
<tr>
<td align="left" valign="top"><em>1</em></td>
<td align="left" valign="top">Replace the existing object in the target library.</td>
</tr>
<tr>
<td align="left" valign="top"><em>2</em></td>
<td align="left" valign="top"><img src="delta.gif" alt="Start of change">Replace
the existing object in the target library. For an existing *PGM object, send
an informational message which identifies the new name of the object and the target
library where it was moved. If the existing *PGM object was moved to the QRPLOBJ
library (or the QRPLxxxxx library if the target object is in a library in a primary
or secondary auxiliary storage pool (ASP) where 'xxxxx' is the number of the primary
ASP of the ASP group), informational message CPI2121 is sent. If the existing *PGM
object was moved to the QTEMP library, informational message CPI2118 is sent. If the
existing *PGM object was deleted because it could not be moved into the replaced
object library or QTEMP, no message is sent. <img src="deltaend.gif"
alt="End of change"></td>
</tr>
</table>
<br>
</dd>
<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>.</p>
</dd>
</dl>
<br>
<h3>Optional Parameter Group
1</h3>
<dl>
<dt><strong>From library auxiliary storage pool (ASP) device name</strong></dt>
<dd>INPUT; CHAR(10)
<p>The name of the auxiliary storage pool (ASP) device from which storage is
allocated for the library containing the object to be renamed or moved. For all
operations other than a library rename, the ASP device must have status of
'Available'. For a library rename operation, the ASP device must have a status
of 'Active' or 'Available' and the target library auxiliary storage pool (ASP)
device and the from library auxiliary storage pool (ASP) device must be the same
device. If this parameter is omitted in cases where it is valid for this
parameter to have a value other than an asterisk (*), the thread's library name
space will be used.</p>
<p>This parameter must be an asterisk (*) if specified when *CURLIB or *LIBL is
specified as the library name in the from qualified object name parameter. If a
library to be renamed is in an auxiliary storage pool (ASP) device that is not
currently part of the thread's library name space, specify <em>
current-library-name</em> in the first 10 characters and QSYS in the second 10
characters of the from qualified object name and the <em>
auxiliary-storage-pool-device-name</em> in the from library auxiliary storage
pool (ASP) device name.</p>
<p>One of the following special values may be specified:</p>
<table cellpadding="5">
<!-- cols="15 85" -->
<tr>
<td align="left" valign="top"><em>*</em></td>
<td align="left" valign="top">The ASPs in the thread's library name space.</td>
</tr>
<tr>
<td align="left" valign="top"><em>*CURASPGRP</em></td>
<td align="left" valign="top">The ASPs in the thread's ASP group.</td>
</tr>
<tr>
<td align="left" valign="top"><em>*SYSBAS</em></td>
<td align="left" valign="top">The system ASP (1) and defined basic user ASPs
(2-32).</td>
</tr>
</table>
<br>
</dd>
<dt><strong><img src="delta.gif" alt="Start of change">Target <img
src="deltaend.gif" alt="End of change">library auxiliary
storage pool (ASP) device name</strong></dt>
<dd>INPUT; CHAR(10)
<p>The name of the auxiliary storage pool (ASP) device from which storage is
allocated for the library to contain the object after the rename or move. For
all operations other than a library rename, the ASP device must have status of
'Available'. For a library rename operation, the ASP device must have a status
of 'Active' or 'Available' and the target library auxiliary storage pool (ASP)
device and the from library auxiliary storage pool (ASP) device must be the same
device. If this parameter is omitted, the thread's library name space will be
used.</p>
<p>If a library to be renamed is to be in an auxiliary storage pool (ASP)
device that is not currently part of the thread's library name space, specify
<em>new-library-name</em> in the first 10 characters and QSYS in the second 10
characters of the target qualified object name and specify either *SAME or an <em>
auxiliary-storage-pool-device-name</em> in the target library auxiliary storage
pool (ASP) device name that is the same as specified in the from library
auxiliary storage pool (ASP) device name.</p>
<p>One of the following special values may be specified:</p>
<table cellpadding="5">
<!-- cols="15 85" -->
<tr>
<td align="left" valign="top"><em>*</em></td>
<td align="left" valign="top">The ASPs in the thread's library name space.</td>
</tr>
<tr>
<td align="left" valign="top"><em>*SAME</em></td>
<td align="left" valign="top">The library to which the object will be renamed
or moved is in the same ASP as the library containing the object to be renamed
or moved.</td>
</tr>
<tr>
<td align="left" valign="top"><em>*CURASPGRP</em></td>
<td align="left" valign="top">The ASPs in the thread's ASP group.</td>
</tr>
<tr>
<td align="left" valign="top"><em>*SYSBAS</em></td>
<td align="left" valign="top">The system ASP (ASP 1) and defined basic user
ASPs (ASPs 2-32).</td>
</tr>
</table>
</dd>
</dl>
<br>
<h3><a name="usagenotes">Usage Notes</a></h3>
<p>This API is conditionally threadsafe. For multithreaded jobs, see the
restrictions in the
<img src="delta.gif" alt="Start of change"><a href="../cl/rnmobj.htm">Rename
Object</a><img src="deltaend.gif" alt="End of change"> (RNMOBJ) command.</p>
<br>
<h3>Error Messages</h3>
<table cellpadding="5">
<!-- cols="15 85" -->
<tr>
<th align="left" valign="top">Message ID</th>
<th align="left" valign="top">Error Message Text</th>
</tr>
<tr>
<td align="left" valign="top">CPFB8ED E</td>
<td align="left" valign="top">Device description &amp;1 not correct for
operation.</td>
</tr>
<tr>
<td align="left" valign="top">CPF180B E</td>
<td align="left" valign="top">Function &amp;1 not allowed.</td>
</tr>
<tr>
<td align="left" valign="top">CPF21A3 E</td>
<td align="left" valign="top">&amp;1 not valid for replace object option.</td>
</tr>
<tr>
<td align="left" valign="top">CPF21A4 E</td>
<td align="left" valign="top">Objects cannot be moved into QTEMP.</td>
</tr>
<tr>
<td align="left" valign="top">CPF21A5 E</td>
<td align="left" valign="top">Cannot replace object &amp;1 in &amp;2 type
*&amp;3.</td>
</tr>
<tr>
<td align="left" valign="top">CPF2111 E</td>
<td align="left" valign="top">Library &amp;1 already exists.</td>
</tr>
<tr>
<td align="left" valign="top">CPF2112 E</td>
<td align="left" valign="top">Object &amp;1 in &amp;2 type *&amp;3 already
exists.</td>
</tr>
<tr>
<td align="left" valign="top">CPF2132 E</td>
<td align="left" valign="top">Object &amp;1 already exists in library
&amp;2.</td>
</tr>
<tr>
<td align="left" valign="top">CPF2136 E</td>
<td align="left" valign="top">Renaming library &amp;1 failed.</td>
</tr>
<tr>
<td align="left" valign="top">CPF2139 E</td>
<td align="left" valign="top">Rename of library &amp;1 failed.</td>
</tr>
<tr>
<td align="left" valign="top">CPF2140 E</td>
<td align="left" valign="top">Rename of library &amp;1 previously failed.</td>
</tr>
<tr>
<td align="left" valign="top">CPF2146 E</td>
<td align="left" valign="top">Owner of object &amp;1 and object being replaced
not the same.</td>
</tr>
<tr>
<td align="left" valign="top">CPF2160 E</td>
<td align="left" valign="top">Object type *&amp;1 not eligible for requested
function.</td>
</tr>
<tr>
<td align="left" valign="top">CPF2164 E</td>
<td align="left" valign="top">Rename of library &amp;2 not complete.</td>
</tr>
<tr>
<td align="left" valign="top">CPF2166 E</td>
<td align="left" valign="top">System library cannot be renamed or deleted.</td>
</tr>
<tr>
<td align="left" valign="top">
CPF2173 E</td>
<td align="left" valign="top">Value for ASPDEV not valid with special value for
library.</td>
</tr>
<tr>
<td align="left" valign="top">CPF2176 E</td>
<td align="left" valign="top">Library &amp;1 damaged.</td>
</tr>
<tr>
<td align="left" valign="top">CPF218C E</td>
<td align="left" valign="top">&amp;1 not a primary or secondary ASP</td>
</tr>
<tr>
<td align="left" valign="top">CPF2183 E</td>
<td align="left" valign="top">Object &amp;1 cannot be moved into library
&amp;3.</td>
</tr>
<tr>
<td align="left" valign="top">CPF2189 E</td>
<td align="left" valign="top">Not authorized to object &amp;1 in &amp;2 type
*&amp;3.</td>
</tr>
<tr>
<td align="left" valign="top">CPF219E E</td>
<td align="left" valign="top">Object type *&amp;1 not valid external object
type.</td>
</tr>
<tr>
<td align="left" valign="top">CPF2193 E</td>
<td align="left" valign="top">Object &amp;1 cannot be moved into library
&amp;4.</td>
</tr>
<tr>
<td align="left" valign="top">CPF22BC E</td>
<td align="left" valign="top">Object &amp;1 type &amp;3 is not program
defined.</td>
</tr>
<tr>
<td align="left" valign="top">CPF24B4 E</td>
<td align="left" valign="top">Severe error while addressing parameter
list.</td>
</tr>
<tr>
<td align="left" valign="top">CPF2512 E</td>
<td align="left" valign="top">Operation not allowed for message queue
&amp;1.</td>
</tr>
<tr>
<td align="left" valign="top">CPF2691 E</td>
<td align="left" valign="top">Rename of &amp;2 type *&amp;5 did not
complete.</td>
</tr>
<tr>
<td align="left" valign="top">CPF2692 E</td>
<td align="left" valign="top">Object &amp;2 type *&amp;5 must be varied
off.</td>
</tr>
<tr>
<td align="left" valign="top">CPF2693 E</td>
<td align="left" valign="top">&amp;2 type *&amp;5 cannot be used for
rename.</td>
</tr>
<tr>
<td align="left" valign="top">CPF2694 E</td>
<td align="left" valign="top">Object &amp;2 type *&amp;5 cannot be
renamed.</td>
</tr>
<tr>
<td align="left" valign="top">
CPF3C3A E</td>
<td align="left" valign="top">Value for parameter &amp;2 for API &amp;1 not
valid.</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">CPF3CF1 E</td>
<td align="left" valign="top">Error code parameter not valid.</td>
</tr>
<tr>
<td align="left" valign="top">CPF7010 E</td>
<td align="left" valign="top">Object &amp;1 in &amp;2 type *&amp;3 already
exists.</td>
</tr>
<tr>
<td align="left" valign="top">CPF88C4 E</td>
<td align="left" valign="top">Value &amp;1 for new object is more than 8
characters.</td>
</tr>
<tr>
<td align="left" valign="top">CPF9801 E</td>
<td align="left" valign="top">Object &amp;2 in library &amp;3 not found.</td>
</tr>
<tr>
<td align="left" valign="top">CPF9803 E</td>
<td align="left" valign="top">Cannot allocate object &amp;2 in library
&amp;3.</td>
</tr>
<tr>
<td align="left" valign="top">CPF9807 E</td>
<td align="left" valign="top">One or more libraries in library list
deleted.</td>
</tr>
<tr>
<td align="left" valign="top">CPF9808 E</td>
<td align="left" valign="top">Cannot allocate one or more libraries on library
list.</td>
</tr>
<tr>
<td align="left" valign="top">CPF9809 E</td>
<td align="left" valign="top">Library &amp;1 cannot be accessed.</td>
</tr>
<tr>
<td align="left" valign="top">CPF9810 E</td>
<td align="left" valign="top">Library &amp;1 not found.</td>
</tr>
<tr>
<td align="left" valign="top">CPF9811 E</td>
<td align="left" valign="top">Program &amp;1 in library &amp;2 not found.</td>
</tr>
<tr>
<td align="left" valign="top">CPF9812 E</td>
<td align="left" valign="top">File &amp;1 in library &amp;2 not found.</td>
</tr>
<tr>
<td align="left" valign="top">CPF9814 E</td>
<td align="left" valign="top">Device &amp;1 not found.</td>
</tr>
<tr>
<td align="left" valign="top">CPF9820 E</td>
<td align="left" valign="top">Not authorized to use library &amp;1.</td>
</tr>
<tr>
<td align="left" valign="top">CPF9821 E</td>
<td align="left" valign="top">Not authorized to program &amp;1 in library
&amp;2.</td>
</tr>
<tr>
<td align="left" valign="top">CPF9825 E</td>
<td align="left" valign="top">Not authorized to device &amp;1.</td>
</tr>
<tr>
<td align="left" valign="top">CPF9830 E</td>
<td align="left" valign="top">Cannot assign library &amp;1.</td>
</tr>
<tr>
<td align="left" valign="top">CPF9831 E</td>
<td align="left" valign="top">Cannot assign device &amp;1.</td>
</tr>
<tr>
<td align="left" valign="top">
CPF9833 E</td>
<td align="left" valign="top">*CURASPGRP or *ASPGRPPRI specified and thread has
no ASP group.</td>
</tr>
<tr>
<td align="left" valign="top">CPF9872 E</td>
<td align="left" valign="top">Program or service program &amp;1 in library
&amp;2 ended. Reason code &amp;3.</td>
</tr>
</table>
<br>
<hr>
API introduced: V2R3
<hr>
<table align="center" cellpadding="2" cellspacing="2">
<tr align="center">
<td valign="middle" align="center"><a href="#Top_Of_Page">Top</a> | <a href=
"obj1.htm">Object APIs</a> | <a href="aplist.htm">APIs by category</a></td>
</tr>
</table>
</body>
</html>