94400d50d4
作为子目录纳入系统,与核心测试管道协同 Co-Authored-By: Claude <noreply@anthropic.com>
968 lines
35 KiB
COBOL
968 lines
35 KiB
COBOL
*> ============================================================
|
|
*> 14-online-cics : 客户在线照会 (Online Inquiry)
|
|
*> Input : MAP-FILE (map-data.dat: 模拟CICS MAP入出力)
|
|
*> Output: OUTPUT-FILE (cics-output.txt: 照会结果出力)
|
|
*> TXN-AUDIT-FILE (txn-audit.log: 取引監査記録)
|
|
*> Coverage: OL-N001~N004, OL-A001, OL-R001
|
|
*> MAP building, audit logging, response time,
|
|
*> error severity handling
|
|
*> ============================================================
|
|
IDENTIFICATION DIVISION.
|
|
PROGRAM-ID. Main14OnlineCics.
|
|
|
|
ENVIRONMENT DIVISION.
|
|
INPUT-OUTPUT SECTION.
|
|
FILE-CONTROL.
|
|
SELECT MAP-FILE ASSIGN TO "map-data.dat"
|
|
ORGANIZATION IS LINE SEQUENTIAL
|
|
FILE STATUS IS WS-MAP-FILE-STATUS.
|
|
|
|
SELECT OUTPUT-FILE ASSIGN TO "cics-output.txt"
|
|
ORGANIZATION IS LINE SEQUENTIAL
|
|
FILE STATUS IS WS-OUT-FILE-STATUS.
|
|
|
|
*> Additional files for expanded processing
|
|
SELECT TXN-AUDIT-FILE ASSIGN TO "txn-audit.log"
|
|
ORGANIZATION IS LINE SEQUENTIAL
|
|
FILE STATUS IS WS-AUD-FILE-STATUS.
|
|
|
|
SELECT TXN-REPORT ASSIGN TO "txn-report.txt"
|
|
ORGANIZATION IS LINE SEQUENTIAL
|
|
FILE STATUS IS WS-RPT-FILE-STATUS.
|
|
|
|
DATA DIVISION.
|
|
FILE SECTION.
|
|
FD MAP-FILE.
|
|
01 MAP-RECORD PIC X(80).
|
|
|
|
FD OUTPUT-FILE.
|
|
01 OUTPUT-LINE PIC X(80).
|
|
|
|
FD TXN-AUDIT-FILE.
|
|
01 AUDIT-RECORD PIC X(100).
|
|
|
|
FD TXN-REPORT.
|
|
01 REPORT-LINE PIC X(100).
|
|
|
|
WORKING-STORAGE SECTION.
|
|
*> ===== PRESERVED ORIGINAL ITEMS =====
|
|
01 WS-TELECOM-REC.
|
|
COPY "telecom/TEL-INVOICE.cpy".
|
|
|
|
*> Simulated COMMAREA structure
|
|
01 WS-COMMAREA.
|
|
05 WS-CA-USERID PIC X(08).
|
|
05 WS-CA-FUNCTION PIC X(04).
|
|
05 WS-CA-INPUT-DATA PIC X(40).
|
|
05 WS-CA-RETURN-CODE PIC 9(02).
|
|
05 WS-CA-MESSAGE PIC X(40).
|
|
|
|
01 WS-COUNTERS.
|
|
05 WS-READS PIC 9(02) VALUE 0.
|
|
05 WS-WRITES PIC 9(02) VALUE 0.
|
|
|
|
01 WS-MAP-LINE PIC X(80).
|
|
01 WS-MAP-EOF PIC X(01) VALUE "N".
|
|
88 MAP-EOF VALUE "Y".
|
|
|
|
01 WS-RESPONSE.
|
|
05 WS-RESP-TEXT PIC X(60).
|
|
|
|
01 WS-INVOICE-REC.
|
|
COPY "telecom/TEL-INVOICE.cpy".
|
|
*> ===== END PRESERVED ORIGINAL ITEMS =====
|
|
|
|
*> ===== NEW ITEMS =====
|
|
*> Timestamp tracing
|
|
01 WS-TIMESTAMP.
|
|
05 WS-TS-YEAR PIC 9(04).
|
|
05 WS-TS-MONTH PIC 9(02).
|
|
05 WS-TS-DAY PIC 9(02).
|
|
05 WS-TS-HOUR PIC 9(02).
|
|
05 WS-TS-MINUTE PIC 9(02).
|
|
05 WS-TS-SECOND PIC 9(02).
|
|
05 WS-TS-MS PIC 9(02).
|
|
01 WS-TIMESTAMP-STR PIC X(26).
|
|
01 WS-TRACE-PREFIX PIC X(40).
|
|
|
|
*> File status fields (additional)
|
|
01 WS-MAP-FILE-STATUS PIC X(02).
|
|
01 WS-OUT-FILE-STATUS PIC X(02).
|
|
01 WS-AUD-FILE-STATUS PIC X(02).
|
|
01 WS-RPT-FILE-STATUS PIC X(02).
|
|
|
|
*> Session state management
|
|
01 WS-SESSION-STATE.
|
|
05 WS-SESS-USERID PIC X(08).
|
|
05 WS-SESS-STATUS PIC X(01).
|
|
88 WS-SESS-ACTIVE VALUE 'A'.
|
|
88 WS-SESS-LOCKED VALUE 'L'.
|
|
88 WS-SESS-TERMINATED VALUE 'T'.
|
|
05 WS-SESS-LOGIN-TIME PIC X(20).
|
|
05 WS-SESS-TXN-COUNT PIC 9(04) VALUE ZERO.
|
|
05 WS-SESS-LAST-FUNC PIC X(04).
|
|
05 WS-SESS-ERRORS PIC 9(03) VALUE ZERO.
|
|
|
|
*> Response time tracking
|
|
01 WS-RESPONSE-TIME.
|
|
05 WS-RT-START-M PIC 9(08).
|
|
05 WS-RT-START-S PIC 9(08).
|
|
05 WS-RT-END-M PIC 9(08).
|
|
05 WS-RT-END-S PIC 9(08).
|
|
05 WS-RT-ELAPSED PIC S9(08).
|
|
05 WS-RT-DISP PIC Z(9)9.
|
|
|
|
*> Map building fields (simulated CICS BMS)
|
|
01 WS-MAP-BUILD.
|
|
05 WS-MAP-MAPNAME PIC X(08).
|
|
05 WS-MAP-TITLE PIC X(40).
|
|
05 WS-MAP-BODY PIC X(80).
|
|
05 WS-MAP-MSG-LINE PIC X(40).
|
|
05 WS-MAP-CURSOR PIC 9(04).
|
|
05 WS-MAP-ATTR PIC X(01).
|
|
88 WS-MAP-PROT VALUE 'P'.
|
|
88 WS-MAP-UNPROT VALUE 'U'.
|
|
88 WS-MAP-BRIGHT VALUE 'B'.
|
|
05 WS-MAP-FIELD-TABLE.
|
|
10 WS-MAP-FLD OCCURS 5 TIMES.
|
|
15 WS-MAP-FLD-NAME PIC X(10).
|
|
15 WS-MAP-FLD-VALUE PIC X(20).
|
|
15 WS-MAP-FLD-ATTR PIC X(01).
|
|
|
|
*> Transaction history (in-memory log)
|
|
01 WS-TXN-HISTORY.
|
|
05 WS-TXN-COUNT PIC 9(02) VALUE ZERO.
|
|
05 WS-TXN-TABLE.
|
|
10 WS-TXN-ENTRY OCCURS 20 TIMES.
|
|
15 WS-TXN-FUNC PIC X(04).
|
|
15 WS-TXN-USER PIC X(08).
|
|
15 WS-TXN-TIME PIC X(20).
|
|
15 WS-TXN-RC PIC 9(02).
|
|
|
|
*> Error severity and handling
|
|
01 WS-ERR-SEVERITY PIC 9(01).
|
|
88 WS-ERR-INFO VALUE 0.
|
|
88 WS-ERR-WARN VALUE 1.
|
|
88 WS-ERR-ERROR VALUE 2.
|
|
88 WS-ERR-FATAL VALUE 3.
|
|
01 WS-ERR-MSG PIC X(60).
|
|
01 WS-ERR-COUNT PIC 9(04) VALUE ZERO.
|
|
01 WS-ERR-RESP-CODE PIC X(04).
|
|
01 WS-ERR-RESP-MSG PIC X(40).
|
|
|
|
*> Hash totals
|
|
01 WS-HASH-TOTAL.
|
|
05 WS-HASH-TXN-COUNT PIC 9(09) VALUE ZERO.
|
|
05 WS-HASH-FUNC-MAP PIC 9(09) VALUE ZERO.
|
|
05 WS-HASH-FUNC-INQY PIC 9(09) VALUE ZERO.
|
|
05 WS-HASH-FUNC-UPDT PIC 9(09) VALUE ZERO.
|
|
05 WS-HASH-FUNC-DEL PIC 9(09) VALUE ZERO.
|
|
05 WS-HASH-FUNC-ADDN PIC 9(09) VALUE ZERO.
|
|
05 WS-HASH-FUNC-CANC PIC 9(09) VALUE ZERO.
|
|
05 WS-HASH-FUNC-SUSP PIC 9(09) VALUE ZERO.
|
|
05 WS-HASH-FUNC-BILL PIC 9(09) VALUE ZERO.
|
|
05 WS-HASH-FUNC-DISP PIC 9(09) VALUE ZERO.
|
|
05 WS-HASH-FUNC-OTHER PIC 9(09) VALUE ZERO.
|
|
05 WS-HASH-ERROR-COUNT PIC 9(09) VALUE ZERO.
|
|
05 WS-HASH-CHECKSUM PIC 9(15) VALUE ZERO.
|
|
|
|
*> Audit fields
|
|
01 WS-AUDIT-ENTRIES PIC 9(04) VALUE ZERO.
|
|
01 WS-AUDIT-LINE PIC X(100).
|
|
|
|
*> Report fields
|
|
01 WS-RPT-DATE PIC X(10).
|
|
01 WS-RPT-TIME PIC X(08).
|
|
|
|
*> Separator lines
|
|
01 WS-SEP-STARS PIC X(100) VALUE ALL '*'.
|
|
01 WS-SEP-DASHES PIC X(100) VALUE ALL '-'.
|
|
01 WS-SEP-EQUALS PIC X(100) VALUE ALL '='.
|
|
|
|
*> Edited numeric fields
|
|
01 WS-ED-COUNT PIC Z(9)9.
|
|
01 WS-ED-TOTAL PIC Z(9)9.
|
|
01 WS-ED-TIME PIC Z(9)9.
|
|
|
|
*> Billing data (for BILL transaction)
|
|
01 WS-BILL-DATA.
|
|
05 WS-BD-INV-ID PIC X(10).
|
|
05 WS-BD-AMOUNT PIC 9(09).
|
|
05 WS-BD-STATUS PIC X(01).
|
|
05 WS-BD-MONTH PIC 9(06).
|
|
05 WS-BD-BALANCE PIC 9(09).
|
|
|
|
*> Configuration constants
|
|
01 WS-CONFIG-MAX-ERRORS PIC 9(03) VALUE 50.
|
|
01 WS-CONFIG-MAX-TXNS PIC 9(02) VALUE 20.
|
|
*> ============================================================
|
|
|
|
*> LINKAGE SECTION removed — LK-COMMAREA replaced by WS-COMMAREA
|
|
PROCEDURE DIVISION.
|
|
MAIN SECTION.
|
|
MB-PROCESS.
|
|
|
|
PERFORM 1000-INIT
|
|
PERFORM 2000-OPEN-FILES
|
|
PERFORM 3000-PROCESS
|
|
PERFORM 4000-REPORT
|
|
PERFORM 5000-AUDIT
|
|
PERFORM 6000-ERROR-HANDLE
|
|
PERFORM 9000-EXIT
|
|
|
|
GOBACK.
|
|
|
|
1000-INIT SECTION.
|
|
*>
|
|
DISPLAY "Main14OnlineCics: Initializing...".
|
|
MOVE FUNCTION CURRENT-DATE TO WS-TIMESTAMP.
|
|
STRING WS-TS-YEAR '-' WS-TS-MONTH '-'
|
|
WS-TS-DAY ' ' WS-TS-HOUR ':'
|
|
WS-TS-MINUTE ':' WS-TS-SECOND
|
|
INTO WS-TIMESTAMP-STR.
|
|
DISPLAY "Main14OnlineCics: Start time=" WS-TIMESTAMP-STR.
|
|
*>
|
|
*> Initialize session state
|
|
MOVE SPACES TO WS-SESSION-STATE.
|
|
MOVE 'A' TO WS-SESS-STATUS.
|
|
MOVE WS-TIMESTAMP-STR TO WS-SESS-LOGIN-TIME.
|
|
MOVE ZERO TO WS-SESS-TXN-COUNT.
|
|
MOVE ZERO TO WS-SESS-ERRORS.
|
|
*>
|
|
*> Initialize hash totals
|
|
MOVE ZERO TO WS-HASH-TOTAL.
|
|
MOVE ZERO TO WS-ERR-COUNT.
|
|
MOVE ZERO TO WS-AUDIT-ENTRIES.
|
|
*>
|
|
*> Initialize response time
|
|
MOVE ZERO TO WS-RESPONSE-TIME.
|
|
*>
|
|
*> Initialize transaction history
|
|
MOVE ZERO TO WS-TXN-COUNT.
|
|
*>
|
|
*> Build date/time for reports
|
|
MOVE WS-TS-YEAR TO WS-RPT-DATE(1:4).
|
|
MOVE '-' TO WS-RPT-DATE(5:1).
|
|
MOVE WS-TS-MONTH TO WS-RPT-DATE(6:2).
|
|
MOVE '-' TO WS-RPT-DATE(8:1).
|
|
MOVE WS-TS-DAY TO WS-RPT-DATE(9:2).
|
|
STRING WS-TS-HOUR ':' WS-TS-MINUTE ':'
|
|
WS-TS-SECOND INTO WS-RPT-TIME.
|
|
*>
|
|
DISPLAY "Main14OnlineCics: INIT complete. Session="
|
|
WS-SESS-USERID " Status=" WS-SESS-STATUS.
|
|
*>
|
|
2000-OPEN-FILES SECTION.
|
|
*>
|
|
DISPLAY "Main14OnlineCics: Opening files...".
|
|
*>
|
|
OPEN INPUT MAP-FILE.
|
|
IF WS-MAP-FILE-STATUS NOT = '00'
|
|
MOVE 2 TO WS-ERR-SEVERITY
|
|
STRING "WARN: MAP-FILE open status="
|
|
WS-MAP-FILE-STATUS INTO WS-ERR-MSG
|
|
DISPLAY WS-ERR-MSG
|
|
ADD 1 TO WS-ERR-COUNT
|
|
END-IF.
|
|
*>
|
|
OPEN EXTEND OUTPUT-FILE.
|
|
IF WS-OUT-FILE-STATUS NOT = '00'
|
|
OPEN OUTPUT OUTPUT-FILE
|
|
IF WS-OUT-FILE-STATUS NOT = '00'
|
|
MOVE 3 TO WS-ERR-SEVERITY
|
|
STRING "ERROR: OUTPUT-FILE open status="
|
|
WS-OUT-FILE-STATUS INTO WS-ERR-MSG
|
|
DISPLAY WS-ERR-MSG
|
|
PERFORM 6000-ERROR-HANDLE
|
|
END-IF
|
|
END-IF.
|
|
*>
|
|
OPEN EXTEND TXN-AUDIT-FILE.
|
|
IF WS-AUD-FILE-STATUS NOT = '00'
|
|
OPEN OUTPUT TXN-AUDIT-FILE
|
|
IF WS-AUD-FILE-STATUS NOT = '00'
|
|
MOVE 1 TO WS-ERR-SEVERITY
|
|
STRING "WARN: TXN-AUDIT open status="
|
|
WS-AUD-FILE-STATUS INTO WS-ERR-MSG
|
|
DISPLAY WS-ERR-MSG
|
|
ADD 1 TO WS-ERR-COUNT
|
|
END-IF
|
|
END-IF.
|
|
*>
|
|
OPEN OUTPUT TXN-REPORT.
|
|
IF WS-RPT-FILE-STATUS NOT = '00'
|
|
MOVE 1 TO WS-ERR-SEVERITY
|
|
STRING "WARN: TXN-REPORT open status="
|
|
WS-RPT-FILE-STATUS INTO WS-ERR-MSG
|
|
DISPLAY WS-ERR-MSG
|
|
ADD 1 TO WS-ERR-COUNT
|
|
END-IF.
|
|
*>
|
|
DISPLAY "Main14OnlineCics: Files opened."
|
|
" MAP=" WS-MAP-FILE-STATUS
|
|
" OUT=" WS-OUT-FILE-STATUS
|
|
" AUD=" WS-AUD-FILE-STATUS.
|
|
*>
|
|
3000-PROCESS SECTION.
|
|
*>
|
|
DISPLAY "Main14OnlineCics: Processing COMMAREA...".
|
|
*>
|
|
*> Capture response time start (seconds portion)
|
|
MOVE WS-TS-SECOND TO WS-RT-START-S.
|
|
MOVE WS-TS-MS TO WS-RT-START-M.
|
|
*>
|
|
*> ============================================================
|
|
*> === PRESERVED ORIGINAL CODE ===
|
|
*> ============================================================
|
|
DISPLAY "=== CICS Online Simulation ===".
|
|
DISPLAY "COMMAREA received:".
|
|
*>
|
|
*> LK data removed — using WS-COMMAREA directly
|
|
*>
|
|
DISPLAY " UserID: " WS-CA-USERID.
|
|
DISPLAY " Function: " WS-CA-FUNCTION.
|
|
DISPLAY " Input: " WS-CA-INPUT-DATA.
|
|
*>
|
|
*> Simulate MAPRECV: read from map file
|
|
OPEN INPUT MAP-FILE.
|
|
IF WS-MAP-FILE-STATUS NOT = '00'
|
|
MOVE 2 TO WS-ERR-SEVERITY
|
|
STRING "WARN: MAP-FILE reopen status="
|
|
WS-MAP-FILE-STATUS INTO WS-ERR-MSG
|
|
DISPLAY WS-ERR-MSG
|
|
ADD 1 TO WS-ERR-COUNT
|
|
END-IF.
|
|
*>
|
|
PERFORM UNTIL MAP-EOF
|
|
READ MAP-FILE INTO WS-MAP-LINE
|
|
AT END
|
|
SET MAP-EOF TO TRUE
|
|
NOT AT END
|
|
DISPLAY " MAP RECV: " WS-MAP-LINE
|
|
ADD 1 TO WS-READS
|
|
END-READ
|
|
END-PERFORM.
|
|
CLOSE MAP-FILE.
|
|
IF WS-MAP-FILE-STATUS NOT = '00'
|
|
MOVE 1 TO WS-ERR-SEVERITY
|
|
STRING "INFO: MAP-FILE close status="
|
|
WS-MAP-FILE-STATUS INTO WS-ERR-MSG
|
|
DISPLAY WS-ERR-MSG
|
|
END-IF.
|
|
*>
|
|
*> Update session state with current user
|
|
MOVE WS-CA-USERID TO WS-SESS-USERID.
|
|
ADD 1 TO WS-SESS-TXN-COUNT.
|
|
MOVE WS-CA-FUNCTION TO WS-SESS-LAST-FUNC.
|
|
*>
|
|
*> Validate COMMAREA before processing
|
|
PERFORM 3100-VALIDATE-COMMAREA.
|
|
*>
|
|
*> Process based on function code
|
|
*> --- PRESERVED ORIGINAL EVALUATE with added transactions ---
|
|
EVALUATE WS-CA-FUNCTION
|
|
WHEN "INQY"
|
|
MOVE "INQUIRY processed" TO WS-CA-MESSAGE
|
|
MOVE 00 TO WS-CA-RETURN-CODE
|
|
ADD 1 TO WS-HASH-FUNC-INQY
|
|
|
|
WHEN "UPDT"
|
|
MOVE "UPDATE processed" TO WS-CA-MESSAGE
|
|
MOVE 00 TO WS-CA-RETURN-CODE
|
|
ADD 1 TO WS-HASH-FUNC-UPDT
|
|
|
|
WHEN "DEL "
|
|
MOVE "DELETE processed" TO WS-CA-MESSAGE
|
|
MOVE 00 TO WS-CA-RETURN-CODE
|
|
ADD 1 TO WS-HASH-FUNC-DEL
|
|
|
|
*> === NEW TRANSACTION CODES ===
|
|
WHEN "ADDN"
|
|
MOVE "ADDN processed" TO WS-CA-MESSAGE
|
|
MOVE 00 TO WS-CA-RETURN-CODE
|
|
ADD 1 TO WS-HASH-FUNC-ADDN
|
|
PERFORM 3200-PROCESS-TRANSACTION
|
|
|
|
WHEN "CANC"
|
|
MOVE "CANC processed" TO WS-CA-MESSAGE
|
|
MOVE 00 TO WS-CA-RETURN-CODE
|
|
ADD 1 TO WS-HASH-FUNC-CANC
|
|
PERFORM 3200-PROCESS-TRANSACTION
|
|
|
|
WHEN "SUSP"
|
|
MOVE "SUSP processed" TO WS-CA-MESSAGE
|
|
MOVE 00 TO WS-CA-RETURN-CODE
|
|
ADD 1 TO WS-HASH-FUNC-SUSP
|
|
PERFORM 3200-PROCESS-TRANSACTION
|
|
|
|
WHEN "BILL"
|
|
MOVE "BILL processed" TO WS-CA-MESSAGE
|
|
MOVE 00 TO WS-CA-RETURN-CODE
|
|
ADD 1 TO WS-HASH-FUNC-BILL
|
|
PERFORM 3200-PROCESS-TRANSACTION
|
|
|
|
WHEN "DISP"
|
|
MOVE "DISP processed" TO WS-CA-MESSAGE
|
|
MOVE 00 TO WS-CA-RETURN-CODE
|
|
ADD 1 TO WS-HASH-FUNC-DISP
|
|
PERFORM 3200-PROCESS-TRANSACTION
|
|
|
|
WHEN OTHER
|
|
MOVE "UNKNOWN function" TO WS-CA-MESSAGE
|
|
MOVE 99 TO WS-CA-RETURN-CODE
|
|
ADD 1 TO WS-HASH-FUNC-OTHER
|
|
END-EVALUATE.
|
|
*>
|
|
*> Build map and format response for all transactions
|
|
PERFORM 3300-BUILD-MAP.
|
|
PERFORM 3400-FORMAT-RESPONSE.
|
|
*>
|
|
*> Simulate MAPSEND: write to output file
|
|
*> === PRESERVED ORIGINAL OUTPUT CODE ===
|
|
OPEN OUTPUT OUTPUT-FILE.
|
|
IF WS-OUT-FILE-STATUS NOT = '00'
|
|
MOVE 2 TO WS-ERR-SEVERITY
|
|
STRING "ERROR: OUTPUT-FILE reopen status="
|
|
WS-OUT-FILE-STATUS INTO WS-ERR-MSG
|
|
DISPLAY WS-ERR-MSG
|
|
ADD 1 TO WS-ERR-COUNT
|
|
END-IF.
|
|
*>
|
|
MOVE SPACES TO OUTPUT-LINE.
|
|
STRING "USER=" WS-CA-USERID
|
|
" FUNC=" WS-CA-FUNCTION
|
|
" RC=" WS-CA-RETURN-CODE
|
|
" MSG=" WS-CA-MESSAGE
|
|
DELIMITED BY SIZE INTO OUTPUT-LINE.
|
|
WRITE OUTPUT-LINE.
|
|
ADD 1 TO WS-WRITES.
|
|
*>
|
|
MOVE SPACES TO OUTPUT-LINE.
|
|
STRING "MAPSEND: Received " WS-READS
|
|
" map lines, sent " WS-WRITES " responses"
|
|
DELIMITED BY SIZE INTO OUTPUT-LINE.
|
|
WRITE OUTPUT-LINE.
|
|
CLOSE OUTPUT-FILE.
|
|
IF WS-OUT-FILE-STATUS NOT = '00'
|
|
MOVE 1 TO WS-ERR-SEVERITY
|
|
STRING "INFO: OUTPUT-FILE close status="
|
|
WS-OUT-FILE-STATUS INTO WS-ERR-MSG
|
|
DISPLAY WS-ERR-MSG
|
|
END-IF.
|
|
*>
|
|
*> Set return values in LINKAGE
|
|
*> Return values already in WS-COMMAREA
|
|
*>
|
|
DISPLAY " Return-Code: " WS-CA-RETURN-CODE.
|
|
DISPLAY " Message: " WS-CA-MESSAGE.
|
|
DISPLAY "Output written to cics-output.txt".
|
|
*> === END PRESERVED ORIGINAL CODE ===
|
|
*>
|
|
*> Update transaction history
|
|
IF WS-TXN-COUNT < WS-CONFIG-MAX-TXNS
|
|
ADD 1 TO WS-TXN-COUNT
|
|
MOVE WS-CA-FUNCTION TO WS-TXN-FUNC(WS-TXN-COUNT)
|
|
MOVE WS-CA-USERID TO WS-TXN-USER(WS-TXN-COUNT)
|
|
MOVE WS-TIMESTAMP-STR TO WS-TXN-TIME(WS-TXN-COUNT)
|
|
MOVE WS-CA-RETURN-CODE TO WS-TXN-RC(WS-TXN-COUNT)
|
|
END-IF.
|
|
*>
|
|
*> Update hash totals
|
|
ADD 1 TO WS-HASH-TXN-COUNT.
|
|
ADD WS-READS TO WS-HASH-CHECKSUM.
|
|
ADD WS-WRITES TO WS-HASH-CHECKSUM.
|
|
*>
|
|
EXIT.
|
|
*>
|
|
3100-VALIDATE-COMMAREA SECTION.
|
|
*>
|
|
DISPLAY "Main14OnlineCics: Validating COMMAREA...".
|
|
*>
|
|
*> Validate user ID
|
|
IF WS-CA-USERID = SPACES OR WS-CA-USERID = LOW-VALUES
|
|
MOVE 2 TO WS-ERR-SEVERITY
|
|
STRING "ERROR: Invalid UserID [" WS-CA-USERID "]"
|
|
INTO WS-ERR-MSG
|
|
DISPLAY WS-ERR-MSG
|
|
ADD 1 TO WS-ERR-COUNT
|
|
ADD 1 TO WS-SESS-ERRORS
|
|
END-IF.
|
|
*>
|
|
*> Validate function code length/content
|
|
IF WS-CA-FUNCTION = SPACES OR WS-CA-FUNCTION = LOW-VALUES
|
|
MOVE 2 TO WS-ERR-SEVERITY
|
|
STRING "ERROR: Empty function code" INTO WS-ERR-MSG
|
|
DISPLAY WS-ERR-MSG
|
|
ADD 1 TO WS-ERR-COUNT
|
|
ADD 1 TO WS-SESS-ERRORS
|
|
END-IF.
|
|
*>
|
|
*> Check session state
|
|
IF WS-SESS-LOCKED
|
|
MOVE 2 TO WS-ERR-SEVERITY
|
|
STRING "ERROR: Session locked for " WS-SESS-USERID
|
|
INTO WS-ERR-MSG
|
|
DISPLAY WS-ERR-MSG
|
|
MOVE 99 TO WS-CA-RETURN-CODE
|
|
MOVE "Session locked" TO WS-CA-MESSAGE
|
|
PERFORM 6000-ERROR-HANDLE
|
|
END-IF.
|
|
IF WS-SESS-TERMINATED
|
|
MOVE 2 TO WS-ERR-SEVERITY
|
|
STRING "ERROR: Session terminated for " WS-SESS-USERID
|
|
INTO WS-ERR-MSG
|
|
DISPLAY WS-ERR-MSG
|
|
MOVE 99 TO WS-CA-RETURN-CODE
|
|
MOVE "Session terminated" TO WS-CA-MESSAGE
|
|
PERFORM 6000-ERROR-HANDLE
|
|
END-IF.
|
|
*>
|
|
*> Check for excessive errors
|
|
IF WS-SESS-ERRORS > WS-CONFIG-MAX-ERRORS
|
|
MOVE 'L' TO WS-SESS-STATUS
|
|
MOVE 2 TO WS-ERR-SEVERITY
|
|
STRING "ERROR: Too many errors, session locked"
|
|
INTO WS-ERR-MSG
|
|
DISPLAY WS-ERR-MSG
|
|
MOVE 99 TO WS-CA-RETURN-CODE
|
|
MOVE "Session locked" TO WS-CA-MESSAGE
|
|
END-IF.
|
|
*>
|
|
DISPLAY "Main14OnlineCics: COMMAREA validated."
|
|
" User=" WS-CA-USERID " Func=" WS-CA-FUNCTION.
|
|
*>
|
|
3200-PROCESS-TRANSACTION SECTION.
|
|
*>
|
|
DISPLAY "Main14OnlineCics: Processing transaction..."
|
|
WS-CA-FUNCTION.
|
|
*>
|
|
*> Route to specific transaction processing
|
|
EVALUATE WS-CA-FUNCTION
|
|
WHEN "ADDN"
|
|
PERFORM 3210-PROCESS-ADDN
|
|
WHEN "CANC"
|
|
PERFORM 3220-PROCESS-CANC
|
|
WHEN "SUSP"
|
|
PERFORM 3230-PROCESS-SUSP
|
|
WHEN "BILL"
|
|
PERFORM 3240-PROCESS-BILL
|
|
WHEN "DISP"
|
|
PERFORM 3250-PROCESS-DISP
|
|
WHEN OTHER
|
|
CONTINUE
|
|
END-EVALUATE.
|
|
*>
|
|
3210-PROCESS-ADDN SECTION.
|
|
*>
|
|
*> Add new invoice/record processing
|
|
DISPLAY "Main14OnlineCics: ADDN - Adding new record...".
|
|
IF WS-CA-INPUT-DATA = SPACES
|
|
MOVE 1 TO WS-ERR-SEVERITY
|
|
STRING "WARN: ADDN with empty input data"
|
|
INTO WS-ERR-MSG
|
|
DISPLAY WS-ERR-MSG
|
|
ADD 1 TO WS-ERR-COUNT
|
|
MOVE "ADDN: no input data" TO WS-CA-MESSAGE
|
|
MOVE 01 TO WS-CA-RETURN-CODE
|
|
ELSE
|
|
STRING "ADDN: record added [" WS-CA-INPUT-DATA "]"
|
|
INTO WS-CA-MESSAGE
|
|
MOVE 00 TO WS-CA-RETURN-CODE
|
|
END-IF.
|
|
*>
|
|
*> Build map fields for ADDN response
|
|
MOVE "ADDNMAP " TO WS-MAP-MAPNAME.
|
|
MOVE "ADD NEW RECORD" TO WS-MAP-TITLE.
|
|
MOVE WS-CA-INPUT-DATA TO WS-MAP-BODY.
|
|
MOVE "ADD processing OK" TO WS-MAP-MSG-LINE.
|
|
*>
|
|
3220-PROCESS-CANC SECTION.
|
|
*>
|
|
*> Cancel transaction processing
|
|
DISPLAY "Main14OnlineCics: CANC - Cancelling...".
|
|
IF WS-CA-INPUT-DATA = SPACES
|
|
MOVE 1 TO WS-ERR-SEVERITY
|
|
STRING "WARN: CANC with empty input data"
|
|
INTO WS-ERR-MSG
|
|
DISPLAY WS-ERR-MSG
|
|
ADD 1 TO WS-ERR-COUNT
|
|
MOVE "CANC: no input data" TO WS-CA-MESSAGE
|
|
MOVE 01 TO WS-CA-RETURN-CODE
|
|
ELSE
|
|
STRING "CANC: cancelled [" WS-CA-INPUT-DATA "]"
|
|
INTO WS-CA-MESSAGE
|
|
MOVE 00 TO WS-CA-RETURN-CODE
|
|
END-IF.
|
|
*>
|
|
*> Build map fields for CANC response
|
|
MOVE "CANCMAP " TO WS-MAP-MAPNAME.
|
|
MOVE "CANCEL TRANSACTION" TO WS-MAP-TITLE.
|
|
MOVE WS-CA-INPUT-DATA TO WS-MAP-BODY.
|
|
MOVE "CANCEL processing OK" TO WS-MAP-MSG-LINE.
|
|
*>
|
|
3230-PROCESS-SUSP SECTION.
|
|
*>
|
|
*> Suspend account processing
|
|
DISPLAY "Main14OnlineCics: SUSP - Suspending account...".
|
|
IF WS-CA-INPUT-DATA = SPACES
|
|
MOVE 1 TO WS-ERR-SEVERITY
|
|
STRING "WARN: SUSP with empty input data"
|
|
INTO WS-ERR-MSG
|
|
DISPLAY WS-ERR-MSG
|
|
ADD 1 TO WS-ERR-COUNT
|
|
MOVE "SUSP: no input data" TO WS-CA-MESSAGE
|
|
MOVE 01 TO WS-CA-RETURN-CODE
|
|
ELSE
|
|
STRING "SUSP: account suspended [" WS-CA-INPUT-DATA "]"
|
|
INTO WS-CA-MESSAGE
|
|
MOVE 00 TO WS-CA-RETURN-CODE
|
|
MOVE 'L' TO WS-SESS-STATUS
|
|
END-IF.
|
|
*>
|
|
*> Build map fields for SUSP response
|
|
MOVE "SUSPMAP " TO WS-MAP-MAPNAME.
|
|
MOVE "SUSPEND ACCOUNT" TO WS-MAP-TITLE.
|
|
MOVE WS-CA-INPUT-DATA TO WS-MAP-BODY.
|
|
MOVE "SUSPEND processing OK" TO WS-MAP-MSG-LINE.
|
|
*>
|
|
3240-PROCESS-BILL SECTION.
|
|
*>
|
|
*> Billing inquiry processing
|
|
DISPLAY "Main14OnlineCics: BILL - Billing inquiry...".
|
|
MOVE WS-CA-INPUT-DATA(1:10) TO WS-BD-INV-ID.
|
|
COMPUTE WS-BD-AMOUNT = FUNCTION RANDOM * 100000.
|
|
MOVE '1' TO WS-BD-STATUS.
|
|
MOVE 202506 TO WS-BD-MONTH.
|
|
COMPUTE WS-BD-BALANCE = WS-BD-AMOUNT * 80 / 100.
|
|
*>
|
|
MOVE WS-BD-AMOUNT TO WS-ED-TOTAL.
|
|
STRING "BILL: invoice=" WS-BD-INV-ID
|
|
" amount=" WS-ED-TOTAL
|
|
" balance=" WS-BD-BALANCE
|
|
INTO WS-CA-MESSAGE.
|
|
MOVE 00 TO WS-CA-RETURN-CODE.
|
|
*>
|
|
*> Build map fields for BILL response
|
|
MOVE "BILLMAP " TO WS-MAP-MAPNAME.
|
|
MOVE "BILLING INQUIRY" TO WS-MAP-TITLE.
|
|
MOVE WS-CA-INPUT-DATA TO WS-MAP-BODY.
|
|
STRING "BALANCE=" WS-BD-BALANCE INTO WS-MAP-MSG-LINE.
|
|
*>
|
|
3250-PROCESS-DISP SECTION.
|
|
*>
|
|
*> Display detail processing
|
|
DISPLAY "Main14OnlineCics: DISP - Display detail...".
|
|
MOVE WS-CA-INPUT-DATA TO WS-BD-INV-ID.
|
|
MOVE 50000 TO WS-BD-AMOUNT.
|
|
MOVE '1' TO WS-BD-STATUS.
|
|
MOVE 202506 TO WS-BD-MONTH.
|
|
*>
|
|
MOVE WS-BD-AMOUNT TO WS-ED-TOTAL.
|
|
STRING "DISP: invoice=" WS-BD-INV-ID
|
|
" amount=" WS-ED-TOTAL
|
|
" status=" WS-BD-STATUS
|
|
INTO WS-CA-MESSAGE.
|
|
MOVE 00 TO WS-CA-RETURN-CODE.
|
|
*>
|
|
*> Build map fields for DISP response
|
|
MOVE "DISPMAP " TO WS-MAP-MAPNAME.
|
|
MOVE "DISPLAY DETAIL" TO WS-MAP-TITLE.
|
|
MOVE WS-CA-INPUT-DATA TO WS-MAP-BODY.
|
|
STRING "AMOUNT=" WS-BD-AMOUNT INTO WS-MAP-MSG-LINE.
|
|
*>
|
|
3300-BUILD-MAP SECTION.
|
|
*>
|
|
DISPLAY "Main14OnlineCics: Building response map...".
|
|
*>
|
|
*> Populate map field table based on transaction
|
|
MOVE 1 TO WS-MAP-CURSOR.
|
|
MOVE 'U' TO WS-MAP-ATTR.
|
|
*>
|
|
*> Fill map field entries
|
|
MOVE "USERID " TO WS-MAP-FLD-NAME(1).
|
|
MOVE WS-CA-USERID TO WS-MAP-FLD-VALUE(1).
|
|
MOVE 'P' TO WS-MAP-FLD-ATTR(1).
|
|
*>
|
|
MOVE "FUNCTION " TO WS-MAP-FLD-NAME(2).
|
|
MOVE WS-CA-FUNCTION TO WS-MAP-FLD-VALUE(2).
|
|
MOVE 'P' TO WS-MAP-FLD-ATTR(2).
|
|
*>
|
|
MOVE "RETURNCOD" TO WS-MAP-FLD-NAME(3).
|
|
MOVE WS-CA-RETURN-CODE TO WS-MAP-FLD-VALUE(3).
|
|
MOVE 'P' TO WS-MAP-FLD-ATTR(3).
|
|
*>
|
|
MOVE "MESSAGE " TO WS-MAP-FLD-NAME(4).
|
|
MOVE WS-CA-MESSAGE TO WS-MAP-FLD-VALUE(4).
|
|
MOVE 'U' TO WS-MAP-FLD-ATTR(4).
|
|
*>
|
|
MOVE "INPUTDATA" TO WS-MAP-FLD-NAME(5).
|
|
MOVE WS-CA-INPUT-DATA TO WS-MAP-FLD-VALUE(5).
|
|
MOVE 'U' TO WS-MAP-FLD-ATTR(5).
|
|
*>
|
|
DISPLAY "Main14OnlineCics: Map built."
|
|
" Mapname=" WS-MAP-MAPNAME
|
|
" Title=" WS-MAP-TITLE.
|
|
*>
|
|
3400-FORMAT-RESPONSE SECTION.
|
|
*>
|
|
DISPLAY "Main14OnlineCics: Formatting response...".
|
|
*>
|
|
*> Capture response time end
|
|
MOVE FUNCTION CURRENT-DATE TO WS-TIMESTAMP.
|
|
MOVE WS-TS-SECOND TO WS-RT-END-S.
|
|
MOVE WS-TS-MS TO WS-RT-END-M.
|
|
*>
|
|
*> Calculate elapsed time in milliseconds
|
|
COMPUTE WS-RT-ELAPSED =
|
|
(WS-RT-END-S - WS-RT-START-S) * 1000
|
|
+ (WS-RT-END-M - WS-RT-START-M).
|
|
IF WS-RT-ELAPSED < 0
|
|
COMPUTE WS-RT-ELAPSED =
|
|
WS-RT-ELAPSED + 60000
|
|
END-IF.
|
|
MOVE WS-RT-ELAPSED TO WS-RT-DISP.
|
|
*>
|
|
*> Build response text with map details
|
|
STRING "MAP=" WS-MAP-MAPNAME
|
|
" TITLE=" WS-MAP-TITLE
|
|
" MSG=" WS-MAP-MSG-LINE
|
|
" RESP-TIME=" WS-RT-DISP "ms"
|
|
INTO WS-RESP-TEXT.
|
|
*>
|
|
*> Build formatted output line with response time
|
|
MOVE SPACES TO OUTPUT-LINE.
|
|
STRING "RESPONSE: " WS-RESP-TEXT
|
|
DELIMITED BY SIZE INTO OUTPUT-LINE.
|
|
*>
|
|
DISPLAY "Main14OnlineCics: Response formatted."
|
|
" Time=" WS-RT-DISP "ms".
|
|
*>
|
|
4000-REPORT SECTION.
|
|
*>
|
|
DISPLAY "Main14OnlineCics: Generating session report...".
|
|
*>
|
|
*> Write report header
|
|
MOVE SPACES TO REPORT-LINE.
|
|
STRING "TELECOM CICS TRANSACTION REPORT"
|
|
" " WS-RPT-DATE " " WS-RPT-TIME
|
|
INTO REPORT-LINE.
|
|
WRITE REPORT-LINE.
|
|
WRITE REPORT-LINE FROM WS-SEP-STARS.
|
|
*>
|
|
*> Write session summary
|
|
MOVE SPACES TO REPORT-LINE.
|
|
STRING "SESSION: User=" WS-SESS-USERID
|
|
" Status=" WS-SESS-STATUS
|
|
" Txns=" WS-SESS-TXN-COUNT
|
|
INTO REPORT-LINE.
|
|
WRITE REPORT-LINE.
|
|
*>
|
|
*> Write transaction hash breakdown
|
|
MOVE WS-HASH-FUNC-INQY TO WS-ED-COUNT.
|
|
STRING "HASH: INQY=" WS-ED-COUNT
|
|
INTO REPORT-LINE.
|
|
WRITE REPORT-LINE.
|
|
*>
|
|
MOVE WS-HASH-FUNC-UPDT TO WS-ED-COUNT.
|
|
STRING "HASH: UPDT=" WS-ED-COUNT
|
|
INTO REPORT-LINE.
|
|
WRITE REPORT-LINE.
|
|
*>
|
|
MOVE WS-HASH-FUNC-DEL TO WS-ED-COUNT.
|
|
STRING "HASH: DEL =" WS-ED-COUNT
|
|
INTO REPORT-LINE.
|
|
WRITE REPORT-LINE.
|
|
*>
|
|
MOVE WS-HASH-FUNC-ADDN TO WS-ED-COUNT.
|
|
STRING "HASH: ADDN=" WS-ED-COUNT
|
|
INTO REPORT-LINE.
|
|
WRITE REPORT-LINE.
|
|
*>
|
|
MOVE WS-HASH-FUNC-CANC TO WS-ED-COUNT.
|
|
STRING "HASH: CANC=" WS-ED-COUNT
|
|
INTO REPORT-LINE.
|
|
WRITE REPORT-LINE.
|
|
*>
|
|
MOVE WS-HASH-FUNC-SUSP TO WS-ED-COUNT.
|
|
STRING "HASH: SUSP=" WS-ED-COUNT
|
|
INTO REPORT-LINE.
|
|
WRITE REPORT-LINE.
|
|
*>
|
|
MOVE WS-HASH-FUNC-BILL TO WS-ED-COUNT.
|
|
STRING "HASH: BILL=" WS-ED-COUNT
|
|
INTO REPORT-LINE.
|
|
WRITE REPORT-LINE.
|
|
*>
|
|
MOVE WS-HASH-FUNC-DISP TO WS-ED-COUNT.
|
|
STRING "HASH: DISP=" WS-ED-COUNT
|
|
INTO REPORT-LINE.
|
|
WRITE REPORT-LINE.
|
|
*>
|
|
MOVE WS-HASH-FUNC-OTHER TO WS-ED-COUNT.
|
|
STRING "HASH: OTHER=" WS-ED-COUNT
|
|
INTO REPORT-LINE.
|
|
WRITE REPORT-LINE.
|
|
*>
|
|
*> Write total summary
|
|
MOVE WS-HASH-TXN-COUNT TO WS-ED-TOTAL.
|
|
STRING "TOTAL TRANSACTIONS: " WS-ED-TOTAL
|
|
INTO REPORT-LINE.
|
|
WRITE REPORT-LINE.
|
|
*>
|
|
MOVE WS-HASH-CHECKSUM TO WS-ED-TOTAL.
|
|
STRING "HASH CHECKSUM: " WS-ED-TOTAL
|
|
INTO REPORT-LINE.
|
|
WRITE REPORT-LINE.
|
|
*>
|
|
MOVE WS-ERR-COUNT TO WS-ED-COUNT.
|
|
STRING "ERRORS: " WS-ED-COUNT
|
|
INTO REPORT-LINE.
|
|
WRITE REPORT-LINE.
|
|
WRITE REPORT-LINE FROM WS-SEP-DASHES.
|
|
*>
|
|
*> Write transaction history
|
|
MOVE SPACES TO REPORT-LINE.
|
|
STRING "TRANSACTION HISTORY (" WS-TXN-COUNT " entries)"
|
|
INTO REPORT-LINE.
|
|
WRITE REPORT-LINE.
|
|
WRITE REPORT-LINE FROM WS-SEP-STARS.
|
|
*>
|
|
PERFORM VARYING WS-TXN-COUNT FROM 1 BY 1
|
|
UNTIL WS-TXN-COUNT > 20
|
|
OR WS-TXN-FUNC(WS-TXN-COUNT) = SPACES
|
|
MOVE WS-TXN-RC(WS-TXN-COUNT) TO WS-ED-COUNT
|
|
STRING " " WS-TXN-FUNC(WS-TXN-COUNT)
|
|
" USER=" WS-TXN-USER(WS-TXN-COUNT)
|
|
" RC=" WS-ED-COUNT
|
|
" TIME=" WS-TXN-TIME(WS-TXN-COUNT)
|
|
INTO REPORT-LINE
|
|
WRITE REPORT-LINE
|
|
END-PERFORM.
|
|
*>
|
|
WRITE REPORT-LINE FROM WS-SEP-EQUALS.
|
|
*>
|
|
DISPLAY "Main14OnlineCics: Report written to txn-report.txt".
|
|
*>
|
|
5000-AUDIT SECTION.
|
|
*>
|
|
DISPLAY "Main14OnlineCics: Writing audit trail...".
|
|
*>
|
|
*> Build audit record
|
|
MOVE WS-HASH-TXN-COUNT TO WS-ED-COUNT.
|
|
MOVE WS-ERR-COUNT TO WS-ED-COUNT.
|
|
*>
|
|
STRING "AUDIT:" WS-TIMESTAMP-STR
|
|
" PROG=Main14OnlineCics"
|
|
" TXNS=" WS-HASH-TXN-COUNT
|
|
" ERRS=" WS-ERR-COUNT
|
|
" USER=" WS-CA-USERID
|
|
" FUNC=" WS-CA-FUNCTION
|
|
" RC=" WS-CA-RETURN-CODE
|
|
INTO AUDIT-RECORD.
|
|
WRITE AUDIT-RECORD.
|
|
IF WS-AUD-FILE-STATUS NOT = '00'
|
|
DISPLAY "ERROR: Audit write failed, status: "
|
|
WS-AUD-FILE-STATUS
|
|
ADD 1 TO WS-ERR-COUNT
|
|
END-IF.
|
|
*>
|
|
*> Second audit line — response time
|
|
STRING "AUDIT:RESPTIME=" WS-RT-DISP "ms"
|
|
" MAP=" WS-MAP-MAPNAME
|
|
" CURSOR=" WS-MAP-CURSOR
|
|
INTO AUDIT-RECORD.
|
|
WRITE AUDIT-RECORD.
|
|
*>
|
|
*> Third audit line — session state
|
|
STRING "AUDIT:SESSION=" WS-SESS-USERID
|
|
" STATUS=" WS-SESS-STATUS
|
|
" TCNT=" WS-SESS-TXN-COUNT
|
|
" ERRS=" WS-SESS-ERRORS
|
|
INTO AUDIT-RECORD.
|
|
WRITE AUDIT-RECORD.
|
|
*>
|
|
ADD 1 TO WS-AUDIT-ENTRIES.
|
|
DISPLAY "Main14OnlineCics: Audit trail written."
|
|
" Entries=" WS-AUDIT-ENTRIES.
|
|
*>
|
|
6000-ERROR-HANDLE SECTION.
|
|
*>
|
|
ADD 1 TO WS-ERR-COUNT.
|
|
ADD 1 TO WS-HASH-ERROR-COUNT.
|
|
*>
|
|
*> Set error response code based on severity
|
|
EVALUATE WS-ERR-SEVERITY
|
|
WHEN 0
|
|
MOVE '0000' TO WS-ERR-RESP-CODE
|
|
MOVE 'Informational' TO WS-ERR-RESP-MSG
|
|
DISPLAY 'INFO: ' WS-ERR-MSG
|
|
WHEN 1
|
|
MOVE '0001' TO WS-ERR-RESP-CODE
|
|
MOVE 'Warning' TO WS-ERR-RESP-MSG
|
|
DISPLAY 'WARN: ' WS-ERR-MSG
|
|
WHEN 2
|
|
MOVE '0002' TO WS-ERR-RESP-CODE
|
|
MOVE 'Error' TO WS-ERR-RESP-MSG
|
|
DISPLAY 'ERROR: ' WS-ERR-MSG
|
|
WHEN 3
|
|
MOVE '0003' TO WS-ERR-RESP-CODE
|
|
MOVE 'Fatal' TO WS-ERR-RESP-MSG
|
|
DISPLAY 'FATAL: ' WS-ERR-MSG
|
|
PERFORM 9000-EXIT
|
|
GOBACK
|
|
WHEN OTHER
|
|
MOVE '9999' TO WS-ERR-RESP-CODE
|
|
MOVE 'Unknown severity' TO WS-ERR-RESP-MSG
|
|
DISPLAY 'UNKN: ' WS-ERR-MSG
|
|
END-EVALUATE.
|
|
*>
|
|
*> Check error threshold
|
|
IF WS-ERR-COUNT > WS-CONFIG-MAX-ERRORS
|
|
MOVE 3 TO WS-ERR-SEVERITY
|
|
STRING 'FATAL: Error threshold '
|
|
WS-CONFIG-MAX-ERRORS ' exceeded'
|
|
INTO WS-ERR-MSG
|
|
DISPLAY WS-ERR-MSG
|
|
PERFORM 9000-EXIT
|
|
GOBACK
|
|
END-IF.
|
|
*>
|
|
9000-EXIT SECTION.
|
|
*>
|
|
DISPLAY "Main14OnlineCics: Cleanup and exit...".
|
|
*>
|
|
*> Close all files with status checks
|
|
CLOSE MAP-FILE.
|
|
IF WS-MAP-FILE-STATUS NOT = '00'
|
|
DISPLAY "WARN: MAP-FILE close status="
|
|
WS-MAP-FILE-STATUS
|
|
END-IF.
|
|
*>
|
|
CLOSE OUTPUT-FILE.
|
|
IF WS-OUT-FILE-STATUS NOT = '00'
|
|
DISPLAY "WARN: OUTPUT-FILE close status="
|
|
WS-OUT-FILE-STATUS
|
|
END-IF.
|
|
*>
|
|
CLOSE TXN-AUDIT-FILE.
|
|
IF WS-AUD-FILE-STATUS NOT = '00'
|
|
DISPLAY "WARN: TXN-AUDIT close status="
|
|
WS-AUD-FILE-STATUS
|
|
END-IF.
|
|
*>
|
|
CLOSE TXN-REPORT.
|
|
IF WS-RPT-FILE-STATUS NOT = '00'
|
|
DISPLAY "WARN: TXN-REPORT close status="
|
|
WS-RPT-FILE-STATUS
|
|
END-IF.
|
|
*>
|
|
*> Final summary display
|
|
DISPLAY "Main14OnlineCics: Transactions=" WS-HASH-TXN-COUNT.
|
|
DISPLAY "Main14OnlineCics: Hash checksum=" WS-HASH-CHECKSUM.
|
|
DISPLAY "Main14OnlineCics: Errors=" WS-ERR-COUNT.
|
|
DISPLAY "Main14OnlineCics: Response time=" WS-RT-DISP "ms".
|
|
DISPLAY "Main14OnlineCics: Audit entries=" WS-AUDIT-ENTRIES.
|
|
DISPLAY "Main14OnlineCics: End at " WS-TIMESTAMP-STR.
|
|
*>
|
|
EXIT.
|