Sample program – SYCTSAR5

*@(#) syctsar5.cobol 11.2 12/14/95
  
      
 *******************************************************************
 *
 * Confidential property of Sybase, Inc.
 * (c) Copyright Sybase, Inc. 1985 TO 1997.
 * All rights reserved.
 *
 *******************************************************************
 ******* SYCTSAR5 - Client Language Request APPL - COBOL - CICS **
 **
 **  CICS TRANID:   SYR5
 **  PROGRAM:  SYCTSAR5
 **
 **  PURPOSE:  Demonstrates Open Client for CICS CALLs.
 **
 **  FUNCTION: Illustrates how to send an RPC request with
 **            parameters to:
 **
 **              - A SQL Server
 **              - An Open Server running in a CICS/IMS region.
 **
 **            SQL Server:
 **
 **              If the request is sent to a SQL Server it
 **              intitiates the stored procedure "SYR2".
 **
 **               Note: The Net-Gateway/MCG product includes a script
 **                     that creates this procedure in a target SQL
 **                     server.
 **
 **            Open Server/CICS or Open Server/IMS:
 **
 **              If the request is sent to an Open Server/CICS or
 **              IMS region, it initiates the transaction SYR2.
 **
 **              Note: Both Open Server/CICS and IMS products
 **                    include the sample transaction SYR2. This
 **                    is the server side transaction invoked by
 **                    this transaction.
 **
 **  PREREQS:  Before running SYCTSAR5, make sure that the server
 **            you wish to access has an entry in the Connection
 **            Router Table for that Server and the MCG(s) that
 **            you wish to use.
 **
 **
 **  INPUT:    On the input screen, make sure to enter the Server
 **            name, user id, and password for the target server.
 **            TRAN NAME is not used for LAN servers.
 **
 **            If the target server is in a CICS or IMS region,
 **            enter SYR2 in the TRAN NAME field.
 **
 **
 **  Open Client CALLs used in this sample:
 **
 **    CSBCTXALLOC   allocate a context
 **    CSBCTXDROP    drop a context
 **    CTBBIND       bind a column variable
 **    CTBCLOSE      close a server connection
 **    CTBCMDALLOC   allocate a command
 **    CTBCMDDROP    drop a command
 **    CTBCOMMAND    initiate remote procedure CALL
 **    CTBCONALLOC   allocate a connection
 **    CTBCONDROP    drop a connection
 **    CTBCONPROPS   alter properties of a connection
 **    CTBCONNECT    open a server connection
 **    CTBDESCRIBE   return a description of RESULT data
 **    CTBDIAG       retrieve SQLCODE messages
 **    CTBEXIT       exit client library
 **    CTBFETCH      FETCH RESULT data
 **    CTBINIT       init client library
 **    CTBPARAM      define a command PARAMETER
 **    CTBRESULTS    set up RESULT data
 **    CTBSEND       send a request TO the server
 **
 ** History:
 **
 ** Date    BTS#   Descrition
 ** ======= ====== ===============================================
 ** Feb1795        Create
 ** Oct1895 99999  Rewrite and add front end to the program
 **
 ******************************************************************
  
  IDENTIFICATION DIVISION.
  PROGRAM-ID. SYCTSAR5.
  ENVIRONMENT DIVISION.
  CONFIGURATION SECTION.
  SOURCE-COMPUTER. XYZ.
  OBJECT-COMPUTER. XYZ.
  
  DATA DIVISION.
  WORKING-STORAGE SECTION.
  
 ******************************************************************
 ** Client Library Cobol Copy Book
 ******************************************************************
  
  COPY CTPUBLIC.
  
 ******************************************************************
 ** CICS BMS DEFINITIONS
 ******************************************************************
  
    COPY SYCTBA5.
  
 *****************************************************************
 *  Standard CICS Attribute and Print Control Chararcter List
 *****************************************************************
  
    COPY DFHBMSCA.
  
 ******************************************************************
 ** CICS Standard Attention Identifiers Cobol Copy Book
 ******************************************************************
  
    COPY DFHAID.
  
 *****************************************************************
 *    CONSTANTS
 *****************************************************************
  
  01  MSG-TEXT-1                PIC X(70) VALUE ' '.
  01  MSG-TEXT-2                PIC X(70)
                                  VALUE 'Press Clear To Exit'.
  01  PAGE-CNT                  PIC S9(4) COMP VALUE +0.
  01  UTIME                     PIC S9(15) COMP-3.
  01  TMP-DATE                  PIC X(08).
  01  TMP-TIME                  PIC X(08).
  01  ENTER-DATA-SW               PIC X(01) VALUE 'N'.
  
  01  C-N                       PIC X(01) VALUE 'N'.
  01  C-Y                       PIC X(01) VALUE 'Y'.
  01  MAX-SCREEN-ROWS           PIC S9(4) VALUE +10.
  
  01 RESTYPE                    PIC S9(9) COMP SYNC VALUE IS 0.
  01 NETDRIVER                  PIC S9(9) COMP SYNC VALUE IS 9999.
  01 DATALEN                    PIC S9(9) COMP SYNC VALUE IS 0.
  01 INTARG                     PIC S9(9) COMP SYNC VALUE IS 0.
  01 INDIC                      PIC S9(9) COMP SYNC VALUE IS 0.
  01 CMDSTR                     PIC X(200) VALUE IS SPACES.
  01 STATUS-BIND                PIC S9(9) COMP SYNC VALUE IS 0.
  01 STATUS-OK                  PIC S9(9) COMP SYNC VALUE IS 0.
  
  01  BAD-INPUT                 PIC X(01) VALUE 'N'.
  
  01  NO-MORE-MSGS-SW           PIC X(01).
      88  NO-MORE-MSGS            VALUE 'Y'.
  
  01  NO-ERRORS-SW              PIC X(01).
      88  NO-ERRORS               VALUE 'N'.
  
  01  SWITCHES.
      05 SW-RESULTS             PIC X(01) VALUE 'Y'.
         88  NO-MORE-RESULTS      VALUE 'N'.
      05 SW-FETCH               PIC X(01) VALUE 'Y'.
         88  NO-MORE-ROWS          VALUE 'N'.
      05 SW-DIAG                PIC X(01) VALUE 'N'.
         88  DIAG-MSGS-INITIALIZED VALUE 'Y'.
  
  01  CS-LIB-MISC-FIELDS.
      05  CSL-CMD-HANDLE        PIC S9(9) COMP VALUE +0.
      05  CSL-CON-HANDLE        PIC S9(9) COMP VALUE +0.
      05  CSL-CTX-HANDLE        PIC S9(9) COMP VALUE +0.
      05  CSL-NULL              PIC S9(9) COMP VALUE +0.
      05  CSL-RC                PIC S9(9) COMP VALUE +0.
  
  01  PROPS-FIELDS.
      05  PF-SERVER             PIC X(30) VALUE IS SPACES.
      05  PF-SERVER-SIZE        PIC S9(9) COMP VALUE +0.
      05  PF-USER               PIC X(08) VALUE IS SPACES.
      05  PF-USER-SIZE          PIC S9(9) COMP VALUE +0.
      05  PF-PWD                PIC X(08) VALUE IS SPACES.
      05  PF-PWD-SIZE           PIC S9(9) COMP VALUE +0.
      05  PF-TRAN               PIC X(08) VALUE IS SPACES.
      05  PF-TRAN-SIZE          PIC S9(9) COMP VALUE +0.
      05  PF-NETDRV             PIC X(08) VALUE IS SPACES.
      05  PF-DRV-SIZE           PIC S9(9) COMP VALUE +0.
      05  PF-DEPT               PIC X(03) VALUE 'D11'.
      05  PF-DEPT-SIZE          PIC S9(9) COMP VALUE +3.
      05  PF-STRLEN             PIC S9(9) COMP.
      05  PF-MSGLIMIT           PIC S9(9) COMP.
  
  01 PARM1                      PIC S9(9) COMP SYNC.
  01 PARM2.
     49 PLEN-RET                PIC S9(4) COMP SYNC.
     49 PARR-RET                PIC X(3) VALUE IS SPACES.
  
  01 DISP-PARM.
     05 FILLER                  PIC X(1) VALUE IS '('.
     05 RETPARM-VAL             PIC 99999.
     05 RET-PARMMSG             PIC X(17) VALUE IS
                                      ' row(s) affected)'.
     05 FILLER                  PIC X(50) VALUE IS SPACES.
  
  01 DISP-ROW.
     05 ROW1-VAL                PIC X(12) VALUE IS SPACES.
     05  FILLER                 PIC X(01) VALUE IS SPACES.
     05 ROW2-VAL                PIC X(15) VALUE IS SPACES.
     05  FILLER                 PIC X(01) VALUE IS SPACES.
     05 ROW3-VAL                PIC zz9-.
     05  FILLER                 PIC X(08) VALUE IS SPACES.
     05 ROW4-VAL                PIC zz.-.
     05  FILLER                 PIC X(06) VALUE IS SPACES.
     05 ROW5-VAL.
         49   LOW-VAL           PIC  ZZ,ZZZ.99-.
     05  FILLER                 PIC X(14) VALUE IS SPACES.
  
  01 ROW1-BIND.
     49  ROW1-LEN               PIC S9(4) COMP SYNC VALUE IS 0.
     49  ROW1-TEXT              PIC X(12) VALUE IS SPACES.
  
  01 ROW2-BIND.
     49  ROW2-LEN               PIC S9(4) COMP SYNC VALUE IS 0.
     49  ROW2-TEXT              PIC X(15) VALUE IS SPACES.
  
  01 ROW3-BIND                  PIC S9(4) COMP SYNC VALUE IS 0.
  
  01 ROW4-BIND.
     49 HIGH4-BIND              PIC S9(9) COMP SYNC VALUE IS 0.
     49 LOW4-BIND               PIC S9(5)V9(4) COMP SYNC
                                                  VALUE IS 0.
  01 ROW5-BIND.
     49 HIGH-BIND               PIC S9(9) COMP SYNC VALUE IS 0.
     49 LOW-BIND                PIC S9(5)V9(4) COMP SYNC
                                                  VALUE IS 0.
  01 OUTLEN                     PIC S9(9) COMP SYNC VALUE IS 0.
  01 NUMROWS                    PIC S9(9) COMP SYNC VALUE IS 0.
  01 I                          PIC S9(9) COMP SYNC VALUE IS 0.
  01 I1                         PIC S9(9) COMP SYNC VALUE IS 0.
  01 I2                         PIC S9(9) COMP SYNC VALUE IS 0.
  01 COPIED                     PIC S9(9) COMP SYNC VALUE IS 0.
  01 COPIED-NULL                PIC S9(9) COMP SYNC VALUE IS 0.
  01 INDICATOR                  PIC S9(9) COMP SYNC VALUE IS 0.
  01 INDICATOR-NULL             PIC S9(9) COMP SYNC VALUE IS 0.
  
  01 DISP-MSG.
     05 TEST-CASE               PIC X(08) VALUE IS 'SYCTSAR5'.
     05 FILLER                  PIC X(01) VALUE IS SPACES.
     05 MSG.
        10 SAMP-LIT             PIC X(05) VALUE IS 'rc = '.
        10 SAMP-RC              PIC -Z9.
        10 FILLER               PIC X(02) VALUE IS ', '.
        10 REST-LIT             PIC X(12) VALUE IS
                                   'Result Type:'.
        10 REST-TYPE            PIC Z(3)9.
        10 FILLER               PIC X(03) VALUE IS SPACES.
        10 MSGSTR               PIC X(40) VALUE IS SPACES.
  
  01 DATAFMT-PARM.
         05 NM-PARM             PIC X(132).
         05 NMLEN-PARM          PIC S9(9) COMP SYNC.
         05 DATATYPE-PARM       PIC S9(9) COMP SYNC.
         05 FORMT-PARM          PIC S9(9) COMP SYNC.
         05 MAXLENGTH-PARM      PIC S9(9) COMP SYNC.
         05 SCALE-PARM          PIC S9(9) COMP SYNC.
         05 PRECISION-PARM      PIC S9(9) COMP SYNC.
         05 FMTSTATUS-PARM      PIC S9(9) COMP SYNC.
         05 FMTCOUNT-PARM       PIC S9(9) COMP SYNC.
         05 USERTYPE-PARM       PIC S9(9) COMP SYNC.
         05 LOCALE-PARM         PIC X(68).
  
  01 DATAFMT-BIND.
         05 NM-BIND             PIC X(132).
         05 NMLEN-BIND          PIC S9(9) COMP SYNC.
         05 DATATYPE-BIND       PIC S9(9) COMP SYNC.
         05 FORMT-BIND          PIC S9(9) COMP SYNC.
         05 MAXLENGTH-BIND      PIC S9(9) COMP SYNC.
         05 SCALE-BIND          PIC S9(9) COMP SYNC.
         05 PRECISION-BIND      PIC S9(9) COMP SYNC.
         05 FMTSTATUS-BIND      PIC S9(9) COMP SYNC.
         05 FMTCOUNT-BIND       PIC S9(9) COMP SYNC.
         05 USERTYPE-BIND       PIC S9(9) COMP SYNC.
         05 LOCALE-BIND         PIC X(68).
  
  01 WCOLUMN                    PIC S9(9) COMP SYNC.
  
  01  DIAG-FIELDS.
      05  DF-MSGNO              PIC S9(9) COMP VALUE +1.
      05  DF-NUM-OF-MSGS        PIC S9(9) COMP VALUE +0.
  
 *******************************
 ** Client Message Structure  **
 *******************************
  
  01  CLIENT-MSG.
      05  CM-SEVERITY           PIC S9(9) COMP SYNC.
      05  CM-MSGNO              PIC S9(9) COMP SYNC.
      05  CM-TEXT               PIC X(256).
      05  CM-TEXT-LEN           PIC S9(9) COMP SYNC.
      05  CM-OS-MSGNO           PIC S9(9) COMP SYNC.
      05  CM-OS-MSGTXT          PIC X(256).
      05  CM-OS-MSGTEXT-LEN     PIC S9(9) COMP SYNC.
      05  CM-STATUS             PIC S9(9) COMP.
  
  01  DISP-CLIENT-MSG-HDR.
      05  CLIENT-MSG-HDR        PIC X(15) VALUE IS
                                    'Client Message:'.
  
  01  DISP-CLIENT-MSG-1.
      05  FILLER                PIC X(02) VALUE IS SPACES.
      05  CM-SEVERITY-HDR       PIC X(09) VALUE IS 'Severity:'.
      05  FILLER                PIC X(02) VALUE IS SPACES.
      05  CM-SEVERITY-DATA      PIC Z(8)9.
      05  CM-STATUS-HDR         PIC X(12) VALUE IS
                                    ',  Status:  '.
      05  FILLER                PIC X(02) VALUE IS SPACES.
      05  CM-STATUS-DATA        PIC Z(8)9.
  
  01  DISP-CLIENT-MSG-2.
      05  FILLER                PIC X(02) VALUE IS SPACES.
      05  CM-OC-MSGNO-HDR       PIC X(09) VALUE IS 'OC MsgNo:'.
      05  FILLER                PIC X(02) VALUE IS SPACES.
      05  CM-OC-MSGNO-DATA      PIC Z(8)9.
  
  01  DISP-CLIENT-MSG-3.
      05  FILLER                PIC X(02) VALUE IS SPACES.
      05  CM-OC-MSG-HDR         PIC X(09) VALUE IS 'OC MsgTx:'.
      05  FILLER                PIC X(02) VALUE IS SPACES.
      05  CM-OC-MSG-DATA        PIC X(66).
  
  01  DISP-CLIENT-MSG-3A.
      05  CM-OC-MSG-DATA-1      PIC X(66).
      05  CM-OC-MSG-DATA-2      PIC X(66).
      05  CM-OC-MSG-DATA-3      PIC X(66).
      05  CM-OC-MSG-DATA-4      PIC X(58).
  
  01  DISP-CLIENT-MSG-3B.
      05  FILLER                PIC X(13) VALUE IS SPACES.
      05  CM-OC-MSG-DATA-X      PIC X(66).
  
  01  DISP-EMPTY-CLIENT-MSG-3.
      05  FILLER                PIC X(02) VALUE IS SPACES.
      05  CM-OC-MSG-HDR         PIC X(09) VALUE IS 'OC MsgTx:'.
      05  FILLER                PIC X(02) VALUE IS SPACES.
      05  NO-DATA               PIC X(11) VALUE IS 'No Message!'.
  
  01  DISP-CLIENT-MSG-4.
      05  FILLER                PIC X(02) VALUE IS SPACES.
      05  CM-OS-MSG-HDR         PIC X(09) VALUE IS 'OS MsgNo:'.
      05  FILLER                PIC X(02) VALUE IS SPACES.
      05  CM-OS-MSGNO-DATA      PIC Z(8)9.
  
  01  DISP-CLIENT-MSG-5.
      05  FILLER                PIC X(02) VALUE IS SPACES.
      05  CM-OS-MSG-HDR         PIC X(09) VALUE IS 'OS MsgTx:'.
      05  FILLER                PIC X(02) VALUE IS SPACES.
      05  CM-OS-MSG-DATA        PIC X(66).
  
  01  DISP-CLIENT-MSG-5A.
      05  CM-OS-MSG-DATA-1      PIC X(66).
      05  CM-OS-MSG-DATA-2      PIC X(66).
      05  CM-OS-MSG-DATA-3      PIC X(66).
      05  CM-OS-MSG-DATA-4      PIC X(58).
  
  01  DISP-EMPTY-CLIENT-MSG-5.
      05  FILLER                PIC X(02) VALUE IS SPACES.
      05  CM-OS-MSG-HDR         PIC X(09) VALUE IS 'OS MsgTx:'.
      05  FILLER                PIC X(02) VALUE IS SPACES.
      05  NO-DATA               PIC X(11) VALUE IS 'No Message!'.
  
 *******************************
 ** Server Message Structure  **
 *******************************
  
  01  SERVER-MSG.
      05  SM-MSGNO              PIC S9(9) COMP.
      05  SM-STATE              PIC S9(9) COMP.
      05  SM-SEV                PIC S9(9) COMP.
      05  SM-TEXT               PIC X(256).
      05  SM-TEXT-LEN           PIC S9(9) COMP.
      05  SM-SVRNAME            PIC X(256).
      05  SM-SVRNAME-LEN        PIC S9(9) COMP.
      05  SM-PROC               PIC X(256).
      05  SM-PROC-LEN           PIC S9(9) COMP.
      05  SM-LINE               PIC S9(9) COMP.
      05  SM-STATUS             PIC S9(9) COMP.
  
  01  DISP-SERVER-MSG-HDR.
      05  SERVER-MSG-HDR        PIC X(15) VALUE IS
                                    'Server Message:'.
  
  01  DISP-SERVER-MSG-1.
      05  FILLER                PIC X(02) VALUE IS SPACES.
      05  SM-MSG-NO-HDR         PIC X(09) VALUE IS
                                    'Message#:'.
      05  FILLER                PIC X(02) VALUE IS SPACES.
      05  SM-MSG-NO-DATA        PIC Z(8)9.
      05  SM-SEVERITY-HDR       PIC X(12) VALUE IS
                                    ',  Severity:'.
      05  FILLER                PIC X(02) VALUE IS SPACES.
      05  SM-SEVERITY-DATA      PIC Z(8)9.
      05  SM-STATE-HDR          PIC X(12) VALUE IS
                                    ',  State No:'.
      05  FILLER                PIC X(02) VALUE IS SPACES.
      05  SM-STATE-DATA         PIC Z(8)9.
  
  01  DISP-SERVER-MSG-2.
      05  FILLER                PIC X(02) VALUE IS SPACES.
      05  SM-LINE-NO-HDR        PIC X(09) VALUE IS
                                    'Line  No:'.
      05  FILLER                PIC X(02) VALUE IS SPACES.
      05  SM-LINE-NO-DATA       PIC Z(8)9.
      05  SM-STATUS-HDR         PIC X(12) VALUE IS
                                    ',  Status  :'.
      05  FILLER                PIC X(02) VALUE IS SPACES.
      05  SM-STATUS-DATA        PIC Z(8)9.
  
  01  DISP-SERVER-MSG-3.
      05  FILLER                PIC X(02) VALUE IS SPACES.
      05  SM-SVRNAME-HDR        PIC X(09) VALUE IS 'Serv Nam:'.
      05  FILLER                PIC X(02) VALUE IS SPACES.
      05  SM-SVRNAME-DATA       PIC X(66).
      05  FILLER                PIC X(03) VALUE IS '...'.
  
  01  DISP-SERVER-MSG-4.
      05  FILLER                PIC X(02) VALUE IS SPACES.
      05  SM-PROC-ID-HDR        PIC X(09) VALUE IS 'Proc  ID:'.
      05  FILLER                PIC X(02) VALUE IS SPACES.
      05  SM-PROC-ID-DATA       PIC X(66).
  
  01  DISP-SERVER-MSG-5.
      05  FILLER                PIC X(02) VALUE IS SPACES.
      05  SM-MSG-HDR            PIC X(09) VALUE IS 'Message :'.
      05  FILLER                PIC X(02) VALUE IS SPACES.
      05  SM-MSG-DATA           PIC X(66).
  
  01  DISP-SERVER-MSG-5A.
      05  SM-MSG-DATA-1         PIC X(66).
      05  SM-MSG-DATA-2         PIC X(66).
      05  SM-MSG-DATA-3         PIC X(66).
      05  SM-MSG-DATA-4         PIC X(58).
  
  01  DISP-SERVER-MSG-5X.
      05  FILLER                PIC X(13) VALUE IS SPACES.
      05  SM-MSG-DATA-X         PIC X(66).
  
  01  CICS-FIELDS.
      05  CICS-RESPONSE         PIC S9(9) COMP.
  
  01  QUERY-FIELDS.
      05  QF-LEN                PIC S9(4) COMP VALUE +1.
      05  QF-MAXLEN             PIC S9(4) COMP VALUE +1.
      05  QF-ANSWER             PIC X(01) VALUE IS SPACES.
  
 ******************************************************************
  PROCEDURE DIVISION.
 ******************************************************************
  
 **************************
 * CICS Condition Handler *
 **************************
  
      EXEC CICS HANDLE CONDITION MAPFAIL(NO-INPUT)
                                 ERROR(ERRORS)
      END-EXEC.
  
 ********************
 * CICS Aid Handler *
 ********************
  
      EXEC CICS HANDLE AID ANYKEY(NO-INPUT)
                           CLEAR(GETOUT)
      END-EXEC.
  
 **************************
 * PROGRAM INITIALIZATION *
 **************************
  
      MOVE SPACES     TO DISP-ROW.
      MOVE C-N        TO NO-MORE-MSGS-SW.
      MOVE C-N        TO NO-ERRORS-SW.
      MOVE C-Y        TO SW-DIAG.
  
      MOVE LOW-VALUES TO A5PANELO.
      MOVE -1         TO SERVERL.
  
      COMPUTE PAGE-CNT = PAGE-CNT + 1.
  
      PERFORM GET-SYSTEM-TIME.
  
  GET-INPUT-AGAIN.
  
      PERFORM DISPLAY-INITIAL-SCREEN.
  
      PERFORM GET-INPUT-DATA.
  
 ********************************
 * ALLOCATE A CONTEXT STRUCTURE *
 ********************************
  
      MOVE ZERO       TO CSL-CTX-HANDLE.
      MOVE LOW-VALUES TO DATAFMT-PARM DATAFMT-BIND DISP-ROW.
  
      CALL 'CSBCTXAL' USING CS-VERSION-50
                            CSL-RC
                            CSL-CTX-HANDLE.
  
       IF CSL-RC NOT EQUAL CS-SUCCEED
        THEN
           MOVE SPACES TO MSGSTR
           STRING 'CSBCTXAL failed'
                  DELIMITED BY SIZE INTO MSGSTR
           PERFORM PRINT-MSG
           PERFORM ALL-DONE
       END-IF.
  
 **********************************
 * INTITIALIZE THE CLIENT-LIBRARY *
 **********************************
  
      CALL 'CTBINIT' USING CSL-CTX-HANDLE
                           CSL-RC
                           CS-VERSION-50.
  
      IF CSL-RC NOT EQUAL CS-SUCCEED
        THEN
           MOVE SPACES TO MSGSTR
           STRING 'CTBINIT failed'
                  DELIMITED BY SIZE INTO MSGSTR
           PERFORM PRINT-MSG
           PERFORM ALL-DONE
      END-IF.
  
      PERFORM PROCESS-INPUT.
  
      PERFORM QUIT-CLIENT-LIBRARY.
  
      GOBACK.
  

*========================================================
 *==                                                    ==
 *== Subroutine to get system date/time                 ==
 *==                                                    ==
 *========================================================
  GET-SYSTEM-TIME.
 *----------------
  
      EXEC CICS ASKTIME
                ABSTIME(UTIME)
      END-EXEC.
  
      EXEC CICS FORMATTIME
                ABSTIME(UTIME)
                DATESEP('/')
                MMDDYY(TMP-DATE)
                TIME(TMP-TIME)
                TIMESEP
      END-EXEC.
  
 *========================================================
 *==                                                    ==
 *== Subroutine to display SYD5 initial screen          ==
 *==                                                    ==
 *========================================================
  DISPLAY-INITIAL-SCREEN.
 *----------------------
  
      MOVE TMP-DATE   TO SDATEO.
      MOVE TMP-TIME   TO STIMEO.
      MOVE 'SYCTSAR5' TO PROGNMO.
  
      MOVE PAGE-CNT   TO SPAGEO.
      MOVE MSG-TEXT-1 TO MSG1O.
      MOVE MSG-TEXT-2 TO MSG2O.
  
      EXEC CICS SEND MAP('A5PANEL')
                     MAPSET('SYCTBA5')
                     CURSOR
                     FRSET
                     ERASE
                     FREEKB
      END-EXEC.
  
 *========================================================
 *==                                                    ==
 *== Subroutine to get input data                       ==
 *==                                                    ==
 *========================================================
  GET-INPUT-DATA.
 *---------------
  
      EXEC CICS RECEIVE MAP('A5PANEL')
                     MAPSET('SYCTBA5')
                     ASIS
      END-EXEC.
  
      IF SERVERL = ZERO
        THEN
          IF PF-SERVER = SPACES
            THEN
        MOVE 'Please Enter Server Name' TO MSG-TEXT-1
              MOVE -1                         TO SERVERL
              MOVE C-Y                        TO ENTER-DATA-SW
          END-IF
        ELSE
          MOVE SERVERI   TO PF-SERVER
          MOVE SERVERL   TO PF-SERVER-SIZE
      END-IF.
  
      IF USERL = ZERO
        THEN
          IF PF-USER = SPACES
            THEN
              MOVE 'Please Enter User-ID' TO MSG-TEXT-1
              MOVE -1                     TO USERL
              MOVE C-Y                    TO ENTER-DATA-SW
          END-IF
        ELSE
          MOVE USERI   TO PF-USER
          MOVE USERL   TO PF-USER-SIZE
          MOVE PF-USER TO USERO
      END-IF.
  
      IF PSWDL NOT EQUAL ZERO
        THEN
          MOVE PSWDI TO PF-PWD
          MOVE PSWDL TO PF-PWD-SIZE
      END-IF
  
      IF TRANL NOT EQUAL ZERO
        THEN
          MOVE TRANI TO PF-TRAN
          MOVE TRANL TO PF-TRAN-SIZE
      END-IF.
  
      IF NETDRVL NOT EQUAL ZERO
        THEN
          MOVE NETDRVI TO PF-NETDRV
          MOVE NETDRVL TO PF-DRV-SIZE
      END-IF.
  
      IF ENTER-DATA-SW = C-Y
        THEN
          MOVE C-N TO ENTER-DATA-SW
          PERFORM DISPLAY-INITIAL-SCREEN
          PERFORM GET-INPUT-DATA
      END-IF.
  
 *========================================================
 *==                                                    ==
 *== 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.
  
 *************************
 * 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-PARAM THRU SEND-PARAM-EXIT
      END-IF.
  
 **************************************
 * PROCESS THE RESULTS OF THE COMMAND *
 **************************************
  
      IF NO-ERRORS
        THEN
          PERFORM RESULTS-PROCESSING UNTIL NO-MORE-RESULTS
          PERFORM CLOSE-CONNECTION
      END-IF.
  
  PROCESS-INPUT-EXIT.
      EXIT.
  
 *========================================================
 *==                                                    ==
 *== Subroutine to allocate, send, and process commands ==
 *==                                                    ==
 *========================================================
  SEND-PARAM.
  
 *****************************
 * NOW GET A COMMAND HANDLE. *
 *****************************
  
      MOVE ZERO TO CSL-CMD-HANDLE.
  
      CALL 'CTBCMDAL' USING CSL-CON-HANDLE
                            CSL-RC
                            CSL-CMD-HANDLE.
  
      IF CSL-RC NOT EQUAL CS-SUCCEED
        THEN
          MOVE SPACES TO MSGSTR
          STRING 'CTBCMDAL failed'
                 DELIMITED BY SIZE INTO MSGSTR
          PERFORM PRINT-MSG
          PERFORM ALL-DONE
      END-IF.
  

************************************************************
 * INITIATE THE STORED PROCEDURE "SYR2". THE DATA WILL BE   *
 * RETURNED FROM THE TABLE SYBASE.SAMPLETB. THIS CAN EITHER *
 * BE A DB2 OR A SQL SERVER TABLE DEPENDING  ON WHETHER     *
 * THE RPC IS SENT TO A CICS REGION OR A SQL SERVER.        *
 ************************************************************
  
      MOVE LOW-VALUES TO CMDSTR.
      MOVE 4          TO INTARG.
      STRING 'SYR2' DELIMITED BY SIZE INTO CMDSTR.
  
      CALL 'CTBCOMMA' USING CSL-CMD-HANDLE
                            CSL-RC
                            CS-RPC-CMD
                            CMDSTR
                            INTARG
                            CS-UNUSED.
  
      IF CSL-RC NOT EQUAL CS-SUCCEED
        THEN
          MOVE SPACES TO MSGSTR
          STRING 'CTBCOMMAND failed'
                 DELIMITED BY SIZE INTO MSGSTR
          PERFORM PRINT-MSG
          PERFORM ALL-DONE
      END-IF.
  
 *****************************
 * SET UP THE RPC PARAMETERS *
 *****************************
  
      MOVE '@parm1'        TO NM-PARM.
      MOVE 6               TO NMLEN-PARM.
      MOVE CS-FMT-NULLTERM TO FORMT-PARM.
      MOVE CS-RETURN       TO FMTSTATUS-PARM.
      MOVE CS-INT-TYPE     TO DATATYPE-PARM.
      MOVE LENGTH OF PARM1 TO DATALEN.
      MOVE 0               TO PARM1.
  
      CALL 'CTBPARAM' USING CSL-CMD-HANDLE
                            CSL-RC
                            DATAFMT-PARM
                            PARM1
                            DATALEN
                            INDIC.
  
      IF CSL-RC NOT EQUAL CS-SUCCEED
        THEN
          MOVE SPACES TO MSGSTR
          STRING 'CTBPARAM CS-INT-TYPE parm1 failed'
                 DELIMITED BY SIZE INTO MSGSTR
          PERFORM PRINT-MSG
          PERFORM ALL-DONE
      END-IF.
  
      MOVE '@parm2'           TO NM-PARM.
      MOVE 6                  TO NMLEN-PARM.
      MOVE CS-FMT-NULLTERM    TO FORMT-PARM.
      MOVE CS-INPUTVALUE      TO FMTSTATUS-PARM.
      MOVE CS-VARCHAR-TYPE    TO DATATYPE-PARM.
      MOVE PF-DEPT            TO PARR-RET.
      MOVE PF-DEPT-SIZE       TO DATALEN.
      MOVE 255                TO MAXLENGTH-PARM.
  
      CALL 'CTBPARAM' USING CSL-CMD-HANDLE
                            CSL-RC
                            DATAFMT-PARM
                            PARM2
                            DATALEN
                            INDIC.
  
      IF CSL-RC NOT EQUAL CS-SUCCEED
        THEN
          MOVE SPACES TO MSGSTR
          STRING 'CTBPARAM CS-VARCHAR-TYPE parm2 failed'
                 DELIMITED BY SIZE INTO MSGSTR
          PERFORM PRINT-MSG
          PERFORM ALL-DONE
      END-IF.
  
 ***************************************
 * SEND THE COMMAND AND THE PARAMETERS *
 ***************************************
  
      CALL 'CTBSEND' USING CSL-CMD-HANDLE
                           CSL-RC.
  
      IF CSL-RC NOT EQUAL CS-SUCCEED
        THEN
          MOVE SPACES TO MSGSTR
          STRING 'CTBSEND failed'
                 DELIMITED BY SIZE INTO MSGSTR
          PERFORM PRINT-MSG
          PERFORM ALL-DONE
      END-IF.
  
  SEND-PARAM-EXIT.
      EXIT.
  
 *========================================================
 *==                                                    ==
 *== Subroutine to process result                       ==
 *==                                                    ==
 *========================================================
  RESULTS-PROCESSING.
  
 ***************************
 * SET UP THE RESULTS DATA *
 ***************************
  
      CALL 'CTBRESUL' USING CSL-CMD-HANDLE
                            CSL-RC
                            RESTYPE.
  
 **************************************************
 * DETERMINE THE OUTCOME OF THE COMMAND EXECUTION *
 **************************************************
  
      EVALUATE CSL-RC
  
          WHEN CS-SUCCEED
  
 ****************************************************************
 * DETERMINE THE TYPE OF RESULT RETURNED BY THE CURRENT REQUEST *
 ****************************************************************
  
              EVALUATE RESTYPE
  
 ***********************
 * PROCESS ROW RESULTS *
 ***********************
  
                WHEN CS-ROW-RESULT
                  PERFORM RESULT-ROW-PROCESSING
                  MOVE 'Y' TO SW-FETCH
                  PERFORM FETCH-ROW-PROCESSING UNTIL NO-MORE-ROWS
   
 *************************************************************
 * PROCESS PARAMETER RESULTS - THERE SHOULD BE NO PARAMETERS *
 * TO PROCESS                                                *
 *************************************************************
  
                WHEN CS-PARAM-RESULT
                  PERFORM RESULT-PARAM-PROCESSING
                  MOVE 'Y' TO SW-FETCH
                  PERFORM FETCH-PARAM-PROCESSING
  
 ********************************************************
 * PROCESS STATUS RESULTS - THE STORED PROCEDURE RESULT *
 * WILL BE PROCESSED IN THIS EXAMPLE                    *
 ********************************************************
  
                WHEN CS-STATUS-RESULT
                  MOVE 'Y' TO SW-FETCH
                  CALL 'CTBFETCH' USING CSL-CMD-HANDLE
                                        CSL-RC
                                        CS-UNUSED
                                        CS-UNUSED
                                        CS-UNUSED
                                        NUMROWS
  
                  IF CSL-RC = CS-FAIL
                    THEN
                      MOVE SPACES TO MSGSTR
                      STRING 'CTBFETCH status failed'
                           DELIMITED BY SIZE INTO MSGSTR
                      PERFORM PRINT-MSG
                      PERFORM ALL-DONE
                  END-IF
  
 *************************************************************
 * PRINT AN ERROR MESSAGE IF THE SERVER ENCOUNTERED AN ERROR *
 * WHILE EXECUTING THE REQUEST                               *
 *************************************************************
  
                WHEN CS-CMD-FAIL
                  STRING
                    'CTBRESUL failed with CS-CMD-FAIL restype'
                          DELIMITED BY SIZE INTO MSGSTR
                  PERFORM PRINT-MSG
  
 ******************************************************************
 * PRINT A MESSSAGE FOR SUCCESSFUL COMMANDS THAT RETURNED NO DATA *
 * (OPTIONAL)                                                     *
 ******************************************************************
  
                WHEN CS-CMD-SUCCEED
                  STRING
                    'CTBRESUL returned CS-CMD-SUCCEED restype'
                          DELIMITED BY SIZE INTO MSGSTR
  

**********************************************************
 * PRINT A MESSSAGE FOR REQUESTS THAT HAVE BEEN PROCESSED *
 * SUCCESSFULLY (OPTIONAL)                                *
 **********************************************************
  
                WHEN CS-CMD-DONE
                  STRING
                    'CTBRESUL returned CS-CMD-DONE restype'
                          DELIMITED BY SIZE INTO MSGSTR
  
                WHEN OTHER
                  STRING
                    'CTBRESUL returned UNKNOW restype'
                          DELIMITED BY SIZE INTO MSGSTR
                   PERFORM PRINT-MSG
                   MOVE 'N' TO SW-RESULTS
  
              END-EVALUATE
  
 ********************************************************
 * PRINT AN ERROR MESSAGE IF THE CTBRESULTS CALL FAILED *
 ********************************************************
  
          WHEN CS-FAIL
            MOVE 'N' TO SW-RESULTS
            STRING
              'CTBRESUL failed with CS-FAIL ret-cd'
                  DELIMITED BY SIZE INTO MSGSTR
            PERFORM PRINT-MSG
  
 *************************************************************
 * DROP OUT OF THE RESULTS LOOP IF NO MORE RESULT SETS ARE   *
 * AVAILABLE FOR PROCESSING OR IF THE RESULTS WERE CANCELLED *
 *************************************************************
  
          WHEN CS-END-RESULTS
            MOVE 'N' TO SW-RESULTS
  
          WHEN CS-CANCELLED
            MOVE 'N' TO SW-RESULTS
  
          WHEN OTHER
            MOVE 'N' TO SW-RESULTS
            STRING 'CTBRESUL failed with UNKNOWN ret-cd'
                  DELIMITED BY SIZE INTO MSGSTR
            PERFORM PRINT-MSG
  
      END-EVALUATE.
  
      MOVE 0 TO RESTYPE.
  
  
 *========================================================
 *==                                                    ==
 *== Subroutine to process result rows                  ==
 *==                                                    ==
 *========================================================
  RESULT-ROW-PROCESSING.
 *======================
  
 ***********************************
 * FOR EACH COLUMN BIND THE RESULT *
 ***********************************
  
      PERFORM BIND-ROW-PROCESSING.
      MOVE 1 TO I2.
      STRING
        'FirstName    LastName         EducLvl    JobCode   Salary'
        DELIMITED BY SIZE INTO RSLTNO(I2).
      MOVE 2 TO I2.
      STRING '===========  ===============  ======='
             DELIMITED BY SIZE
             '    =======   =========='
             DELIMITED BY SIZE
             INTO RSLTNO(I2).
  
 *====================================================
 *==                                                ==
 *== Subroutine to describe the returned parameters ==
 *==                                                ==
 *====================================================
  RESULT-PARAM-PROCESSING.
  
 ************************************************
 * RETURN A DESCRIPTION OF THE RETURN PARAMETER *
 ************************************************
  
      MOVE 1 TO I.
      CALL 'CTBDESCR' USING CSL-CMD-HANDLE
                            CSL-RC
                            I
                            DATAFMT-BIND.
  
      IF CSL-RC NOT EQUAL CS-SUCCEED
        THEN
          MOVE SPACES TO MSGSTR
          STRING 'CTBDESCR failed'
                 DELIMITED BY SIZE INTO MSGSTR
          PERFORM PRINT-MSG
          PERFORM ALL-DONE
      END-IF.
  

*****************************
 * BIND THE RETURN PARAMETER *
 *****************************
  
      PERFORM BIND-PARAM-PROCESSING.
  
 *========================================================
 *==                                                    ==
 *== Subroutine to fetch row processing                 ==
 *==                                                    ==
 *========================================================
  FETCH-ROW-PROCESSING.
  
 ******************
 * FETCH THE ROWS *
 ******************
  
      CALL 'CTBFETCH' USING CSL-CMD-HANDLE
                            CSL-RC
                            CS-UNUSED
                            CS-UNUSED
                            CS-UNUSED
                            NUMROWS.
  
      EVALUATE CSL-RC
  
 ***********************************************
 * MOVE THE ROW DATA TO PRINTABLE DATA FORMATS *
 ***********************************************
  
          WHEN CS-SUCCEED
               COMPUTE I2 EQUAL I2 + 1
               MOVE 'Y'       TO SW-FETCH
               MOVE LOW-BIND  TO LOW-VAL
               MOVE ROW3-BIND TO ROW3-VAL
               MOVE LOW4-BIND TO ROW4-VAL
               MOVE ROW1-TEXT TO ROW1-VAL
               MOVE ROW2-TEXT TO ROW2-VAL
  
               IF I2 > MAX-SCREEN-ROWS
                 THEN
                   MOVE SPACES TO MSG-TEXT-2
                   STRING 'Please press return to continue!'
                            DELIMITED BY SIZE INTO MSG1O
                   PERFORM DISP-DATA
                   PERFORM CLEAR-SCREEN-DATA
                           VARYING I2 FROM 1 BY 1
                           UNTIL I2 > MAX-SCREEN-ROWS
                   COMPUTE PAGE-CNT = PAGE-CNT + 1
                   MOVE 1 TO I2
                   STRING
                      'FirstName    LastName         EducLvl'
                      DELIMITED BY SIZE
                      '    JobCode   Salary'
                      DELIMITED BY SIZE
                      INTO RSLTNO(I2)
                   MOVE 2 TO I2
                   STRING
                      '===========  ===============  ======='
                      DELIMITED BY SIZE
                      '    =======   =========='
                      DELIMITED BY SIZE
                      INTO RSLTNO(I2)
                   MOVE 3 TO I2
               END-IF
               MOVE DISP-ROW TO RSLTNO (I2)
               MOVE SPACES   TO ROW1-TEXT ROW2-TEXT
               MOVE SPACES   TO ROW1-VAL ROW2-VAL
  

**********************************************************
 * PRINT THE ROWS AFTER ALL ROW DATA HAS BEEN FETCHED *
 **********************************************************
  
          WHEN CS-END-DATA
               MOVE 'Press Clear To Exit'
                        TO MSG-TEXT-2
               MOVE 'N' TO SW-FETCH
               STRING 'All rows processing completed!'
                      DELIMITED BY SIZE INTO MSG1O
               PERFORM DISP-DATA
  
 ************************************************************
 * DROP OUT OF THE FETCH LOOP IF THE CTBFETCH COMMAND FAILS *
 ************************************************************
  
          WHEN CS-FAIL
               MOVE 'N' TO SW-FETCH
               STRING 'CTBFETCH returned CS-FAIL ret-cd'
                      DELIMITED BY SIZE INTO MSGSTR
               PERFORM PRINT-MSG
  
 *************************************************************
 * DROP OUT OF THE FETCH LOOP IF A RECOVERABLE COMMAND FAILS *
 * WHILE FETCHING A ROW OR IF THE OPERATION WAS CANCELLED    *
 *************************************************************
  
          WHEN CS-ROW-FAIL
               MOVE 'N' TO SW-FETCH
               STRING 'CTBFETCH returned CS-ROW-FETCH ret-cd'
                      DELIMITED BY SIZE INTO MSGSTR
               PERFORM PRINT-MSG
  
          WHEN CS-CANCELLED
               MOVE 'N' TO SW-FETCH
               STRING 'CTBFETCH returned CS-CANCELLED ret-cd'
                      DELIMITED BY SIZE INTO MSGSTR
               PERFORM PRINT-MSG
  
          WHEN OTHER
               MOVE 'N' TO SW-FETCH
               STRING 'CTBFETCH returned UNKNOWN ret-cd'
                      DELIMITED BY SIZE INTO MSGSTR
               PERFORM PRINT-MSG
  
      END-EVALUATE.
  
 *========================================================
 *==                                                    ==
 *== Subroutine to fetch return parameter               ==
 *==                                                    ==
 *========================================================
  FETCH-PARAM-PROCESSING.
 *=======================
  
 ******************************
 * FETCH THE RETURN PARAMETER *
 ******************************
  
      CALL 'CTBFETCH' USING CSL-CMD-HANDLE
                            CSL-RC
                            CS-UNUSED
                            CS-UNUSED
                            CS-UNUSED
                            NUMROWS.
  
      IF CSL-RC = CS-FAIL
        THEN
          MOVE SPACES TO MSGSTR
          STRING 'CTBFETCH return parameter failed'
                           DELIMITED BY SIZE INTO MSGSTR
          PERFORM PRINT-MSG
          PERFORM ALL-DONE
      END-IF.
  
 ****************************************************************
 * MOVE THE PARAMETER DATA TO A PRINTABLE DATA FORMAT AND PRINT *
 * THE DATA                                                     *
 ****************************************************************
  
      COMPUTE I2 EQUAL I2 + 1.
      MOVE PARM1     TO RETPARM-VAL.
      MOVE DISP-PARM TO RSLTNO (I2).
  

*========================================================
 *==                                                    ==
 *== Subroutine to bind row processing                  ==
 *==                                                    ==
 *========================================================
  BIND-ROW-PROCESSING.
  
 *******************************************************
 * BIND THE COLUMNS RETURNED FROM THE STORED PROCEDURE *
 *******************************************************
  
        MOVE 1                TO WCOLUMN.
        MOVE CS-VARCHAR-TYPE  TO DATATYPE-BIND.
        MOVE CS-MAX-CHAR      TO MAXLENGTH-BIND.
        MOVE CS-FMT-NULLTERM  TO FORMT-BIND.
        MOVE CS-PARAM-NOTNULL TO INDICATOR-NULL.
        MOVE CS-PARAM-NOTNULL TO COPIED-NULL.
  
        CALL 'CTBBIND' USING CSL-CMD-HANDLE
                             CSL-RC
                             WCOLUMN
                             DATAFMT-BIND
                             ROW1-BIND
                             COPIED
                             COPIED-NULL
                             INDICATOR
                             INDICATOR-NULL .
  
        IF CSL-RC NOT EQUAL CS-SUCCEED
          THEN
            MOVE SPACES TO MSGSTR
            STRING 'CTBBIND CS-VARCHAR-TYPE column 1 failed'
                   DELIMITED BY SIZE INTO MSGSTR
            PERFORM PRINT-MSG
            PERFORM ALL-DONE
        END-IF.
  
        MOVE 2 TO WCOLUMN.
  
        CALL 'CTBBIND' USING CSL-CMD-HANDLE
                             CSL-RC
                             WCOLUMN
                             DATAFMT-BIND
                             ROW2-BIND
                             COPIED
                             COPIED-NULL
                             INDICATOR
                             INDICATOR-NULL .
  
        IF CSL-RC NOT EQUAL CS-SUCCEED
          THEN
            MOVE SPACES TO MSGSTR
            STRING 'CTBBIND CS-VARCHAR-TYPE column 2 failed'
                   DELIMITED BY SIZE INTO MSGSTR
            PERFORM PRINT-MSG
            PERFORM ALL-DONE
        END-IF.
  
        MOVE 3                   TO WCOLUMN.
        MOVE CS-SMALLINT-TYPE    TO DATATYPE-BIND.
        MOVE LENGTH OF ROW3-BIND TO MAXLENGTH-BIND.
        MOVE CS-FMT-UNUSED       TO FORMT-BIND.
  
        CALL 'CTBBIND' USING CSL-CMD-HANDLE
                             CSL-RC
                             WCOLUMN
                             DATAFMT-BIND
                             ROW3-BIND
                             COPIED
                             COPIED-NULL
                             INDICATOR
                             INDICATOR-NULL .
  
        IF CSL-RC NOT EQUAL CS-SUCCEED
          THEN
            MOVE SPACES TO MSGSTR
            STRING 'CTBBIND CS-SMALLINT-TYPE column 3 failed'
                   DELIMITED BY SIZE INTO MSGSTR
            PERFORM PRINT-MSG
            PERFORM ALL-DONE
        END-IF.
  
        MOVE 4                   TO WCOLUMN.
        MOVE LENGTH OF ROW4-BIND TO MAXLENGTH-BIND.
        MOVE CS-MONEY-TYPE       TO DATATYPE-BIND.
        MOVE CS-FMT-UNUSED       TO FORMT-BIND.
        MOVE CS-SRC-VALUE        TO PRECISION-BIND.
        MOVE CS-SRC-VALUE        TO SCALE-BIND.
  
        CALL 'CTBBIND' USING CSL-CMD-HANDLE
                             CSL-RC
                             WCOLUMN
                             DATAFMT-BIND
                             ROW4-BIND
                             COPIED
                             COPIED-NULL
                             INDICATOR
                             INDICATOR-NULL .
  
        IF CSL-RC NOT EQUAL CS-SUCCEED
          THEN
            MOVE SPACES TO MSGSTR
            STRING 'CTBBIND CS-MONEY-TYPE column 4 failed'
                   DELIMITED BY SIZE INTO MSGSTR
            PERFORM PRINT-MSG
            PERFORM ALL-DONE
        END-IF.
  
        MOVE 5                   TO WCOLUMN.
        MOVE LENGTH OF ROW5-BIND TO MAXLENGTH-BIND.
  
        CALL 'CTBBIND' USING CSL-CMD-HANDLE
                             CSL-RC
                             WCOLUMN
                             DATAFMT-BIND
                             ROW5-BIND
                             COPIED
                             COPIED-NULL
                             INDICATOR
                             INDICATOR-NULL .
  
        IF CSL-RC NOT EQUAL CS-SUCCEED
          THEN
            MOVE SPACES TO MSGSTR
            STRING 'CTBBIND CS-MONEY-TYPE column 5 failed'
                   DELIMITED BY SIZE INTO MSGSTR
            PERFORM PRINT-MSG
            PERFORM ALL-DONE
        END-IF.
  
 *========================================================
 *==                                                    ==
 *== Subroutine to bind return parameters               ==
 *==                                                    ==
 *========================================================
  BIND-PARAM-PROCESSING.
  
 *****************************
 * BIND THE RETURN PARAMETER *
 *****************************
  
        MOVE 1           TO WCOLUMN.
        MOVE CS-INT-TYPE TO DATATYPE-BIND.
  
        CALL 'CTBBIND' USING CSL-CMD-HANDLE
                             CSL-RC
                             WCOLUMN
                             DATAFMT-BIND
                             PARM1
                             COPIED
                             COPIED-NULL
                             INDICATOR
                             INDICATOR-NULL .
  
        IF CSL-RC NOT EQUAL CS-SUCCEED
          THEN
            MOVE SPACES TO MSGSTR
            STRING 'CTBBIND for return parameter failed'
                   DELIMITED BY SIZE INTO MSGSTR
            PERFORM PRINT-MSG
            PERFORM ALL-DONE
        END-IF.
  
 *========================================================
 *==                                                    ==
 *== Subroutine to display output                       ==
 *==                                                    ==
 *========================================================
  DISP-DATA.
  
      MOVE TMP-DATE   TO SDATEO.
      MOVE TMP-TIME   TO STIMEO.
      MOVE 'SYCTSAR5' TO PROGNMO.
      MOVE PAGE-CNT   TO SPAGEO.
  
      MOVE DFHBMPRO   TO SERVERA.
      MOVE PF-SERVER  TO SERVERO.
  
      MOVE DFHBMPRO   TO USERA.
      MOVE PF-USER    TO USERO.
  
      MOVE DFHBMPRO   TO NETDRVA.
      MOVE PF-NETDRV  TO NETDRVO.
  
      MOVE DFHBMDAR   TO PSWDA.
      MOVE PF-PWD    TO PSWDO.
      MOVE MSG-TEXT-2 TO MSG2O.
  
 ********************
 * DISPLAY THE DATA *
 ********************
  
      EXEC CICS SEND MAP('A5PANEL')
                     MAPSET('SYCTBA5')
                     CURSOR
                     FRSET
                     ERASE
                     FREEKB
      END-EXEC.
  
      EXEC CICS RECEIVE INTO(QF-ANSWER)
                        LENGTH(QF-LEN)
                        MAXLENGTH(QF-MAXLEN)
                        RESP(CICS-RESPONSE)
      END-EXEC.
  
  DISP-DATA-EXIT.
      EXIT.
  *========================================================
 *==                                                    ==
 *== Subroutine to print output messages.               ==
 *==                                                    ==
 *========================================================
  PRINT-MSG.
  
      MOVE CSL-RC  TO SAMP-RC.
      MOVE RESTYPE TO REST-TYPE.
  
      IF DIAG-MSGS-INITIALIZED AND BAD-INPUT EQUAL TO C-N
        THEN
          PERFORM GET-DIAG-MESSAGES
      END-IF.
  
 ***********************
 * DISPLAY THE MESSAGE *
 ***********************
  
      IF NO-ERRORS
        THEN
          PERFORM DISP-DATA
      END-IF.
  
      MOVE C-Y TO NO-ERRORS-SW.
      MOVE SPACES TO MSGSTR.
      MOVE ZERO   TO SAMP-RC.
      MOVE ZERO   TO REST-TYPE.
  
  PRINT-MSG-EXIT.
      EXIT.
  
 *========================================================
 *==                                                    ==
 *== Subroutine to drop and to deallocate all handlers, ==
 *== to close server connection and exit client library ==
 *==                                                    ==
 *========================================================
  ALL-DONE.
  
      PERFORM CLOSE-CONNECTION.
      PERFORM QUIT-CLIENT-LIBRARY.
      STOP RUN.
  
  ALL-DONE-EXIT.
      EXIT.
  

*===========================================================
 *==                                                       ==
 *== Subroutine to perform drop command handler, close     ==
 *== server connection, and deallocate Connection Handler. ==
 *==                                                       ==
 *===========================================================
  CLOSE-CONNECTION.
  
 ***************************
 * DROP THE COMMAND HANDLE *
 ***************************
  
      CALL 'CTBCMDDR' USING CSL-CMD-HANDLE
                            CSL-RC.
  
      IF CSL-RC = CS-FAIL
        THEN
          MOVE SPACES TO MSGSTR
          STRING 'CTBCMDDR failed'
                 DELIMITED BY SIZE INTO MSGSTR
          PERFORM PRINT-MSG
      END-IF.
  

*******************************
 * CLOSE THE SERVER CONNECTION *
 *******************************
  
      CALL 'CTBCLOSE' USING CSL-CON-HANDLE
                            CSL-RC
                            CS-UNUSED.
  
      IF CSL-RC = CS-FAIL
        THEN
          MOVE SPACES TO MSGSTR
          STRING 'CTBCLOSE failed'
                 DELIMITED BY SIZE INTO MSGSTR
          PERFORM PRINT-MSG
      END-IF.
  
 *************************************
 * DE-ALLOCATE THE CONNECTION HANDLE *
 *************************************
  
      CALL 'CTBCONDR' USING CSL-CON-HANDLE
                            CSL-RC.
  
      IF CSL-RC = CS-FAIL
        THEN
          MOVE SPACES TO MSGSTR
          STRING 'CTBCONDR failed'
                 DELIMITED BY SIZE INTO MSGSTR
          PERFORM PRINT-MSG
      END-IF.
  
  CLOSE-CONNECTION-EXIT.
      EXIT.
  
 *===================================================
 *==                                               ==
 *== Subroutine to perform exit client library and ==
 *== deallocate context structure.                 ==
 *==                                               ==
 *===================================================
  QUIT-CLIENT-LIBRARY.
  
 ***************************
 * EXIT THE CLIENT LIBRARY *
 ***************************
  
      CALL 'CTBEXIT' USING CSL-CTX-HANDLE
                           CSL-RC
                           CS-UNUSED.
      IF CSL-RC = CS-FAIL
        THEN
          MOVE SPACES TO MSGSTR
          STRING 'CTBEXIT failed'
                 DELIMITED BY SIZE INTO MSGSTR
          PERFORM PRINT-MSG
      END-IF.
  
 *************************************
 * DE-ALLOCATE THE CONTEXT STRUCTURE *
 *************************************
  
      CALL 'CSBCTXDR' USING CSL-CTX-HANDLE
                            CSL-RC.
  
      IF CSL-RC = CS-FAIL
        THEN
          MOVE SPACES TO MSGSTR
          STRING 'CSBCTXDR failed'
                 DELIMITED BY SIZE INTO MSGSTR
          PERFORM PRINT-MSG
      END-IF.
  
  QUIT-CLIENT-LIBRARY-EXIT.
      EXIT.
  
 *====================================================
 *==                                                ==
 *== 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,
                           DF-NUM-OF-MSGS.
  
      IF CSL-RC NOT EQUAL CS-SUCCEED
        THEN
          MOVE SPACES TO MSGSTR
          STRING 'CTBDIAG CS-STATUS CS-CLIENTMSG-TYPE failed'
                 DELIMITED BY SIZE INTO MSGSTR
          PERFORM PRINT-MSG
          PERFORM ALL-DONE
        ELSE
          IF DF-NUM-OF-MSGS > 0
            THEN
              PERFORM RETRIEVE-CLIENT-MSGS
                  VARYING I FROM 1 BY 1
                      UNTIL I IS GREATER THAN DF-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,
                           DF-NUM-OF-MSGS.
  
      IF CSL-RC NOT EQUAL CS-SUCCEED
        THEN
          STRING 'CTBDIAG CS-STATUS CS-SERVERMSG-TYPE failed'
                 DELIMITED BY SIZE INTO MSGSTR
          PERFORM PRINT-MSG
          PERFORM ALL-DONE
        ELSE
          IF DF-NUM-OF-MSGS > 0
            THEN
              PERFORM RETRIEVE-SERVER-MSGS
                  VARYING I FROM 1 BY 1
                      UNTIL I IS GREATER THAN DF-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,
                           DF-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,
                           DF-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.
  

*========================================================
 *==                                                    ==
 *== Subroutine to clear the output screen              ==
 *==                                                    ==
 *========================================================
  CLEAR-SCREEN-DATA.
  
      MOVE SPACES TO RSLTNO( I2 ).
  
  CLEAR-SCREEN-DATA-EXIT.
  
      EXIT.
  
 *========================================================
 *==                                                    ==
 *== Subroutine to handle MAPFAIL condition             ==
 *==                                                    ==
 *========================================================
  NO-INPUT.
 *---------
  
      MOVE 'Please Enter Input Fields' TO MSG-TEXT-1.
  
      GO TO GET-INPUT-AGAIN.
  

*========================================================
 *==                                                    ==
 *== Subroutine to handle AID condition                 ==
 *==                                                    ==
 *========================================================
  GETOUT.
 *--------
  
      EXEC CICS RETURN END-EXEC.
  
      STOP RUN.
  
 *========================================================
 *==                                                    ==
 *== Subroutine to handle ERROR condition               ==
 *==                                                    ==
 *========================================================
  ERRORS.
 *--------
  
      EXEC CICS DUMP DUMPCODE('ERRS') END-EXEC.
  
      STOP RUN.