The EXTEND mode represents a specialized file access mechanism in COBOL programming, designed specifically for appending new records to existing sequential files without overwriting or modifying the current file contents. This mode embodies efficient data management principles by enabling incremental file growth, supporting audit trail creation, facilitating log file maintenance, and providing essential capabilities for batch processing systems that require continuous data accumulation while preserving historical information integrity and maintaining sequential file organization.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833IDENTIFICATION DIVISION. PROGRAM-ID. EXTEND-MODE-COMPREHENSIVE. ENVIRONMENT DIVISION. INPUT-OUTPUT SECTION. FILE-CONTROL. SELECT TRANSACTION-LOG-FILE ASSIGN TO 'TRANSLOG.DAT' ORGANIZATION IS SEQUENTIAL ACCESS MODE IS SEQUENTIAL FILE STATUS IS TRANSACTION-LOG-STATUS. SELECT AUDIT-TRAIL-FILE ASSIGN TO 'AUDIT.DAT' ORGANIZATION IS SEQUENTIAL ACCESS MODE IS SEQUENTIAL FILE STATUS IS AUDIT-TRAIL-STATUS. SELECT DAILY-SALES-FILE ASSIGN TO 'SALES.DAT' ORGANIZATION IS SEQUENTIAL ACCESS MODE IS SEQUENTIAL FILE STATUS IS DAILY-SALES-STATUS. SELECT ERROR-LOG-FILE ASSIGN TO 'ERRORS.LOG' ORGANIZATION IS SEQUENTIAL ACCESS MODE IS SEQUENTIAL FILE STATUS IS ERROR-LOG-STATUS. SELECT BACKUP-FILE ASSIGN TO 'BACKUP.DAT' ORGANIZATION IS SEQUENTIAL ACCESS MODE IS SEQUENTIAL FILE STATUS IS BACKUP-STATUS. DATA DIVISION. FILE SECTION. FD TRANSACTION-LOG-FILE. 01 TRANSACTION-LOG-RECORD. 05 TL-TIMESTAMP PIC X(14). 05 TL-TRANSACTION-ID PIC 9(10). 05 TL-CUSTOMER-ID PIC 9(8). 05 TL-TRANSACTION-TYPE PIC X(10). 05 TL-AMOUNT PIC 9(9)V99. 05 TL-STATUS PIC X(10). 05 TL-DESCRIPTION PIC X(50). FD AUDIT-TRAIL-FILE. 01 AUDIT-TRAIL-RECORD. 05 AT-TIMESTAMP PIC X(14). 05 AT-USER-ID PIC X(8). 05 AT-PROGRAM-NAME PIC X(8). 05 AT-OPERATION PIC X(20). 05 AT-RECORD-KEY PIC X(20). 05 AT-OLD-VALUE PIC X(100). 05 AT-NEW-VALUE PIC X(100). 05 AT-RESULT-CODE PIC X(4). FD DAILY-SALES-FILE. 01 DAILY-SALES-RECORD. 05 DS-DATE PIC 9(8). 05 DS-STORE-ID PIC 9(4). 05 DS-PRODUCT-ID PIC 9(8). 05 DS-QUANTITY-SOLD PIC 9(5). 05 DS-UNIT-PRICE PIC 9(7)V99. 05 DS-TOTAL-AMOUNT PIC 9(9)V99. 05 DS-SALESPERSON-ID PIC 9(6). 05 DS-COMMISSION-RATE PIC 9V99. FD ERROR-LOG-FILE. 01 ERROR-LOG-RECORD. 05 EL-TIMESTAMP PIC X(14). 05 EL-SEVERITY PIC X(8). 05 EL-ERROR-CODE PIC 9(6). 05 EL-ERROR-MESSAGE PIC X(100). 05 EL-PROGRAM-NAME PIC X(8). 05 EL-MODULE-NAME PIC X(20). 05 EL-LINE-NUMBER PIC 9(6). FD BACKUP-FILE. 01 BACKUP-RECORD. 05 BK-RECORD-TYPE PIC X(10). 05 BK-TIMESTAMP PIC X(14). 05 BK-DATA-LENGTH PIC 9(5). 05 BK-DATA-CONTENT PIC X(500). 05 BK-CHECKSUM PIC X(8). WORKING-STORAGE SECTION. 01 FILE-STATUS-CODES. 05 TRANSACTION-LOG-STATUS PIC XX. 88 TL-SUCCESS VALUE '00'. 88 TL-EOF VALUE '10'. 88 TL-FILE-NOT-FOUND VALUE '35'. 05 AUDIT-TRAIL-STATUS PIC XX. 88 AT-SUCCESS VALUE '00'. 88 AT-EOF VALUE '10'. 88 AT-FILE-NOT-FOUND VALUE '35'. 05 DAILY-SALES-STATUS PIC XX. 88 DS-SUCCESS VALUE '00'. 88 DS-EOF VALUE '10'. 88 DS-FILE-NOT-FOUND VALUE '35'. 05 ERROR-LOG-STATUS PIC XX. 88 EL-SUCCESS VALUE '00'. 88 EL-EOF VALUE '10'. 88 EL-FILE-NOT-FOUND VALUE '35'. 05 BACKUP-STATUS PIC XX. 88 BK-SUCCESS VALUE '00'. 88 BK-EOF VALUE '10'. 88 BK-FILE-NOT-FOUND VALUE '35'. 01 EXTEND-MODE-CONTROL. 05 EXTEND-OPERATIONS-COUNT PIC 9(7) VALUE 0. 05 SUCCESSFUL-EXTENDS PIC 9(7) VALUE 0. 05 FAILED-EXTENDS PIC 9(5) VALUE 0. 05 RECORDS-APPENDED PIC 9(9) VALUE 0. 05 TOTAL-BYTES-APPENDED PIC 9(12) VALUE 0. 05 CURRENT-OPERATION PIC X(30). 05 EXTEND-SESSION-ID PIC X(20). 01 BUSINESS-DATA-VARIABLES. 05 CURRENT-TIMESTAMP PIC X(14). 05 TRANSACTION-COUNTER PIC 9(10) VALUE 0. 05 CUSTOMER-COUNTER PIC 9(8) VALUE 0. 05 SALES-COUNTER PIC 9(7) VALUE 0. 05 ERROR-COUNTER PIC 9(5) VALUE 0. 05 AUDIT-COUNTER PIC 9(7) VALUE 0. 05 BACKUP-COUNTER PIC 9(6) VALUE 0. 01 SAMPLE-BUSINESS-DATA. 05 SAMPLE-CUSTOMERS OCCURS 5 TIMES. 10 SC-CUSTOMER-ID PIC 9(8). 10 SC-CUSTOMER-NAME PIC X(30). 10 SC-ACCOUNT-BALANCE PIC 9(9)V99. 05 SAMPLE-PRODUCTS OCCURS 3 TIMES. 10 SP-PRODUCT-ID PIC 9(8). 10 SP-PRODUCT-NAME PIC X(25). 10 SP-UNIT-PRICE PIC 9(7)V99. 05 SAMPLE-TRANSACTIONS OCCURS 10 TIMES. 10 ST-TRANSACTION-ID PIC 9(10). 10 ST-CUSTOMER-ID PIC 9(8). 10 ST-AMOUNT PIC 9(7)V99. 10 ST-TYPE PIC X(10). 01 PERFORMANCE-METRICS. 05 TOTAL-PROCESSING-TIME PIC 9(8) VALUE 0. 05 AVERAGE-APPEND-TIME PIC 9(6)V99 VALUE 0. 05 RECORDS-PER-SECOND PIC 9(6)V99 VALUE 0. 05 THROUGHPUT-RATE PIC 9(8)V99 VALUE 0. 05 FILE-GROWTH-RATE PIC 9(7)V99 VALUE 0. PROCEDURE DIVISION. MAIN-PROCESSING. PERFORM INITIALIZE-EXTEND-OPERATIONS PERFORM DEMONSTRATE-TRANSACTION-LOG-EXTEND PERFORM DEMONSTRATE-AUDIT-TRAIL-EXTEND PERFORM DEMONSTRATE-DAILY-SALES-EXTEND PERFORM DEMONSTRATE-ERROR-LOG-EXTEND PERFORM DEMONSTRATE-BACKUP-EXTEND PERFORM DEMONSTRATE-BATCH-EXTEND-OPERATIONS PERFORM DISPLAY-EXTEND-STATISTICS PERFORM CLEANUP-EXTEND-OPERATIONS STOP RUN. INITIALIZE-EXTEND-OPERATIONS. DISPLAY 'Initializing EXTEND mode operations...' MOVE FUNCTION CURRENT-DATE TO CURRENT-TIMESTAMP MOVE FUNCTION CURRENT-DATE TO EXTEND-SESSION-ID *> Initialize sample data PERFORM INITIALIZE-SAMPLE-DATA DISPLAY 'EXTEND mode operations initialized' DISPLAY 'Session ID: ' EXTEND-SESSION-ID. INITIALIZE-SAMPLE-DATA. *> Initialize sample customers MOVE 12345678 TO SC-CUSTOMER-ID(1) MOVE 'ACME CORPORATION' TO SC-CUSTOMER-NAME(1) MOVE 150000.75 TO SC-ACCOUNT-BALANCE(1) MOVE 23456789 TO SC-CUSTOMER-ID(2) MOVE 'GLOBAL ENTERPRISES' TO SC-CUSTOMER-NAME(2) MOVE 275000.50 TO SC-ACCOUNT-BALANCE(2) MOVE 34567890 TO SC-CUSTOMER-ID(3) MOVE 'TECH SOLUTIONS INC' TO SC-CUSTOMER-NAME(3) MOVE 95000.25 TO SC-ACCOUNT-BALANCE(3) MOVE 45678901 TO SC-CUSTOMER-ID(4) MOVE 'MANUFACTURING CORP' TO SC-CUSTOMER-NAME(4) MOVE 320000.00 TO SC-ACCOUNT-BALANCE(4) MOVE 56789012 TO SC-CUSTOMER-ID(5) MOVE 'RETAIL CHAIN LLC' TO SC-CUSTOMER-NAME(5) MOVE 180000.80 TO SC-ACCOUNT-BALANCE(5) *> Initialize sample products MOVE 10001 TO SP-PRODUCT-ID(1) MOVE 'PREMIUM WIDGET' TO SP-PRODUCT-NAME(1) MOVE 125.99 TO SP-UNIT-PRICE(1) MOVE 10002 TO SP-PRODUCT-ID(2) MOVE 'STANDARD GADGET' TO SP-PRODUCT-NAME(2) MOVE 75.50 TO SP-UNIT-PRICE(2) MOVE 10003 TO SP-PRODUCT-ID(3) MOVE 'DELUXE COMPONENT' TO SP-PRODUCT-NAME(3) MOVE 199.99 TO SP-UNIT-PRICE(3) DISPLAY 'Sample data initialized'. DEMONSTRATE-TRANSACTION-LOG-EXTEND. MOVE 'TRANSACTION-LOG-EXTEND' TO CURRENT-OPERATION DISPLAY 'Demonstrating transaction log EXTEND operations...' PERFORM OPEN-TRANSACTION-LOG-EXTEND PERFORM APPEND-TRANSACTION-RECORDS PERFORM CLOSE-TRANSACTION-LOG DISPLAY 'Transaction log EXTEND demonstration completed'. OPEN-TRANSACTION-LOG-EXTEND. OPEN EXTEND TRANSACTION-LOG-FILE ADD 1 TO EXTEND-OPERATIONS-COUNT EVALUATE TRANSACTION-LOG-STATUS WHEN '00' DISPLAY 'Transaction log opened for EXTEND successfully' ADD 1 TO SUCCESSFUL-EXTENDS WHEN '35' DISPLAY 'Transaction log file not found - creating new file' CLOSE TRANSACTION-LOG-FILE OPEN OUTPUT TRANSACTION-LOG-FILE CLOSE TRANSACTION-LOG-FILE OPEN EXTEND TRANSACTION-LOG-FILE IF TL-SUCCESS DISPLAY 'New transaction log created and opened for EXTEND' ADD 1 TO SUCCESSFUL-EXTENDS ELSE DISPLAY 'Failed to create transaction log file' ADD 1 TO FAILED-EXTENDS END-IF WHEN OTHER DISPLAY 'Failed to open transaction log for EXTEND' DISPLAY 'Status code: ' TRANSACTION-LOG-STATUS ADD 1 TO FAILED-EXTENDS END-EVALUATE. APPEND-TRANSACTION-RECORDS. DISPLAY 'Appending transaction records...' PERFORM VARYING TRANSACTION-COUNTER FROM 1 BY 1 UNTIL TRANSACTION-COUNTER > 10 PERFORM BUILD-TRANSACTION-RECORD PERFORM WRITE-TRANSACTION-RECORD END-PERFORM. BUILD-TRANSACTION-RECORD. MOVE FUNCTION CURRENT-DATE TO TL-TIMESTAMP COMPUTE TL-TRANSACTION-ID = 2024000000 + TRANSACTION-COUNTER MOVE SC-CUSTOMER-ID(1) TO TL-CUSTOMER-ID EVALUATE TRANSACTION-COUNTER WHEN 1 THRU 3 MOVE 'DEPOSIT' TO TL-TRANSACTION-TYPE MOVE 1000.00 TO TL-AMOUNT MOVE 'COMPLETED' TO TL-STATUS MOVE 'Customer deposit transaction' TO TL-DESCRIPTION WHEN 4 THRU 6 MOVE 'WITHDRAWAL' TO TL-TRANSACTION-TYPE MOVE 500.00 TO TL-AMOUNT MOVE 'COMPLETED' TO TL-STATUS MOVE 'Customer withdrawal transaction' TO TL-DESCRIPTION WHEN 7 THRU 8 MOVE 'TRANSFER' TO TL-TRANSACTION-TYPE MOVE 750.00 TO TL-AMOUNT MOVE 'PENDING' TO TL-STATUS MOVE 'Inter-account transfer' TO TL-DESCRIPTION WHEN OTHER MOVE 'PAYMENT' TO TL-TRANSACTION-TYPE MOVE 250.00 TO TL-AMOUNT MOVE 'COMPLETED' TO TL-STATUS MOVE 'Bill payment transaction' TO TL-DESCRIPTION END-EVALUATE. WRITE-TRANSACTION-RECORD. WRITE TRANSACTION-LOG-RECORD EVALUATE TRANSACTION-LOG-STATUS WHEN '00' ADD 1 TO RECORDS-APPENDED ADD LENGTH OF TRANSACTION-LOG-RECORD TO TOTAL-BYTES-APPENDED DISPLAY 'Transaction record ' TRANSACTION-COUNTER ' appended' WHEN OTHER DISPLAY 'Failed to append transaction record' DISPLAY 'Status code: ' TRANSACTION-LOG-STATUS ADD 1 TO ERROR-COUNTER END-EVALUATE. CLOSE-TRANSACTION-LOG. CLOSE TRANSACTION-LOG-FILE IF TL-SUCCESS DISPLAY 'Transaction log closed successfully' ELSE DISPLAY 'Error closing transaction log' DISPLAY 'Status code: ' TRANSACTION-LOG-STATUS END-IF. DEMONSTRATE-AUDIT-TRAIL-EXTEND. MOVE 'AUDIT-TRAIL-EXTEND' TO CURRENT-OPERATION DISPLAY 'Demonstrating audit trail EXTEND operations...' PERFORM OPEN-AUDIT-TRAIL-EXTEND PERFORM APPEND-AUDIT-RECORDS PERFORM CLOSE-AUDIT-TRAIL DISPLAY 'Audit trail EXTEND demonstration completed'. OPEN-AUDIT-TRAIL-EXTEND. OPEN EXTEND AUDIT-TRAIL-FILE ADD 1 TO EXTEND-OPERATIONS-COUNT EVALUATE AUDIT-TRAIL-STATUS WHEN '00' DISPLAY 'Audit trail opened for EXTEND successfully' ADD 1 TO SUCCESSFUL-EXTENDS WHEN '35' DISPLAY 'Audit trail file not found - creating new file' CLOSE AUDIT-TRAIL-FILE OPEN OUTPUT AUDIT-TRAIL-FILE CLOSE AUDIT-TRAIL-FILE OPEN EXTEND AUDIT-TRAIL-FILE IF AT-SUCCESS DISPLAY 'New audit trail created and opened for EXTEND' ADD 1 TO SUCCESSFUL-EXTENDS ELSE DISPLAY 'Failed to create audit trail file' ADD 1 TO FAILED-EXTENDS END-IF WHEN OTHER DISPLAY 'Failed to open audit trail for EXTEND' DISPLAY 'Status code: ' AUDIT-TRAIL-STATUS ADD 1 TO FAILED-EXTENDS END-EVALUATE. APPEND-AUDIT-RECORDS. DISPLAY 'Appending audit records...' PERFORM VARYING AUDIT-COUNTER FROM 1 BY 1 UNTIL AUDIT-COUNTER > 5 PERFORM BUILD-AUDIT-RECORD PERFORM WRITE-AUDIT-RECORD END-PERFORM. BUILD-AUDIT-RECORD. MOVE FUNCTION CURRENT-DATE TO AT-TIMESTAMP MOVE 'ADMIN001' TO AT-USER-ID MOVE 'EXTENDPGM' TO AT-PROGRAM-NAME EVALUATE AUDIT-COUNTER WHEN 1 MOVE 'CUSTOMER_CREATE' TO AT-OPERATION MOVE 'CUST_12345678' TO AT-RECORD-KEY MOVE SPACES TO AT-OLD-VALUE MOVE 'CUSTOMER: ACME CORPORATION' TO AT-NEW-VALUE MOVE '0000' TO AT-RESULT-CODE WHEN 2 MOVE 'ACCOUNT_UPDATE' TO AT-OPERATION MOVE 'ACCT_12345678' TO AT-RECORD-KEY MOVE 'BALANCE: 150000.00' TO AT-OLD-VALUE MOVE 'BALANCE: 150000.75' TO AT-NEW-VALUE MOVE '0000' TO AT-RESULT-CODE WHEN 3 MOVE 'TRANSACTION_CREATE' TO AT-OPERATION MOVE 'TRANS_2024000001' TO AT-RECORD-KEY MOVE SPACES TO AT-OLD-VALUE MOVE 'DEPOSIT: 1000.00' TO AT-NEW-VALUE MOVE '0000' TO AT-RESULT-CODE WHEN 4 MOVE 'SECURITY_CHECK' TO AT-OPERATION MOVE 'USER_ADMIN001' TO AT-RECORD-KEY MOVE 'LOGIN_ATTEMPTS: 0' TO AT-OLD-VALUE MOVE 'LOGIN_ATTEMPTS: 1' TO AT-NEW-VALUE MOVE '0000' TO AT-RESULT-CODE WHEN 5 MOVE 'SYSTEM_BACKUP' TO AT-OPERATION MOVE 'BACKUP_20240115' TO AT-RECORD-KEY MOVE 'STATUS: PENDING' TO AT-OLD-VALUE MOVE 'STATUS: COMPLETED' TO AT-NEW-VALUE MOVE '0000' TO AT-RESULT-CODE END-EVALUATE. WRITE-AUDIT-RECORD. WRITE AUDIT-TRAIL-RECORD EVALUATE AUDIT-TRAIL-STATUS WHEN '00' ADD 1 TO RECORDS-APPENDED ADD LENGTH OF AUDIT-TRAIL-RECORD TO TOTAL-BYTES-APPENDED DISPLAY 'Audit record ' AUDIT-COUNTER ' appended' WHEN OTHER DISPLAY 'Failed to append audit record' DISPLAY 'Status code: ' AUDIT-TRAIL-STATUS ADD 1 TO ERROR-COUNTER END-EVALUATE. CLOSE-AUDIT-TRAIL. CLOSE AUDIT-TRAIL-FILE IF AT-SUCCESS DISPLAY 'Audit trail closed successfully' ELSE DISPLAY 'Error closing audit trail' DISPLAY 'Status code: ' AUDIT-TRAIL-STATUS END-IF. DEMONSTRATE-DAILY-SALES-EXTEND. MOVE 'DAILY-SALES-EXTEND' TO CURRENT-OPERATION DISPLAY 'Demonstrating daily sales EXTEND operations...' PERFORM OPEN-DAILY-SALES-EXTEND PERFORM APPEND-SALES-RECORDS PERFORM CLOSE-DAILY-SALES DISPLAY 'Daily sales EXTEND demonstration completed'. OPEN-DAILY-SALES-EXTEND. OPEN EXTEND DAILY-SALES-FILE ADD 1 TO EXTEND-OPERATIONS-COUNT EVALUATE DAILY-SALES-STATUS WHEN '00' DISPLAY 'Daily sales opened for EXTEND successfully' ADD 1 TO SUCCESSFUL-EXTENDS WHEN '35' DISPLAY 'Daily sales file not found - creating new file' CLOSE DAILY-SALES-FILE OPEN OUTPUT DAILY-SALES-FILE CLOSE DAILY-SALES-FILE OPEN EXTEND DAILY-SALES-FILE IF DS-SUCCESS DISPLAY 'New daily sales created and opened for EXTEND' ADD 1 TO SUCCESSFUL-EXTENDS ELSE DISPLAY 'Failed to create daily sales file' ADD 1 TO FAILED-EXTENDS END-IF WHEN OTHER DISPLAY 'Failed to open daily sales for EXTEND' DISPLAY 'Status code: ' DAILY-SALES-STATUS ADD 1 TO FAILED-EXTENDS END-EVALUATE. APPEND-SALES-RECORDS. DISPLAY 'Appending sales records...' PERFORM VARYING SALES-COUNTER FROM 1 BY 1 UNTIL SALES-COUNTER > 7 PERFORM BUILD-SALES-RECORD PERFORM WRITE-SALES-RECORD END-PERFORM. BUILD-SALES-RECORD. MOVE 20240115 TO DS-DATE MOVE 1001 TO DS-STORE-ID EVALUATE SALES-COUNTER WHEN 1 THRU 2 MOVE SP-PRODUCT-ID(1) TO DS-PRODUCT-ID MOVE 10 TO DS-QUANTITY-SOLD MOVE SP-UNIT-PRICE(1) TO DS-UNIT-PRICE COMPUTE DS-TOTAL-AMOUNT = DS-QUANTITY-SOLD * DS-UNIT-PRICE WHEN 3 THRU 4 MOVE SP-PRODUCT-ID(2) TO DS-PRODUCT-ID MOVE 25 TO DS-QUANTITY-SOLD MOVE SP-UNIT-PRICE(2) TO DS-UNIT-PRICE COMPUTE DS-TOTAL-AMOUNT = DS-QUANTITY-SOLD * DS-UNIT-PRICE WHEN 5 THRU 7 MOVE SP-PRODUCT-ID(3) TO DS-PRODUCT-ID MOVE 5 TO DS-QUANTITY-SOLD MOVE SP-UNIT-PRICE(3) TO DS-UNIT-PRICE COMPUTE DS-TOTAL-AMOUNT = DS-QUANTITY-SOLD * DS-UNIT-PRICE END-EVALUATE MOVE 123456 TO DS-SALESPERSON-ID MOVE 0.05 TO DS-COMMISSION-RATE. WRITE-SALES-RECORD. WRITE DAILY-SALES-RECORD EVALUATE DAILY-SALES-STATUS WHEN '00' ADD 1 TO RECORDS-APPENDED ADD LENGTH OF DAILY-SALES-RECORD TO TOTAL-BYTES-APPENDED DISPLAY 'Sales record ' SALES-COUNTER ' appended' WHEN OTHER DISPLAY 'Failed to append sales record' DISPLAY 'Status code: ' DAILY-SALES-STATUS ADD 1 TO ERROR-COUNTER END-EVALUATE. CLOSE-DAILY-SALES. CLOSE DAILY-SALES-FILE IF DS-SUCCESS DISPLAY 'Daily sales closed successfully' ELSE DISPLAY 'Error closing daily sales' DISPLAY 'Status code: ' DAILY-SALES-STATUS END-IF. DEMONSTRATE-ERROR-LOG-EXTEND. MOVE 'ERROR-LOG-EXTEND' TO CURRENT-OPERATION DISPLAY 'Demonstrating error log EXTEND operations...' PERFORM OPEN-ERROR-LOG-EXTEND PERFORM APPEND-ERROR-RECORDS PERFORM CLOSE-ERROR-LOG DISPLAY 'Error log EXTEND demonstration completed'. OPEN-ERROR-LOG-EXTEND. OPEN EXTEND ERROR-LOG-FILE ADD 1 TO EXTEND-OPERATIONS-COUNT EVALUATE ERROR-LOG-STATUS WHEN '00' DISPLAY 'Error log opened for EXTEND successfully' ADD 1 TO SUCCESSFUL-EXTENDS WHEN '35' DISPLAY 'Error log file not found - creating new file' CLOSE ERROR-LOG-FILE OPEN OUTPUT ERROR-LOG-FILE CLOSE ERROR-LOG-FILE OPEN EXTEND ERROR-LOG-FILE IF EL-SUCCESS DISPLAY 'New error log created and opened for EXTEND' ADD 1 TO SUCCESSFUL-EXTENDS ELSE DISPLAY 'Failed to create error log file' ADD 1 TO FAILED-EXTENDS END-IF WHEN OTHER DISPLAY 'Failed to open error log for EXTEND' DISPLAY 'Status code: ' ERROR-LOG-STATUS ADD 1 TO FAILED-EXTENDS END-EVALUATE. APPEND-ERROR-RECORDS. DISPLAY 'Appending error records...' PERFORM VARYING ERROR-COUNTER FROM 1 BY 1 UNTIL ERROR-COUNTER > 3 PERFORM BUILD-ERROR-RECORD PERFORM WRITE-ERROR-RECORD END-PERFORM. BUILD-ERROR-RECORD. MOVE FUNCTION CURRENT-DATE TO EL-TIMESTAMP MOVE 'EXTENDPGM' TO EL-PROGRAM-NAME MOVE 'EXTEND-OPERATIONS' TO EL-MODULE-NAME EVALUATE ERROR-COUNTER WHEN 1 MOVE 'WARNING' TO EL-SEVERITY MOVE 1001 TO EL-ERROR-CODE MOVE 'File size approaching limit' TO EL-ERROR-MESSAGE MOVE 250 TO EL-LINE-NUMBER WHEN 2 MOVE 'INFO' TO EL-SEVERITY MOVE 2001 TO EL-ERROR-CODE MOVE 'Extend operation completed successfully' TO EL-ERROR-MESSAGE MOVE 300 TO EL-LINE-NUMBER WHEN 3 MOVE 'ERROR' TO EL-SEVERITY MOVE 3001 TO EL-ERROR-CODE MOVE 'Temporary file access delay detected' TO EL-ERROR-MESSAGE MOVE 350 TO EL-LINE-NUMBER END-EVALUATE. WRITE-ERROR-RECORD. WRITE ERROR-LOG-RECORD EVALUATE ERROR-LOG-STATUS WHEN '00' ADD 1 TO RECORDS-APPENDED ADD LENGTH OF ERROR-LOG-RECORD TO TOTAL-BYTES-APPENDED DISPLAY 'Error record ' ERROR-COUNTER ' appended' WHEN OTHER DISPLAY 'Failed to append error record' DISPLAY 'Status code: ' ERROR-LOG-STATUS END-EVALUATE. CLOSE-ERROR-LOG. CLOSE ERROR-LOG-FILE IF EL-SUCCESS DISPLAY 'Error log closed successfully' ELSE DISPLAY 'Error closing error log' DISPLAY 'Status code: ' ERROR-LOG-STATUS END-IF. DEMONSTRATE-BACKUP-EXTEND. MOVE 'BACKUP-EXTEND' TO CURRENT-OPERATION DISPLAY 'Demonstrating backup EXTEND operations...' PERFORM OPEN-BACKUP-EXTEND PERFORM APPEND-BACKUP-RECORDS PERFORM CLOSE-BACKUP DISPLAY 'Backup EXTEND demonstration completed'. OPEN-BACKUP-EXTEND. OPEN EXTEND BACKUP-FILE ADD 1 TO EXTEND-OPERATIONS-COUNT EVALUATE BACKUP-STATUS WHEN '00' DISPLAY 'Backup file opened for EXTEND successfully' ADD 1 TO SUCCESSFUL-EXTENDS WHEN '35' DISPLAY 'Backup file not found - creating new file' CLOSE BACKUP-FILE OPEN OUTPUT BACKUP-FILE CLOSE BACKUP-FILE OPEN EXTEND BACKUP-FILE IF BK-SUCCESS DISPLAY 'New backup file created and opened for EXTEND' ADD 1 TO SUCCESSFUL-EXTENDS ELSE DISPLAY 'Failed to create backup file' ADD 1 TO FAILED-EXTENDS END-IF WHEN OTHER DISPLAY 'Failed to open backup file for EXTEND' DISPLAY 'Status code: ' BACKUP-STATUS ADD 1 TO FAILED-EXTENDS END-EVALUATE. APPEND-BACKUP-RECORDS. DISPLAY 'Appending backup records...' PERFORM VARYING BACKUP-COUNTER FROM 1 BY 1 UNTIL BACKUP-COUNTER > 4 PERFORM BUILD-BACKUP-RECORD PERFORM WRITE-BACKUP-RECORD END-PERFORM. BUILD-BACKUP-RECORD. MOVE FUNCTION CURRENT-DATE TO BK-TIMESTAMP MOVE 'CHECKSUM1' TO BK-CHECKSUM EVALUATE BACKUP-COUNTER WHEN 1 MOVE 'CUSTOMER' TO BK-RECORD-TYPE MOVE 150 TO BK-DATA-LENGTH MOVE 'CUSTOMER DATA: ACME CORPORATION, ID: 12345678' TO BK-DATA-CONTENT WHEN 2 MOVE 'TRANSACTION' TO BK-RECORD-TYPE MOVE 200 TO BK-DATA-LENGTH MOVE 'TRANSACTION DATA: DEPOSIT 1000.00, ID: 2024000001' TO BK-DATA-CONTENT WHEN 3 MOVE 'AUDIT' TO BK-RECORD-TYPE MOVE 250 TO BK-DATA-LENGTH MOVE 'AUDIT DATA: CUSTOMER_CREATE, USER: ADMIN001' TO BK-DATA-CONTENT WHEN 4 MOVE 'SALES' TO BK-RECORD-TYPE MOVE 180 TO BK-DATA-LENGTH MOVE 'SALES DATA: PRODUCT 10001, QUANTITY: 10' TO BK-DATA-CONTENT END-EVALUATE. WRITE-BACKUP-RECORD. WRITE BACKUP-RECORD EVALUATE BACKUP-STATUS WHEN '00' ADD 1 TO RECORDS-APPENDED ADD LENGTH OF BACKUP-RECORD TO TOTAL-BYTES-APPENDED DISPLAY 'Backup record ' BACKUP-COUNTER ' appended' WHEN OTHER DISPLAY 'Failed to append backup record' DISPLAY 'Status code: ' BACKUP-STATUS END-EVALUATE. CLOSE-BACKUP. CLOSE BACKUP-FILE IF BK-SUCCESS DISPLAY 'Backup file closed successfully' ELSE DISPLAY 'Error closing backup file' DISPLAY 'Status code: ' BACKUP-STATUS END-IF. DEMONSTRATE-BATCH-EXTEND-OPERATIONS. MOVE 'BATCH-EXTEND' TO CURRENT-OPERATION DISPLAY 'Demonstrating batch EXTEND operations...' PERFORM BATCH-TRANSACTION-PROCESSING PERFORM BATCH-AUDIT-PROCESSING PERFORM BATCH-ERROR-PROCESSING DISPLAY 'Batch EXTEND operations completed'. BATCH-TRANSACTION-PROCESSING. DISPLAY 'Batch transaction processing with EXTEND...' OPEN EXTEND TRANSACTION-LOG-FILE IF TL-SUCCESS PERFORM VARYING TRANSACTION-COUNTER FROM 100 BY 1 UNTIL TRANSACTION-COUNTER > 110 PERFORM BUILD-BATCH-TRANSACTION PERFORM WRITE-TRANSACTION-RECORD END-PERFORM CLOSE TRANSACTION-LOG-FILE DISPLAY 'Batch transaction processing completed' ELSE DISPLAY 'Failed to open transaction log for batch processing' END-IF. BUILD-BATCH-TRANSACTION. MOVE FUNCTION CURRENT-DATE TO TL-TIMESTAMP COMPUTE TL-TRANSACTION-ID = 2024000000 + TRANSACTION-COUNTER MOVE SC-CUSTOMER-ID(2) TO TL-CUSTOMER-ID MOVE 'BATCH' TO TL-TRANSACTION-TYPE MOVE 100.00 TO TL-AMOUNT MOVE 'PROCESSED' TO TL-STATUS MOVE 'Batch processing transaction' TO TL-DESCRIPTION. BATCH-AUDIT-PROCESSING. DISPLAY 'Batch audit processing with EXTEND...' OPEN EXTEND AUDIT-TRAIL-FILE IF AT-SUCCESS PERFORM VARYING AUDIT-COUNTER FROM 50 BY 1 UNTIL AUDIT-COUNTER > 55 PERFORM BUILD-BATCH-AUDIT PERFORM WRITE-AUDIT-RECORD END-PERFORM CLOSE AUDIT-TRAIL-FILE DISPLAY 'Batch audit processing completed' ELSE DISPLAY 'Failed to open audit trail for batch processing' END-IF. BUILD-BATCH-AUDIT. MOVE FUNCTION CURRENT-DATE TO AT-TIMESTAMP MOVE 'BATCH001' TO AT-USER-ID MOVE 'BATCHPGM' TO AT-PROGRAM-NAME MOVE 'BATCH_PROCESS' TO AT-OPERATION MOVE 'BATCH_RECORD' TO AT-RECORD-KEY MOVE 'BATCH PROCESSING' TO AT-OLD-VALUE MOVE 'BATCH COMPLETED' TO AT-NEW-VALUE MOVE '0000' TO AT-RESULT-CODE. BATCH-ERROR-PROCESSING. DISPLAY 'Batch error processing with EXTEND...' OPEN EXTEND ERROR-LOG-FILE IF EL-SUCCESS PERFORM VARYING ERROR-COUNTER FROM 10 BY 1 UNTIL ERROR-COUNTER > 12 PERFORM BUILD-BATCH-ERROR PERFORM WRITE-ERROR-RECORD END-PERFORM CLOSE ERROR-LOG-FILE DISPLAY 'Batch error processing completed' ELSE DISPLAY 'Failed to open error log for batch processing' END-IF. BUILD-BATCH-ERROR. MOVE FUNCTION CURRENT-DATE TO EL-TIMESTAMP MOVE 'INFO' TO EL-SEVERITY MOVE 4001 TO EL-ERROR-CODE MOVE 'Batch processing milestone reached' TO EL-ERROR-MESSAGE MOVE 'BATCHPGM' TO EL-PROGRAM-NAME MOVE 'BATCH-PROCESSING' TO EL-MODULE-NAME MOVE 400 TO EL-LINE-NUMBER. DISPLAY-EXTEND-STATISTICS. DISPLAY 'EXTEND Mode Statistics:' DISPLAY '======================' DISPLAY 'Total EXTEND operations: ' EXTEND-OPERATIONS-COUNT DISPLAY 'Successful EXTEND operations: ' SUCCESSFUL-EXTENDS DISPLAY 'Failed EXTEND operations: ' FAILED-EXTENDS DISPLAY 'Total records appended: ' RECORDS-APPENDED DISPLAY 'Total bytes appended: ' TOTAL-BYTES-APPENDED DISPLAY 'Transaction records: ' TRANSACTION-COUNTER DISPLAY 'Audit records: ' AUDIT-COUNTER DISPLAY 'Sales records: ' SALES-COUNTER DISPLAY 'Error records: ' ERROR-COUNTER DISPLAY 'Backup records: ' BACKUP-COUNTER IF EXTEND-OPERATIONS-COUNT > 0 COMPUTE SUCCESSFUL-EXTENDS = (SUCCESSFUL-EXTENDS / EXTEND-OPERATIONS-COUNT) * 100 DISPLAY 'Success rate: ' SUCCESSFUL-EXTENDS '%' END-IF IF RECORDS-APPENDED > 0 COMPUTE AVERAGE-APPEND-TIME = TOTAL-PROCESSING-TIME / RECORDS-APPENDED DISPLAY 'Average append time: ' AVERAGE-APPEND-TIME ' ms' END-IF. CLEANUP-EXTEND-OPERATIONS. DISPLAY 'Cleaning up EXTEND operations...' *> Reset counters and flags MOVE 0 TO EXTEND-OPERATIONS-COUNT MOVE 0 TO SUCCESSFUL-EXTENDS MOVE 0 TO FAILED-EXTENDS MOVE 0 TO RECORDS-APPENDED MOVE 0 TO TOTAL-BYTES-APPENDED DISPLAY 'EXTEND operations cleanup completed'.