******************************************************************* * * Confidential property of Sybase, Inc. * (c) Copyright Sybase, Inc. 1985 TO ???. * All rights reserved. ******************************************************************** ****** SYCTSAX5 - Open Server Open Client - COBOL -CICS ************ * * * * * TRANID: SYX5 * * * * PROGRAM: SYCTSAX5 * * * * * * TABLE: SYBASE.SAMPLETB * * * * PURPOSE: Demonstrates Open Server/Open Client CALLs. * * * * FUNCTION: Illustrates the ability to act as a server and a * * client within one program. * * * * This program is invoked via an RPC request and will * * in turn execute a language request against a server * * and return the results back to the client. * * * * It will issue the following SQL statement: * * "SELECT FIRSTNME FROM SYBASE.SAMPLETB" * * * * * * PREREQS: Before running SYCTSAX5, make sure that the server * * you wish to access has an entry in the Connection * * Router Table for that Server and the MCC(s) that * * you wish to use. * * * * INPUT: On the input, make sure to enter the Server name, * * user id, and password for the target server that * * executes the RPC - SYX5. * * * * Open Server Library calls: * * * * TDACCEPT accept request from client * * TDESCRIB describe a column in the result row * * TDFREE free TDPROC structure * * TDINFPRM get information about one rpc parameter * * TDINIT establish environment * * TDNUMPRM get total nr of rpc parameters * * TDRCVPRM retrieve rpc parameter from client * * TDSNDDON send results-completion to client * * TDSNDMSG send error messages back to the client * * TDSNDROW send a row of data back to the client * * * * Open Client calls: * * * * 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 * * CTBDIAG retrieve SQLCODE messages * * CTBEXIT exit client library * * CTBFETCH fetch result data * * CTBINIT init client library * * CTBRESULTS sets up result data * * CTBSEND send a request to the server * * * * History: * * * * Date BTS# Descrition * * ======= ====== =============================================== * * Feb1795 Create * * Nov1595 99999 Rewrite and add front end to the program * * * ******************************************************************** IDENTIFICATION DIVISION. PROGRAM-ID. SYCTSAX5. ENVIRONMENT DIVISION. DATA DIVISION. WORKING-STORAGE SECTION. *----------------------------------------------------------------- * Client Library Cobol Copy Book *----------------------------------------------------------------- COPY CTPUBLIC. *----------------------------------------------------------------- * Server Library Cobol Copy Book *----------------------------------------------------------------- COPY SYGWCOB. *----------------------------------------------------------------- * Standard CICS Attribute and Print Control Chararcter List *----------------------------------------------------------------- COPY DFHBMSCA. *----------------------------------------------------------------- * CICS Standard Attention Identifiers Cobol Copy Book *----------------------------------------------------------------- COPY DFHAID. *----------------------------------------------------------------- * Work Area *----------------------------------------------------------------- 01 GW-LIB-MISC-FIELDS. 05 GWL-TDPROC POINTER. 05 GWL-RC PIC S9(9) COMP SYNC VALUE 0. 01 INTERNAL-FIELDS. 05 CF-FOUR PIC S9(9) COMP VALUE 4. 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 PARM-FIELDS. 05 PF-PARM-ID PIC S9(9) COMP SYNC. 05 PF-DATATYPE PIC S9(9) COMP SYNC. 05 PF-ACTUAL-DATA-LENGTH PIC S9(9) COMP SYNC. 05 PF-MAX-DATA-LENGTH PIC S9(9) COMP SYNC. 05 PF-PARM-STATUS PIC S9(9) COMP SYNC. 05 PF-PARM-NAME PIC X(30). 05 PF-PARM-NAME-LENGTH PIC S9(9) COMP SYNC. 05 PF-USER-DATATYPE PIC S9(9) COMP SYNC. 05 PF-NUM-OF-PARMS PIC S9(9) COMP SYNC. 05 PF-MSGLIMIT PIC S9(9) COMP. 01 SNA-FIELDS. 05 SNA-SUBC PIC S9(9) COMP SYNC. 05 SNA-CONNECTION-NAME PIC X(8) VALUE IS SPACES. 01 WORK-FIELDS. 05 WRK-DONE-STATUS PIC S9(9) COMP SYNC. 01 DESCRIBE-FIELDS. 05 DF-COLUMN-NUMBER PIC S9(9) COMP SYNC VALUE 0. 05 DF-HOST-VARIABLE-TYPE PIC S9(9) COMP SYNC VALUE 0. 05 DF-HOST-VARIABLE-MAXLEN PIC S9(9) COMP SYNC VALUE 0. 05 DF-HOST-VARIABLE-NAME POINTER. 05 DF-NULL-INDICATOR-VAR PIC S9(9) COMP SYNC VALUE 0. 05 DF-NULLS-ALLOWED PIC S9(9) COMP SYNC VALUE 0. 05 DF-COLUMN-TYPE PIC S9(9) COMP SYNC VALUE 0. 05 DF-COLUMN-MAXLEN PIC S9(9) COMP SYNC VALUE 0. 05 DF-COLUMN-NAME PIC X(30). 05 DF-COLUMN-NAME-LEN PIC S9(9) COMP SYNC VALUE 0. 01 SNDMSG-FIELDS. 05 SF-MESSAGE-TYPE PIC S9(9) COMP SYNC. 05 SF-MESSAGE-NUMBER PIC S9(9) COMP SYNC. 05 SF-SEVERITY PIC S9(9) COMP SYNC. 05 SF-ERROR-STATE PIC S9(9) COMP SYNC. 05 SF-LINE-ID PIC S9(9) COMP SYNC. 05 SF-TRANSACTION-ID PIC X(4) VALUE 'SYX5'. 05 SF-TRANSACTION-ID-LEN PIC S9(9) COMP SYNC. 05 SF-MESSAGE-TEXT PIC X(80). 05 SF-MESSAGE-LENGTH PIC S9(9) COMP SYNC. 01 CTX PIC S9(9) COMP SYNC. 01 ROW-DATA PIC X(80) VALUE IS SPACES. *----------------------------------------------------------------- * Work Areas Open Client *----------------------------------------------------------------- 01 CS-LIB-MISC-FIELDS. 05 CSL-CMD-HANDLE PIC S9(9) COMP SYNC VALUE 0. 05 CSL-CON-HANDLE PIC S9(9) COMP SYNC VALUE 0. 05 CSL-CTX-HANDLE PIC S9(9) COMP SYNC VALUE 0. 05 CSL-RC PIC S9(9) COMP SYNC. 01 PROPS-FIELDS. 05 PF-SERVER PIC X(30). 05 PF-SERVER-SIZE PIC S9(9) COMP. 05 PF-USER PIC X(30). 05 PF-USER-SIZE PIC S9(9) COMP. 05 PF-PWD PIC X(30). 05 PF-PWD-SIZE PIC S9(9) COMP. 05 PF-OUTLEN PIC S9(9) COMP SYNC. 05 PF-STRLEN PIC S9(9) COMP SYNC. 01 QUERY-FIELDS. 05 QF-LEN PIC S9(9) VALUE 1. 05 QF-MAXLEN PIC S9(9) VALUE 1. 05 QF-ANSWER PIC X(01) VALUE ' '. 01 FETCH-FIELDS. 05 FF-ROWS-READ PIC S9(9) COMP SYNC VALUE 0. 05 FF-ROW-NUM PIC S9(9) COMP SYNC VALUE 0. 01 COLUMN-FIELDS. 05 CF-COL-FIRSTNME PIC X(12) VALUE SPACES. 05 CF-COL-NUMBER PIC S9(9) COMP SYNC VALUE 0. 05 CF-COL-INDICATOR PIC S9(9) COMP SYNC VALUE 0. 05 CF-COL-OUTLEN PIC S9(9) COMP SYNC VALUE 0. 01 LANG-FIELDS. 05 LF-LANG PIC X(36) VALUE 'SELECT FIRSTNME FROM SYBASE.SAMPLETB'. 01 ERROR-MSG. 05 ERROR-TEXT PIC X(50) VALUE ' '. 05 ERROR-LITERAL PIC X(06) VALUE ' RC = '. 05 ERROR-RC PIC -ZZZ9. 01 ERROR-MSG-STR REDEFINES ERROR-MSG PIC X(61). 01 INFO-MSG-STR PIC X(80) VALUE ' '. 01 RESULTS-FIELDS. 05 RF-TYPE PIC S9(9) COMP SYNC VALUE 0. 01 DATAFMT. 05 DF-NAME PIC X(132). 05 DF-NAMELEN PIC S9(9) COMP SYNC. 05 DF-DATATYPE PIC S9(9) COMP SYNC. 05 DF-FORMAT PIC S9(9) COMP SYNC. 05 DF-MAXLENGTH PIC S9(9) COMP SYNC. 05 DF-SCALE PIC S9(9) COMP SYNC. 05 DF-PRECISION PIC S9(9) COMP SYNC. 05 DF-STATUS PIC S9(9) COMP SYNC. 05 DF-COUNT PIC S9(9) COMP SYNC. 05 DF-USERTYPE PIC S9(9) COMP SYNC. 05 DF-LOCALE PIC X(68). *----------------------------------------------------------------- * Common Work Areas *----------------------------------------------------------------- 01 MSG-FIELDS. 05 MSG-END-MSG PIC X(25) VALUE 'All done processing rows.'. 05 MSG-NOT-RPC PIC X(35) VALUE 'SYX5 must be begun via rpc request.'. 05 MSG-WRONG-NR-PARMS PIC X(40) VALUE 'Number of parameters must be 2 or 3.'. 05 MSG-NOT-INT4-PARM PIC X(33) VALUE 'Parameter must be a INTEGER type.'. 05 MSG-CANCELED PIC X(17) VALUE 'Cancel requested.'. 05 MSG-TDRCVPRM-FAIL PIC X(16) VALUE 'TDRCVPRM failed.'. 01 CICS-FIELDS. 05 CICS-RESPONSE PIC S9(9) COMP SYNC. 01 MISC-FIELDS. 05 I PIC S9(9) COMP. 05 LCV PIC S9(9) COMP SYNC. 05 TMP-DATE PIC X(08). 05 TMP-TIME PIC X(08). 05 UTIME PIC S9(15) COMP-3. 01 X5-HEADER. 05 X5-DATE-HDR PIC X(06) VALUE ' DATE '. 05 X5-DATE-DATA PIC X(08). 05 X5-HDR PIC X(56). 01 X5-HEADER-STR REDEFINES X5-HEADER PIC X(70). 01 X5-HEADER2. 05 X5-TIME-HDR PIC X(06) VALUE ' TIME '. 05 X5-TIME-DATA PIC X(08). 01 X5-HEADER2-STR REDEFINES X5-HEADER2 PIC X(14). 01 DISP-MSG. 05 TEST-CASE PIC X(08) VALUE IS 'SYCTSAA5'. 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 DIAG-FIELDS. 05 DG-MSGNO PIC S9(9) COMP VALUE +1. 05 DG-NUM-OF-MSGS PIC S9(9) COMP VALUE +0. 01 DISP-SERVER. 05 SERVER-HDR PIC X(09) VALUE IS ' SERVER: '. 05 SERVER-DATA PIC X(20). 05 USER-HDR PIC X(10) VALUE IS ' USER-ID: '. 05 USER-DATA PIC X(30).
*----------------------------------------------------------------- * 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). PROCEDURE DIVISION. *----------------------------------------------------------------- * Begin program here *----------------------------------------------------------------- MOVE LOW-VALUES TO PARM-FIELDS DATAFMT. MOVE 'Y' TO SW-DIAG. EXEC CICS ASKTIME ABSTIME(UTIME) END-EXEC. EXEC CICS FORMATTIME ABSTIME(UTIME) DATESEP('/') MMDDYY(TMP-DATE) TIME(TMP-TIME) TIMESEP END-EXEC. MOVE ' SYBASE COBOL SAMPLE PROGRAM SYCTSAX5 SQL RESULT OUTPUT ' TO X5-HDR. MOVE TMP-DATE TO X5-DATE-DATA. MOVE TMP-TIME TO X5-TIME-DATA. *----------------------------------------------------------------- * intialize the TDS environment for a client *----------------------------------------------------------------- CALL 'TDINIT' USING DFHEIBLK, GWL-RC, CSL-CTX-HANDLE. IF GWL-RC NOT = TDS-OK THEN MOVE 'TDINIT failed' TO ERROR-TEXT MOVE GWL-RC TO ERROR-RC PERFORM SEND-ERROR-MESSAGE PERFORM ALL-DONE END-IF. *----------------------------------------------------------------- * accept request from a remote client *----------------------------------------------------------------- CALL 'TDACCEPT' USING GWL-TDPROC, GWL-RC, CSL-CTX-HANDLE, SNA-CONNECTION-NAME, SNA-SUBC. IF GWL-RC NOT = TDS-OK THEN MOVE 'TDACCEPT failed' TO ERROR-TEXT MOVE GWL-RC TO ERROR-RC PERFORM SEND-ERROR-MESSAGE PERFORM ALL-DONE END-IF. *----------------------------------------------------------------- * display date and time *----------------------------------------------------------------- MOVE SPACES TO INFO-MSG-STR. PERFORM SEND-INFO-MESSAGE. MOVE X5-HEADER-STR TO INFO-MSG-STR. PERFORM SEND-INFO-MESSAGE. MOVE X5-HEADER2-STR TO INFO-MSG-STR. PERFORM SEND-INFO-MESSAGE. MOVE SPACES TO INFO-MSG-STR. PERFORM SEND-INFO-MESSAGE. *----------------------------------------------------------------- * determine how many parameters were sent with the current RPC * by the remote client or server *----------------------------------------------------------------- CALL 'TDNUMPRM' USING GWL-TDPROC, PF-NUM-OF-PARMS. IF PF-NUM-OF-PARMS = 2 OR PF-NUM-OF-PARMS = 3 THEN MOVE SPACES TO INFO-MSG-STR ELSE MOVE MSG-WRONG-NR-PARMS TO INFO-MSG-STR PERFORM SEND-INFO-MESSAGE MOVE SPACES TO INFO-MSG-STR PERFORM SEND-INFO-MESSAGE MOVE 'syntax is: SYX5 server-nm, user-id OR' TO INFO-MSG-STR PERFORM SEND-INFO-MESSAGE MOVE ' SYX5 server-nm, user-id, password' TO INFO-MSG-STR PERFORM SEND-INFO-MESSAGE PERFORM ALL-DONE END-IF. *----------------------------------------------------------------- * retrieves parameter type, datatype, and length information * about the 1st RPC parameter( server-name parameter ) *----------------------------------------------------------------- MOVE 1 TO PF-PARM-ID. CALL 'TDINFPRM' USING GWL-TDPROC, GWL-RC, PF-PARM-ID, PF-DATATYPE, PF-ACTUAL-DATA-LENGTH, PF-MAX-DATA-LENGTH, PF-PARM-STATUS, PF-PARM-NAME, PF-PARM-NAME-LENGTH, TDS-NULL. IF GWL-RC NOT = TDS-OK THEN MOVE 'TDINFPRM for server-name parameter failed' TO ERROR-TEXT MOVE GWL-RC TO ERROR-RC PERFORM SEND-ERROR-MESSAGE PERFORM ALL-DONE END-IF. IF PF-DATATYPE NOT = TDSCHAR AND PF-DATATYPE NOT = TDSVARYCHAR THEN MOVE 'server-name datatype must be TDSCHAR' TO INFO-MSG-STR PERFORM SEND-INFO-MESSAGE PERFORM ALL-DONE END-IF. *----------------------------------------------------------------- * retrieves the data from an RPC parameter sent by a remote * client *----------------------------------------------------------------- MOVE LENGTH OF PF-SERVER TO PF-STRLEN. CALL 'TDRCVPRM' USING GWL-TDPROC, GWL-RC, PF-PARM-ID, PF-SERVER, TDSCHAR, PF-STRLEN, PF-ACTUAL-DATA-LENGTH. IF GWL-RC NOT = TDS-OK THEN MOVE 'TDRCVPRM for server-name parameter failed' TO ERROR-TEXT MOVE GWL-RC TO ERROR-RC PERFORM SEND-ERROR-MESSAGE PERFORM ALL-DONE END-IF. MOVE PF-ACTUAL-DATA-LENGTH TO PF-SERVER-SIZE. *----------------------------------------------------------------- * retrieves parameter type, datatype, and length information * about the 2nd RPC parameter( user-id parameter ) *----------------------------------------------------------------- MOVE 2 TO PF-PARM-ID. CALL 'TDINFPRM' USING GWL-TDPROC, GWL-RC, PF-PARM-ID, PF-DATATYPE, PF-ACTUAL-DATA-LENGTH, PF-MAX-DATA-LENGTH, PF-PARM-STATUS, PF-PARM-NAME, PF-PARM-NAME-LENGTH, TDS-NULL. IF GWL-RC NOT = TDS-OK THEN MOVE 'TDINFPGM for user-id parameter failed' TO ERROR-TEXT MOVE GWL-RC TO ERROR-RC PERFORM SEND-ERROR-MESSAGE PERFORM ALL-DONE END-IF. IF PF-DATATYPE NOT = TDSCHAR AND PF-DATATYPE NOT = TDSVARYCHAR THEN MOVE 'user-id datatype must be TDSCHAR' TO INFO-MSG-STR PERFORM SEND-INFO-MESSAGE PERFORM ALL-DONE END-IF.
*----------------------------------------------------------------- * retrieves the data from an RPC parameter sent by a remote * client *----------------------------------------------------------------- MOVE LENGTH OF PF-USER TO PF-STRLEN. CALL 'TDRCVPRM' USING GWL-TDPROC, GWL-RC, PF-PARM-ID, PF-USER, TDSCHAR, PF-STRLEN, PF-ACTUAL-DATA-LENGTH. IF GWL-RC NOT = TDS-OK THEN MOVE 'TDRCVPRM for user-id failed' TO ERROR-TEXT MOVE GWL-RC TO ERROR-RC PERFORM SEND-ERROR-MESSAGE PERFORM ALL-DONE END-IF. MOVE PF-ACTUAL-DATA-LENGTH TO PF-USER-SIZE. IF PF-NUM-OF-PARMS = 3 THEN *----------------------------------------------------------------- * retrieves parameter type, datatype, and length information * about the 3rd RPC parameter( password parameter ) *----------------------------------------------------------------- MOVE 3 TO PF-PARM-ID CALL 'TDINFPRM' USING GWL-TDPROC, GWL-RC, PF-PARM-ID, PF-DATATYPE, PF-ACTUAL-DATA-LENGTH, PF-MAX-DATA-LENGTH, PF-PARM-STATUS, PF-PARM-NAME, PF-PARM-NAME-LENGTH, TDS-NULL IF GWL-RC NOT = TDS-OK THEN MOVE 'TDINFPRM for server-name parameter failed' TO ERROR-TEXT MOVE GWL-RC TO ERROR-RC PERFORM SEND-ERROR-MESSAGE PERFORM ALL-DONE END-IF IF PF-DATATYPE NOT = TDSCHAR AND PF-DATATYPE NOT = TDSVARYCHAR THEN MOVE 'server-name datatype must be TDSCHAR' TO INFO-MSG-STR PERFORM SEND-INFO-MESSAGE PERFORM ALL-DONE END-IF *----------------------------------------------------------------- * retrieves the data from an RPC parameter sent by a remote * client *----------------------------------------------------------------- MOVE LENGTH OF PF-PWD TO PF-STRLEN CALL 'TDRCVPRM' USING GWL-TDPROC, GWL-RC, PF-PARM-ID, PF-PWD, TDSCHAR, PF-STRLEN, PF-ACTUAL-DATA-LENGTH IF GWL-RC NOT = TDS-OK THEN MOVE 'TDRCVPRM for password parameter failed' TO ERROR-TEXT MOVE GWL-RC TO ERROR-RC PERFORM SEND-ERROR-MESSAGE PERFORM ALL-DONE END-IF MOVE PF-ACTUAL-DATA-LENGTH TO PF-PWD-SIZE ELSE MOVE SPACES TO PF-PWD MOVE 0 TO PF-PWD-SIZE END-IF. *----------------------------------------------------------------- * display server and user-id heading *----------------------------------------------------------------- MOVE PF-SERVER TO SERVER-DATA. MOVE PF-USER TO USER-DATA. MOVE DISP-SERVER TO INFO-MSG-STR. PERFORM SEND-INFO-MESSAGE. MOVE SPACES TO INFO-MSG-STR. PERFORM SEND-INFO-MESSAGE. *----------------------------------------------------------------- * describe the 1st column in a result row and the mainframe * server program variable where it is stored *----------------------------------------------------------------- MOVE 1 TO DF-COLUMN-NUMBER. MOVE TDSVARYCHAR TO DF-HOST-VARIABLE-TYPE. MOVE LENGTH OF CF-COL-FIRSTNME TO DF-HOST-VARIABLE-MAXLEN. MOVE TDS-ZERO TO DF-NULL-INDICATOR-VAR. MOVE TDS-FALSE TO DF-NULLS-ALLOWED. MOVE TDSVARYCHAR TO DF-COLUMN-TYPE. MOVE LENGTH OF CF-COL-FIRSTNME TO DF-COLUMN-MAXLEN. MOVE 'FIRST NAME' TO DF-COLUMN-NAME. MOVE 10 TO DF-COLUMN-NAME-LEN. CALL 'TDESCRIB' USING GWL-TDPROC, GWL-RC, DF-COLUMN-NUMBER, DF-HOST-VARIABLE-TYPE, DF-HOST-VARIABLE-MAXLEN, CF-COL-FIRSTNME, DF-NULL-INDICATOR-VAR, DF-NULLS-ALLOWED, DF-COLUMN-TYPE, DF-COLUMN-MAXLEN, DF-COLUMN-NAME, DF-COLUMN-NAME-LEN. IF GWL-RC NOT = TDS-OK THEN MOVE 'TDESCRIB failed' TO ERROR-TEXT MOVE GWL-RC TO ERROR-RC PERFORM SEND-ERROR-MESSAGE PERFORM ALL-DONE END-IF. PERFORM OC-INIT. PERFORM OC-CONNECT. PERFORM OC-SEND-LANG. PERFORM OC-PROCESS-RESULTS. PERFORM OC-ALL-DONE.
*======================================================== *== == *== Subroutine to send a results completion indication == *== to the client, free up a previously allocated == *== GWL_TDPROC structure, and return back to CICS == *== == *======================================================== ALL-DONE. *----------------------------------------------------------------- * send a results completion indication to the client *----------------------------------------------------------------- CALL 'TDSNDDON' USING GWL-TDPROC, GWL-RC, TDS-DONE-FINAL, TDS-NULL, TDS-ZERO, TDS-ENDRPC. IF GWL-RC NOT = TDS-OK THEN MOVE 'TDSNDDON failed' TO ERROR-TEXT MOVE GWL-RC TO ERROR-RC PERFORM SEND-ERROR-MESSAGE END-IF. *----------------------------------------------------------------- * free up a previously allocated GWL_TDPROC structure after * returning results to a client *----------------------------------------------------------------- CALL 'TDFREE' USING GWL-TDPROC, GWL-RC. IF GWL-RC NOT = TDS-OK THEN MOVE 'TDFREE failed' TO ERROR-TEXT MOVE GWL-RC TO ERROR-RC PERFORM SEND-ERROR-MESSAGE END-IF. *----------------------------------------------------------------- * return back to CICS *----------------------------------------------------------------- EXEC CICS RETURN END-EXEC. *======================================================== *== == *== Subroutine to initialize the Client-Library == *== == *======================================================== OC-INIT. *----------------------------------------------------------- * initialize the Client-Library *----------------------------------------------------------- CALL 'CTBINIT' USING CSL-CTX-HANDLE, CSL-RC, CS-VERSION-46. IF CSL-RC NOT = CS-SUCCEED THEN MOVE 'CTBINIT failed' TO MSGSTR PERFORM ERROR-OUT PERFORM ALL-DONE END-IF. *======================================================== *== == *== Subroutine to allocate connect handler, alter == *== properties for user-id and password, set up == *== retrieval of all Open Client messages, and open == *== connection to the server == *== == *======================================================== OC-CONNECT. *----------------------------------------------------------- * allocate a connection to the server *---------------------------------------------------------- CALL 'CTBCONAL' USING CSL-CTX-HANDLE, CSL-RC, CSL-CON-HANDLE. IF CSL-RC NOT = CS-SUCCEED THEN MOVE 'CTBCONAL failed' TO MSGSTR PERFORM ERROR-OUT PERFORM ALL-DONE END-IF. *----------------------------------------------------------- *alter properties of the connection * ---------------------------------------------------------- CALL 'CTBCONPR' USING CSL-CON-HANDLE, CSL-RC, CS-SET, CS-USERNAME, PF-USER, PF-USER-SIZE, CS-FALSE, CS-UNUSED. IF CSL-RC NOT = CS-SUCCEED THEN MOVE 'CTBCONPR for user-id failed' TO MSGSTR PERFORM ERROR-OUT PERFORM ALL-DONE END-IF. CALL 'CTBCONPR' USING CSL-CON-HANDLE, CSL-RC, CS-SET, CS-PASSWORD, PF-PWD, PF-PWD-SIZE, CS-FALSE, CS-UNUSED. IF CSL-RC NOT = CS-SUCCEED THEN MOVE 'CTBCONPR for password failed' TO MSGSTR PERFORM ERROR-OUT PERFORM ALL-DONE END-IF. *------------------------------------------------------------* * setup retrieval of All Messages *------------------------------------------------------------* CALL 'CTBDIAG' USING CSL-CON-HANDLE, CSL-RC, CS-UNUSED, CS-INIT, CS-ALLMSG-TYPE, CS-UNUSED, CS-UNUSED. IF CSL-RC NOT = CS-SUCCEED THEN MOVE 'CTBDIAG CS-INIT failed' TO MSGSTR PERFORM ERROR-OUT 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 = CS-SUCCEED THEN MOVE 'CTBDIAG CS-MSGLIMIT failed' TO MSGSTR PERFORM ERROR-OUT PERFORM ALL-DONE END-IF. *------------------------------------------------------------* * open connection to the server *------------------------------------------------------------* CALL 'CTBCONNE' USING CSL-CON-HANDLE, CSL-RC, PF-SERVER, PF-SERVER-SIZE, CS-FALSE. IF CSL-RC NOT = CS-SUCCEED THEN MOVE 'CTBCONNE failed' TO MSGSTR PERFORM ERROR-OUT PERFORM ALL-DONE END-IF. *======================================================== *== == *== Subroutine to allocate command handler, prepare == *== and send the language request == *== == *======================================================== OC-SEND-LANG. *----------------------------------------------------------- * allocate a command handle *---------------------------------------------------------- CALL 'CTBCMDAL' USING CSL-CON-HANDLE, CSL-RC, CSL-CMD-HANDLE. IF CSL-RC NOT = CS-SUCCEED THEN MOVE 'CTBCMDAL failed' TO MSGSTR PERFORM ERROR-OUT PERFORM ALL-DONE END-IF. *----------------------------------------------------------- * prepare the language request *----------------------------------------------------------- MOVE LENGTH OF LF-LANG TO PF-STRLEN. CALL 'CTBCOMMA' USING CSL-CMD-HANDLE, CSL-RC, CS-LANG-CMD, LF-LANG, PF-STRLEN, CS-UNUSED. IF CSL-RC NOT = CS-SUCCEED THEN MOVE 'CTBCOMMA failed' TO MSGSTR PERFORM ERROR-OUT PERFORM ALL-DONE END-IF. *----------------------------------------------------------- * send the language request *---------------------------------------------------------- CALL 'CTBSEND' USING CSL-CMD-HANDLE, CSL-RC. IF CSL-RC NOT = CS-SUCCEED THEN MOVE 'CTBSEND failed' TO MSGSTR PERFORM ERROR-OUT PERFORM ALL-DONE END-IF. *======================================================== *== == *== Subroutine to process the result == *== == *======================================================== OC-PROCESS-RESULTS. PERFORM RESULTS-PROCESSING UNTIL NO-MORE-RESULTS. *======================================================== *== == *== Subroutine to set up the results data == *== == *======================================================== RESULTS-PROCESSING. CALL 'CTBRESUL' USING CSL-CMD-HANDLE CSL-RC RF-TYPE. EVALUATE CSL-RC WHEN CS-SUCCEED EVALUATE RF-TYPE WHEN CS-ROW-RESULT PERFORM ROW-RESULT-PROCESSING MOVE 'Y' TO SW-FETCH PERFORM FETCH-PROCESSING UNTIL NO-MORE-ROWS WHEN CS-STATUS-RESULT PERFORM STATUS-PROCESSING WHEN CS-CMD-FAIL MOVE 'RESULTS-PROCESSING CMD-FAIL' TO MSGSTR PERFORM ERROR-OUT MOVE 'bad user-id or password' TO INFO-MSG-STR PERFORM SEND-INFO-MESSAGE MOVE SPACES TO INFO-MSG-STR PERFORM SEND-INFO-MESSAGE WHEN CS-CMD-DONE MOVE 'RESULTS-PROCESSING CMD-DONE' TO INFO-MSG-STR MOVE RF-TYPE TO ERROR-RC WHEN OTHER MOVE 'RESULTS-PROCESSING unknown return code' TO MSGSTR PERFORM ERROR-OUT END-EVALUATE WHEN CS-FAIL MOVE 'N' TO SW-RESULTS MOVE 'CTBRESULTS failed' TO MSGSTR PERFORM ERROR-OUT WHEN CS-END-RESULTS MOVE 'N' TO SW-RESULTS WHEN OTHER MOVE 'N' TO SW-RESULTS MOVE 'CTBRESULTS failed' TO MSGSTR PERFORM ERROR-OUT END-EVALUATE.
*======================================================== *== == *== Subroutine to process row result and bind == *== == *======================================================== ROW-RESULT-PROCESSING. CALL 'CTBRESUL' USING CSL-CMD-HANDLE CSL-RC RF-TYPE. MOVE CS-VARCHAR-TYPE TO DF-DATATYPE. MOVE CS-FMT-UNUSED TO DF-FORMAT. MOVE LENGTH OF CF-COL-FIRSTNME TO DF-MAXLENGTH. MOVE 1 TO DF-COUNT. *---------------------------------------------------------- * bind the first column *---------------------------------------------------------- MOVE 1 TO CF-COL-NUMBER. CALL 'CTBBIND' USING CSL-CMD-HANDLE, CSL-RC, CF-COL-NUMBER, DATAFMT, CF-COL-FIRSTNME, CF-COL-OUTLEN, CS-PARAM-NOTNULL, CF-COL-INDICATOR, CS-PARAM-NULL. IF CSL-RC NOT = CS-SUCCEED THEN MOVE 'CTBBIND first name failed' TO MSGSTR PERFORM ERROR-OUT PERFORM ALL-DONE END-IF. *======================================================== *== == *== Subroutine to fetch the result == *== == *======================================================== FETCH-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 *---------------------------------------------------------- * send a row of data back to the requesting client *---------------------------------------------------------- CALL 'TDSNDROW' USING GWL-TDPROC, GWL-RC MOVE SPACES TO CF-COL-FIRSTNME IF GWL-RC NOT = TDS-OK THEN MOVE MSG-CANCELED TO INFO-MSG-STR MOVE CSL-RC TO ERROR-RC PERFORM SEND-INFO-MESSAGE END-IF WHEN CS-END-DATA MOVE 'N' TO SW-FETCH MOVE SPACES TO INFO-MSG-STR PERFORM SEND-INFO-MESSAGE MOVE MSG-END-MSG TO INFO-MSG-STR PERFORM SEND-INFO-MESSAGE MOVE SPACES TO INFO-MSG-STR PERFORM SEND-INFO-MESSAGE WHEN CS-FAIL MOVE 'N' TO SW-FETCH MOVE 'FETCH-PROCESSING return CS-FAIL ' TO MSGSTR PERFORM ERROR-OUT WHEN CS-ROW-FAIL MOVE 'N' TO SW-FETCH MOVE 'FETCH-PROCESSING retuen CS-ROW-FAIL' TO MSGSTR PERFORM ERROR-OUT WHEN CS-CANCELLED MOVE 'N' TO SW-FETCH MOVE MSG-CANCELED TO MSGSTR PERFORM ERROR-OUT WHEN OTHER MOVE 'N' TO SW-FETCH MOVE 'CTBFETCH UNEXPECTED RETURN CODE' TO MSGSTR PERFORM ERROR-OUT END-EVALUATE. *======================================================== *== == *== dummy routine == *== == *======================================================== STATUS-PROCESSING. *STATUS-PROCESSING-EXIT. EXIT. *======================================================== *== == *== Subroutine to drop the command handler, to close == *== the server connection, to drop the connection == *== handler and exit == *== == *======================================================== OC-ALL-DONE. CALL 'CTBCMDDR' USING CSL-CMD-HANDLE, CSL-RC. IF CSL-RC NOT = CS-SUCCEED THEN MOVE 'CTBCMDDR failed' TO MSGSTR PERFORM ERROR-OUT PERFORM ALL-DONE END-IF. CALL 'CTBCLOSE' USING CSL-CON-HANDLE, CSL-RC, CS-UNUSED. IF CSL-RC NOT = CS-SUCCEED THEN MOVE 'CTBCLOSE failed' TO MSGSTR PERFORM ERROR-OUT PERFORM ALL-DONE END-IF. CALL 'CTBCONDR' USING CSL-CON-HANDLE, CSL-RC. IF CSL-RC NOT = CS-SUCCEED THEN MOVE 'CTBCCONDR failed' TO MSGSTR PERFORM ERROR-OUT PERFORM ALL-DONE END-IF. *======================================================== *== == *== Subroutine to send an error message to the client == *== == *======================================================== SEND-ERROR-MESSAGE. MOVE TDS-ERROR-MSG TO SF-MESSAGE-TYPE. MOVE 0 TO SF-MESSAGE-NUMBER. MOVE 10 TO SF-SEVERITY. MOVE 0 TO SF-ERROR-STATE. MOVE 0 TO SF-LINE-ID. MOVE LENGTH OF SF-TRANSACTION-ID TO SF-TRANSACTION-ID-LEN. MOVE ERROR-MSG-STR TO SF-MESSAGE-TEXT. MOVE LENGTH OF SF-MESSAGE-TEXT TO SF-MESSAGE-LENGTH. CALL 'TDSNDMSG' USING GWL-TDPROC, GWL-RC, SF-MESSAGE-TYPE, SF-MESSAGE-NUMBER, SF-SEVERITY, SF-ERROR-STATE, SF-LINE-ID, SF-TRANSACTION-ID, SF-TRANSACTION-ID-LEN, SF-MESSAGE-TEXT, SF-MESSAGE-LENGTH. *======================================================== *== == *== Subroutine to send an informational message to the == *== client == *== == *======================================================== SEND-INFO-MESSAGE. MOVE TDS-INFO-MSG TO SF-MESSAGE-TYPE. MOVE 0 TO SF-MESSAGE-NUMBER. MOVE 0 TO SF-SEVERITY. MOVE 0 TO SF-ERROR-STATE. MOVE 0 TO SF-LINE-ID. MOVE LENGTH OF SF-TRANSACTION-ID TO SF-TRANSACTION-ID-LEN. MOVE INFO-MSG-STR TO SF-MESSAGE-TEXT. MOVE LENGTH OF SF-MESSAGE-TEXT TO SF-MESSAGE-LENGTH. CALL 'TDSNDMSG' USING GWL-TDPROC, GWL-RC, SF-MESSAGE-TYPE, SF-MESSAGE-NUMBER, SF-SEVERITY, SF-ERROR-STATE, SF-LINE-ID, SF-TRANSACTION-ID, SF-TRANSACTION-ID-LEN, SF-MESSAGE-TEXT, SF-MESSAGE-LENGTH. *======================================================== *== == *== Subroutine to print output messages. == *== == *======================================================== ERROR-OUT. IF DIAG-MSGS-INITIALIZED THEN PERFORM GET-DIAG-MESSAGES END-IF. *----------------------------------------------------------------- * Display The Message *----------------------------------------------------------------- MOVE CSL-RC TO SAMP-RC. MOVE RF-TYPE TO REST-TYPE. MOVE SPACES TO INFO-MSG-STR. PERFORM SEND-INFO-MESSAGE. MOVE DISP-MSG TO INFO-MSG-STR. PERFORM SEND-INFO-MESSAGE. MOVE SPACES TO INFO-MSG-STR. PERFORM SEND-INFO-MESSAGE. MOVE SPACES TO MSGSTR. MOVE ZERO TO SAMP-RC. MOVE ZERO TO REST-TYPE. PRINT-MSG-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 STRING 'CTBDIAG CS-STATUS CS-CLIENTMSG-TYP failed' DELIMITED BY SIZE INTO ERROR-TEXT MOVE CSL-RC TO ERROR-RC PERFORM SEND-ERROR-MESSAGE 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 ERROR-TEXT MOVE CSL-RC TO ERROR-RC PERFORM SEND-ERROR-MESSAGE 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. 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 STRING 'CTBDIAG CS-GET CS-CLIENTMSG-TYPE failed' DELIMITED BY SIZE INTO ERROR-TEXT MOVE CSL-RC TO ERROR-RC PERFORM SEND-ERROR-MESSAGE PERFORM ALL-DONE END-IF. *----------------------------------------------------------------- * display message text *----------------------------------------------------------------- MOVE DISP-CLIENT-MSG-HDR TO INFO-MSG-STR. PERFORM SEND-INFO-MESSAGE. MOVE SPACES TO INFO-MSG-STR. PERFORM SEND-INFO-MESSAGE. MOVE CM-SEVERITY TO CM-SEVERITY-DATA. MOVE CM-STATUS TO CM-STATUS-DATA. MOVE DISP-CLIENT-MSG-1 TO INFO-MSG-STR. PERFORM SEND-INFO-MESSAGE. MOVE CM-MSGNO TO CM-OC-MSGNO-DATA. MOVE DISP-CLIENT-MSG-2 TO INFO-MSG-STR. PERFORM SEND-INFO-MESSAGE. 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 INFO-MSG-STR PERFORM SEND-INFO-MESSAGE IF CM-TEXT-LEN > 66 THEN MOVE CM-OC-MSG-DATA-2 TO CM-OC-MSG-DATA-X MOVE DISP-CLIENT-MSG-3B TO INFO-MSG-STR PERFORM SEND-INFO-MESSAGE 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 INFO-MSG-STR PERFORM SEND-INFO-MESSAGE 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 INFO-MSG-STR PERFORM SEND-INFO-MESSAGE END-IF END-IF END-IF ELSE MOVE DISP-EMPTY-CLIENT-MSG-3 TO INFO-MSG-STR PERFORM SEND-INFO-MESSAGE END-IF. MOVE CM-OS-MSGNO TO CM-OS-MSGNO-DATA. MOVE DISP-CLIENT-MSG-4 TO INFO-MSG-STR. PERFORM SEND-INFO-MESSAGE. 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 INFO-MSG-STR PERFORM SEND-INFO-MESSAGE 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 INFO-MSG-STR PERFORM SEND-INFO-MESSAGE 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 INFO-MSG-STR PERFORM SEND-INFO-MESSAGE 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 INFO-MSG-STR PERFORM SEND-INFO-MESSAGE END-IF END-IF END-IF ELSE MOVE DISP-EMPTY-CLIENT-MSG-5 TO INFO-MSG-STR PERFORM SEND-INFO-MESSAGE 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 STRING 'CTBDIAG CS-GET CS-SERVERMSG-TYPE failed' DELIMITED BY SIZE INTO ERROR-TEXT MOVE CSL-RC TO ERROR-RC PERFORM SEND-ERROR-MESSAGE 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 INFO-MSG-STR. PERFORM SEND-INFO-MESSAGE. MOVE DISP-SERVER-MSG-1 TO INFO-MSG-STR. PERFORM SEND-INFO-MESSAGE. MOVE DISP-SERVER-MSG-2 TO INFO-MSG-STR. PERFORM SEND-INFO-MESSAGE. MOVE DISP-SERVER-MSG-3 TO INFO-MSG-STR. PERFORM SEND-INFO-MESSAGE. MOVE DISP-SERVER-MSG-4 TO INFO-MSG-STR. PERFORM SEND-INFO-MESSAGE. MOVE DISP-SERVER-MSG-5 TO INFO-MSG-STR. PERFORM SEND-INFO-MESSAGE. 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 INFO-MSG-STR PERFORM SEND-INFO-MESSAGE 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 INFO-MSG-STR PERFORM SEND-INFO-MESSAGE 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 INFO-MSG-STR PERFORM SEND-INFO-MESSAGE END-IF END-IF END-IF. RETRIEVE-SERVER-MSGS-EXIT. EXIT.
Copyright © 2005. Sybase Inc. All rights reserved. |
![]() |