
Appendix B: Sample RPC Application
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.
|
Copyright © 2005. Sybase Inc. All rights reserved.
|
|
View this book as PDF 