CTBDIAG

Description

Manages in-line error handling.

Syntax

COPY CTPUBLIC.
01 CONNECTION        PIC S9(9) COMP SYNC.
01 RETCODE           PIC S9(9) COMP SYNC.
01 COMPILER          PIC S9(9) COMP SYNC.
01 OPERATION         PIC S9(9) COMP SYNC.
01 MSGTYPE           PIC S9(9) COMP SYNC.
01 INDEX             PIC S9(9) COMP SYNC.
01 BUFFER            type.
CALL 'CTBDIAG' USING CONNECTION RETCODE COMPILER OPERATION MSGTYPE INDEX BUFFER.

Parameters

CONNECTION

(I) Handle for this connection. This connection handle must already be allocated with CTBCONALLOC.

RETCODE

(O) Variable where the result from an executed function returns. Its value is one of the codes listed under “Return value,” in this section.

COMPILER

This argument is ignored.

OPERATION

(I) Operation to perform. Assign this argument one of the following values:

Value

Meaning

CS-GET (33)

Retrieves a specific message

CS-CLEAR (35)

Clears message information for this connection.

CS-INIT (36)

Initializes in-line error handling.

CS-STATUS (37)

Returns the current number of stored messages.

CS-MSGLIMIT (38)

Sets the maximum number of messages to store.

MSGTYPE

(I) Type of message or structure on which the operation is to be performed. MSGTYPE can be any of the following symbolic values:

CS-CLIENTMSG-TYPE (4700)

A CLIENTMSG structure. Indicates Client-Library messages.

CS-SERVERMSG-TYPE (4701)

A SERVERMSG structure. Indicates messages sent by the Mainframe ClientConnect or other server.

CS-ALLMSG-TYPE (4702)

Operation is performed on both Client-Library and server messages.

SQLCA-TYPE (4703)

A SQLCA structure.

SQLCODE-TYPE (4704)

A SQLCODE structure.

INDEX

(I) Index number of the message being retrieved. Messages are numbered sequentially: the first message has an index of 1, the second an index of 2, and so forth.

  • If MSGTYP is CS-CLIENTMSG-TYPE, then INDEX refers to Client-Library messages only.

  • If MSGTYP is CS-SERVERMSG-TYPE, then INDEX refers to server messages only.

  • If MSGTYP is CS-ALLMSG-TYPE, then INDEX refers to both Client-Library and server messages.

  • INDEX should be initialized to 1.

BUFFER

(I/O) An integer or a variable (“buffer”) that contains the message. Table 3-11 shows the relationship between BUFFER and other arguments.

This argument is typically either CHAR, a SQLCA structure, or a CLIENTMSG or SERVERMSG structure.

NoteIt is the responsibility of the programmer to provide a buffer large enough to hold the largest possible message. If the buffer is too small, the message will overwrite data in adjacent fields.

Returns

CTBDIAG returns one of the following values:

Value

Meaning

CS-SUCCEED (-1)

The routine completed successfully.

CS-FAIL (-2)

The routine failed. Common reasons for a CTBDIAG failure include:

  • Invalid CONNECTION.

  • Inability to allocate memory.

  • Invalid parameter (for example, parameter is not allowed for operation).

  • Invalid parameter combination.

CS-NOERR (-207)

The application attempted to retrieve a message for which the index number is greater than the number of messages in the queue. For example, the application attempted to retrieve message number 3, when only 2 messages are queued.

Examples

Example 1

The following example uses CTBDIAG to prepare to receive messages. This example is taken from the sample program SYCTSAA5 in Appendix A, “Sample Language Requests.”

    *========================================================
	*==                                                    ==
	*== Subroutine to process input data                   ==
	*==                                                    ==
	*========================================================
        	PROCESS-INPUT.
  
  
       *********************************
       * ALLOCATE A CONNECTION HANDLE. *
       *********************************
  
            MOVE ZERO TO CSL-CON-HANDLE.
  
            CALL 'CTBCONAL' USING CSL-CTX-HANDLE
                                  CSL-RC
                                  CSL-CON-HANDLE.
  
            IF CSL-RC NOT EQUAL CS-SUCCEED
              THEN
                 MOVE SPACES TO MSGSTR
                 STRING 'CTBCONAL failed' DELIMITED BY SIZE INTO MSGSTR
                 PERFORM PRINT-MSG
                 PERFORM ALL-DONE
            END-IF.
 
       *******************
       * SET THE USER ID *
       *******************
  
            CALL 'CTBCONPR' USING CSL-CON-HANDLE
                                  CSL-RC
                                  CS-SET
                                  CS-USERNAME
                                  PF-USER
                                  PF-USER-SIZE
                                  CS-FALSE
                                  OUTLEN.
  
            IF CSL-RC NOT EQUAL CS-SUCCEED
              THEN
                 MOVE SPACES TO MSGSTR
                 STRING 'CTBCONPR for user-id failed' DELIMITED BY SIZE
                                                      INTO MSGSTR
                 PERFORM PRINT-MSG
                 PERFORM ALL-DONE
            END-IF.
  
       ********************
       * SET THE PASSWORD *
       ********************
  
            CALL 'CTBCONPR' USING CSL-CON-HANDLE
                                  CSL-RC
                                  CS-SET
                                  CS-PASSWORD
                                  PF-PWD
                                  PF-PWD-SIZE
                                  CS-FALSE
                                  OUTLEN.
  
            IF CSL-RC NOT EQUAL CS-SUCCEED
              THEN
                 MOVE SPACES TO MSGSTR
                 STRING 'CTBCONPR for password failed' DELIMITED BY SIZE
                                                       INTO MSGSTR
                 PERFORM PRINT-MSG
                 PERFORM ALL-DONE
            END-IF.
  
       ********************
       * SET THE TRAN NAME *
       ********************
  
            IF PF-TRAN-SIZE IS NOT EQUAL TO ZEROES THEN
  
                CALL 'CTBCONPR' USING CSL-CON-HANDLE
                                      CSL-RC
                                      CS-SET
                                      CS-TRANSACTION-NAME
                                      PF-TRAN
                                      PF-TRAN-SIZE
                                      CS-FALSE
                                      OUTLEN
  
                IF CSL-RC NOT EQUAL CS-SUCCEED
                  THEN
                     MOVE SPACES TO MSGSTR
                     STRING 'CTBCONPR for TRAN name failed'
                            DELIMITED BY SIZE INTO MSGSTR
                     PERFORM PRINT-MSG
                     PERFORM ALL-DONE
                  END-IF
  
            END-IF.
  
       *******************************
       * SET THE NET DRIVER PROPERTY *
       *******************************
  
            IF PF-NETDRV = SPACES OR PF-NETDRV = 'LU62'                X
                                  OR PF-NETDRV = 'lu62'
                MOVE CS-LU62 TO NETDRIVER
            ELSE
              IF PF-NETDRV = 'IBMTCPIP' OR PF-NETDRV = 'ibmtcpip'
                MOVE CS-TCPIP TO NETDRIVER
            ELSE
              IF PF-NETDRV = 'INTERLIN' OR PF-NETDRV = 'interlin'
                MOVE CS-INTERLINK TO NETDRIVER
            ELSE
              IF PF-NETDRV = 'CPIC' OR PF-NETDRV = 'cpic'
                MOVE CS-NCPIC TO NETDRIVER
            END-IF.
  
            IF PF-DRV-SIZE IS NOT EQUAL TO ZEROES THEN
  
                CALL 'CTBCONPR' USING CSL-CON-HANDLE
                                      CSL-RC
                                      CS-SET
                                      CS-NET-DRIVER
                                      NETDRIVER
                                      CS-UNUSED
                                      CS-FALSE
                                      OUTLEN
  
                IF CSL-RC NOT EQUAL CS-SUCCEED
                  THEN
                     MOVE SPACES TO MSGSTR
                     STRING 'CTBCONPR for network driver failed'
                            DELIMITED BY SIZE INTO MSGSTR
                     PERFORM PRINT-MSG
                     PERFORM ALL-DONE
                  END-IF
  
            END-IF.
  
       ********************************
       * SET FOR MAINFRAME EXTRA INFO *
       ********************************
  
            CALL 'CTBCONPR' USING CSL-CON-HANDLE
                                  CSL-RC
                                  CS-SET
                                  CS-EXTRA-INF
                                  CS-TRUE
                                  CS-UNUSED
                                  CS-FALSE
                                  CS-UNUSED.
  
            IF CSL-RC NOT EQUAL CS-SUCCEED
              THEN
                 MOVE SPACES TO MSGSTR
                 STRING 'CTBCONPR for extra info failed'
                                    DELIMITED BY SIZE INTO MSGSTR
                 PERFORM PRINT-MSG
                 PERFORM ALL-DONE
            END-IF.
  
       ***********************************
       * SETUP retrieval of All Messages *
       ***********************************
  
            CALL 'CTBDIAG' USING CSL-CON-HANDLE,
                                 CSL-RC,
                                 CS-UNUSED,
                                 CS-INIT,
                                 CS-ALLMSG-TYPE,
                                 CS-UNUSED,
                                 CS-UNUSED.
  
            IF CSL-RC NOT EQUAL CS-SUCCEED
              THEN
                MOVE SPACES TO MSGSTR
                STRING 'CTBDIAG CS-INIT failed' DELIMITED BY SIZE
                                                       INTO MSGSTR
                PERFORM PRINT-MSG
                PERFORM ALL-DONE
            END-IF.
  
       *********************************************
       * set the upper limit of number of messages *
       *********************************************
  
            MOVE 5 TO PF-MSGLIMIT.
  
            CALL 'CTBDIAG' USING CSL-CON-HANDLE,
                                 CSL-RC,
                                 CS-UNUSED,
                                 CS-MSGLIMIT,
                                 CS-ALLMSG-TYPE,
                                 CS-UNUSED,
                                 PF-MSGLIMIT.
  
            IF CSL-RC NOT EQUAL CS-SUCCEED
              THEN
                MOVE SPACES TO MSGSTR
                STRING 'CTBDIAG CS-MSGLIMIT failed' DELIMITED BY SIZE
                                                       INTO MSGSTR
                PERFORM PRINT-MSG
                PERFORM ALL-DONE
            END-IF.
  
       *************************
       * CONNECT TO THE SERVER *
       *************************
  
            CALL 'CTBCONNE' USING CSL-CON-HANDLE
                                  CSL-RC
                                  PF-SERVER
                                  PF-SERVER-SIZE
                                  CS-FALSE.
  
            IF CSL-RC NOT EQUAL CS-SUCCEED
              THEN
                 MOVE SPACES TO MSGSTR
                 STRING 'CTBCONNE failed' DELIMITED BY SIZE INTO MSGSTR
                 PERFORM PRINT-MSG
                 PERFORM ALL-DONE
            END-IF.
  
            IF NO-ERRORS
              THEN
                PERFORM SEND-COMMAND
            END-IF.
  

Example 2

The following example uses CTBDIAG to retrieve diagnostic messages. This example is taken from the sample program SYCTSAA5 in Appendix A, “Sample Language Requests.”

        *====================================================
		 *==                                                ==
		 *== Subroutine to retrieve any diagnostic messages ==
		 *==                                                ==
		 *====================================================
        			GET-DIAG-MESSAGES.
  
       ************************************
       * Disable calls to this subroutine *
       ************************************
  
            MOVE 'N' TO SW-DIAG.
  
       ******************************
       * First, get client messages *
       ******************************
  
            CALL 'CTBDIAG' USING CSL-CON-HANDLE,
                                 CSL-RC,
                                 CS-UNUSED,
                                 CS-STATUS,
                                 CS-CLIENTMSG-TYPE,
                                 CS-UNUSED,
                                 DG-NUM-OF-MSGS.
  
            IF CSL-RC NOT EQUAL CS-SUCCEED
              THEN
                MOVE SPACES TO MSGSTR
                STRING 'CTBDIAG CS-STATUS CS-CLIENTMSG-TYP fail'
                                DELIMITED BY SIZE INTO MSGSTR
                PERFORM PRINT-MSG
                PERFORM ALL-DONE
              ELSE
                IF DG-NUM-OF-MSGS > 0
                  THEN
                    PERFORM RETRIEVE-CLIENT-MSGS
                        VARYING I FROM 1 BY 1
                            UNTIL I IS GREATER THAN DG-NUM-OF-MSGS
                END-IF
            END-IF.
  
       *****************************
       * Then, get server messages *
       *****************************
  
            CALL 'CTBDIAG' USING CSL-CON-HANDLE,
                                 CSL-RC,
                                 CS-UNUSED,
                                 CS-STATUS,
                                 CS-SERVERMSG-TYPE,
                                 CS-UNUSED,
                                 DG-NUM-OF-MSGS.
  
            IF CSL-RC NOT EQUAL CS-SUCCEED
              THEN
                STRING 'CTBDIAG CS-STATUS CS-SERVERMSG-TYP fail'
                                DELIMITED BY SIZE INTO MSGSTR
                PERFORM PRINT-MSG
                PERFORM ALL-DONE
              ELSE
                IF DG-NUM-OF-MSGS > 0
                  THEN
                    PERFORM RETRIEVE-SERVER-MSGS
                        VARYING I FROM 1 BY 1
                            UNTIL I IS GREATER THAN DG-NUM-OF-MSGS
                END-IF
            END-IF.
  
        GET-DIAG-MESSAGES-EXIT.
            EXIT.
  
       *============================================================
       *==                                                        ==
       *== Subroutine to retrieve diagnostic messages from client ==
       *==                                                        ==
       *============================================================
        RETRIEVE-CLIENT-MSGS.
  
            MOVE 1 TO I1.
  
            CALL 'CTBDIAG' USING CSL-CON-HANDLE,
                                 CSL-RC,
                                 CS-UNUSED,
                                 CS-GET,
                                 CS-CLIENTMSG-TYPE,
                                 DG-MSGNO,
                                 CLIENT-MSG.
  
            IF CSL-RC NOT EQUAL CS-SUCCEED
              THEN
                MOVE SPACES TO MSGSTR
                STRING 'CTBDIAG CS-GET CS-CLIENTMSG-TYPE failed'
                                DELIMITED BY SIZE INTO MSGSTR
                PERFORM PRINT-MSG
                PERFORM ALL-DONE
            END-IF.
  
       ************************
       * display message text *
       ************************
  
            MOVE DISP-CLIENT-MSG-HDR TO RSLTNO( I1 ).
            MOVE 3 TO I1.
  
            MOVE CM-SEVERITY       TO CM-SEVERITY-DATA.
            MOVE CM-STATUS         TO CM-STATUS-DATA.
            MOVE DISP-CLIENT-MSG-1 TO RSLTNO( I1 ).
            COMPUTE I1 EQUAL I1 + 1
  
            MOVE CM-MSGNO          TO CM-OC-MSGNO-DATA.
            MOVE DISP-CLIENT-MSG-2 TO RSLTNO( I1 ).
            COMPUTE I1 EQUAL I1 + 1
  
            IF CM-MSGNO NOT EQUAL 0
              THEN
                MOVE SPACES            TO CM-OC-MSG-DATA
                MOVE CM-TEXT           TO CM-OC-MSG-DATA
                MOVE CM-TEXT           TO DISP-CLIENT-MSG-3A
                MOVE DISP-CLIENT-MSG-3 TO RSLTNO( I1 )
                COMPUTE I1 EQUAL I1 + 1
                IF CM-TEXT-LEN > 66
                  THEN
                    MOVE CM-OC-MSG-DATA-2   TO CM-OC-MSG-DATA-X
                    MOVE DISP-CLIENT-MSG-3B TO RSLTNO( I1 )
                    COMPUTE I1 EQUAL I1 + 1
                    IF CM-TEXT-LEN > 132
                      THEN
                        MOVE SPACES             TO CM-OC-MSG-DATA-X
                        MOVE CM-OC-MSG-DATA-3   TO CM-OC-MSG-DATA-X
                        MOVE DISP-CLIENT-MSG-3B TO RSLTNO( I1 )
                        COMPUTE I1 EQUAL I1 + 1
                        IF CM-TEXT-LEN > 198
                          THEN
                            MOVE SPACES             TO CM-OC-MSG-DATA-X
                            MOVE CM-OC-MSG-DATA-4   TO CM-OC-MSG-DATA-X
                            MOVE DISP-CLIENT-MSG-3B TO RSLTNO( I1 )
                            COMPUTE I1 EQUAL I1 + 1
                        END-IF
                    END-IF
                  END-IF
              ELSE
                MOVE DISP-EMPTY-CLIENT-MSG-3 TO RSLTNO( I1 )
                COMPUTE I1 EQUAL I1 + 1
            END-IF.
  
            MOVE CM-OS-MSGNO       TO CM-OS-MSGNO-DATA.
            MOVE DISP-CLIENT-MSG-4 TO RSLTNO( I1 ).
            COMPUTE I1 EQUAL I1 + 1
  
            IF CM-OS-MSGNO NOT EQUAL 0
              THEN
                MOVE SPACES            TO CM-OS-MSG-DATA
                MOVE CM-OS-MSGTXT      TO CM-OS-MSG-DATA
                MOVE SPACES            TO DISP-CLIENT-MSG-5A
                MOVE CM-OS-MSGTXT      TO DISP-CLIENT-MSG-5A
                MOVE DISP-CLIENT-MSG-5 TO RSLTNO( I1 )
                COMPUTE I1 EQUAL I1 + 1
                IF CM-OS-MSGTEXT-LEN > 66
                  THEN
                    MOVE SPACES             TO CM-OC-MSG-DATA-X
                    MOVE CM-OS-MSG-DATA-2   TO CM-OC-MSG-DATA-X
                    MOVE DISP-CLIENT-MSG-3B TO RSLTNO( I1 )
                    COMPUTE I1 EQUAL I1 + 1
                    IF CM-OS-MSGTEXT-LEN > 132
                      THEN
                        MOVE SPACES             TO CM-OC-MSG-DATA-X
                        MOVE CM-OS-MSG-DATA-3   TO CM-OC-MSG-DATA-X
                        MOVE DISP-CLIENT-MSG-3B TO RSLTNO( I1 )
                        COMPUTE I1 EQUAL I1 + 1
                        IF CM-OS-MSGTEXT-LEN > 198
                          THEN
                            MOVE SPACES             TO CM-OC-MSG-DATA-X
                            MOVE CM-OS-MSG-DATA-4   TO CM-OC-MSG-DATA-X
                            MOVE DISP-CLIENT-MSG-3B TO RSLTNO( I1 )
                            COMPUTE I1 EQUAL I1 + 1
                        END-IF
                    END-IF
                END-IF
              ELSE
                MOVE DISP-EMPTY-CLIENT-MSG-5 TO RSLTNO( I1 )
                COMPUTE I1 EQUAL I1 + 1
            END-IF.
  
        RETRIEVE-CLIENT-MSGS-EXIT.
            EXIT.
  
       *============================================================
       *==                                                        ==
       *== Subroutine to retrieve diagnostic messages from server ==
       *==                                                        ==
       *============================================================
        RETRIEVE-SERVER-MSGS.
  
            CALL 'CTBDIAG' USING CSL-CON-HANDLE,
                                 CSL-RC,
                                 CS-UNUSED,
                                 CS-GET,
                                 CS-SERVERMSG-TYPE,
                                 DG-MSGNO,
                                 SERVER-MSG.
  
            IF CSL-RC NOT EQUAL CS-SUCCEED
              THEN
                MOVE SPACES TO MSGSTR
                STRING 'CTBDIAG CS-GET CS-SERVERMSG-TYPE failed'
                                DELIMITED BY SIZE INTO MSGSTR
                PERFORM PRINT-MSG
                PERFORM ALL-DONE
            END-IF.
  
       ************************
       * display message text *
       ************************
  
            MOVE SM-MSGNO   TO SM-MSG-NO-DATA.
            MOVE SM-SEV     TO SM-SEVERITY-DATA.
            MOVE SM-STATE   TO SM-STATE-DATA.
  
            MOVE SM-LINE    TO SM-LINE-NO-DATA.
            MOVE SM-STATUS  TO SM-STATUS-DATA.
  
            MOVE SPACES     TO SM-SVRNAME-DATA.
            MOVE SM-SVRNAME TO SM-SVRNAME-DATA.
  
            MOVE SPACES     TO SM-PROC-ID-DATA.
            MOVE SM-PROC    TO SM-PROC-ID-DATA.
  
            MOVE SPACES     TO SM-MSG-DATA.
            MOVE SM-TEXT    TO SM-MSG-DATA.
  
            MOVE SPACES     TO DISP-SERVER-MSG-5A.
            MOVE SM-TEXT    TO DISP-SERVER-MSG-5A.
  
  
            MOVE DISP-SERVER-MSG-HDR TO RSLTNO (1).
            MOVE DISP-SERVER-MSG-1   TO RSLTNO (3).
            MOVE DISP-SERVER-MSG-2   TO RSLTNO (4).
            MOVE DISP-SERVER-MSG-3   TO RSLTNO (5).
            MOVE DISP-SERVER-MSG-4   TO RSLTNO (6).
  
            MOVE DISP-SERVER-MSG-5   TO RSLTNO (7).
            IF SM-TEXT-LEN > 66
              THEN
                MOVE SPACES             TO SM-MSG-DATA-X
                MOVE SM-MSG-DATA-2      TO SM-MSG-DATA-X
                MOVE DISP-SERVER-MSG-5X TO RSLTNO(8)
                IF SM-TEXT-LEN > 132
                  THEN
                    MOVE SPACES             TO SM-MSG-DATA-X
                    MOVE SM-MSG-DATA-3      TO SM-MSG-DATA-X
                    MOVE DISP-SERVER-MSG-5X TO RSLTNO(9)
                    IF SM-TEXT-LEN > 198
                      THEN
                        MOVE SPACES             TO SM-MSG-DATA-X
                        MOVE SM-MSG-DATA-4      TO SM-MSG-DATA-X
                        MOVE DISP-SERVER-MSG-5X TO RSLTNO(10)
                    END-IF
                END-IF
            END-IF.
  
        RETRIEVE-SERVER-MSGS-EXIT.
            EXIT.

Usage

Table 3-11: Summary of arguments (CTBDIAG)

Operation

CTBDIAG action

MSGTYPE value

INDEX value

BUFFER value

CS-INIT

Initializes in-line error handling.

An application must call CTBDIAG with a CS-INIT operation before it can process error messages in line.

CS-UNUSED

CS-UNUSED

Ignored.

CS-CLEAR

Clears message information for this connection.

One of the legal MSGTYPE values.

  • If MSGTYPE is CS-CLIENTMSG-TYPE, CTBDIAG clears Client-Library messages only.

  • If MSGTYPE is CS-SERVERMSG-TYPE, CTBDIAG clears server messages only.

  • If BUFFER is not LOW-VALUES and MSGTYPE is not CS-ALLMSG-TYPE, then CTBDIAG clears the buffer by initializing it with blanks and/or zeroes.

CS-UNUSED

A buffer for which the type is defined by MSGTYPE or is LOW-VALUES.

CS-GET

Retrieves a specific message.

Any legal MSGTYPE value except CS-ALLMSG-TYPE.

  • If MSGTYPE is CS-CLIENTMSG-TYPE,CTBDIAG retrieves a Client-Library message into a CLIENTMSG structure.

  • If MSGTYPE is CS-SERVERMSG-TYPE, CTBDIAG retrieves a server message into a SERVERMSG structure.

  • If MSGTYPE has any other value, CTBDIAG retrieves either a server message or a Client-Library message.

The index number of the message to retrieve.

A buffer whose type is defined by MSGTYPE.

CS-MSGLIMIT

Sets the maximum number of messages to store.

CS-CLIENTMSG-TYPE to limit Client-Library messages only.

CS-SERVERMSG-TYPE to limit server messages only.

CS-ALLMSG-TYPE to limit the total number of Client-Library and server messages combined.

CS-UNUSED

An integer value.

CS-STATUS

Returns the current number of stored messages.

CS-CLIENTMSG-TYPE to retrieve the number of Client-Library messages.

CS-SERVERMSG-TYPE to retrieve the number of server messages.

CS-ALLMSG-TYPE to retrieve the total number of Client-Library and server messages combined.

CS-UNUSED

An integer variable.

See also

Related topics