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

817 lines
23 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>Open Spooled File (QSPOPNSP) 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. -->
<!-- Print SCRIPT A converted by B2H R4.1 (346) (CMS) by V2KEA304 -->
<!-- at RCHVMW2 on 17 Feb 1999 at 11:05:09 -->
<!-- Change History: -->
<!-- YYMMDD USERID Change description -->
<!--File Edited by Kersten Oct 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 type="text/javascript" language="Javascript" src="../rzahg/synch.js">
</script>
<h2>Open Spooled File (QSPOPNSP) 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="50%">Spooled file handle returned</td>
<td align="left" valign="top" width="20%">Output</td>
<td align="left" valign="top" width="20%">Binary(4)</td>
</tr>
<tr>
<td align="center" valign="top">2</td>
<td align="left" valign="top">Qualified job name</td>
<td align="left" valign="top">Input</td>
<td align="left" valign="top">Char(26)</td>
</tr>
<tr>
<td align="center" valign="top">3</td>
<td align="left" valign="top">Internal job identifier</td>
<td align="left" valign="top">Input</td>
<td align="left" valign="top">Char(16)</td>
</tr>
<tr>
<td align="center" valign="top">4</td>
<td align="left" valign="top">Internal spooled file identifier</td>
<td align="left" valign="top">Input</td>
<td align="left" valign="top">Char(16)</td>
</tr>
<tr>
<td align="center" valign="top">5</td>
<td align="left" valign="top">Spooled file name</td>
<td align="left" valign="top">Input</td>
<td align="left" valign="top">Char(10)</td>
</tr>
<tr>
<td align="center" valign="top">6</td>
<td align="left" valign="top">Spooled file number</td>
<td align="left" valign="top">Input</td>
<td align="left" valign="top">Binary(4)</td>
</tr>
<tr>
<td align="center" valign="top">7</td>
<td align="left" valign="top">Number of buffers to get</td>
<td align="left" valign="top">Input</td>
<td align="left" valign="top">Binary(4)</td>
</tr>
<tr>
<td align="center" valign="top">8</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:<br>
<!-- iddvc RMBR -->
<br>
<table width="100%">
<tr>
<td align="center" valign="top" width="10%">9</td>
<td align="left" valign="top" width="50%">Job system name</td>
<td align="left" valign="top" width="20%">Input</td>
<td align="left" valign="top" width="20%">Char(8)</td>
</tr>
<tr>
<td align="center" valign="top">10</td>
<td align="left" valign="top">Spooled file create date</td>
<td align="left" valign="top">Input</td>
<td align="left" valign="top">Char(7)</td>
</tr>
<tr>
<td align="center" valign="top">11</td>
<td align="left" valign="top">Spooled file create time</td>
<td align="left" valign="top">Input</td>
<td align="left" valign="top">Char(6)</td>
</tr>
</table>
<br>
&nbsp;&nbsp;Default Public Authority: *USE<br>
<!-- iddvc RMBR -->
<br>
&nbsp;&nbsp;Threadsafe: No<br>
<!-- iddvc RMBR -->
<br>
</div>
<p>The Open Spooled File (QSPOPNSP) API opens an existing spooled file. After
the existing spooled file is opened, the Get Spooled File Data (QSPGETSP) API
can then get the data from the file.</p>
<br>
<h3>Authorities and Locks</h3>
<p><strong>Spooled File Authorities</strong></p>
<p>The requester is authorized to the spooled file if one or more of the
following conditions are met.</p>
<ul>
<li>The requester is the owner of the spooled file.</li>
<li>The requester has *READ authority to the queue on which the spooled file
resides, and the queue is specified as DSPDTA(*YES).</li>
<li>The requester has *SPLCTL authority.</li>
<li>The requester has *JOBCTL authority, and the queue on which the spooled
file resides is specified as OPRCTL(*YES).</li>
<li>The requester has ownership of the queue on which the spooled file resides,
and the queue is specified as AUTCHK(*OWNER).</li>
<li>The requester has read, add, and delete authorities to the queue on which
the spooled file resides, and the queue is specified as AUTCHK(*DTAAUT).</li>
</ul>
<dl>
<dt><em>Spooled File Lock</em></dt>
<dd>*LSRD</dd>
</dl>
<br>
<h3>Required Parameter Group</h3>
<dl>
<dt><strong>Spooled file handle returned</strong></dt>
<dd>OUTPUT; BINARY(4)
<p>The handle used on subsequent get (QSPGETSP API) and close (QSPCLOSP API)
operations to identify the spooled file.</p>
</dd>
<dt><strong>Qualified job name</strong></dt>
<dd>INPUT; CHAR(26)
<p>The job that owns the spooled file. The qualified job name has three
parts:</p>
<table cellpadding="5">
<!-- cols="15 85" -->
<tr>
<td align="left" valign="top"><em>job name</em></td>
<td align="left" valign="top">CHAR(10).
<p>A specific job name, or one of the following special values:</p>
<table cellpadding="5">
<tr>
<td align="left" valign="top"><em><strong>*</strong></em></td>
<td align="left" valign="top">Only the job that this program is running. The
rest of the job name parameter must be blank.</td>
</tr>
<tr>
<td align="left" valign="top"><em>*INT</em></td>
<td align="left" valign="top">The internal job identifier used to locate the
spooled file. The user name and job number must be set to blank.</td>
</tr>
</table>
</td>
</tr>
<tr>
<td align="left" valign="top"><em>user name</em></td>
<td align="left" valign="top">CHAR(10)
<p>A specific user profile name, or blanks when the job name is * or *INT.</p>
</td>
</tr>
<tr>
<td align="left" valign="top"><em>job number</em></td>
<td align="left" valign="top">CHAR(6).
<p>A specific job number, or blanks when the job name is * or *INT.</p>
</td>
</tr>
</table>
<br>
</dd>
<dt><strong>Internal job identifier</strong></dt>
<dd>INPUT; CHAR(16)
<p>The internal job identifier for the job that owns the spooled file. Use
the <a href="QUSRSPLA.htm">Retrieve Spooled File Attributes (QUSRSPLA) API</a>
or one of these APIs to make the identifier available: <a href="QUSLSPL.htm">
List Spooled Files (QUSLSPL) API</a></p>
</dd>
<dt><strong>Internal spooled file identifier</strong></dt>
<dd>INPUT; CHAR(16)
<p>The internal spooled file identifier for the spooled file. To make the
identifier available, use the <a href="QUSRSPLA.htm">Retrieve Spooled File
Attributes (QUSRSPLA) API</a> or see <a href="QUSLSPL.htm">List Spooled Files
(QUSLSPL) API</a>.</p>
</dd>
<dt><strong>Spooled file name</strong></dt>
<dd>INPUT; CHAR(10)
<p>The name of the spooled file to be opened. You can use this special value
for the name:</p>
<table cellpadding="5">
<!-- cols="10 90" -->
<tr>
<td align="left" valign="top"><em>*INT</em></td>
<td align="left" valign="top">The internal spooled file identifier is used to
locate the spooled file.</td>
</tr>
</table>
<br>
</dd>
<dt><strong>Spooled file number</strong></dt>
<dd>INPUT; BINARY(4)
<p>The unique number of the spooled file. The valid range is 1 through
999999.</p>
<p>The following special values are supported for this parameter:</p>
<table cellpadding="5">
<!-- cols="5 95" -->
<tr>
<td align="left" valign="top"><em>0</em></td>
<td align="left" valign="top">Only one spooled file from the job has the
specified file name, so the number of the spooled file is not necessary.</td>
</tr>
<tr>
<td align="left" valign="top"><em>-1</em></td>
<td align="left" valign="top">This uses the highest-numbered spooled file with
the specified file name.</td>
</tr>
<tr>
<td align="left" valign="top"><em>-2</em></td>
<td align="left" valign="top">The spooled file number is not used to determine
which spooled file to process. Use this value when you want the Job system name
parameter or the Spooled file create date and Spooled file create time
parameters to take precedence over the spooled file number when selecting a
spooled file.</td>
</tr>
</table>
<br>
</dd>
<dt><strong>Number of buffers to get</strong></dt>
<dd>INPUT;BINARY(4)
<p>How many buffers to get on each call to the QSPGETSP API. Valid numbers
include 1 through 8, 16, 24, and 32. Any values greater than 32 must be a
multiple of 32. A value greater than 1 should show some performance
improvement. A value of 8 may give the best performance when using the QSPGETSP
API.</p>
<p>The following special value is supported for this parameter:</p>
<table cellpadding="5">
<!-- cols="5 95" -->
<tr>
<td align="left" valign="top"><em>-1</em></td>
<td align="left" valign="top">Reads the entire spooled file.</td>
</tr>
</table>
<br>
<p>If the user space cannot accommodate all buffers requested, as many complete
buffers as possible will be returned in the available space. The information
complete indicator in the header section of the data returned is then set to
P.</p>
<p>If the end of an open spooled file is encountered before the buffer count is
reached, the end of open spooled file parameter on the Get Spooled File Data
(QSPGETSP) API determines the action taken.</p>
</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</h3>
<dl>
<dt><strong>Job system name</strong></dt>
<dd>INPUT; CHAR(8)
<p>The name of the system where the job that created the spooled file ran or
blank when the spooled file name is *INT. This parameter is considered after
the job name, user name, job number, spooled file name, and spooled file number
parameter requirements have been met.</p>
<p>The following special values are supported for this parameter:</p>
<table cellpadding="5">
<!-- cols="15 85" -->
<tr>
<td align="left" valign="top"><em>*ONLY</em></td>
<td align="left" valign="top">There is one job with the specified job name,
user name, job number, spooled file name, spooled file number, spooled file
creation date, and spooled file creation time.</td>
</tr>
<tr>
<td align="left" valign="top"><em>*CURRENT</em></td>
<td align="left" valign="top">The job on the current system with the specified
job name, user name, job number, spooled file create date, and spooled file
create time is used.</td>
</tr>
<tr>
<td align="left" valign="top"><em>*ANY</em></td>
<td align="left" valign="top">The job system name is not considered when
selecting a spooled file. Use this value when you want the Spooled file create
date and Spooled file create time parameters to take precedence over the job
system name when selecting a spooled file.</td>
</tr>
</table>
<br>
<p>If this parameter is omitted, the API assumes blanks when the spooled file
name is *INT. When spooled file name is not *INT, the API assumes *ONLY.</p>
</dd>
<dt><strong>Spooled file create date</strong></dt>
<dd>INPUT; CHAR(7)
<p>The date the spooled file was created on the system or blank when the
spooled file name is *INT. This parameter is considered after the job name,
user name, job number, spooled file name, spooled file number, and job system
name parameter requirements have been met. The date must be in the CYYMMDD
format or one of the following special values:</p>
<table cellpadding="5">
<!-- cols="15 85" -->
<tr>
<td align="left" valign="top"><em>*ONLY</em></td>
<td align="left" valign="top">There is only one spooled file with the specified
job name, user name, job number, spooled file name, spooled file number, and
job system name.</td>
</tr>
<tr>
<td align="left" valign="top"><em>*LAST</em></td>
<td align="left" valign="top">The spooled file with the latest date and time
which also has the specified job name, user name, job number, spooled file
name, spooled file number, and job system name is used.</td>
</tr>
</table>
<br>
<p>The date format CYYMMDD is defined as follows:</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>
</table>
<br>
<p>If this parameter is omitted, the API assumes blanks when the spooled file
name is *INT. When spooled file name is not *INT, the API assumes *ONLY.</p>
</dd>
<dt><strong>Spooled file create time</strong></dt>
<dd>INPUT; CHAR(6)
<p>The time the spooled file was created on the system or blank when the
spooled file name is *INT. This parameter must be set to blanks when special
values *LAST or *ONLY are used for parameter Spooled file create date. This
parameter must have a value set if a date is specified for parameter Spooled
file create date. This parameter is considered after the job name, user name,
job number, spooled file name, spooled file number, job system name, and
spooled file create date parameter requirements have been met. The time must be
in the HHMMSS format or one of the following special values:</p>
<table cellpadding="5">
<!-- cols="15 85" -->
<tr>
<td align="left" valign="top"><em>*ONLY</em></td>
<td align="left" valign="top">There is only one spooled file with the specified
job name, user name, job number, spooled file name, spooled file number, job
system name, and create date.</td>
</tr>
<tr>
<td align="left" valign="top"><em>*LAST</em></td>
<td align="left" valign="top">The spooled file with the latest time which also
has the specified job name, user name, job number, spooled file name, spooled
file number, job system name, and create date is used.</td>
</tr>
</table>
<br>
<p>The time format HHMMSS is defined as follows:</p>
<table cellpadding="3">
<!-- cols="10 90" -->
<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">Minutes</td>
</tr>
<tr>
<td align="left" valign="top"><em>SS</em></td>
<td align="left" valign="top">Seconds</td>
</tr>
</table>
<p>If this parameter is omitted, the API assumes blanks.</p>
</dd>
</dl>
<br>
<h3>How to Select a Spooled File to Be Opened</h3>
<p>This table illustrates the valid parameter combinations of qualified job
name, internal job identifier, internal spooled file identifier, spooled file
name, job system name, spooled file create date, and spooled file create time.
The combinations of these parameters identify the spooled file to be opened.
For example, when the qualified job name parameter value is *, the internal job
identifier must be blank, the internal spooled file identifier must be blank,
and the actual name and number of the spooled file must be given.</p>
<table border cellpadding="3">
<!-- cols="7 7 9 10 10 9 12 12 12 12" -->
<tr>
<th align="left" valign="bottom" colspan="3">Qualified Job Name</th>
<th align="left" valign="bottom" rowspan="2">Internal Job Identifier</th>
<th align="left" valign="bottom" rowspan="2">Internal Spooled File
Identifier</th>
<th align="left" valign="bottom" rowspan="2">Spooled File Name</th>
<th align="left" valign="bottom" rowspan="2">Spooled File Number</th>
<th align="left" valign="bottom" rowspan="2">Job System Name</th>
<th align="left" valign="bottom" rowspan="2">Spooled File Create Date</th>
<th align="left" valign="bottom" rowspan="2">Spooled File Create Time</th>
</tr>
<tr>
<th align="left" valign="bottom">Job Name</th>
<th align="left" valign="bottom">User Name</th>
<th align="left" valign="bottom">Job Number</th>
</tr>
<tr>
<td align="left" valign="top">Name</td>
<td align="left" valign="top">Name</td>
<td align="left" valign="top">Number</td>
<td align="left" valign="top">Blanks</td>
<td align="left" valign="top">Blanks</td>
<td align="left" valign="top">Name</td>
<td align="left" valign="top">-2 through 999999</td>
<td align="left" valign="top">Name, *ONLY, *CURRENT, or *ANY</td>
<td align="left" valign="top">Date, *ONLY, or *LAST</td>
<td align="left" valign="top">Time, blanks, *ONLY, or *LAST</td>
</tr>
<tr>
<td align="left" valign="top">Name</td>
<td align="left" valign="top">Name</td>
<td align="left" valign="top">Blanks</td>
<td align="left" valign="top">Blanks</td>
<td align="left" valign="top">Blanks</td>
<td align="left" valign="top">Name</td>
<td align="left" valign="top">-2 through 999999</td>
<td align="left" valign="top">Name, *ONLY, *CURRENT, or *ANY</td>
<td align="left" valign="top">Date, *ONLY, or *LAST</td>
<td align="left" valign="top">Time, blanks, *ONLY, or *LAST</td>
</tr>
<tr>
<td align="left" valign="top">*</td>
<td align="left" valign="top">Blanks</td>
<td align="left" valign="top">Blanks</td>
<td align="left" valign="top">Blanks</td>
<td align="left" valign="top">Blanks</td>
<td align="left" valign="top">Name</td>
<td align="left" valign="top">-2 through 999999</td>
<td align="left" valign="top">Name, *ONLY, *CURRENT or *ANY</td>
<td align="left" valign="top">Date, *ONLY or *LAST</td>
<td align="left" valign="top">Time, blanks, *ONLY or *LAST</td>
</tr>
<tr>
<td align="left" valign="top">*INT</td>
<td align="left" valign="top">Blanks</td>
<td align="left" valign="top">Blanks</td>
<td align="left" valign="top">Internal job identifier</td>
<td align="left" valign="top">Internal spooled file identifier</td>
<td align="left" valign="top">*INT</td>
<td align="left" valign="top">-2 through 999999</td>
<td align="left" valign="top">Blanks</td>
<td align="left" valign="top">Blanks</td>
<td align="left" valign="top">Blanks</td>
</tr>
<tr>
<td align="left" valign="top">*INT</td>
<td align="left" valign="top">Blanks</td>
<td align="left" valign="top">Blanks</td>
<td align="left" valign="top">Internal job identifier</td>
<td align="left" valign="top">Blanks</td>
<td align="left" valign="top">Name</td>
<td align="left" valign="top">-2 through 999999</td>
<td align="left" valign="top">Name, *ONLY, *CURRENT, or *ANY</td>
<td align="left" valign="top">Date, *ONLY, or *LAST</td>
<td align="left" valign="top">Time, blanks, *ONLY, or *LAST
<p>See Notes for additional information.</p></td>
</tr>
</table>
<p><strong>Notes: </strong>This parameter combination is not valid when a job has been
detached from its spooled files or for a spooled file on an independent disk pool. Use of this combination will result in message
CPF3C43.</p>
<br>
<h3>Error Messages</h3>
<table 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">CPF24B4 E</td>
<td width="85%" valign="top">Severe error while addressing parameter list.</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">CPF3C33 E</td>
<td align="left" valign="top">Spooled file number &amp;1 is not valid.</td>
</tr>
<tr>
<td align="left" valign="top">CPF3C40 E</td>
<td align="left" valign="top">Spooled file &amp;4 not found.</td>
</tr>
<tr>
<td align="left" valign="top">CPF3C41 E</td>
<td align="left" valign="top">More than one spooled file with same name.</td>
</tr>
<tr>
<td align="left" valign="top">CPF3C42 E</td>
<td align="left" valign="top">User name or job number is not blank.</td>
</tr>
<tr>
<td align="left" valign="top">CPF3C43 E</td>
<td align="left" valign="top">Internal job identifier is not valid.</td>
</tr>
<tr>
<td align="left" valign="top">CPF3C44 E</td>
<td align="left" valign="top">Internal spooled file identifier is not
valid.</td>
</tr>
<tr>
<td align="left" valign="top">CPF3C58 E</td>
<td align="left" valign="top">Job name specified is not valid.</td>
</tr>
<tr>
<td align="left" valign="top">CPF3C59 E</td>
<td align="left" valign="top">Internal identifier is not blanks and job name is
not *INT.</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">CPF33C9 E</td>
<td align="left" valign="top">Spooled file name parameter cannot be blank.</td>
</tr>
<tr>
<td align="left" valign="top">CPF33DA E</td>
<td align="left" valign="top">Value &amp;1 not valid for number of buffers to
read parameter.</td>
</tr>
<tr>
<td align="left" valign="top">CPF33DB E</td>
<td align="left" valign="top">Qualified job name parameter not valid with
internal spooled file name.</td>
</tr>
<tr>
<td align="left" valign="top">CPF33DC E</td>
<td align="left" valign="top">Open or create not valid for diskette files.</td>
</tr>
<tr>
<td align="left" valign="top">CPF33DD E</td>
<td align="left" valign="top">Maximum number of open spooled files exceeded for
this job.</td>
</tr>
<tr>
<td align="left" valign="top">CPF33DE E</td>
<td align="left" valign="top">Size of internal data for opened spooled file
exceeds maximum.</td>
</tr>
<tr>
<td align="left" valign="top">CPF33DF E</td>
<td align="left" valign="top">Internal data area for opened spooled files
destroyed.</td>
</tr>
<tr>
<td align="left" valign="top">CPF3309 E</td>
<td align="left" valign="top">No files named &amp;1 are active.</td>
</tr>
<tr>
<td align="left" valign="top">CPF3330 E</td>
<td align="left" valign="top">Necessary resource not available.</td>
</tr>
<tr>
<td valign="top">CPF333B E</td>
<td valign="top">Job system name is not valid.</td>
</tr>
<tr>
<td valign="top">CPF333C E</td>
<td valign="top">Spooled file create date is not valid.</td>
</tr>
<tr>
<td valign="top">CPF333D E</td>
<td valign="top">Spooled file create time is not valid.</td>
</tr>
<tr>
<td valign="top">CPF333E E</td>
<td valign="top">Spooled file create time is not blank.</td>
</tr>
<tr>
<td valign="top">CPF333F E</td>
<td valign="top">Job system name is not blank.</td>
</tr>
<tr>
<td align="left" valign="top">CPF3342 E</td>
<td align="left" valign="top">Job &amp;5/&amp;4/&amp;3 not found.</td>
</tr>
<tr>
<td align="left" valign="top">CPF3343 E</td>
<td align="left" valign="top">Duplicate job names found.</td>
</tr>
<tr>
<td align="left" valign="top">CPF3344 E</td>
<td align="left" valign="top">File &amp;1 number &amp;2 no longer in the
system.</td>
</tr>
<tr>
<td align="left" valign="top">CPF335B E</td>
<td align="left" valign="top">Spooled file create date is not blank.</td>
</tr>
<tr>
<td align="left" valign="top">CPF3492 E</td>
<td align="left" valign="top">Not authorized to spooled file.</td>
</tr>
<tr>
<td align="left" valign="top">CPF9838 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 &amp;1 in library
&amp;2 ended. Reason code &amp;3.</td>
</tr>
</table>
<br>
<hr>
API introduced: V2R1
<hr>
<table cellpadding="2" cellspacing="2" align="center">
<tr align="center">
<td valign="middle" align="center"><a href="#Top_Of_Page">Top</a> | <a href=
"print1.htm">Print APIs</a> | <a href="aplist.htm">APIs by category</a></td>
</tr>
</table>
</body>
</html>