<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html
  PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html lang="en-us" xml:lang="en-us">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="security" content="public" />
<meta name="Robots" content="index,follow" />
<meta http-equiv="PICS-Label" content='(PICS-1.1 "http://www.icra.org/ratingsv02.html" l gen true r (cz 1 lz 1 nz 1 oz 1 vz 1) "http://www.rsac.org/ratingsv01.html" l gen true r (n 0 s 0 v 0 l 0) "http://www.classify.org/safesurf/" l gen true r (SS~~000 1))' />
<meta name="DC.Type" content="reference" />
<meta name="DC.Title" content="Example in ILE COBOL: List Object API" />
<meta name="abstract" content="The example program prints a report that shows all objects that adopt owner authority." />
<meta name="description" content="The example program prints a report that shows all objects that adopt owner authority." />
<meta name="DC.Relation" scheme="URI" content="listOverview.htm" />
<meta name="DC.Relation" scheme="URI" content="listRPG.htm" />
<meta name="DC.Relation" scheme="URI" content="listRPG.htm" />
<meta name="copyright" content="(C) Copyright IBM Corporation 1998, 2006" />
<meta name="DC.Rights.Owner" content="(C) Copyright IBM Corporation 1998, 2006" />
<meta name="DC.Format" content="XHTML" />
<meta name="DC.Identifier" content="listCOBOL" />
<meta name="DC.Language" content="en-us" />
<!-- 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. -->
<link rel="stylesheet" type="text/css" href="./ibmdita.css" />
<link rel="stylesheet" type="text/css" href="./ic.css" />
<title>Example in ILE COBOL: List Object API</title>
</head>
<body id="listCOBOL"><a name="listCOBOL"><!-- --></a>
<!-- Java sync-link --><script language="Javascript" src="../rzahg/synch.js" type="text/javascript"></script>
<h1 class="topictitle1">Example in ILE COBOL: List Object API</h1>
<div><p>The example program prints a report that shows all objects that
adopt owner authority.</p>
<div class="section"><div class="note"><span class="notetitle">Note:</span> Read the <a href="codedisclaimer.htm">Code license and disclaimer information</a> for important
legal information.</div>
<p>Refer to Example in RPG: List Object
API for the original example. The following program also works for OPM COBOL.</p>
<pre>       IDENTIFICATION DIVISION.
      ***************************************************************
      ***************************************************************
      *
      *  Program:      List objects that adopt owner authority
      *
      *  Language:     COBOL
      *
      *  Description:  This program prints a report showing all objects
      *                that adopt owner authority.  The two parameters
      *                passed to the program are the profile to be
      *                checked and the type of objects to be listed.
      *                The parameter values are the same as those
      *                accepted by the QSYLOBJP API.
      *
      *  APIs Used:    QSYLOBJP - List Objects that Adopt Owner Authority
      *                QUSCRTUS - Create User Space
      *                QUSPTRUS - Retrieve Pointer to User Space
      *                QUSROBJD - Retrieve Object Description
      *
      ***************************************************************
      ***************************************************************
      *
       PROGRAM-ID. LISTADOPT.
       ENVIRONMENT DIVISION.
       CONFIGURATION SECTION.
         SOURCE-COMPUTER. IBM-AS400.
         OBJECT-COMPUTER. IBM-AS400.
       INPUT-OUTPUT SECTION.
       FILE-CONTROL.
           SELECT LISTING ASSIGN TO PRINTER-QPRINT
                          ORGANIZATION IS SEQUENTIAL.
       DATA DIVISION.
       FILE SECTION.
       FD  LISTING RECORD CONTAINS 132 CHARACTERS
                   LABEL RECORDS ARE STANDARD
                   DATA RECORD IS LIST-LINE.
       01  LIST-LINE        PIC X(132).
      *
       WORKING-STORAGE SECTION.
      *
      * Error Code parameter include.  As this sample program
      * uses COPY to include the error code structure, only the first
      * 16 bytes of the error code structure are available.  If the
      * application program needs to access the variable length
      * exception data for the error, the developer should physically
      * copy the QSYSINC include and modify the copied include to
      * define additional storage for the exception data.
      *
       COPY QUSEC OF QSYSINC-QLBLSRC.
      *
      * Listing text
      *
       01  OBJ-ENTRY.
           05  OBJECT.
               09  TEXT1         PIC  X(08) VALUE "Object: ".
               09  NAME          PIC  X(10).
               09  TEXT2         PIC  X(10) VALUE " Library: ".
               09  LIBRARY       PIC  X(10).
           05  TEXT3         PIC  X(07) VALUE " Type: ".
           05  OBJECT-TYPE   PIC  X(10).
           05  TEXT4         PIC  X(07) VALUE " Text: ".
           05  OBJECT-TEXT   PIC  X(50).
       01  END-LIST.
           05  TEXT1         PIC  X(15) VALUE "*** End of List".
      *
       01  MISC.
           05  SPC-NAME      PIC  X(20) VALUE "ADOPTS    QTEMP     ".
           05  SPC-SIZE      PIC S9(09) VALUE 1 BINARY.
           05  SPC-INIT      PIC  X(01) VALUE X"00".
           05  SPCPTR        POINTER.
           05  RCVVAR        PIC  X(08).
           05  RCVVARSIZ     PIC S9(09) VALUE 8 BINARY.
           05  LST-STATUS    PIC  X(01).
           05  MBR-LIST      PIC  X(08) VALUE "OBJP0200".
           05  CONTIN-HDL    PIC  X(20).
           05  APINAM        PIC  X(10).
           05  ROBJD-FMT     PIC  X(08) VALUE "OBJD0100".
           05  SPC-TYPE      PIC  X(10) VALUE "*USRSPC".
           05  EXT-ATTR      PIC  X(10) VALUE "QSYLOBJP".
           05  SPC-AUT       PIC  X(10) VALUE "*ALL".
           05  SPC-TEXT      PIC  X(50).
           05  SPC-REPLAC    PIC  X(10) VALUE "*YES".
           05  SPC-DOMAIN    PIC  X(10) VALUE "*USER".
      *
       LINKAGE SECTION.
      *
      * Input parameters.
      *
       01  USR-PRF         PIC  X(10).
       01  OBJ-TYPE        PIC  X(10).
      *
      * String to map User Space offsets into
      *
       01  STRING-SPACE    PIC  X(32000).
      *
      * User Space Generic Header include.  These includes will be
      * mapped over a User Space.
      *
       COPY QUSGEN OF QSYSINC-QLBLSRC.
      *
      * List Objects that Adopt API include.  These includes will be
      * mapped over a User Space.
      *
       COPY QSYLOBJP OF QSYSINC-QLBLSRC.
      *
      * Beginning of mainline
      *
       PROCEDURE DIVISION USING USR-PRF, OBJ-TYPE.
       MAIN-LINE.
           PERFORM INIT.
           PERFORM PROCES.
           PERFORM DONE.
      *
      * Start of subroutines
      *
      *****************************************************************
       PROCES.
      *
      * Do until the list is complete
      *
           MOVE INFORMATION-STATUS OF QUS-GENERIC-HEADER-0100 TO
                                      LST-STATUS.
      *
           PERFORM PROCES1 WITH TEST AFTER UNTIL LST-STATUS = "C".
      *
       PROCES1.
      *
      * This subroutine processes each entry returned by QSYLOBJP
      *
      *
      * If valid information was returned
      *
           IF (INFORMATION-STATUS OF QUS-GENERIC-HEADER-0100 = "C"
              OR INFORMATION-STATUS OF QUS-GENERIC-HEADER-0100 = "P")
            IF NUMBER-LIST-ENTRIES OF QUS-GENERIC-HEADER-0100 &gt; 0
      *
      * increment to the first list entry
      *
              SET ADDRESS OF QSY-OBJP0200-LIST TO
                 ADDRESS OF STRING-SPACE(
                 (OFFSET-LIST-DATA OF QUS-GENERIC-HEADER-0100 + 1):1),  <span class="uicontrol">(5)</span>
              SET ADDRESS OF STRING-SPACE TO ADDRESS OF
                 QSY-OBJP0200-LIST,
      *
      * and process all of the entries
      *
              PERFORM PROCES2
                 NUMBER-LIST-ENTRIES OF QUS-GENERIC-HEADER-0100 TIMES,  <span class="uicontrol">(6)</span>
      *
      * If all entries in this User Space have been processed, check
      * if more entries exist than can fit in one User Space
      *
              IF INFORMATION-STATUS OF QUS-GENERIC-HEADER-0100 = "P"
      *
      * by addressing the input parameter header
      *
                 SET ADDRESS OF STRING-SPACE TO SPCPTR,
                 SET ADDRESS OF QSY-OBJP-INPUT TO
                    ADDRESS OF STRING-SPACE((OFFSET-INPUT-PARAMETER
                    OF QUS-GENERIC-HEADER-0100 + 1):1),
      *
      * If the continuation handle in the Input Parameter Header is
      * blank, then set the List status to Complete
      *
                 IF CONTINUATION-HANDLE OF QSY-OBJP-INPUT = SPACES
                    MOVE "C" TO LST-STATUS
                    ELSE
      *
      * Else, call QSYLOBJP reusing the User Space to get more
      * List entries
      *
                    MOVE CONTINUATION-HANDLE OF QSY-OBJP-INPUT
                         TO CONTIN-HDL OF MISC,             <span class="uicontrol">(2)</span>
                    PERFORM GETLST,
                    MOVE INFORMATION-STATUS OF QUS-GENERIC-HEADER-0100
                         TO LST-STATUS,
                    END-IF,
              END-IF,
            END-IF,
           ELSE
      *
      * And if an unexpected status, log an error (not shown) and exit
      *
           PERFORM DONE,
           END-IF.
      *
       PROCES2.
           MOVE CORRESPONDING QSY-OBJP0200-LIST TO OBJ-ENTRY.
           WRITE LIST-LINE FROM OBJ-ENTRY.
      *
      * after each entry, increment to the next entry
      *
           SET ADDRESS OF QSY-OBJP0200-LIST TO ADDRESS OF
              STRING-SPACE(
               (SIZE-EACH-ENTRY OF QUS-GENERIC-HEADER-0100 + 1):1).  <span class="uicontrol">(7)</span>
           SET ADDRESS OF STRING-SPACE TO ADDRESS OF QSY-OBJP0200-LIST.
      *****************************************************************
       GETLST.
      *
      * Call QSYLOBJP to generate a list
      * The continuation handle is set by the caller of this
      * subroutine.
           MOVE "OBJP0200" TO MBR-LIST.
      *
           CALL "QSYLOBJP" USING SPC-NAME, MBR-LIST, USR-PRF,
                                 OBJ-TYPE, CONTIN-HDL, QUS-EC.  <span class="uicontrol">(3)</span>
      *
      * Check for errors on QSYLOBJP
      *
           IF BYTES-AVAILABLE OF QUS-EC &gt; 0
                                 MOVE "QSYLOBJP" TO APINAM,
                                 PERFORM APIERR.
      *****************************************************************
       INIT.
      *
      * One time initialization code for this program
      *
      * Open LISTING file
      *
           OPEN OUTPUT LISTING.
      *
      * Set Error Code structure to not use exceptions
      *
           MOVE LENGTH OF QUS-EC TO BYTES-PROVIDED OF QUS-EC.
      *
      * Check to see if the User Space was previously created in
      * QTEMP.  If it was, simply reuse it.
      *
           CALL "QUSROBJD" USING RCVVAR, RCVVARSIZ, ROBJD-FMT,
                                 SPC-NAME, SPC-TYPE, QUS-EC.
      *
      * Check for errors on QUSROBJD
      *
           IF BYTES-AVAILABLE OF QUS-EC &gt; 0
      *
      * If CPF9801, then User Space was not found
      *
              IF EXCEPTION-ID OF QUS-EC = "CPF9801"
      *
      * So create a User Space for the List generated by QSYLOBJP
      *
                 CALL "QUSCRTUS" USING SPC-NAME, EXT-ATTR, SPC-SIZE,
                                 SPC-INIT, SPC-AUT, SPC-TEXT,
                                 SPC-REPLAC, QUS-EC, SPC-DOMAIN
      *
      * Check for errors on QUSCRTUS
      *
                 IF BYTES-AVAILABLE OF QUS-EC &gt; 0
                                   MOVE "QUSCRTUS" TO APINAM,
                                   PERFORM APIERR,
                                   ELSE
                                   CONTINUE,
              ELSE
      *
      * Else, an error occurred accessing the User Space
      *
                 MOVE "QUSROBJD" TO APINAM,
                 PERFORM APIERR.
      *
      * Set QSYLOBJP (via GETLST) to start a new list
      *
           MOVE SPACES TO CONTIN-HDL.
           PERFORM GETLST.
      *
      * Get a resolved pointer to the User Space for performance
      *
           CALL "QUSPTRUS" USING SPC-NAME, SPCPTR, QUS-EC.
      *
      * Check for errors on QUSPTRUS
      *
           IF BYTES-AVAILABLE OF QUS-EC &gt; 0
                                MOVE "QUSPTRUS" TO APINAM,
                                PERFORM APIERR.
      *
      * If no error, then set addressability to User Space
      *
           SET ADDRESS OF QUS-GENERIC-HEADER-0100 TO SPCPTR.
           SET ADDRESS OF STRING-SPACE TO SPCPTR.
      *
      *****************************************************************
       APIERR.
      *
      * Log any error encountered, and exit the program
      *
           DISPLAY APINAM.
           DISPLAY EXCEPTION-ID OF QUS-EC.
           PERFORM DONE.
      *****************************************************************
       DONE.
      *
      * Exit the program
      *
           WRITE LIST-LINE FROM END-LIST.
           STOP RUN.</pre>
</div>
</div>
<div>
<div class="familylinks">
<div class="parentlink"><strong>Parent topic:</strong> <a href="listOverview.htm" title="List APIs return a list unique to a given API. The section discusses the characteristics of a list API and provides information that you should be aware of when you use list APIs.">List APIs overview</a></div>
</div>
<div class="relref"><strong>Related reference</strong><br />
<div><a href="listRPG.htm" title="This example program prints a report that shows all objects that adopt owner authority.">Example in RPG: List Object API</a></div>
</div>
</div>
</body>
</html>