************************************************************************* 
      ** 
      ** Source File Name = nodecat.cbl 
      ** 
      ** Licensed Materials - Property of IBM 
      ** 
      ** (C) COPYRIGHT International Business Machines Corp. 1995, 2000 
      ** All Rights Reserved. 
      ** 
      ** US Government Users Restricted Rights - Use, duplication or 
      ** disclosure restricted by GSA ADP Schedule Contract with 
      ** 
      **    PURPOSE : 
      **       an example showing how to use the Catalog Node API in order to: 
      **          - create/catalog a node 
      **          - list a directory of nodes (showing what was created) 
      **          - uncatalog the node 
      ** 
      **    APIs USED : 
      **       CATALOG NODE                       sqlgctnd() 
      **       OPEN NODE DIRECTORY SCAN           sqlgnops() 
      **       GET NEXT NODE DIRECTORY ENTRY      sqlgngne() 
      **       CLOSE NODE DIRECTORY SCAN          sqlgncls() 
      **       UNCATALOG NODE                     sqlguncn() 
      **       DEREFERENCE ADDRESS                sqlgdref() 
      ** 
      ** For more information about these samples see the README file. 
      ** 
      ** For more information on Programming in COBOL, see the: 
      **    -  "Programming in COBOL" section of the Application Development Guide. 
      ** 
      ** For more information on Building COBOL Applications, see the: 
      **    - "Building COBOL Applications" section of the Application Building Guide. 
      ** 
      ** For more information on the SQL language see the SQL Reference. 
      ** 
      ************************************************************************* 

       Identification Division.
       Program-Id. "nodecat".

       Data Division.
       Working-Storage Section.

       copy "sqlenv.cbl".
       copy "sqlca.cbl".

      * Variables for catalog/uncatalog nodes 

       77 node-name           pic x(8).
       77 node-name-length    pic s9(4) comp-5 value 0.

      * Local Variables 
       77 rc                  pic s9(9) comp-5.
       77 errloc              pic x(80).
       77 idx                 pic 9(9) comp-5.

      * Variables for OPEN, GET, CLOSE, DEREFERENCE nodes 
       01 buffer              pointer.
       77 sqleninfo-sz        pic 9(4) comp-5 value 460.
       77 disp-host           pic x(50).
       77 handle              pic 9(4) comp-5.
       77 cbl-count           pic 9(4) comp-5.

       Procedure Division.
       nodecat-pgm section.

           display "Sample COBOL Program : nodecat.cbl".

      * Initialize local variables 
           move "newnode" to node-name.
           inspect node-name tallying node-name-length for characters
              before initial " ".
           display " ".

      * Initialize SQL-NODE-STRUCT structure 
           move SQL-NODE-STR-ID to STRUCT-ID of SQL-NODE-STRUCT.
           move "test node : newnode" to COMMENT of SQL-NODE-STRUCT.
           move node-name to NODENAME of SQL-NODE-STRUCT.
           move SQL-PROTOCOL-TCPIP to PROTOCOL of SQL-NODE-STRUCT.

      * for TCP/IP connections, additional information on host and server 
      * needs to be entered 
      * Initialize SQL-NODE-TCPIP structure 
           move "hostname" to HOSTNAME of SQL-NODE-TCPIP.
           move "servicename" to SERVICE-NAME of SQL-NODE-TCPIP.

      ********************************* 
      * CATALOG NODE API called * 
      ********************************* 
           call "sqlgctnd" using
                                 by reference sqlca
                                 by reference SQL-NODE-STRUCT
                                 by reference SQL-NODE-TCPIP
                           returning rc.

           move "CATALOG NODE" to errloc.
           call "checkerr" using SQLCA errloc.

           display "Now listing all nodes".
           perform list-nodes.

      ********************************* 
      * UNCATALOG NODE API called * 
      ********************************* 
           call "sqlguncn" using
                                 by value     node-name-length
                                 by reference sqlca
                                 by reference node-name
                           returning rc.

           move "UNCATALOG NODE" to errloc.
           call "checkerr" using SQLCA errloc.

           display "list all nodes [after uncataloged node]".
           perform list-nodes.

       end-nodecat. stop run.

       list-nodes Section.
      *************************************** 
      * OPEN NODE DIRECTORY SCAN API called * 
      *************************************** 
           call "sqlgnops" using
                                 by reference handle
                                 by reference cbl-count
                                 by reference sqlca
                           returning rc.

           if sqlcode equal SQLE-RC-NODE-DIR-EMPTY
              display "--- Node directory is empty ---"
              go to end-list-nodes.
           move "OPEN NODE DIRECTORY SCAN" to errloc.
           call "checkerr" using SQLCA errloc.

           if cbl-count not equal to 0
           perform get-node-entry thru end-get-node-entry
              varying idx from 0 by 1 until idx equal cbl-count.

      **************************************** 
      * CLOSE NODE DIRECTORY SCAN API called * 
      **************************************** 
           call "sqlgncls" using
                                 by value     handle
                                 by reference sqlca
                           returning rc.

           move "CLOSE NODE DIRECTORY SCAN" to errloc.
           call "checkerr" using SQLCA errloc.

       end-list-nodes. exit.

       get-node-entry Section.

      ******************************************** 
      * GET NEXT NODE DIRECTORY ENTRY API called * 
      ******************************************** 
           call "sqlgngne" using
                                 by value     handle
                                 by reference buffer
                                 by reference sqlca
                           returning rc.

      ********************************** 
      * DEREFERENCE ADDRESS API called * 
      ********************************** 

           call "sqlgdref" using
                                 by value      sqleninfo-sz
                                 by reference  SQLENINFO
                                 by reference  buffer
                           returning rc.

      * printing out the node information 
           move SQL-HOSTNAME of SQLENINFO to disp-host.
           display "node name         : ", SQL-NODE-NAME.
           display "node comment      : ", SQL-COMMENT of SQLENINFO.
           display "node host name    : ", disp-host.
           display "node service name : ", SQL-SERVICE-NAME.

           if SQL-PROTOCOL equal SQL-PROTOCOL-APPC
              display "node protocol     : APPC".

           if SQL-PROTOCOL equal SQL-PROTOCOL-NETB
              display "node protocol     : NetBios".

           if SQL-PROTOCOL equal SQL-PROTOCOL-APPN
              display "node protocol     : APPN".

           if SQL-PROTOCOL equal SQL-PROTOCOL-TCPIP
              display "node protocol     : TCP/IP".

           if SQL-PROTOCOL equal SQL-PROTOCOL-CPIC
              display "node protocol     : CPIC".

           if SQL-PROTOCOL equal SQL-PROTOCOL-IPXSPX
              display "node protocol     : IPX/SPX".

           display " ".

       end-get-node-entry. exit.