IDENTIFICATION DIVISION.
PROGRAM-ID. TRCHF56A.
AUTHOR. BEAUTILIN D.
ENVIRONMENT DIVISION.
DATA DIVISION.
******************************************************************
WORKING-STORAGE SECTION.
01 WS-COMMUNICATION-AREA.
05 WS-COMMAREA PIC X(3).
05 WS-TOP-INDEX PIC S9(4) COMP.
05 WS-BOTTOM-INDEX PIC S9(4) COMP.
05 WS-NUMITEMS PIC S9(4) COMP.
05 WS-TS-ID PIC X(8).
*
01 FLAGS.
05 WF-ERR-FLAG PIC X(01).
05 WF-EIBCALEN-FLAG PIC X(01).
88 C-ZERO VALUE '1'.
88 C-NONZERO VALUE '2'.
*
01 WS-ERROR-DESC PIC X(20) VALUE SPACES.
01 WS-CICS-RESP PIC S9(08).
01 WS-UTIME PIC X(15).
01 WS-SDATE PIC X(10).
01 WS-SESSION-ENDED PIC X(10).
*******FOLLOWING COPYBOOK IS REQUIRED TO TRAP THE FUNCTION KEYS***
* COPY DFHAID.
*******BELOW IS THE COPYBOOK PERTAINING TO THE SYMBOLIC MAP*******
COPY TRCH56A.
LINKAGE SECTION.
01 DFHCOMMAREA.
05 L-COMMAREA PIC X(3).
05 L-TOP-INDEX PIC S9(4) COMP.
05 L-BOTTOM-INDEX PIC S9(4) COMP.
05 L-TOTAL PIC S9(4) COMP.
05 L-TS-ID PIC X(8).
PROCEDURE DIVISION.
MAIN-PARA.
MOVE DFHCOMMAREA TO WS-COMMUNICATION-AREA
PERFORM EIB-PARA THRU EIB-PARA-EXIT
PERFORM PROCESS-PARA THRU PROCESS-PARA-EXIT
STOP RUN.
******************************************************************
EIB-PARA.
***WHEN TF56 TRANSACTION IS INVOKED VERY FIRST TIME, EIBCALEN WILL
***BE ZERO
IF EIBCALEN = 0
SET C-ZERO TO TRUE
ELSE
SET C-NONZERO TO TRUE
END-IF.
EIB-PARA-EXIT.
EXIT.
******************************************************************
PROCESS-PARA.
PERFORM DATE-TIME THRU DATE-TIME-EXIT
PERFORM START-PGM THRU START-PGM-EXIT
IF C-ZERO
PERFORM SEND-MAP THRU SEND-MAP-EXIT
MOVE 'MEN' TO WS-COMMAREA
PERFORM RETURN-CICS THRU RETURN-CICS-EXIT
END-IF
IF C-NONZERO
EVALUATE WS-COMMAREA
WHEN 'MEN'
PERFORM KEY-VALIDATION THRU KEY-VALIDATION-EXIT
END-EVALUATE
END-IF.
PROCESS-PARA-EXIT.
EXIT.
******************************************************************
START-PGM.
*****INITIALIZE THE MAP VARIABLES BEFORE DOING SEND MAP**********
MOVE LOW-VALUES TO TRH056AO.
MOVE WS-UTIME TO TIMEO.
MOVE WS-SDATE TO DATEO.
START-PGM-EXIT.
EXIT.
******************************************************************
SEND-MAP.
***FOLLOWING WILL SEND THE MAP CONTENTS PRESENT IN TRH056AO
EXEC CICS
SEND MAP ('TRCH56A')
FROM (TRH056AO)
ERASE
FREEKB
RESP (WS-CICS-RESP)
END-EXEC
PERFORM CICS-RESPONSE THRU CICS-RESPONSE-EXIT.
SEND-MAP-EXIT.
EXIT.
******************************************************************
RETURN-CICS.
**FOLLOWING WILL RETURN THE CONTROL TO CICS
EXEC CICS
RETURN
TRANSID ('TF56')
COMMAREA (WS-COMMAREA)
RESP (WS-CICS-RESP)
END-EXEC
PERFORM CICS-RESPONSE THRU CICS-RESPONSE-EXIT.
RETURN-CICS-EXIT.
EXIT.
******************************************************************
EXIT-CICS.
********* FOLLOWING WILL RETURN THE CONTROL TOTALLY TO CICS ******
EXEC CICS
RETURN
END-EXEC.
EXIT-CICS-EXIT.
EXIT.
******************************************************************
KEY-VALIDATION.
EVALUATE EIBAID
WHEN DFHENTER
*****INITIALIZE THE MAP VARIABLES BEFORE DOING RECEIVE MAP********
MOVE LOW-VALUES TO TRH056AI
PERFORM RECEIVE-MAP THRU RECEIVE-MAP-EXIT
* PERFORM PROCESS-RECEIVE THRU PROCESS-RECEIVE-EXIT
WHEN DFHPF3
*****SEND BLANK SCREEN AND RETURN TO CICS WHEN F3 IS PRESSED******
PERFORM SEND-BLANK-SCREEN THRU SEND-BLANK-EXIT
PERFORM EXIT-CICS THRU EXIT-CICS-EXIT
WHEN OTHER
PERFORM START-PGM THRU START-PGM-EXIT
MOVE 'INVALID KEY ' TO MSG1O
PERFORM SEND-MAP THRU SEND-MAP-EXIT
MOVE 'MEN' TO WS-COMMAREA
PERFORM RETURN-CICS THRU RETURN-CICS-EXIT
END-EVALUATE.
KEY-VALIDATION-EXIT.
EXIT.
SEND-BLANK-SCREEN.
MOVE SPACES TO WS-SESSION-ENDED
EXEC CICS SEND TEXT FROM (WS-SESSION-ENDED)
ERASE FREEKB END-EXEC.
SEND-BLANK-EXIT.
EXIT.
******************************************************************
RECEIVE-MAP.
***FOLLOWING WILL RECEIVE THE MAP CONTENTS PRESENT IN SCREEN INTO
EXEC CICS
RECEIVE MAP ('TRCH56A')
MAPSET ('TRCH56A')
INTO (TRH056AI)
RESP (WS-CICS-RESP)
END-EXEC
PERFORM CICS-RESPONSE THRU CICS-RESPONSE-EXIT
.
RECEIVE-MAP-EXIT.
EXIT.
CICS-RESPONSE.
MOVE SPACES TO WS-ERROR-DESC
MOVE 'Y' TO WF-ERR-FLAG
EVALUATE WS-CICS-RESP
WHEN DFHRESP(NORMAL)
MOVE 'N' TO WF-ERR-FLAG
WHEN DFHRESP(FILENOTFOUND)
MOVE 'DATASET ID ERROR' TO WS-ERROR-DESC
WHEN DFHRESP(INVREQ)
MOVE 'INVALID REQUEST ERROR' TO WS-ERROR-DESC
WHEN DFHRESP(IOERR)
MOVE 'IOERROR OCCURED' TO WS-ERROR-DESC
WHEN DFHRESP(LENGERR)
MOVE 'LENGTH ERROR' TO WS-ERROR-DESC
WHEN DFHRESP(NOTAUTH)
MOVE 'NOT AUTHORIZED ERROR' TO WS-ERROR-DESC
WHEN DFHRESP(NOSPACE)
MOVE 'DATASET IS FULL' TO WS-ERROR-DESC
WHEN DFHRESP(NOTFND)
MOVE 'RECORD NOT FOUND' TO WS-ERROR-DESC
WHEN DFHRESP(NOTOPEN)
MOVE 'DATASET IS CLOSED' TO WS-ERROR-DESC
WHEN DFHRESP(QIDERR)
MOVE 'TS QIDERR' TO WS-ERROR-DESC
WHEN DFHRESP(ITEMERR)
MOVE 'TS ITEMERR ERROR' TO WS-ERROR-DESC
WHEN DFHRESP(SYSIDERR)
MOVE 'SYS ID ERROR' TO WS-ERROR-DESC
WHEN DFHRESP(DUPKEY)
MOVE 'DUPLICTE RECORD KEY' TO WS-ERROR-DESC
WHEN DFHRESP(DUPREC)
MOVE 'DUPLICATE RECORD' TO WS-ERROR-DESC
WHEN DFHRESP(PGMIDERR)
MOVE 'PROGRAM ID ERROR' TO WS-ERROR-DESC
WHEN OTHER
MOVE 'UNDEFINED CICS ERROR' TO WS-ERROR-DESC
END-EVALUATE
IF WF-ERR-FLAG = 'Y'
PERFORM START-PGM THRU START-PGM-EXIT
MOVE WS-ERROR-DESC TO MSG1O
PERFORM SEND-MAP THRU SEND-MAP-EXIT
PERFORM RETURN-CICS THRU RETURN-CICS-EXIT
END-IF.
CICS-RESPONSE-EXIT.
EXIT.
********TO GET SYSTEM DATE AND TIME*******************************
DATE-TIME.
EXEC CICS ASKTIME ABSTIME(WS-UTIME) END-EXEC
EXEC CICS FORMATTIME ABSTIME(WS-UTIME)
DATESEP('/') DDMMYYYY(WS-SDATE)
TIME(WS-UTIME) TIMESEP(':')
END-EXEC
.
DATE-TIME-EXIT.
EXIT.