The purpose of this sample program is to demonstrate:
Implicit conversions of CS-VARCHAR and CS-DECIMAL datatypes to CS-CHAR
How to transform a CS-DATETIME datatype to a DB2 ISO DATE and TIME format
This sample program retrieves information from the table, SYBASE.NEWTABLE on the target server.
*@(#) syctsat5.cobol 1.2 4/26/96 */ ****************************************************************** * * Confidential property of Sybase, Inc. * (c) Copyright Sybase, Inc. 1985 TO 1997. * All rights reserved. * ****************************************************************** ******* SYCTSAT5 - Client Language Request APPL - COBOL - CICS ** ** ** CICS TRANID: SYT5 ** ** PROGRAM: SYCTSAT5 ** ** PURPOSE: Demonstrates Open Client for CICS CALLs. ** ** FUNCTION: Illustrates how to send a language request to ** a SQL Server. ** ** Illustrates the implicit conversion of ** DECIMAL to CHAR data type ** ** The request sent to SQL Server ** executes the SQL statement: ** ** SELECT PLANEID, MILAGE, ** CONVERT (CHAR(10),SERVICEDATE,102)+" " + ** CONVERT (CHAR(8),SERVICEDATE,108) ** FROM SYBASE.NEWTABLE ** ** PREREQS: Before running SYCTSAT5, 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. ** ** ** 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 ** CTBCONFIG set or retrieve context properties ** 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 ** CTBRESINFO return RESULT set info ** CTBSEND send a request TO the server ** ****************************************************************** IDENTIFICATION DIVISION. PROGRAM-ID. SYCTSAT5. 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 C-N PIC X(01) VALUE 'N'. 01 C-Y PIC X(01) VALUE 'Y'. 01 I1 PIC S9(9) COMP SYNC VALUE IS 0. 01 I2 PIC S9(9) COMP SYNC VALUE IS 0. 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 MAX-SCREEN-ROWS PIC S9(4) VALUE +10. 01 ENTER-DATA-SW PIC X(01) VALUE 'N'. ***************************************************************** * OPEN CLIENT VARIABLES ***************************************************************** 01 STRLEN PIC S9(9) COMP VALUE +0. 01 OUTLEN PIC S9(9) COMP VALUE +0. 01 RESTYPE PIC S9(9) COMP VALUE +0. 01 NETDRIVER PIC S9(9) COMP VALUE +9999. **---------------------------------------------------------------- ** WORK AREAS **---------------------------------------------------------------- 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 INTERNAL-FIELDS. 05 I PIC S9(9) COMP. 05 CF-FOUR PIC S9(9) COMP VALUE +4. 05 CF-LANG2-SIZE PIC S9(9) COMP VALUE +120. 05 DATA-PACKED370 PIC S9(15)V9(3) COMP-3 VALUE +0. 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-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-STRLEN PIC S9(9) COMP. 05 PF-MSGLIMIT PIC S9(9) COMP. 01 DIAG-FIELDS. 05 DG-MSGNO PIC S9(9) COMP VALUE +1. 05 DG-NUM-OF-MSGS PIC S9(9) COMP VALUE +0. 01 CONFIG-FIELDS. 05 CF-MAXCONNECT PIC S9(9) COMP. 05 CF-OUTLEN PIC S9(9) COMP. 01 FETCH-FIELDS. 05 FF-ROWS-READ PIC S9(9) COMP. 05 FF-ROW-NUM PIC S9(9) COMP VALUE +0. 01 RESINFO-FIELDS. 05 RF-NUMDATA PIC S9(9) COMP. 05 RF-NUMDATA-SIZE PIC S9(9) COMP VALUE +4. 01 OUTPUT-ROW. 05 OR-COL-PLANEID-CHAR PIC X(12). 05 SPACE1 PIC X(01) VALUE ' '. 05 OR-COL-MILAGE PIC X(33) VALUE ' '. 05 SPACE1 PIC X(01) VALUE ' '. 05 OR-COL-SERVICEDATE PIC X(21) VALUE ' '. 01 OUTPUT-ROW-STR REDEFINES OUTPUT-ROW PIC X(66). 01 OUTPUT-ROW-SIZE PIC S9(4) COMP VALUE +66. 01 OUTPUT-ROW2. 05 OR2-MESG PIC X(37) VALUE 'The maximum number of connections is '. 05 OR2-MAXCONNECT PIC ZZZZ9. 05 OR2-PERIOD PIC X(01) VALUE '.'. 01 OUTPUT-ROW-STR2 REDEFINES OUTPUT-ROW2 PIC X(43). 01 OUTPUT-ROW2-SIZE PIC S9(4) COMP VALUE +43. 01 OUTPUT-ROW4. 05 OR4-MESG PIC X(25) VALUE 'The number of columns is '. 05 OR4-NUMDATA PIC ZZZZ9. 05 OR4-PERIOD PIC X(01) VALUE '.'. 01 OUTPUT-ROW-STR4 REDEFINES OUTPUT-ROW4 PIC X(31). 01 OUTPUT-ROW4-SIZE PIC S9(4) COMP VALUE +31. 01 COLUMN-FIELDS. 05 CF-COL-PLANEID-CHAR PIC X(12). 05 CF-COL-MILAGE PIC X(33) VALUE ' '. 05 CF-COL-MILAGE-CHAR PIC X(70) VALUE ' '. 05 CF-COL-MILAGE-LEN PIC S9(9) COMP VALUE 0. 05 CF-COL-SERVICEDATE-CHAR. 10 CF-COL-DATE-YEAR PIC X(4). 10 CF-COL-DATE-SEP1 PIC X(1). 10 CF-COL-DATE-MM PIC X(2). 10 CF-COL-DATE-SEP2 PIC X(1). 10 CF-COL-DATE-DD PIC X(2). 10 SPACE1 PIC X(1) VALUE ' '. 10 CF-COL-TIME-HH PIC X(2). 10 CF-COL-TIME-SEP1 PIC X(1). 10 CF-COL-TIME-MM PIC X(2). 10 CF-COL-TIME-SEP2 PIC X(1). 10 CF-COL-TIME-SS PIC X(2). 05 CF-COL-LEN PIC S9(9) COMP VALUE 0. 05 CF-COL-NULL PIC S9(9) COMP VALUE +0. 05 CF-COL-NUMBER PIC S9(9) COMP VALUE +1. 05 CF-COL-INDICATOR PIC S9(4) COMP VALUE +0. 01 LANG-FIELDS. 05 CF-LANG1 PIC X(20) VALUE 'Wrong SQL statement'. 05 CF-LANG2 PIC X(115) VALUE 'SELECT PLANEID, MILAGE,CONVERT(CHAR(10),SERVICEDAT02420010 - 'E,102)+" "+CONVERT(CHAR(8),SERVICEDATE,108) FROM SYBASE.02430010 - 'NEWTABLE'. 05 filler PIC X(01) VALUE LOW-VALUE. 01 MSG-FIELDS. 05 MF-CANCELED PIC X(16) VALUE 'Cancel requested'. 05 MF-CANCELED-SIZE PIC S9(9) COMP VALUE +16. 01 DATAFMT. 05 DF-NAME PIC X(132). 05 DF-NAMELEN PIC S9(9) COMP. 05 DF-DATATYPE PIC S9(9) COMP. 05 DF-FORMAT PIC S9(9) COMP. 05 DF-MAXLENGTH PIC S9(9) COMP. 05 DF-SCALE PIC S9(9) COMP. 05 DF-PRECISION PIC S9(9) COMP. 05 DF-STATUS PIC S9(9) COMP. 05 DF-COUNT PIC S9(9) COMP. 05 DF-USERTYPE PIC S9(9) COMP. 05 DF-LOCALE PIC X(68). 01 DATAFMT2. 05 DF2-NAME PIC X(132). 05 DF2-NAMELEN PIC S9(9) COMP. 05 DF2-DATATYPE PIC S9(9) COMP. 05 DF2-FORMAT PIC S9(9) COMP. 05 DF2-MAXLENGTH PIC S9(9) COMP. 05 DF2-SCALE PIC S9(9) COMP. 05 DF2-PRECISION PIC S9(9) COMP. 05 DF2-STATUS PIC S9(9) COMP. 05 DF2-COUNT PIC S9(9) COMP. 05 DF2-USERTYPE PIC S9(9) COMP. 05 DF2-LOCALE PIC X(68). 01 DISP-MSG. 05 TEST-CASE PIC X(08) VALUE IS 'SYCTSAT5'. 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 DISP-MSG-LEN PIC S9(4) COMP VALUE IS 65. 01 MSG-LEN VALUE +0 PIC S9(4) COMP . ******************************* ** 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 ZERO TO RESTYPE CSL-RC. 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. 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-MESSAGES. 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 SYT5 initial screen == *== == *======================================================== DISPLAY-INITIAL-SCREEN. *---------------------- MOVE TMP-DATE TO SDATEO. MOVE TMP-TIME TO STIMEO. MOVE 'SYCTSAT5' 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-MESSAGES. ********************************* * 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 TRANname 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. *********************************** * SETUP retrieval of All Messages * *********************************** CALL 'CTBDIAG' USING CSL-CON-HANDLE, CSL-RC, CS-UNUSED, CS-INIT, CS-ALLMSG-TYPE, CS-UNUSED, CS-UNUSED. IF CSL-RC NOT EQUAL CS-SUCCEED THEN MOVE SPACES TO MSGSTR STRING 'CTBDIAG CS-INIT failed' DELIMITED BY SIZE INTO MSGSTR PERFORM PRINT-MSG PERFORM ALL-DONE END-IF. ********************************************* * set the upper limit of number of messages * ********************************************* MOVE 5 TO PF-MSGLIMIT. CALL 'CTBDIAG' USING CSL-CON-HANDLE, CSL-RC, CS-UNUSED, CS-MSGLIMIT, CS-ALLMSG-TYPE, CS-UNUSED, PF-MSGLIMIT. IF CSL-RC NOT EQUAL CS-SUCCEED THEN MOVE SPACES TO MSGSTR STRING 'CTBDIAG CS-MSGLIMIT failed' DELIMITED BY SIZE INTO MSGSTR PERFORM PRINT-MSG PERFORM ALL-DONE END-IF. ************************************************ * CONNECT TO THE SERVER OR THE IMS/CICS REGION * ************************************************ CALL 'CTBCONNE' USING CSL-CON-HANDLE CSL-RC PF-SERVER PF-SERVER-SIZE CS-FALSE. IF CSL-RC NOT EQUAL CS-SUCCEED THEN MOVE SPACES TO MSGSTR STRING 'CTBCONNE failed' DELIMITED BY SIZE INTO MSGSTR PERFORM PRINT-MSG PERFORM ALL-DONE END-IF IF NO-ERRORS THEN PERFORM SEND-COMMAND END-IF ************************************** * PROCESS THE RESULTS OF THE COMMAND * ************************************** IF NO-ERRORS THEN PERFORM RESULTS-PROCESSING UNTIL NO-MORE-RESULTS PERFORM CLOSE-CONNECTION END-IF. PROCESS-MESSAGES-EXIT. EXIT. *======================================================== *== == *== Subroutine to allocate, send, and process commands == *== == *======================================================== SEND-COMMAND. *-------------------------------------------------------------- * find out what the maximum number of connections is *-------------------------------------------------------------- CALL 'CTBCONFI' USING CSL-CTX-HANDLE, CSL-RC, CS-GET, CS-MAX-CONNECT, CF-MAXCONNECT, CF-FOUR, CS-FALSE, CF-OUTLEN. IF CSL-RC NOT EQUAL CS-SUCCEED THEN MOVE SPACES TO MSGSTR STRING 'CTBCONFI CS-GET failed' DELIMITED BY SIZE INTO MSGSTR PERFORM PRINT-MSG PERFORM ALL-DONE END-IF. *-------------------------------------------------------------- * allocate a command 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. *-------------------------------------------------------------- * prepare the language request *------------------------------------------------------------- MOVE CF-LANG2-SIZE TO PF-STRLEN. CALL 'CTBCOMMA' USING CSL-CMD-HANDLE, CSL-RC, CS-LANG-CMD, CF-LANG2, PF-STRLEN, CS-UNUSED. IF CSL-RC NOT EQUAL CS-SUCCEED THEN MOVE SPACES TO MSGSTR STRING 'CTBCOMMA CS-LANG-CMD failed' DELIMITED BY SIZE INTO MSGSTR PERFORM PRINT-MSG PERFORM ALL-DONE END-IF. *------------------------------------------------------------- * send the language request *------------------------------------------------------------- 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-COMMAND-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 MOVE 'Y' TO SW-FETCH *************************************************************** * PROCESS STATUS RESULTS - THE STORED PROCEDURE STATUS RESULT * * WILL NOT BE PROCESSED IN THIS EXAMPLE * *************************************************************** WHEN CS-STATUS-RESULT MOVE 'Y' TO SW-FETCH ************************************************************* * PRINT AN ERROR MESSAGE IF THE SERVER ENCOUNTERED AN ERROR * * WHILE EXECUTING THE REQUEST * ************************************************************* WHEN CS-CMD-FAIL STRING 'CTBRESUL returned CS-CMD-FAIL restype' DELIMITED BY SIZE INTO MSGSTR PERFORM PRINT-MSG ***************************************************************** * PRINT A MESSAGE 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 MESSAGE 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 UNKNOWN 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 returned CS-FAIL ret-code' 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 returned UNKNOWN ret-code' DELIMITED BY SIZE INTO MSGSTR PERFORM PRINT-MSG END-EVALUATE. MOVE 0 TO RESTYPE. RESULTS-PROCESSING-EXIT. EXIT. *======================================================== *== == *== Subroutine to process result rows == *== == *======================================================== RESULT-ROW-PROCESSING. CALL 'CTBRESIN' USING CSL-CMD-HANDLE, CSL-RC, CS-NUMDATA, RF-NUMDATA, RF-NUMDATA-SIZE, CF-COL-LEN. IF CSL-RC NOT EQUAL CS-SUCCEED THEN MOVE SPACES TO MSGSTR STRING 'CTBRESINFO failed' DELIMITED BY SIZE INTO MSGSTR PERFORM PRINT-MSG PERFORM ALL-DONE END-IF. COMPUTE FF-ROW-NUM = FF-ROW-NUM + 1. ********************************* * display number of connections * ********************************* MOVE CF-MAXCONNECT TO OR2-MAXCONNECT. MOVE OUTPUT-ROW-STR2 TO RSLTNO(FF-ROW-NUM). COMPUTE FF-ROW-NUM = FF-ROW-NUM + 2. ********************************* * display the number of columns * ********************************* MOVE RF-NUMDATA TO OR4-NUMDATA. MOVE OUTPUT-ROW-STR4 TO RSLTNO(FF-ROW-NUM). IF RF-NUMDATA NOT EQUAL 3 THEN STRING 'CTBRESINFO returned wrong # of parms' DELIMITED BY SIZE INTO MSGSTR PERFORM PRINT-MSG PERFORM ALL-DONE END-IF. COMPUTE FF-ROW-NUM = FF-ROW-NUM + 2. **------------------------------------------------------------ ** Setup column headings **------------------------------------------------------------ MOVE 'PLANE ID MILAGE Serv - 'ice Date' TO RSLTNO(FF-ROW-NUM). COMPUTE FF-ROW-NUM = FF-ROW-NUM + 1. MOVE '============ ====================================== - '================' TO RSLTNO(FF-ROW-NUM). PERFORM BIND-COLUMNS VARYING I FROM 1 BY 1 UNTIL I IS GREATER THAN RF-NUMDATA. RESULT-ROW-PROCESSING-EXIT. EXIT. *======================================================== *== == *== Subroutine to bind each data == *== == *======================================================== BIND-COLUMNS. CALL 'CTBDESCR' USING CSL-CMD-HANDLE, CSL-RC, I, DATAFMT. 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. **-------------------------------------------------------- ** We need to bind the data to program variables. ** We don't care about the indicator variable ** so we'll pass NULL for that parameter in OC-BIND(). **-------------------------------------------------------- ****************** * ROWs per FETCH * ****************** MOVE 1 TO DF-COUNT EVALUATE DF-DATATYPE ALSO I WHEN CS-DECIMAL-TYPE ALSO 2
**-------------------------------------------------------- ** The maximum length should be the precision of the ** decimal item + 2. One byte for sign and one for the ** decimal point. **-------------------------------------------------------- MOVE DF-PRECISION TO DF-MAXLENGTH ADD 2 TO DF-MAXLENGTH MOVE CS-CHAR-TYPE TO DF-DATATYPE CALL 'CTBBIND' USING CSL-CMD-HANDLE, CSL-RC, I, DATAFMT, CF-COL-MILAGE-CHAR, DF-MAXLENGTH, CS-PARAM-NOTNULL, CF-COL-INDICATOR, CS-PARAM-NULL IF CSL-RC NOT EQUAL CS-SUCCEED THEN MOVE SPACES TO MSGSTR STRING 'CTBBIND CS-DECIMAL-TYPE Filed' DELIMITED BY SIZE INTO MSGSTR PERFORM PRINT-MSG PERFORM ALL-DONE END-IF WHEN CS-VARCHAR-TYPE ALSO 1 MOVE CS-CHAR-TYPE TO DF-DATATYPE MOVE LENGTH OF CF-COL-PLANEID-CHAR TO DF-MAXLENGTH CALL 'CTBBIND' USING CSL-CMD-HANDLE, CSL-RC, I, DATAFMT, CF-COL-PLANEID-CHAR, CF-COL-LEN, CS-PARAM-NOTNULL, CF-COL-INDICATOR, CS-PARAM-NULL IF CSL-RC NOT EQUAL CS-SUCCEED THEN MOVE SPACES TO MSGSTR STRING 'CTBBIND CS-VARCHAR-TYPE failed' DELIMITED BY SIZE INTO MSGSTR PERFORM PRINT-MSG PERFORM ALL-DONE END-IF WHEN CS-VARCHAR-TYPE ALSO 3 MOVE CS-CHAR-TYPE TO DF-DATATYPE MOVE LENGTH OF CF-COL-SERVICEDATE-CHAR TO DF-MAXLENGTH CALL 'CTBBIND' USING CSL-CMD-HANDLE, CSL-RC, I, DATAFMT, CF-COL-SERVICEDATE-CHAR, CF-COL-LEN, CS-PARAM-NOTNULL, CF-COL-INDICATOR, CS-PARAM-NULL IF CSL-RC NOT EQUAL CS-SUCCEED THEN MOVE SPACES TO MSGSTR STRING 'CTBBIND CS-DATETIME-TYPE failed' DELIMITED BY SIZE INTO MSGSTR PERFORM PRINT-MSG PERFORM ALL-DONE END-IF. BIND-COLUMNS-EXIT. EXIT. *======================================================== *== == *== Subroutine to fetch row processing == *== == *======================================================== FETCH-ROW-PROCESSING. CALL 'CTBFETCH' USING CSL-CMD-HANDLE, CSL-RC, CS-UNUSED, CS-UNUSED, CS-UNUSED, FF-ROWS-READ. EVALUATE CSL-RC WHEN CS-SUCCEED MOVE 'Y' TO SW-FETCH COMPUTE FF-ROW-NUM = FF-ROW-NUM + 1 ************************************** * save ROW RESULTS for later display * ************************************** MOVE CF-COL-PLANEID-CHAR TO OR-COL-PLANEID-CHAR MOVE CF-COL-MILAGE-CHAR TO OR-COL-MILAGE MOVE '-' TO CF-COL-DATE-SEP1, CF-COL-DATE-SEP2 MOVE '.' TO CF-COL-TIME-SEP1, CF-COL-TIME-SEP2 MOVE CF-COL-SERVICEDATE-CHAR TO OR-COL-SERVICEDATE IF FF-ROW-NUM > MAX-SCREEN-ROWS THEN STRING 'Please press enter for more data.' DELIMITED BY SIZE INTO MSG1O PERFORM DISP-DATA PERFORM CLEAR-SCREEN-DATA VARYING I2 FROM 1 BY 1 UNTIL I2 > MAX-SCREEN-ROWS MOVE 1 TO FF-ROW-NUM **------------------------------------------------------------ ** Setup column headings **------------------------------------------------------------ MOVE ' Plane ID Milage - ' Service Date ' TO RSLTNO(FF-ROW-NUM) COMPUTE FF-ROW-NUM = FF-ROW-NUM + 1 MOVE '============ =============================== - '=====================' TO RSLTNO(FF-ROW-NUM) COMPUTE FF-ROW-NUM = FF-ROW-NUM + 1 END-IF MOVE OUTPUT-ROW-STR TO RSLTNO(FF-ROW-NUM) MOVE SPACES TO CF-COL-PLANEID-CHAR WHEN CS-END-DATA MOVE SPACES TO MSG1O MOVE 'N' TO SW-FETCH STRING 'All rows processing completed!' DELIMITED BY SIZE INTO MSG1O PERFORM DISP-DATA WHEN CS-FAIL MOVE 'N' TO SW-FETCH MOVE SPACES TO MSGSTR STRING 'CTBFETCH returned CS-FAIL ret-code' DELIMITED BY SIZE INTO MSGSTR PERFORM PRINT-MSG WHEN CS-ROW-FAIL MOVE 'N' TO SW-FETCH MOVE SPACES TO MSGSTR STRING 'CTBFETCH returned CS-ROW-FAIL ret-code' DELIMITED BY SIZE INTO MSGSTR PERFORM PRINT-MSG WHEN CS-CANCELLED MOVE 'N' TO SW-FETCH MOVE MF-CANCELED TO MSG1O PERFORM PRINT-MSG WHEN OTHER MOVE 'N' TO SW-FETCH MOVE SPACES TO MSGSTR STRING 'CTBFETCH returned UNKNOWN ret-code' DELIMITED BY SIZE INTO MSGSTR PERFORM PRINT-MSG END-EVALUATE. FETCH-ROW-PROCESSING-EXIT. EXIT. *======================================================== *== == *== Subroutine to tell CICS to send output messages == *== == *======================================================== DISP-DATA. ********************************************************* * PRINT ALL THE RETURNED ROWS FROM THE STORED PROCEDURE * ********************************************************* MOVE TMP-DATE TO SDATEO. MOVE TMP-TIME TO STIMEO. MOVE 'SYCTSAT5' 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 THEN PERFORM GET-DIAG-MESSAGES END-IF. *********************** * DISPLAY THE MESSAGE * *********************** MOVE DISP-MSG TO MSG1O. IF NO-ERRORS THEN PERFORM DISP-DATA. MOVE C-Y TO NO-ERRORS-SW. MOVE SPACES TO MSGSTR. MOVE SPACES TO MSG1O. 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, DG-NUM-OF-MSGS. IF CSL-RC NOT EQUAL CS-SUCCEED THEN MOVE SPACES TO MSGSTR STRING 'CTBDIAG CS-STATUS CS-CLIENTMSG-TYP fail' DELIMITED BY SIZE INTO MSGSTR PERFORM PRINT-MSG PERFORM ALL-DONE ELSE IF DG-NUM-OF-MSGS > 0 THEN PERFORM RETRIEVE-CLIENT-MSGS VARYING I FROM 1 BY 1 UNTIL I IS GREATER THAN DG-NUM-OF-MSGS END-IF END-IF. ***************************** * Then, get server messages * ***************************** CALL 'CTBDIAG' USING CSL-CON-HANDLE, CSL-RC, CS-UNUSED, CS-STATUS, CS-SERVERMSG-TYPE, CS-UNUSED, DG-NUM-OF-MSGS. IF CSL-RC NOT EQUAL CS-SUCCEED THEN STRING 'CTBDIAG CS-STATUS CS-SERVERMSG-TYP fail' DELIMITED BY SIZE INTO MSGSTR PERFORM PRINT-MSG PERFORM ALL-DONE ELSE IF DG-NUM-OF-MSGS > 0 THEN PERFORM RETRIEVE-SERVER-MSGS VARYING I FROM 1 BY 1 UNTIL I IS GREATER THAN DG-NUM-OF-MSGS END-IF END-IF. GET-DIAG-MESSAGES-EXIT. EXIT. *============================================================ *== == *== Subroutine to retrieve diagnostic messages from client == *== == *============================================================ RETRIEVE-CLIENT-MSGS. MOVE 1 TO I1. CALL 'CTBDIAG' USING CSL-CON-HANDLE, CSL-RC, CS-UNUSED, CS-GET, CS-CLIENTMSG-TYPE, DG-MSGNO, CLIENT-MSG. IF CSL-RC NOT EQUAL CS-SUCCEED THEN MOVE SPACES TO MSGSTR STRING 'CTBDIAG CS-GET CS-CLIENTMSG-TYPE failed' DELIMITED BY SIZE INTO MSGSTR PERFORM PRINT-MSG PERFORM ALL-DONE END-IF. ************************ * display message text * ************************ MOVE DISP-CLIENT-MSG-HDR TO RSLTNO( I1 ). MOVE 3 TO I1. MOVE CM-SEVERITY TO CM-SEVERITY-DATA. MOVE CM-STATUS TO CM-STATUS-DATA. MOVE DISP-CLIENT-MSG-1 TO RSLTNO( I1 ). COMPUTE I1 EQUAL I1 + 1 MOVE CM-MSGNO TO CM-OC-MSGNO-DATA. MOVE DISP-CLIENT-MSG-2 TO RSLTNO( I1 ). COMPUTE I1 EQUAL I1 + 1 IF CM-MSGNO NOT EQUAL 0 THEN MOVE SPACES TO CM-OC-MSG-DATA MOVE CM-TEXT TO CM-OC-MSG-DATA MOVE CM-TEXT TO DISP-CLIENT-MSG-3A MOVE DISP-CLIENT-MSG-3 TO RSLTNO( I1 ) COMPUTE I1 EQUAL I1 + 1 IF CM-TEXT-LEN > 66 THEN MOVE CM-OC-MSG-DATA-2 TO CM-OC-MSG-DATA-X MOVE DISP-CLIENT-MSG-3B TO RSLTNO( I1 ) COMPUTE I1 EQUAL I1 + 1 IF CM-TEXT-LEN > 132 THEN MOVE SPACES TO CM-OC-MSG-DATA-X MOVE CM-OC-MSG-DATA-3 TO CM-OC-MSG-DATA-X MOVE DISP-CLIENT-MSG-3B TO RSLTNO( I1 ) COMPUTE I1 EQUAL I1 + 1 IF CM-TEXT-LEN > 198 THEN MOVE SPACES TO CM-OC-MSG-DATA-X MOVE CM-OC-MSG-DATA-4 TO CM-OC-MSG-DATA-X MOVE DISP-CLIENT-MSG-3B TO RSLTNO( I1 ) COMPUTE I1 EQUAL I1 + 1 END-IF END-IF END-IF ELSE MOVE DISP-EMPTY-CLIENT-MSG-3 TO RSLTNO( I1 ) COMPUTE I1 EQUAL I1 + 1 END-IF. MOVE CM-OS-MSGNO TO CM-OS-MSGNO-DATA. MOVE DISP-CLIENT-MSG-4 TO RSLTNO( I1 ). COMPUTE I1 EQUAL I1 + 1 IF CM-OS-MSGNO NOT EQUAL 0 THEN MOVE SPACES TO CM-OS-MSG-DATA MOVE CM-OS-MSGTXT TO CM-OS-MSG-DATA MOVE SPACES TO DISP-CLIENT-MSG-5A MOVE CM-OS-MSGTXT TO DISP-CLIENT-MSG-5A MOVE DISP-CLIENT-MSG-5 TO RSLTNO( I1 ) COMPUTE I1 EQUAL I1 + 1 IF CM-OS-MSGTEXT-LEN > 66 THEN MOVE SPACES TO CM-OC-MSG-DATA-X MOVE CM-OS-MSG-DATA-2 TO CM-OC-MSG-DATA-X MOVE DISP-CLIENT-MSG-3B TO RSLTNO( I1 ) COMPUTE I1 EQUAL I1 + 1 IF CM-OS-MSGTEXT-LEN > 132 THEN MOVE SPACES TO CM-OC-MSG-DATA-X MOVE CM-OS-MSG-DATA-3 TO CM-OC-MSG-DATA-X MOVE DISP-CLIENT-MSG-3B TO RSLTNO( I1 ) COMPUTE I1 EQUAL I1 + 1 IF CM-OS-MSGTEXT-LEN > 198 THEN MOVE SPACES TO CM-OC-MSG-DATA-X MOVE CM-OS-MSG-DATA-4 TO CM-OC-MSG-DATA-X MOVE DISP-CLIENT-MSG-3B TO RSLTNO( I1 ) COMPUTE I1 EQUAL I1 + 1 END-IF END-IF END-IF ELSE MOVE DISP-EMPTY-CLIENT-MSG-5 TO RSLTNO( I1 ) COMPUTE I1 EQUAL I1 + 1 END-IF. RETRIEVE-CLIENT-MSGS-EXIT. EXIT. *============================================================ *== == *== Subroutine to retrieve diagnostic messages from server == *== == *============================================================ RETRIEVE-SERVER-MSGS. CALL 'CTBDIAG' USING CSL-CON-HANDLE, CSL-RC, CS-UNUSED, CS-GET, CS-SERVERMSG-TYPE, DG-MSGNO, SERVER-MSG. IF CSL-RC NOT EQUAL CS-SUCCEED THEN MOVE SPACES TO MSGSTR STRING 'CTBDIAG CS-GET CS-SERVERMSG-TYPE failed' DELIMITED BY SIZE INTO MSGSTR PERFORM PRINT-MSG PERFORM ALL-DONE END-IF. ************************ * display message text * ************************ MOVE SM-MSGNO TO SM-MSG-NO-DATA. MOVE SM-SEV TO SM-SEVERITY-DATA. MOVE SM-STATE TO SM-STATE-DATA. MOVE SM-LINE TO SM-LINE-NO-DATA. MOVE SM-STATUS TO SM-STATUS-DATA. MOVE SPACES TO SM-SVRNAME-DATA. MOVE SM-SVRNAME TO SM-SVRNAME-DATA. MOVE SPACES TO SM-PROC-ID-DATA. MOVE SM-PROC TO SM-PROC-ID-DATA. MOVE SPACES TO SM-MSG-DATA. MOVE SM-TEXT TO SM-MSG-DATA. MOVE SPACES TO DISP-SERVER-MSG-5A. MOVE SM-TEXT TO DISP-SERVER-MSG-5A. MOVE DISP-SERVER-MSG-HDR TO RSLTNO (1). MOVE DISP-SERVER-MSG-1 TO RSLTNO (3). MOVE DISP-SERVER-MSG-2 TO RSLTNO (4). MOVE DISP-SERVER-MSG-3 TO RSLTNO (5). MOVE DISP-SERVER-MSG-4 TO RSLTNO (6). MOVE DISP-SERVER-MSG-5 TO RSLTNO (7). IF SM-TEXT-LEN > 66 THEN MOVE SPACES TO SM-MSG-DATA-X MOVE SM-MSG-DATA-2 TO SM-MSG-DATA-X MOVE DISP-SERVER-MSG-5X TO RSLTNO(8) IF SM-TEXT-LEN > 132 THEN MOVE SPACES TO SM-MSG-DATA-X MOVE SM-MSG-DATA-3 TO SM-MSG-DATA-X MOVE DISP-SERVER-MSG-5X TO RSLTNO(9) IF SM-TEXT-LEN > 198 THEN MOVE SPACES TO SM-MSG-DATA-X MOVE SM-MSG-DATA-4 TO SM-MSG-DATA-X MOVE DISP-SERVER-MSG-5X TO RSLTNO(10) END-IF END-IF END-IF. RETRIEVE-SERVER-MSGS-EXIT. EXIT. *======================================================== *== == *== 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. |
![]() |