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

265 lines
8.7 KiB
HTML
Raw Normal View History

2024-04-02 14:02:31 +00:00
<!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>_PGMCALL()--Call an i5/OS Program for i5/OS PASE</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. -->
<!-- Change History: -->
<!-- YYMMDD USERID Change description -->
<!-- Created by V2DCIJB on 23 Nov 1999 -->
<!-- Edited by Kersten Jan 02 -->
<link rel="stylesheet" type="text/css" href="../rzahg/ic.css">
</head>
<body>
<!-- Java sync-link -->
<script type="text/javascript" language="Javascript" src="../rzahg/synch.js">
</script>
<a name="Top_Of_Page"></a>
<h2>_PGMCALL()--Call an i5/OS Program for i5/OS PASE</h2>
<div class="box" style="width: 70%;">
<br>
<br>
&nbsp;&nbsp;Syntax
<pre>
#include &lt;as400_protos.h&gt;
int _PGMCALL(const ILEpointer *<em>target</em>,
void **<em>argv</em>,
unsigned <em>flags</em>);
</pre>
<br>
&nbsp;&nbsp;Default Public Authority: *USE<br>
<!-- iddvc RMBR -->
<br>
&nbsp;&nbsp;Library: Standard C Library (libc.a)<br>
<!-- iddvc RMBR -->
<br>
&nbsp;&nbsp;Threadsafe: Yes<br>
<!-- iddvc RMBR -->
<br>
</div>
<br>
<p><strong>Note:</strong> This function can only be used in an i5/OS PASE
program. See <a href="../rzalf/rzalfintro.htm">i5/OS PASE</a> for more
information about creating i5/OS PASE programs.</p>
<p>The <strong>_PGMCALL()</strong> function calls an i5/OS program (object
type *PGM) from an i5/OS PASE program. It transfers control to the *PGM object
specified by a 16-byte tagged system pointer (passing any necessary arguments)
and resumes execution when control returns.</p>
<br>
<h3>Parameters</h3>
<dl>
<dt><strong>target</strong></dt>
<dd>(Input) Pointer to a tagged system pointer that addresses the i5/OS
program (object type *PGM) to call. <em>target</em> must be a 16-byte aligned
i5/OS PASE memory address.<br>
<br>
</dd>
<dt><strong>argv</strong></dt>
<dd>(Input/Output) Array of pointers to arguments. <em>argv</em> is the address
of an array of pointers to argument variables that are (usually) passed by-address to the
i5/OS program. <em>argv</em> can be zero (null) if there are no arguments to
pass. The last element in the array must be a null pointer. A maximum of
<strong>PGMCALL_MAXARGS</strong> (255) arguments can be passed to an i5/OS
program unless <strong>PGMCALL_NOMAXARGS</strong> is specified.<br>
<br>
</dd>
<dt><strong>flags</strong></dt>
<dd>(Input) Specifies options to control how the i5/OS program is called. The
<em>flags</em> argument is a bitwise logical-or of one or more of the following
values:<br>
<br>
<table cellpadding="5">
<!-- cols="25 75" -->
<tr>
<td align="left" valign="top"><em>PGMCALL_DIRECT_ARGS</em><br>
(0x00000001)</td>
<td align="left" valign="top">Specifies that the addresses in the <em>argv</em>
array are passed directly to the i5/OS program as formal arguments. If
<strong>PGMCALL_DIRECT_ARGS</strong> is omitted, the system builds tagged space
pointers to the argument memory locations identified in the <em>argv</em> array
and passes the space pointers as formal arguments (standard i5/OS program
linkage).</td>
</tr>
<tr>
<td align="left" valign="top"><em>PGMCALL_DROP_ADOPT</em><br>
(0x00000002)</td>
<td align="left" valign="top">Specifies that authorizations adopted by i5/OS
program invocations already in the stack are dropped so the called program only
benefits from authorizations available to the user and group profiles for the
thread.</td>
</tr>
<tr>
<td align="left" valign="top"><em>PGMCALL_NOINTERRUPT</em><br>
(0x00000004)</td>
<td align="left" valign="top">Specifies that i5/OS PASE signals will not
interrupt the called i5/OS program. Some system functions (such as
<strong>select</strong>) can be interrupted by signals. Normally either an ILE
signal or an i5/OS PASE signal can interrupt such an operation, but
<strong>PGMCALL_NOINTERRUPT</strong> delays i5/OS PASE signal processing until
control returns from the called i5/OS program. This option has no effect on
ILE signal handling.</td>
</tr>
<tr>
<td align="left" valign="top"><em>PGMCALL_NOMAXARGS</em><br>
(0x00000008)</td>
<td align="left" valign="top">Specifies that more than 255 arguments may be passed to the i5/OS program. Current system architecture limits the number of arguments to 16383 when this flag is set. Specifying <strong>PGMCALL_NOMAXARGS</strong> slightly increases system resource requirements even when no more than 255 arguments are provided.</td>
</tr>
<tr>
<td align="left" valign="top"><em>PGMCALL_ASCII_STRINGS</em><br>
(0x00000010)</td>
<td align="left" valign="top">Specifies that all arguments are null-terminated ASCII character strings. The system converts argument strings from the i5/OS PASE CCSID to the job default CCSID and passes the converted (EBCDIC) strings to the i5/OS program. The converted strings are stored in an internal system buffer, so any changes made by the i5/OS program are <strong>not</strong> returned to the caller (by-value argument behavior).</td>
</tr>
</table>
</dd>
</dl>
<br>
<h3>Authorities</h3>
<table border cellpadding="5">
<!-- cols="80 20" -->
<tr>
<th align="left" valign="bottom">Object Referred to</th>
<th align="center" valign="bottom">Authority<br>
Required</th>
</tr>
<tr>
<td align="left" valign="top">i5/OS program to call</td>
<td align="center" valign="top">*X</td>
</tr>
</table>
<br>
<br>
<h3>Return Value</h3>
<p>Most errors from <strong>_PGMCALL</strong> are reported with i5/OS
exception messages that are converted to i5/OS PASE signals. See <a href=
"pase_signals.htm">i5/OS PASE Signal Handling</a> for information about
handling i5/OS exceptions.</p>
<p>If no i5/OS PASE signal is sent, a function result of zero indicates the
i5/OS program was called and returned normally. A function result of -1
indicates an error that is further qualified by an errno value.</p>
<br>
<h3>Error Conditions</h3>
<p>At least these errno values can be returned, with other values also possible
(such as i5/OS-unique ILE errno EAPAR):</p>
<table cellpadding="5">
<!-- cols="25 75" -->
<tr>
<td align="left" valign="top"><em>[EINVAL]</em></td>
<td align="left" valign="top">An invalid <em>flags</em> value was specified, or
too many arguments were provided.</td>
</tr>
</table>
<br>
<br>
<h3>Usage Notes</h3>
<ol>
<li><strong>_PGMCALL</strong> can only call i5/OS program objects (object type
*PGM). If your i5/OS PASE program needs to call a particular ILE procedure
inside a *PGM or *SRVPGM object, you must to use the <strong>_ILECALL</strong>
function.<br>
<br>
</li>
<li>You can use the <strong>_RSLOBJ</strong> or <strong>_RSLOBJ2</strong>
function to obtain a system pointer to an i5/OS program (object type
*PGM).<br>
<br>
</li>
<li>Any i5/OS program that accepts arguments must be Teraspace-safe (created
using TERASPACE(*YES)) to be called using <strong>_PGMCALL</strong> because the
arguments are usually passed in Teraspace storage.<br>
<br>
</li>
<li>Arguments (addressed by pointers in the <em>argv</em> array) can be of any
data type. Arguments are passed by-address, so the called i5/OS program can
modify argument variables to return results to the i5/OS PASE program unless <strong>PGMCALL_ASCII_STRINGS</strong> is specified.<br>
<br>
</li>
<li><strong>_PGMCALL</strong> does no character encoding conversions unless <strong>PGMCALL_ASCII_STRINGS</strong> is specified,so the
i5/OS PASE program may need to convert argument and result character strings
between ASCII and EBCDIC. i5/OS PASE runtime function <strong>iconv</strong>
can be used for character conversions.<br>
<br>
</li>
</ol>
<br>
<h3>Related Information</h3>
<ul>
<li><a href="pase__rslobj.htm">_RSLOBJ()--Resolve to an i5/OS Object for
i5/OS PASE</a></li>
<li><a href="pase__ilecall.htm">_ILECALLX()--Call an ILE Procedure for i5/OS
PASE</a></li>
<li><a href="pase__setspp.htm">_SETSPP() and _SETSPP_TS64()--Set Space Pointer for i5/OS
PASE</a></li>
<li><a href="pase__setsppm.htm">_SETSPPM()--Set Multiple Space Pointers for i5/OS
PASE</a></li>
<li><a href="pase_qp2setenv_ile.htm">Qp2setenv_ile()--Set ILE environment variables for i5/OS PASE</a></li>
</ul>
<br>
<hr>
API introduced: V5R2
<hr>
<center>
<table cellpadding="2" cellspacing="2">
<tr align="center">
<td valign="middle" align="center"><a href="#Top_Of_Page">Top</a> | <a href=
"pase1.htm">i5/OS PASE APIs</a> | <a href="aplist.htm">APIs by category</a>
</td>
</tr>
</table>
</center>
</body>
</html>