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.