This program uses the Gateway-Library system programmer calls to do tracing and accounting at the mainframe.
IDENTIFICATION DIVISION
*-----------------------
PROGRAM-ID. SYCCSAS2. ENVIRONMENT DIVISION. DATA DIVISION. ***************************************************************** WORKING-STORAGE SECTION. ***************************************************************** *---------------------------------------------------------------- * SERVER LIBRARY COBOL COPY BOOK *---------------------------------------------------------------- COPY SYGWCOB. *---------------------------------------------------------------- * WORK AREAS *---------------------------------------------------------------- 01 GW-LIB-MISC-FIELDS. 05 GWL-PROC POINTER. 05 GWL-INIT-HANDLE POINTER. 05 GWL-INFACT-STATUS PIC S9(9) COMP. 05 GWL-INFACT-FILENAME PIC X(8). 05 GWL-INFACT-RECORDS PIC S9(9) COMP. 05 GWL-INFLOG-GLOBAL PIC S9(9) COMP. 05 GWL-INFLOG-API PIC S9(9) COMP. 05 GWL-INFLOG-HEADER PIC S9(9) COMP. 05 GWL-INFLOG-DATA PIC S9(9) COMP. 05 GWL-INFLOG-TRACEID PIC S9(9) COMP. 05 GWL-INFLOG-FILENAME PIC X(8). 05 GWL-INFLOG-RECORDS PIC S9(9) COMP. 05 GWL-INFSPT-STATUS PIC S9(9) COMP. 05 GWL-INFSPT-OPTIONS PIC S9(9) COMP. 05 GWL-INFSPT-TRANID PIC X(4). 05 GWL-INFSPT-TRANID-L PIC S9(9) COMP. 05 GWL-LSTSPT-LIST OCCURS 8 TIMES PIC X(8). 05 GWL-RC PIC S9(9) COMP. 05 GWL-RCVPRM-ID PIC S9(9) COMP VALUE +1. 05 GWL-RCVPRM-MAX-DATA-L ThinSpaceThinSpacePIC S9(9) COMP VALUE +2. 05 GWL-RCVPRM-DATA-L PIC S9(9) COMP VALUE +2 05 GWL-SETSPT-OPTIONS PIC S9(9) COMP. 05 GWL-STATUS-NR PIC S9(9) COMP. 05 GWL-STATUS-DONE PIC S9(9) COMP. 05 GWL-STATUS-COUNT PIC S9(9) COMP. 05 GWL-STATUS-COMM PIC S9(9) COMP. 05 GWL-STATUS-RETURN-CODE PIC S9(9) COMP. 05 GWL-STATUS-SUBCODE PIC S9(9) COMP. 05 GWL-WRTLOG-MSG-L PIC S9(9) COMP VALUE +34. 05 GWL-WRTLOG-MSG PIC X(34) VALUE 'TEST MESSAGE FROM SYS2 TRANSACTION'. 01 PARM-FIELDS. 05 PARM-REQUEST PIC X(2). 88 PARM-REQUEST-INFACT VALUE 'IA'. 88 PARM-REQUEST-INFLOG VALUE 'IL'. 88 PARM-REQUEST-LSTSPT VALUE 'IS'. 88 PARM-REQUEST-SETACT-ON VALUE 'YA'. 88 PARM-REQUEST-SETACT-OFF VALUE 'NA'. 88 PARM-REQUEST-SETLOG-ON VALUE 'YL'. 88 PARM-REQUEST-SETLOG-OFF VALUE 'NL'. 88 PARM-REQUEST-SETSPT-ON VALUE 'YS'. 88 PARM-REQUEST-SETSPT-OFF VALUE 'NS'. 88 PARM-REQUEST-WRTLOG VALUE 'WL'. 01 SNA-FIELDS. 05 SNA-SUBC PIC S9(9) COMP. 05 SNA-CONNECTION-NAME PIC X(8) VALUE SPACES. 01 COLUMN-NAME-FIELDS. 05 CN-INFACT-STATUS PIC X(13) VALUE 'ACT_STATUS' 05 CN-INFACT-FILENAME PIC X(12) VALUE 'ACT FILENAME'. 05 CN-INFACT-RECORDS PIC X(11) VALUE 'ACT RECORDS'. 05 CN-INFLOG-GLOBAL PIC X(10) VALUE 'LOG GLOBAL'. 05 CN-INFLOG-API PIC X(7) VALUE 'LOG API'. 05 CN-INFLOG-HEADER PIC X(10) VALUE 'LOG HEADER'. 05 CN-INFLOG-DATA PIC X(8) VALUE 'LOG DATA'. 05 CN-INFLOG-TRACEID PIC X(11) VALUE 'LOG TRACEID'. 05 CN-INFLOG-FILENAME PIC X(12) VALUE 'LOG FILENAME'. 05 CN-INFLOG-RECORDS PIC X(11) VALUE 'LOG RECORDS'. 05 CN-LSTSPT-TRANID PIC X(06) VALUE 'TRANID'. 01 COUNTER-FIELDS. 05 CTR-COLUMN PIC S9(9) COMP VALUE 0. 05 CTR-ROWS PIC S9(9) COMP VALUE 0. 01 WORK-FIELDS. 05 WRKLEN1 PIC S9(9) COMP. 05 WRKLEN2 PIC S9(9) COMP. 05 WRK-DONE-STATUS PIC S9(9) COMP. 05 WRK-RPC PIC X(4) VALUE 'SYS2'. 05 WRK-TRANID PIC X(4) VALUE SPACE. 05 WRK-LSTSPT-SS PIC S9(4) COMP. 01 MESSAGE-FIELDS. 05 MSG-TYPE PIC S9(9) COMP. 05 MSG-SEVERITY-ERROR PIC S9(9) COMP VALUE 11. 05 MSG-NR-ERROR PIC S9(9) COMP VALUE 2. 05 MSG-RPC PIC X(4). 05 MSG-RPC-L PIC S9(9) COMP VALUE 4. 05 MSG-TEXT PIC X(20). 05 MSG-TEXT-L PIC S9(9) COMP. 05 MSG-SRVLIB. 10 MSG-SRVLIB-FUNC PIC X(8) VALUE SPACE. 10 FILLER PIC X(6) VALUE ' RC = '. 10 MSG-SRVLIB-RC PIC Z(4)9+. 01 SWITCHES. 05 SEND-DONE-SW PIC X VALUE 'Y'. 88 SEND-DONE-ERROR ThinSpaceThinSpaceThinSpaceThinSpaceVALUE 'N'. 88 SEND-DONE-OK ThinSpaceThinSpaceThinSpaceThinSpaceVALUE 'Y'. 05 TRACING-SW PIC X VALUE 'N'. 88 TRACING-OFF VALUE 'N'. 88 TRACING-ON VALUE 'Y'. ***************************************************************** PROCEDURE DIVISION. ***************************************************************** *---------------------------------------------------------------- INITIALIZE-PROGRAM. *---------------------------------------------------------------- * ------------------------------------------------------------ * Establish gateway environment. * ------------------------------------------------------------ CALL 'TDINIT' USING DFHEIBLK, GWL-RC, GWL-INIT-HANDLE. * ------------------------------------------------------------ * Accept client request. * ------------------------------------------------------------ CALL 'TDACCEPT' USING GWL-PROC, GWL-RC, GWL-INIT-HANDLE, SNA-CONNECTION-NAME, SNA-SUBC. * ------------------------------------------------------------ * Call TDRESULT to validate that request is an RPC. * ------------------------------------------------------------ CALL 'TDRESULT' USING GWL-PROC, GWL-RC. IF GWL-RC NOT = TDS-PARM-PRESENT THEN MOVE 'N' TO SEND-DONE-SW MOVE 'TDRESULT' TO MSG-SRVLIB-FUNC GO TO END-PROGRAM END-IF. *---------------------------------------------------------------- GET-PARM. *---------------------------------------------------------------- CALL 'TDRCVPRM' USING GWL-PROC, GWL-RC, GWL-RCVPRM-ID, PARM-REQUEST, TDSCHAR, GWL-RCVPRM-MAX-DATA-L, GWL-RCVPRM-DATA-L. IF PARM-REQUEST-INFACT THEN PERFORM TDINFACT THRU TDINFACT-EXIT ELSE IF PARM-REQUEST-INFLOG THEN PERFORM TDINFLOG THRU TDINFLOG-EXIT ELSE IF PARM-REQUEST-LSTSPT THEN PERFORM TDLSTSPT THRU TDLSTSPT-EXIT ELSE IF PARM-REQUEST-SETACT-ON THEN PERFORM TDSETACT-ON THRU TDSETACT-ON-EXIT ELSE IF PARM-REQUEST-SETACT-OFF THEN PERFORM TDSETACT-OFF THRU TDSETACT-OFF-EXIT ELSE IF PARM-REQUEST-SETLOG-ON THEN PERFORM TDSETLOG-ON THRU TDSETLOG-ON-EXIT ELSE IF PARM-REQUEST-SETLOG-OFF THEN PERFORM TDSETLOG-OFF THRU TDSETLOG-OFF-EXIT ELSE IF PARM-REQUEST-SETSPT-ON THEN PERFORM TDSETSPT-ON THRU TDSETSPT-ON-EXIT ELSE IF PARM-REQUEST-SETSPT-OFF THEN PERFORM TDSETSPT-OFF THRU TDSETSPT-OFF-EXIT ELSE IF PARM-REQUEST-WRTLOG THEN PERFORM TDWRTLOG THRU TDWRTLOG-EXIT END-IF. *---------------------------------------------------------------- END-PROGRAM. *---------------------------------------------------------------- IF SEND-DONE-OK THEN MOVE TDS-DONE-COUNT TO WRK-DONE-STATUS ELSE PERFORM SRVLIB-ERROR THRU SRVLIB-ERROR-EXIT MOVE TDS-DONE-ERROR TO WRK-DONE-STATUS MOVE ZERO TO CTR-ROWS END-IF. CALL 'TDSNDDON' USING GWL-PROC, GWL-RC, WRK-DONE-STATUS, CTR-ROWS, TDS-ZERO, TDS-ENDRPC. CALL 'TDFREE' USING GWL-PROC, GWL-RC. STOP RUN. *---------------------------------------------------------------- TDINFACT. *---------------------------------------------------------------- MOVE LENGTH OF GWL-INFACT-STATUS TO WRKLEN1. MOVE LENGTH OF CN-INFACT-STATUS TO WRKLEN2. ADD +1 TO CTR-COLUMN. MOVE 'TDESCRIB' TO MSG-SRVLIB-FUNC. CALL 'TDESCRIB' USING GWL-PROC, GWL-RC, CTR-COLUMN, TDSINT4, WRKLEN1, GWL-INFACT-STATUS, TDS-ZERO, TDS-FALSE, TDSINT4, WRKLEN1, CN-INFACT-STATUS, WRKLEN2. IF GWL-RC NOT = TDS-OK THEN MOVE 'N' TO SEND-DONE-SW GO TO TDINFACT-EXIT END-IF. MOVE LENGTH OF GWL-INFACT-FILENAME TO WRKLEN1. MOVE LENGTH OF CN-INFACT-FILENAME TO WRKLEN2. ADD +1 TO CTR-COLUMN. CALL 'TDESCRIB' USING GWL-PROC, GWL-RC, CTR-COLUMN, TDSCHAR, WRKLEN1, GWL-INFACT-FILENAME, TDS-ZERO, TDS-FALSE, TDSCHAR, WRKLEN1, CN-INFACT-FILENAME, WRKLEN2. IF GWL-RC NOT = TDS-OK THEN MOVE 'N' TO SEND-DONE-SW GO TO TDINFACT-EXIT END-IF. MOVE LENGTH OF GWL-INFACT-RECORDS TO WRKLEN1. MOVE LENGTH OF CN-INFACT-RECORDS TO WRKLEN2. ADD +1 TO CTR-COLUMN. CALL 'TDESCRIB' USING GWL-PROC, GWL-RC, CTR-COLUMN, TDSINT4, WRKLEN1, GWL-INFACT-RECORDS, TDS-ZERO, TDS-FALSE, TDSINT4, WRKLEN1, CN-INFACT-RECORDS, WRKLEN2. IF GWL-RC NOT = TDS-OK THEN MOVE 'N' TO SEND-DONE-SW GO TO TDINFACT-EXIT END-IF. CALL 'TDINFACT' USING GWL-INIT-HANDLE, GWL-RC, GWL-INFACT-STATUS, GWL-INFACT-FILENAME, GWL-INFACT-RECORDS. IF GWL-RC NOT = TDS-OK THEN MOVE 'N' TO SEND-DONE-SW MOVE 'TDINFACT' TO MSG-SRVLIB-FUNC GO TO TDINFACT-EXIT END-IF. CALL 'TDSNDROW' USING GWL-PROC, GWL-RC. IF GWL-RC NOT = TDS-OK THEN MOVE 'N' TO SEND-DONE-SW MOVE 'TDSNDROW' TO MSG-SRVLIB-FUNC GO TO TDINFACT-EXIT END-IF. ADD +1 TO CTR-ROWS. *---------------------------------------------------------------- TDINFACT-EXIT. *---------------------------------------------------------------- EXIT. *---------------------------------------------------------------- TDINFLOG. *---------------------------------------------------------------- MOVE LENGTH OF GWL-INFLOG-GLOBAL TO WRKLEN1. MOVE LENGTH OF CN-INFLOG-GLOBAL TO WRKLEN2. ADD +1 TO CTR-COLUMN. MOVE 'TDESCRIB' TO MSG-SRVLIB-FUNC. CALL 'TDESCRIB' USING GWL-PROC, GWL-RC, CTR-COLUMN, TDSINT4, WRKLEN1, GWL-INFLOG-GLOBAL, TDS-ZERO, TDS-FALSE, TDSINT4, WRKLEN1, CN-INFLOG-GLOBAL, WRKLEN2. IF GWL-RC NOT = TDS-OK THEN MOVE 'N' TO SEND-DONE-SW GO TO TDINFLOG-EXIT END-IF. MOVE LENGTH OF GWL-INFLOG-API TO WRKLEN1. MOVE LENGTH OF CN-INFLOG-API TO WRKLEN2. ADD +1 TO CTR-COLUMN. CALL 'TDESCRIB' USING GWL-PROC, GWL-RC, CTR-COLUMN, TDSINT4, WRKLEN1, GWL-INFLOG-API, TDS-ZERO, TDS-FALSE, TDSINT4, WRKLEN1, CN-INFLOG-API, WRKLEN2. IF GWL-RC NOT = TDS-OK THEN MOVE 'N' TO SEND-DONE-SW GO TO TDINFLOG-EXIT END-IF. MOVE LENGTH OF GWL-INFLOG-HEADER TO WRKLEN1. MOVE LENGTH OF CN-INFLOG-HEADER TO WRKLEN2. ADD +1 TO CTR-COLUMN. CALL 'TDESCRIB' USING GWL-PROC, GWL-RC, CTR-COLUMN, TDSINT4, WRKLEN1, GWL-INFLOG-HEADER, TDS-ZERO, TDS-FALSE, TDSINT4, WRKLEN1, CN-INFLOG-HEADER, WRKLEN2. IF GWL-RC NOT = TDS-OK THEN MOVE 'N' TO SEND-DONE-SW GO TO TDINFLOG-EXIT END-IF. MOVE LENGTH OF GWL-INFLOG-DATA TO WRKLEN1. MOVE LENGTH OF CN-INFLOG-DATA TO WRKLEN2. ADD +1 TO CTR-COLUMN. CALL 'TDESCRIB' USING GWL-PROC, GWL-RC, CTR-COLUMN, TDSINT4, WRKLEN1, GWL-INFLOG-DATA, TDS-ZERO, TDS-FALSE, TDSINT4, WRKLEN1, CN-INFLOG-DATA, WRKLEN2. IF GWL-RC NOT = TDS-OK THEN MOVE 'N' TO SEND-DONE-SW GO TO TDINFLOG-EXIT END-IF. MOVE LENGTH OF GWL-INFLOG-TRACEID TO WRKLEN1. MOVE LENGTH OF CN-INFLOG-TRACEID TO WRKLEN2. ADD +1 TO CTR-COLUMN. CALL 'TDESCRIB' USING GWL-PROC, GWL-RC, CTR-COLUMN, TDSINT4, WRKLEN1, GWL-INFLOG-TRACEID, TDS-ZERO, TDS-FALSE, TDSINT4, WRKLEN1, CN-INFLOG-TRACEID, WRKLEN2. IF GWL-RC NOT = TDS-OK THEN MOVE 'N' TO SEND-DONE-SW GO TO TDINFLOG-EXIT END-IF. MOVE LENGTH OF GWL-INFLOG-FILENAME TO WRKLEN1. MOVE LENGTH OF CN-INFLOG-FILENAME TO WRKLEN2. ADD +1 TO CTR-COLUMN. CALL 'TDESCRIB' USING GWL-PROC, GWL-RC, CTR-COLUMN, TDSCHAR, WRKLEN1, GWL-INFLOG-FILENAME, TDS-ZERO, TDS-FALSE, TDSCHAR, WRKLEN1, CN-INFLOG-FILENAME, WRKLEN2. IF GWL-RC NOT = TDS-OK THEN MOVE 'N' TO SEND-DONE-SW GO TO TDINFLOG-EXIT END-IF. MOVE LENGTH OF GWL-INFLOG-RECORDS TO WRKLEN1. MOVE LENGTH OF CN-INFLOG-RECORDS TO WRKLEN2. ADD +1 TO CTR-COLUMN. CALL 'TDESCRIB' USING GWL-PROC, GWL-RC, CTR-COLUMN, TDSINT4, WRKLEN1, GWL-INFLOG-RECORDS, TDS-ZERO, TDS-FALSE, TDSINT4, WRKLEN1, CN-INFLOG-RECORDS, WRKLEN2. IF GWL-RC NOT = TDS-OK THEN MOVE 'N' TO SEND-DONE-SW GO TO TDINFLOG-EXIT END-IF. CALL 'TDINFLOG' USING GWL-INIT-HANDLE, GWL-RC, GWL-INFLOG-GLOBAL, GWL-INFLOG-API, GWL-INFLOG-HEADER, GWL-INFLOG-DATA, GWL-INFLOG-TRACEID, GWL-INFLOG-FILENAME, GWL-INFLOG-RECORDS. IF GWL-RC NOT = TDS-OK THEN MOVE 'N' TO SEND-DONE-SW MOVE 'TDINFLOG' TO MSG-SRVLIB-FUNC GO TO TDINFLOG-EXIT END-IF. CALL 'TDSNDROW' USING GWL-PROC, GWL-RC. IF GWL-RC NOT = TDS-OK THEN MOVE 'N' TO SEND-DONE-SW MOVE 'TDSNDROW' TO MSG-SRVLIB-FUNC GO TO TDINFLOG-EXIT END-IF. ADD +1 TO CTR-ROWS. *---------------------------------------------------------------- TDINFLOG-EXIT. *---------------------------------------------------------------- EXIT. *---------------------------------------------------------------- TDLSTSPT. *---------------------------------------------------------------- MOVE LENGTH OF WRK-TRANID TO WRKLEN1. MOVE LENGTH OF CN-LSTSPT-TRANID TO WRKLEN2. ADD +1 TO CTR-COLUMN. CALL 'TDESCRIB' USING GWL-PROC, GWL-RC, CTR-COLUMN, TDSCHAR, WRKLEN1, WRK-TRANID, TDS-ZERO, TDS-FALSE, TDSCHAR, WRKLEN1, CN-LSTSPT-TRANID, WRKLEN2. IF GWL-RC NOT = TDS-OK THEN MOVE 'N' TO SEND-DONE-SW MOVE 'TDESCRIB' TO MSG-SRVLIB-FUNC GO TO TDLSTSPT-EXIT END-IF. * * Find global status. * CALL 'TDINFLOG' USING GWL-INIT-HANDLE, GWL-RC, GWL-INFLOG-GLOBAL, GWL-INFLOG-API, GWL-INFLOG-HEADER, GWL-INFLOG-DATA, GWL-INFLOG-TRACEID, GWL-INFLOG-FILENAME, GWL-INFLOG-RECORDS. * * If there are any errors, then assume tracing has been disabled. * IF GWL-RC NOT = TDS-OK THEN MOVE 'N' TO SEND-DONE-SW MOVE 'TDINFLOG' TO MSG-SRVLIB-FUNC GO TO TDLSTSPT-EXIT END-IF. * * If specific tracing is not on, then return nothing. * IF GWL-INFLOG-GLOBAL NOT = TDS-TRACE-SPECIFIC-RPCS THEN GO TO TDLSTSPT-EXIT END-IF. * * Return rows. * CALL 'TDLSTSPT' USING GWL-INIT-HANDLE, GWL-RC, GWL-LSTSPT-LIST(1). IF GWL-RC NOT = TDS-OK THEN MOVE 'N' TO SEND-DONE-SW MOVE 'TDLSTSPT' TO MSG-SRVLIB-FUNC GO TO TDLSTSPT-EXIT END-IF. PERFORM VARYING WRK-LSTSPT-SS FROM 1 BY 1 UNTIL WRK-LSTSPT-SS = 8 MOVE GWL-LSTSPT-LIST(WRK-LSTSPT-SS) TO WRK-TRANID CALL 'TDSNDROW' USING GWL-PROC, GWL-RC IF GWL-RC NOT = TDS-OK THEN MOVE 'N' TO SEND-DONE-SW MOVE 'TDSNDROW' TO MSG-SRVLIB-FUNC MOVE 8 TO WRK-LSTSPT-SS END-IF ADD +1 TO CTR-ROWS END-PERFORM. *---------------------------------------------------------------- TDLSTSPT-EXIT. *---------------------------------------------------------------- EXIT. *---------------------------------------------------------------- TDSETACT-ON. *---------------------------------------------------------------- CALL 'TDINFACT' USING GWL-INIT-HANDLE, GWL-RC, GWL-INFACT-STATUS, GWL-INFACT-FILENAME, GWL-INFACT-RECORDS. IF GWL-RC NOT = TDS-OK THEN MOVE 'N' TO SEND-DONE-SW MOVE 'TDINFACT' TO MSG-SRVLIB-FUNC GO TO TDSETACT-ON-EXIT END-IF. * * Turn on host accounting. * CALL 'TDSETACT' USING GWL-INIT-HANDLE, GWL-RC, TDS-TRUE, GWL-INFACT-FILENAME, GWL-INFACT-RECORDS. IF GWL-RC NOT = TDS-OK THEN MOVE 'N' TO SEND-DONE-SW MOVE 'TDSETACT' TO MSG-SRVLIB-FUNC GO TO TDSETACT-ON-EXIT END-IF. *---------------------------------------------------------------- TDSETACT-ON-EXIT. *---------------------------------------------------------------- EXIT. *---------------------------------------------------------------- TDSETACT-OFF. *---------------------------------------------------------------- CALL 'TDINFACT' USING GWL-INIT-HANDLE, GWL-RC, GWL-INFACT-STATUS, GWL-INFACT-FILENAME, GWL-INFACT-RECORDS. IF GWL-RC NOT = TDS-OK THEN MOVE 'N' TO SEND-DONE-SW MOVE 'TDINFACT' TO MSG-SRVLIB-FUNC GO TO TDSETACT-OFF-EXIT END-IF. * * Turn off host accounting if it is on. * IF GWL-INFACT-STATUS = TDS-TRUE THEN CALL 'TDSETACT' USING GWL-INIT-HANDLE, GWL-RC, TDS-FALSE, GWL-INFACT-FILENAME, GWL-INFACT-RECORDS IF GWL-RC NOT = TDS-OK THEN MOVE 'N' TO SEND-DONE-SW MOVE 'TDSETACT' TO MSG-SRVLIB-FUNC GO TO TDSETACT-OFF-EXIT END-IF END-IF. *---------------------------------------------------------------- TDSETACT-OFF-EXIT. *---------------------------------------------------------------- EXIT. *---------------------------------------------------------------- TDSETLOG-ON. *---------------------------------------------------------------- CALL 'TDINFLOG' USING GWL-INIT-HANDLE, GWL-RC, GWL-INFLOG-GLOBAL, GWL-INFLOG-API, GWL-INFLOG-HEADER, GWL-INFLOG-DATA, GWL-INFLOG-TRACEID, GWL-INFLOG-FILENAME, GWL-INFLOG-RECORDS. IF GWL-RC NOT = TDS-OK THEN MOVE 'N' TO SEND-DONE-SW MOVE 'TDINFLOG' TO MSG-SRVLIB-FUNC GO TO TDSETLOG-ON-EXIT END-IF. * * Turn on API (CICS Aux Trace) and header tracing. * CALL 'TDSETLOG' USING GWL-INIT-HANDLE, GWL-RC, TDS-TRACE-ALL-RPCS, TDS-TRUE, TDS-TRUE, GWL-INFLOG-DATA, GWL-INFLOG-TRACEID, GWL-INFLOG-FILENAME, GWL-INFLOG-RECORDS. IF GWL-RC NOT = TDS-OK THEN MOVE 'N' TO SEND-DONE-SW MOVE 'TDSETLOG' TO MSG-SRVLIB-FUNC GO TO TDSETLOG-ON-EXIT END-IF. *---------------------------------------------------------------- TDSETLOG-ON-EXIT. *---------------------------------------------------------------- EXIT. *---------------------------------------------------------------- TDSETLOG-OFF. *---------------------------------------------------------------- CALL 'TDINFLOG' USING GWL-INIT-HANDLE, GWL-RC, GWL-INFLOG-GLOBAL, GWL-INFLOG-API, GWL-INFLOG-HEADER, GWL-INFLOG-DATA, GWL-INFLOG-TRACEID, GWL-INFLOG-FILENAME, GWL-INFLOG-RECORDS. IF GWL-RC NOT = TDS-OK THEN MOVE 'N' TO SEND-DONE-SW MOVE 'TDINFLOG' TO MSG-SRVLIB-FUNC GO TO TDSETLOG-OFF-EXIT END-IF. * * Turn off API (CICS Aux Trace) and header tracing. * CALL 'TDSETLOG' USING GWL-INIT-HANDLE, GWL-RC, TDS-NO-TRACING, TDS-FALSE, TDS-FALSE, GWL-INFLOG-DATA, GWL-INFLOG-TRACEID, GWL-INFLOG-FILENAME, GWL-INFLOG-RECORDS. IF GWL-RC NOT = TDS-OK THEN MOVE 'N' TO SEND-DONE-SW MOVE 'TDSETLOG' TO MSG-SRVLIB-FUNC GO TO TDSETLOG-OFF-EXIT END-IF. *---------------------------------------------------------------- TDSETLOG-OFF-EXIT. *---------------------------------------------------------------- EXIT. *---------------------------------------------------------------- TDSETSPT-ON. *---------------------------------------------------------------- CALL 'TDINFLOG' USING GWL-INIT-HANDLE, GWL-RC, GWL-INFLOG-GLOBAL, GWL-INFLOG-API, GWL-INFLOG-HEADER, GWL-INFLOG-DATA, GWL-INFLOG-TRACEID, GWL-INFLOG-FILENAME, GWL-INFLOG-RECORDS. IF GWL-RC NOT = TDS-OK THEN MOVE 'N' TO SEND-DONE-SW MOVE 'TDINFLOG' TO MSG-SRVLIB-FUNC GO TO TDSETSPT-ON-EXIT END-IF. * * Turn on tracing for specific transactions. * CALL 'TDSETLOG' USING GWL-INIT-HANDLE, GWL-RC, TDS-TRACE-SPECIFIC-RPCS, TDS-TRUE, TDS-TRUE, GWL-INFLOG-DATA, GWL-INFLOG-TRACEID, GWL-INFLOG-FILENAME, GWL-INFLOG-RECORDS. IF GWL-RC NOT = TDS-OK THEN MOVE 'N' TO SEND-DONE-SW MOVE 'TDSETLOG' TO MSG-SRVLIB-FUNC GO TO TDSETSPT-ON-EXIT END-IF. * * Enable error log recording for this tranid. * MOVE 2 TO GWL-SETSPT-OPTIONS. MOVE LENGTH OF WRK-RPC TO WRKLEN1. CALL 'TDSETSPT' USING GWL-INIT-HANDLE, GWL-RC, TDS-TRUE, GWL-SETSPT-OPTIONS, WRK-RPC, WRKLEN1. IF GWL-RC NOT = TDS-OK THEN MOVE 'N' TO SEND-DONE-SW MOVE 'TDSETSPT' TO MSG-SRVLIB-FUNC GO TO TDSETSPT-ON-EXIT END-IF. *---------------------------------------------------------------- TDSETSPT-ON-EXIT. *---------------------------------------------------------------- EXIT. *---------------------------------------------------------------- TDSETSPT-OFF. *---------------------------------------------------------------- * * Assume specific tracing is on for this transaction, * and turn it off. * MOVE LENGTH OF WRK-RPC TO WRKLEN1. CALL 'TDSETSPT' USING GWL-INIT-HANDLE, GWL-RC, TDS-FALSE, GWL-SETSPT-OPTIONS, WRK-RPC, WRKLEN1. IF GWL-RC NOT = TDS-OK AND GWL-RC NOT = TDS-ENTRY-NOT-FOUND THEN MOVE 'N' TO SEND-DONE-SW MOVE 'TDSETSPT' TO MSG-SRVLIB-FUNC GO TO TDSETSPT-OFF-EXIT END-IF. *---------------------------------------------------------------- TDSETSPT-OFF-EXIT. *---------------------------------------------------------------- EXIT. *---------------------------------------------------------------- TDWRTLOG. *---------------------------------------------------------------- * * Write a log entry only if logging is enabled. * PERFORM GET-TRACE-STATUS THRU GET-TRACE-STATUS-EXIT. IF TRACING-ON THEN CALL 'TDWRTLOG' USING GWL-PROC, GWL-RC, TDS-TRUE, GWL-WRTLOG-MSG, GWL-WRTLOG-MSG-L IF GWL-RC NOT = TDS-OK THEN MOVE 'N' TO SEND-DONE-SW MOVE 'TDWRTLOG' TO MSG-SRVLIB-FUNC GO TO TDWRTLOG-EXIT END-IF ELSE MOVE 'N' TO SEND-DONE-SW MOVE 'LOGNOTON' TO MSG-SRVLIB-FUNC END-IF. *---------------------------------------------------------------- TDWRTLOG-EXIT. *---------------------------------------------------------------- EXIT. *---------------------------------------------------------------- GET-TRACE-STATUS. *---------------------------------------------------------------- * * Find global status. * CALL 'TDINFLOG' USING GWL-INIT-HANDLE, GWL-RC, GWL-INFLOG-GLOBAL, GWL-INFLOG-API, GWL-INFLOG-HEADER, GWL-INFLOG-DATA, GWL-INFLOG-TRACEID, GWL-INFLOG-FILENAME, GWL-INFLOG-RECORDS. * * If there are any errors, then assume tracing has been disabled. * IF GWL-RC NOT = TDS-OK THEN MOVE 'N' TO SEND-DONE-SW MOVE 'TDINFLOG' TO MSG-SRVLIB-FUNC GO TO GET-TRACE-STATUS-EXIT END-IF. * * If global tracing is on, then tracing is enabled. * IF GWL-INFLOG-GLOBAL = TDS-TRACE-ALL-RPCS THEN MOVE 'Y' TO TRACING-SW GO TO GET-TRACE-STATUS-EXIT END-IF. * * If error logging is on, then tracing is enabled. * IF GWL-INFLOG-GLOBAL = TDS-TRACE-ERRORS-ONLY THEN MOVE 'Y' TO TRACING-SW GO TO GET-TRACE-STATUS-EXIT END-IF. * * If specific tracing is not on, then no tracing is on. * IF GWL-INFLOG-GLOBAL NOT = TDS-TRACE-SPECIFIC-RPCS THEN GO TO GET-TRACE-STATUS-EXIT END-IF. * * Specific tracing is on, see if on for this transaction. * MOVE LENGTH OF WRK-RPC TO WRKLEN1. CALL 'TDINFSPT' USING GWL-INIT-HANDLE, GWL-RC, GWL-INFSPT-STATUS, GWL-INFSPT-OPTIONS, WRK-RPC, WRKLEN1. IF GWL-RC NOT = TDS-OK AND GWL-RC NOT = TDS-ENTRY-NOT-FOUND THEN MOVE 'N' TO SEND-DONE-SW MOVE 'TDINFSPT' TO MSG-SRVLIB-FUNC GO TO GET-TRACE-STATUS-EXIT END-IF. IF GWL-INFSPT-STATUS = TDS-TRUE THEN MOVE 'Y' TO TRACING-SW END-IF. *---------------------------------------------------------------- GET-TRACE-STATUS-EXIT. *---------------------------------------------------------------- EXIT. *---------------------------------------------------------------- SRVLIB-ERROR. *---------------------------------------------------------------- MOVE GWL-RC TO MSG-SRVLIB-RC. MOVE MSG-SRVLIB TO MSG-TEXT. MOVE LENGTH OF MSG-SRVLIB TO MSG-TEXT-L. MOVE TDS-ERROR-MSG TO MSG-TYPE. MOVE WRK-RPC TO MSG-RPC. *----------------------------------------------------------------- SEND-ERROR-MESSAGE. *----------------------------------------------------------------- MOVE 'N' TO SEND-DONE-SW. MOVE TDS-ERROR-MSG TO MSG-TYPE. MOVE LENGTH OF MSG-RPC TO MSG-RPC-L.
* Ensure we're in right state to send a message
CALL 'TDSTATUS' USING GWL-PROC, GWL-RC, GWL-STATUS-NR, GWL-STATUS-DONE, GWL-STATUS-COUNT, GWL-STATUS-COMM, GWL-STATUS-RETURN-CODE, GWL-STATUS-SUBCODE.
IF (GWL-RC = TDS-OK AND GWL-STATUS-COMM = TDS-RECEIVE) THEN
CALL 'TDSNDMSG' USING GWL-PROC, GWL-RC, MSG-TYPE, MSG-NR, MSG-SEVERITY, TDS-ZERO, TDS-ZERO, MSG-RPC, MSG-RPC-L, MSG-TEXT, MSG-TEXT-L END-IF.
*---------------------------------------------------------------- SRVLIB-ERROR-EXIT. *---------------------------------------------------------------- EXIT.