Example in ILE RPG: List APIs

This ILE RPG program prints a report that shows all objects that adopt owner authority.

Note: By using the code examples, you agree to the terms of the Code license and disclaimer information.

     F***************************************************************
     F***************************************************************
     F*
     F*  Program:      List objects that adopt owner authority
     F*
     F*  Language:     ILE RPG
     F*
     F*  Description:  This program prints a report showing all objects
     F*                that adopt owner authority.  The two parameters
     F*                passed to the program are the profile to be
     F*                checked and the type of objects to be listed.
     F*                The parameter values are the same as those
     F*                accepted by the QSYLOBJP API.
     F*
     F*  APIs Used:    QSYLOBJP - List Objects that Adopt Owner Authority
     F*                QUSCRTUS - Create User Space
     F*                QUSPTRUS - Retrieve Pointer to User Space
     F*                QUSROBJD - Retrieve Object Description
     F*
     F***************************************************************
     F***************************************************************
     F*
     FQPRINT    O    F  132        PRINTER OFLIND(*INOF)
     D*
     D* Error Code parameter include
     D*
     D/COPY QSYSINC/QRPGLESRC,QUSEC
     D*
     DSPC_NAME         S             20    INZ('ADOPTS    QTEMP     ')
     DSPC_SIZE         S              9B 0 INZ(1)
     DSPC_INIT         S              1    INZ(X'00')
     DLSTPTR           S               *
     DSPCPTR           S               *
     DARR              S              1    BASED(LSTPTR) DIM(32767)
     DRCVVAR           S              8
     DRCVVARSIZ        S              9B 0 INZ(8)
     D*****************************************************************
     D*
     D* The following QUSGEN include from QSYSINC is copied into
     D* this program so that it can be declared as BASED on SPCPTR
     D*
     D*****************************************************************
     DQUSH0100         DS                  BASED(SPCPTR)
     D*                                             Qus Generic Header 0100
     D QUSUA                   1     64
     D*                                             User Area
     D QUSSGH                 65     68B 0
     D*                                             Size Generic Header
     D QUSSRL                 69     72
     D*                                             Structure Release Level
     D QUSFN                  73     80
     D*                                             Format Name
     D QUSAU                  81     90
     D*                                             API Used
     D QUSDTC                 91    103
     D*                                             Date Time Created
     D QUSIS                 104    104
     D*                                             Information Status
     D QUSSUS                105    108B 0
     D*                                             Size User Space
     D QUSOIP                109    112B 0
     D*                                             Offset Input Parameter
     D QUSSIP                113    116B 0
     D*                                             Size Input Parameter
     D QUSOHS                117    120B 0
     D*                                             Offset Header Section
     D QUSSHS                121    124B 0
     D*                                             Size Header Section
     D QUSOLD                125    128B 0
     D*                                             Offset List Data
     D QUSSLD                129    132B 0
     D*                                             Size List Data
     D QUSNBRLE              133    136B 0
     D*                                             Number List Entries
     D QUSSEE                137    140B 0
     D*                                             Size Each Entry
     D QUSSIDLE              141    144B 0
     D*                                             CCSID List Ent
     D QUSCID                145    146
     D*                                             Country ID
     D QUSLID                147    149
     D*                                             Language ID
     D QUSSLI                150    150
     D*                                             Subset List Indicator
     D QUSERVED00            151    192
     D*                                             Reserved
     D*****************************************************************
     D*
     D* The following QSYLOBJP include from QSYSINC is copied into
     D* this program so that it can be declared as BASED on LSTPTR
     D*
     D*****************************************************************
     D QSYLOBJP        C                   'QSYLOBJP'
     D*****************************************************************
     D*Header structure for QSYLOBJP
     D*****************************************************************
     DQSYOBJPH         DS                  BASED(LSTPTR)
     D*                                             Qsy OBJP Header
     D QSYUN00                 1     10
     D*                              User name
     D QSYCV00                11     30
     D*                              Continuation Value
     D*****************************************************************
     D*Record structure for OBJP0200 format
     D*****************************************************************
     DQSY0200L02       DS                  BASED(LSTPTR)
     D*                                             Qsy OBJP0200 List
     D  QSYNAME06              1     10
     D*                                             Name
     D  QSYBRARY06            11     20
     D*                                             Library
     D QSYOBJT13              21     30
     D*                                             Object Type
     D QSYOBJIU00             31     31
     D*                                             Object In Use
     D QSYOBJA11              32     41
     D*                                             Object Attribute
     D QSYOBJT14              42     91
     D*                                             Object Text
     C*
     C* Start of mainline
     C*
     C     *ENTRY        PLIST
     C                   PARM                    USR_PRF          10
     C                   PARM                    OBJ_TYPE         10
     C                   EXSR      INIT
     C                   EXSR      PROCES
     C                   EXSR      DONE
     C*
     C* Start of subroutines
     C*
     C*****************************************************************
     C     PROCES        BEGSR
     C*
     C* This subroutine processes each entry returned by QSYLOBJP
     C*
     C*
     C* Do until the list is complete
     C*
     C                   MOVE      QUSIS         LST_STATUS        1
     C*
     C     LST_STATUS    DOUEQ     'C'                    
     C*
     C* If valid information was returned
     C*
     C     QUSIS         IFEQ      'C'
     C     QUSIS         OREQ      'P'
     C*
     C* and list entries were found
     C*
     C     QUSNBRLE      IFGT      0
     C*
     C* set LSTPTR to the first byte of the User Space           
     C*
     C                   EVAL      LSTPTR = SPCPTR
     C*
     C* increment LSTPTR to the first List entry
     C*
     C                   EVAL      LSTPTR = %ADDR(ARR(QUSOLD + 1))  (5)
     C*
     C* and process all of the entries
     C*
     C                   DO        QUSNBRLE                 (6)
     C                   EXCEPT    OBJ_ENTRY
     C*
     C* after each entry, increment LSTPTR to the next entry
     C*
     C                   EVAL      LSTPTR = %ADDR(ARR(QUSSEE + 1))  (7)
     C                   END
     C                   END
     C*
     C* If all entries in this User Space have been processed, check
     C* if more entries exist than can fit in one User Space
     C*
     C     QUSIS         IFEQ      'P'
     C*
     C* by resetting LSTPTR to the start of the User Space
     C*
     C                   EVAL      LSTPTR = SPCPTR
     C*
     C* and then incrementing LSTPTR to the Input Parameter Header
     C*
     C                   EVAL      LSTPTR = %ADDR(ARR(QUSOIP + 1))
     C*
     C* If the continuation handle in the Input Parameter Header is
     C* blank, then set the List status to Complete
     C*
     C     QSYCV00       IFEQ      *BLANKS
     C                   MOVE      'C'           LST_STATUS
     C                   ELSE
     C*
     C* Else, call QSYLOBJP reusing the User Space to get more
     C* List entries
     C*
     C                   MOVE      QSYCV00       CONTIN_HDL   (2)
     C                   EXSR      GETLST
     C                   MOVE      QUSIS         LST_STATUS
     C                   END
     C                   END
     C                   ELSE
     C*
     C* And if an unexpected status, log an error (not shown) and exit
     C*
     C                   EXSR      DONE
     C                   END
     C                   END
     C                   ENDSR
     C*****************************************************************
     C     GETLST        BEGSR
     C*
     C* Call QSYLOBJP to generate a list
     C* The continuation handle is set by the caller of this
     C* subroutine.
     C*
     C                   CALL      QSYLOBJP
     C                   PARM                    SPC_NAME
     C                   PARM      'OBJP0200'    MBR_LIST          8
     C                   PARM                    USR_PRF
     C                   PARM                    OBJ_TYPE
     C                   PARM                    CONTIN_HDL       20  (3)
     C                   PARM                    QUSEC
     C*
     C* Check for errors on QSYLOBJP
     C*
     C     QUSBAVL       IFGT      0
     C                   MOVEL     'QSYLOBJP'    APINAM           10
     C                   EXSR      APIERR
     C                   END
     C                   ENDSR
     C*****************************************************************
     C     INIT          BEGSR
     C*
     C* One time initialization code for this program
     C*
     C* Set Error Code structure not to use exceptions
     C*
     C                   Z-ADD     16            QUSBPRV
     C*
     C* Check to see if the User Space was previously created in
     C* QTEMP.  If it was, simply reuse it.
     C*
     C                   CALL      'QUSROBJD'
     C                   PARM                    RCVVAR
     C                   PARM                    RCVVARSIZ
     C                   PARM      'OBJD0100'    ROBJD_FMT         8
     C                   PARM                    SPC_NAME
     C                   PARM      '*USRSPC'     SPC_TYPE         10
     C                   PARM                    QUSEC
     C*
     C* Check for errors on QUSROBJD
     C*
     C     QUSBAVL       IFGT      0
     C*
     C* If CPF9801, then User Space was not found
     C*
     C     QUSEI         IFEQ      'CPF9801'
     C*
     C* So create a User Space for the List generated by QSYLOBJP
     C*
     C                   CALL      'QUSCRTUS'
     C                   PARM                    SPC_NAME
     C                   PARM      'QSYLOBJP  '  EXT_ATTR         10
     C                   PARM                    SPC_SIZE
     C                   PARM                    SPC_INIT
     C                   PARM      '*ALL'        SPC_AUT          10
     C                   PARM      *BLANKS       SPC_TEXT         50
     C                   PARM      '*YES'        SPC_REPLAC       10
     C                   PARM                    QUSEC
     C                   PARM      '*USER'       SPC_DOMAIN       10
     C*
     C* Check for errors on QUSCRTUS
     C*
     C     QUSBAVL       IFGT      0
     C                   MOVEL     'QUSCRTUS'    APINAM           10
     C                   EXSR      APIERR
     C                   END
     C*
     C* Else, an error occurred accessing the User Space
     C*
     C                   ELSE
     C                   MOVEL     'QUSROBJD'    APINAM           10
     C                   EXSR      APIERR
     C                   END
     C                   END
     C*
     C* Set QSYLOBJP (via GETLST) to start a new list
     C*
     C                   MOVE      *BLANKS       CONTIN_HDL
     C                   EXSR      GETLST
     C*
     C* Get a resolved pointer to the User Space for performance
     C*
     C                   CALL      'QUSPTRUS'
     C                   PARM                    SPC_NAME
     C                   PARM                    SPCPTR
     C                   PARM                    QUSEC
     C*
     C* Check for errors on QUSPTRUS
     C*
     C     QUSBAVL       IFGT      0
     C                   MOVEL     'QUSPTRUS'    APINAM           10
     C                   EXSR      APIERR
     C                   END
     C                   ENDSR
     C*****************************************************************
     C     APIERR        BEGSR
     C*
     C* Log any error encountered, and exit the program
     C*
     C     APINAM        DSPLY
     C     QUSEI         DSPLY
     C                   EXSR      DONE
     C                   ENDSR
     C*****************************************************************
     C     DONE          BEGSR
     C*
     C* Exit the program
     C*
     C                   EXCEPT    END_LIST
     C                   EVAL      *INLR = '1'
     C                   RETURN
     C                   ENDSR
     OQPRINT    E            OBJ_ENTRY      1
     O                                              'Object: '
     O                       QSYNAME06
     O                                              ' Library: '
     O                       QSYBRARY06
     O                                              ' Type: '
     O                       QSYOBJT13
     O                                              ' Text: '
     O                       QSYOBJT14
     OQPRINT    E            END_LIST       1
     O                                              '*** End of List'