The EVERY clause represents a fundamental component of checkpoint and restart operations in COBOL, serving as a mechanism for defining periodic recovery points and restart procedures in batch processing environments. This clause embodies fault-tolerant programming principles by providing systematic checkpoint creation, enabling robust recovery mechanisms, and supporting the development of resilient batch applications that can recover from system failures and resume processing from predetermined restart points.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193IDENTIFICATION DIVISION. PROGRAM-ID. EVERY-DEMO. ENVIRONMENT DIVISION. INPUT-OUTPUT SECTION. FILE-CONTROL. SELECT INPUT-FILE ASSIGN TO 'INPUT.DAT' ORGANIZATION IS SEQUENTIAL ACCESS MODE IS SEQUENTIAL FILE STATUS IS INPUT-FILE-STATUS. SELECT OUTPUT-FILE ASSIGN TO 'OUTPUT.DAT' ORGANIZATION IS SEQUENTIAL ACCESS MODE IS SEQUENTIAL FILE STATUS IS OUTPUT-FILE-STATUS. SELECT CHECKPOINT-FILE ASSIGN TO 'CHKPT.DAT' ORGANIZATION IS SEQUENTIAL ACCESS MODE IS SEQUENTIAL FILE STATUS IS CHECKPOINT-FILE-STATUS. I-O-CONTROL. RERUN ON CHECKPOINT-FILE EVERY 1000 RECORDS OF INPUT-FILE. DATA DIVISION. FILE SECTION. FD INPUT-FILE. 01 INPUT-RECORD PIC X(100). FD OUTPUT-FILE. 01 OUTPUT-RECORD PIC X(100). FD CHECKPOINT-FILE. 01 CHECKPOINT-RECORD. 05 CHECKPOINT-TIMESTAMP PIC X(14). 05 RECORDS-PROCESSED PIC 9(9). 05 CHECKPOINT-STATUS PIC X(10). WORKING-STORAGE SECTION. 01 FILE-STATUS-AREAS. 05 INPUT-FILE-STATUS PIC XX. 05 OUTPUT-FILE-STATUS PIC XX. 05 CHECKPOINT-FILE-STATUS PIC XX. 01 PROCESSING-CONTROLS. 05 RECORD-COUNTER PIC 9(9) VALUE 0. 05 CHECKPOINT-COUNTER PIC 9(5) VALUE 0. 05 TOTAL-PROCESSED PIC 9(9) VALUE 0. 05 CHECKPOINT-INTERVAL PIC 9(5) VALUE 1000. 01 RESTART-CONTROLS. 05 RESTART-FLAG PIC X VALUE 'N'. 88 RESTART-REQUIRED VALUE 'Y'. 88 NORMAL-START VALUE 'N'. 05 RESTART-POINT PIC 9(9) VALUE 0. 05 LAST-CHECKPOINT PIC 9(9) VALUE 0. PROCEDURE DIVISION. MAIN-PROCESSING. PERFORM INITIALIZE-PROCESSING PERFORM CHECK-RESTART-REQUIREMENTS PERFORM PROCESS-INPUT-FILE PERFORM FINALIZE-PROCESSING STOP RUN. INITIALIZE-PROCESSING. DISPLAY 'Initializing batch processing with checkpoints...' OPEN INPUT INPUT-FILE OPEN OUTPUT OUTPUT-FILE OPEN I-O CHECKPOINT-FILE MOVE 0 TO RECORD-COUNTER MOVE 0 TO CHECKPOINT-COUNTER MOVE 0 TO TOTAL-PROCESSED DISPLAY 'Checkpoint interval: ' CHECKPOINT-INTERVAL ' records'. CHECK-RESTART-REQUIREMENTS. DISPLAY 'Checking for restart requirements...' *> Check if checkpoint file exists and has restart information READ CHECKPOINT-FILE AT END DISPLAY 'No checkpoint found - normal start' SET NORMAL-START TO TRUE NOT AT END DISPLAY 'Checkpoint found - restart available' MOVE RECORDS-PROCESSED TO RESTART-POINT SET RESTART-REQUIRED TO TRUE DISPLAY 'Restart point: ' RESTART-POINT ' records' END-READ. PROCESS-INPUT-FILE. DISPLAY 'Processing input file...' IF RESTART-REQUIRED PERFORM SKIP-TO-RESTART-POINT END-IF PERFORM READ-INPUT-RECORD PERFORM UNTIL INPUT-FILE-STATUS NOT = '00' PERFORM PROCESS-RECORD PERFORM CHECK-CHECKPOINT-INTERVAL PERFORM READ-INPUT-RECORD END-PERFORM DISPLAY 'Input file processing completed' DISPLAY 'Total records processed: ' TOTAL-PROCESSED. SKIP-TO-RESTART-POINT. DISPLAY 'Skipping to restart point...' PERFORM VARYING RECORD-COUNTER FROM 1 BY 1 UNTIL RECORD-COUNTER > RESTART-POINT OR INPUT-FILE-STATUS NOT = '00' READ INPUT-FILE AT END DISPLAY 'Unexpected end of file during restart' STOP RUN END-READ IF FUNCTION MOD(RECORD-COUNTER, 10000) = 0 DISPLAY 'Skipped ' RECORD-COUNTER ' records' END-IF END-PERFORM DISPLAY 'Restart position reached: ' RECORD-COUNTER ' records'. READ-INPUT-RECORD. READ INPUT-FILE AT END DISPLAY 'End of input file reached' NOT AT END ADD 1 TO RECORD-COUNTER END-READ. PROCESS-RECORD. *> Process the input record MOVE INPUT-RECORD TO OUTPUT-RECORD WRITE OUTPUT-RECORD ADD 1 TO TOTAL-PROCESSED IF FUNCTION MOD(TOTAL-PROCESSED, 5000) = 0 DISPLAY 'Processed ' TOTAL-PROCESSED ' records' END-IF. CHECK-CHECKPOINT-INTERVAL. *> Check if checkpoint interval has been reached IF FUNCTION MOD(RECORD-COUNTER, CHECKPOINT-INTERVAL) = 0 PERFORM CREATE-CHECKPOINT END-IF. CREATE-CHECKPOINT. DISPLAY 'Creating checkpoint at record ' RECORD-COUNTER ADD 1 TO CHECKPOINT-COUNTER *> Write checkpoint information MOVE FUNCTION CURRENT-DATE TO CHECKPOINT-TIMESTAMP MOVE RECORD-COUNTER TO RECORDS-PROCESSED MOVE 'ACTIVE' TO CHECKPOINT-STATUS REWRITE CHECKPOINT-RECORD INVALID KEY DISPLAY 'Error writing checkpoint' NOT INVALID KEY DISPLAY 'Checkpoint ' CHECKPOINT-COUNTER ' created successfully' MOVE RECORD-COUNTER TO LAST-CHECKPOINT END-REWRITE. FINALIZE-PROCESSING. DISPLAY 'Finalizing processing...' *> Create final checkpoint MOVE FUNCTION CURRENT-DATE TO CHECKPOINT-TIMESTAMP MOVE RECORD-COUNTER TO RECORDS-PROCESSED MOVE 'COMPLETED' TO CHECKPOINT-STATUS REWRITE CHECKPOINT-RECORD CLOSE INPUT-FILE CLOSE OUTPUT-FILE CLOSE CHECKPOINT-FILE DISPLAY 'Processing Statistics:' DISPLAY 'Total records processed: ' TOTAL-PROCESSED DISPLAY 'Checkpoints created: ' CHECKPOINT-COUNTER DISPLAY 'Last checkpoint at: ' LAST-CHECKPOINT.